From cd584a100fcc4ae3dc4d991870523415928f5172 Mon Sep 17 00:00:00 2001 From: Dushnilin Date: Wed, 16 Sep 2026 08:20:17 +0300 Subject: [PATCH] fuzzer: harden runner, fail-closed validation, job isolation and fix AI handoff --- fe-app-tachyon/locales/calls.json | 1388 ++++++++--------- .../methods/shell/tests/fuzzerAction.test.ts | 36 + .../partials/renderStrategyFuzzerModal.ts | 22 +- fe-app-tachyon/src/tachyon/types.ts | 2 + .../resources/view/tachyon/main.js | 14 +- tachyon/files/usr/lib/diagnostics/fuzzer.uc | 212 ++- .../usr/lib/diagnostics/fuzzer_runner.uc | 148 ++ tests/fuzzer_strategy_cli.sh | 61 +- 8 files changed, 1118 insertions(+), 765 deletions(-) create mode 100644 tachyon/files/usr/lib/diagnostics/fuzzer_runner.uc diff --git a/fe-app-tachyon/locales/calls.json b/fe-app-tachyon/locales/calls.json index 63dce7be..a5fd5783 100644 --- a/fe-app-tachyon/locales/calls.json +++ b/fe-app-tachyon/locales/calls.json @@ -39,8 +39,8 @@ "call": "+ add", "key": "+ add", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13535", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:626" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13537", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:628" ] }, { @@ -68,8 +68,8 @@ "call": "+ Add Strategy", "key": "+ Add Strategy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13788", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:904" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13790", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:906" ] }, { @@ -83,24 +83,24 @@ "call": "⏳ Stopping...", "key": "⏳ Stopping...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14571", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1807" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14575", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1819" ] }, { "call": "⚠️ Benchmark completed. No working bypass found for this target.", "key": "⚠️ Benchmark completed. No working bypass found for this target.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14414", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1618" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14416", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1620" ] }, { "call": "⚠️ Benchmark stopped", "key": "⚠️ Benchmark stopped", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14414", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1617" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14416", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1619" ] }, { @@ -121,80 +121,80 @@ "call": "⚠️ Server received fakes", "key": "⚠️ Server received fakes", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14269", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1450" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14271", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1452" ] }, { "call": "⚡ Fast (>1MB/s)", "key": "⚡ Fast (>1MB/s)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13377", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:440" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13379", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:442" ] }, { "call": "⚡ QUIC / HTTP/3 (UDP 443)", "key": "⚡ QUIC / HTTP/3 (UDP 443)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13177", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:209" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13179", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:211" ] }, { "call": "⚡ Quick Benchmark (Presets ~30+)", "key": "⚡ Quick Benchmark (Presets ~30+)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13214", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:254" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13216", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:256" ] }, { "call": "⚡ Strategy Fuzzer & Auto-Tuner", "key": "⚡ Strategy Fuzzer & Auto-Tuner", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14779", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2057" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14787", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2073" ] }, { "call": "✅ Auto-applied best strategy", "key": "✅ Auto-applied best strategy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14470", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1690" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14473", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1701" ] }, { "call": "✅ Benchmark completed! Optimal strategy identified.", "key": "✅ Benchmark completed! Optimal strategy identified.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14409", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1611" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14411", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1613" ] }, { "call": "✅ Working only", "key": "✅ Working only", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13368", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:431" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13370", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:433" ] }, { "call": "✈️ Telegram Suite (Web + Bot API)", "key": "✈️ Telegram Suite (Web + Bot API)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13174", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:206" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13176", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:208" ] }, { "call": "✓ 32KB Streamed", "key": "✓ 32KB Streamed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14241", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1420" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14243", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1422" ] }, { @@ -223,8 +223,8 @@ "call": "✗ Throttled at 16KB", "key": "✗ Throttled at 16KB", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14255", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1435" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14257", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1437" ] }, { @@ -249,177 +249,177 @@ "call": "🌐 Custom Target URL...", "key": "🌐 Custom Target URL...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13178", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:210" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13180", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:212" ] }, { "call": "🎬 YouTube Full Suite (Web + 4K Stream + CDN)", "key": "🎬 YouTube Full Suite (Web + 4K Stream + CDN)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13148", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:180" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13150", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:182" ] }, { "call": "🏆 Apply Best Match", "key": "🏆 Apply Best Match", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13334", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:394" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13336", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:396" ] }, { "call": "🏴‍☠️ RuTracker Suite", "key": "🏴‍☠️ RuTracker Suite", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13176", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:208" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13178", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:210" ] }, { "call": "🐦 X / Twitter Suite (API + Media CDN)", "key": "🐦 X / Twitter Suite (API + Media CDN)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13163", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:195" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13165", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:197" ] }, { "call": "💬 Discord Suite (Gateway + Voice + CDN)", "key": "💬 Discord Suite (Gateway + Voice + CDN)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13153", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:185" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13155", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:187" ] }, { "call": "💾 Save Custom Patterns", "key": "💾 Save Custom Patterns", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13734", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:841" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13736", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:843" ] }, { "call": "📸 Instagram / Meta (Web + CDN)", "key": "📸 Instagram / Meta (Web + CDN)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13169", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:201" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13171", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:203" ] }, { "call": "🔄 Refresh", "key": "🔄 Refresh", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14019", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1170" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14021", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1172" ] }, { "call": "🔄 Reset to Factory Defaults", "key": "🔄 Reset to Factory Defaults", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13746", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:854" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13748", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:856" ] }, { "call": "🔍 Combinatorial Deep Fuzzing (~150-300+)", "key": "🔍 Combinatorial Deep Fuzzing (~150-300+)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13219", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:259" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13221", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:261" ] }, { "call": "🗑️ Clear History", "key": "🗑️ Clear History", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14024", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1175" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14026", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1177" ] }, { "call": "🤖 ChatGPT / OpenAI Suite", "key": "🤖 ChatGPT / OpenAI Suite", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13165", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:197" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13167", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:199" ] }, { "call": "🧠 Synthesize with AI", "key": "🧠 Synthesize with AI", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13941", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14702", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1078", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1957" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13943", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14710", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1080", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1973" ] }, { "call": "🧠 Synthesizing...", "key": "🧠 Synthesizing...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14657", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1903" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14662", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1916" ] }, { "call": "🚀 Initializing benchmark in sandbox...", "key": "🚀 Initializing benchmark in sandbox...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14590", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1829" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14595", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1842" ] }, { "call": "🚀 Start Benchmark", "key": "🚀 Start Benchmark", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13502", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14447", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14650", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1657", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1895", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:580" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13504", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14449", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14655", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1659", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1908", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:582" ] }, { "call": "🛑 Benchmark stopped", "key": "🛑 Benchmark stopped", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14407", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1609" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14409", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1611" ] }, { "call": "🛑 Stop Benchmark", "key": "🛑 Stop Benchmark", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14442", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14580", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14683", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1652", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1817", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1936" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14444", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14585", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14689", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1654", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1830", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1950" ] }, { "call": "🛠️ My Custom Strategies Only", "key": "🛠️ My Custom Strategies Only", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13221", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:261" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13223", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:263" ] }, { "call": "🛡️ SECURE: All DNS queries are resolved through independent secure DNS servers.", "key": "🛡️ SECURE: All DNS queries are resolved through independent secure DNS servers.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15398", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15406", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:287" ] }, @@ -427,7 +427,7 @@ "call": "🛡️ SECURE: Public IP is concealed behind the proxy outbound.", "key": "🛡️ SECURE: Public IP is concealed behind the proxy outbound.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15280", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15288", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:140" ] }, @@ -435,8 +435,8 @@ "call": "🟣 Twitch Suite (Live Stream + HLS CDN)", "key": "🟣 Twitch Suite (Live Stream + HLS CDN)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13158", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:190" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13160", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:192" ] }, { @@ -505,18 +505,18 @@ "call": "Actions", "key": "Actions", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13477", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13854", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:552", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:979" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13479", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13856", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:554", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:981" ] }, { "call": "Active", "key": "Active", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18404", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18997", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18412", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19005", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8478", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:468", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:474", @@ -631,8 +631,8 @@ "call": "Add Custom DPI Strategy", "key": "Add Custom DPI Strategy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13822", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:944" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13824", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:946" ] }, { @@ -740,7 +740,7 @@ "call": "Address", "key": "Address", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14855", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14863", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1739", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:45" ] @@ -749,7 +749,7 @@ "call": "Address copied to clipboard", "key": "Address copied to clipboard", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15728", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15736", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:211" ] }, @@ -836,15 +836,15 @@ "call": "AI Diagnostics & Strategy Rationale", "key": "AI Diagnostics & Strategy Rationale", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13959", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1099" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13961", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1101" ] }, { "call": "AI Doctor Diagnosis", "key": "AI Doctor Diagnosis", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17535", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17543", "src/tachyon/tabs/diagnostic/initController.ts:1561" ] }, @@ -852,9 +852,9 @@ "call": "AI Doctor failed", "key": "AI Doctor failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16996", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17538", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17004", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17546", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17554", "src/tachyon/tabs/diagnostic/initController.ts:1567", "src/tachyon/tabs/diagnostic/initController.ts:1575", "src/tachyon/tabs/diagnostic/initController.ts:855" @@ -871,16 +871,16 @@ "call": "AI Doctor RAG", "key": "AI Doctor RAG", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13081", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:95" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13083", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:97" ] }, { "call": "AI DPI Engineer & Strategy Synthesizer", "key": "AI DPI Engineer & Strategy Synthesizer", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13981", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1124" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13983", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1126" ] }, { @@ -909,34 +909,34 @@ "call": "AI successfully synthesized custom strategies!", "key": "AI successfully synthesized custom strategies!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14673", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1922" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14678", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1935" ] }, { "call": "AI Synthesis Error", "key": "AI Synthesis Error", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14696", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1951" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14704", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1967" ] }, { "call": "AI synthesis failed", "key": "AI synthesis failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14695", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1950" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14703", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1966" ] }, { "call": "All", "key": "All", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13359", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18423", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18962", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:422", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13361", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18431", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18970", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:424", "src/tachyon/tabs/monitoring/initController.ts:692", "src/tachyon/tabs/monitoring/render.ts:40" ] @@ -974,8 +974,8 @@ "call": "All Engines (Full Matrix)", "key": "All Engines (Full Matrix)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13123", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:151" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13125", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:153" ] }, { @@ -1025,8 +1025,8 @@ "call": "All Routes", "key": "All Routes", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18431", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18935", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18439", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18943", "src/tachyon/tabs/monitoring/initController.ts:655", "src/tachyon/tabs/monitoring/render.ts:49" ] @@ -1315,7 +1315,7 @@ "call": "An unexpected error occurred during test", "key": "An unexpected error occurred during test", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15258", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15266", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:103" ] }, @@ -1323,15 +1323,15 @@ "call": "Analysis inconclusive.", "key": "Analysis inconclusive.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14546", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1775" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14549", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1786" ] }, { "call": "Anonymized support report copied to clipboard", "key": "Anonymized support report copied to clipboard", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17071", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17079", "src/tachyon/tabs/diagnostic/initController.ts:968" ] }, @@ -1339,7 +1339,7 @@ "call": "Another component action is already running", "key": "Another component action is already running", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21739", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21747", "src/tachyon/tabs/updates/initController.ts:995" ] }, @@ -1368,24 +1368,24 @@ "call": "Applied", "key": "Applied", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14724", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1980" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14732", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1996" ] }, { "call": "Apply", "key": "Apply", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14371", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1566" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14373", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1568" ] }, { "call": "Apply Recommended DNS", "key": "Apply Recommended DNS", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15061", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15151", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15069", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15159", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:279", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:379" ] @@ -1408,8 +1408,8 @@ "call": "Apply Strategy To", "key": "Apply Strategy To", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13257", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:302" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13259", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:304" ] }, { @@ -1423,7 +1423,7 @@ "call": "Applying fix", "key": "Applying fix", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17201", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17209", "src/tachyon/tabs/diagnostic/initController.ts:1179" ] }, @@ -1431,8 +1431,8 @@ "call": "Applying...", "key": "Applying...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15126", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17199", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15134", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17207", "src/tachyon/tabs/diagnostic/initController.ts:1177", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:353" ] @@ -1441,8 +1441,8 @@ "call": "Arguments", "key": "Arguments", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13848", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:973" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13850", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:975" ] }, { @@ -1513,8 +1513,8 @@ "call": "Auto Modes (--auto)", "key": "Auto Modes (--auto)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13708", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:813" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13710", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:815" ] }, { @@ -1536,18 +1536,18 @@ "call": "Auto-apply best strategy", "key": "Auto-apply best strategy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13282", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:332" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13284", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:334" ] }, { "call": "Auto-apply failed", "key": "Auto-apply failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14475", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14480", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1695", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1700" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14478", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14483", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1706", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1711" ] }, { @@ -1589,7 +1589,7 @@ "call": "Auto-Heal Network Stack", "key": "Auto-Heal Network Stack", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17129", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17137", "src/tachyon/tabs/diagnostic/initController.ts:1092" ] }, @@ -1681,8 +1681,8 @@ "call": "Automatically runs a diagnostic probe against the target service, queries the built-in DPI Knowledge Base, and synthesizes 3-5 custom bypass strategies tailored to your ISP.", "key": "Automatically runs a diagnostic probe against the target service, queries the built-in DPI Knowledge Base, and synthesizes 3-5 custom bypass strategies tailored to your ISP.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13992", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1135" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13994", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1137" ] }, { @@ -1762,15 +1762,15 @@ "call": "Benchmark & Test", "key": "Benchmark & Test", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13078", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:92" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13080", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:94" ] }, { "call": "Benchmark completed successfully", "key": "Benchmark completed successfully", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15089", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15097", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:311" ] }, @@ -1778,15 +1778,15 @@ "call": "Benchmark History", "key": "Benchmark History", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14015", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1166" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14017", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1168" ] }, { "call": "Benchmark measures actual latency and resolution reliability of major DNS servers (UDP 53 and encrypted DoH) directly from your router to find the fastest, unblocked upstream for your ISP.", "key": "Benchmark measures actual latency and resolution reliability of major DNS servers (UDP 53 and encrypted DoH) directly from your router to find the fastest, unblocked upstream for your ISP.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15159", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15167", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:388" ] }, @@ -1794,24 +1794,24 @@ "call": "Benchmark stopped", "key": "Benchmark stopped", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14573", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1809" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14577", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1821" ] }, { "call": "Benchmarking in progress...", "key": "Benchmarking in progress...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13306", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:363" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13308", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:365" ] }, { "call": "Best Strategy", "key": "Best Strategy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14084", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1240" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14086", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1242" ] }, { @@ -1958,7 +1958,7 @@ "key": "Bootstrap DNS", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10473", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15028", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15036", "src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:57", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:240" ] @@ -2007,7 +2007,7 @@ "call": "Bug report downloaded", "key": "Bug report downloaded", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17708", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17716", "src/tachyon/tabs/diagnostic/initController.ts:1768" ] }, @@ -2036,20 +2036,20 @@ "call": "ByeDPI", "key": "ByeDPI", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13778", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13780", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:2296", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:893" + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:895" ] }, { "call": "ByeDPI (ciadpi)", "key": "ByeDPI (ciadpi)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13122", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14757", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:150", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2027", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2028" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13124", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14765", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:152", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2043", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2044" ] }, { @@ -2199,7 +2199,7 @@ "call": "Cancel", "key": "Cancel", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17585", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17593", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8678", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:476", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:661", @@ -2219,7 +2219,7 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10950", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11034", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11128", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15890", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15898", "src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:26", "src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:27", "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:172", @@ -2292,8 +2292,8 @@ "call": "Check completed!", "key": "Check completed!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20896", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21459", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20904", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21467", "src/tachyon/tabs/updates/initController.ts:623", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:326" ] @@ -2355,7 +2355,7 @@ "call": "Check update", "key": "Check update", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21797", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21805", "src/tachyon/tabs/updates/initController.ts:1064" ] }, @@ -2389,7 +2389,7 @@ "call": "Checking for updates...", "key": "Checking for updates...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20725", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20733", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:117" ] }, @@ -2405,8 +2405,8 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10940", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11024", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11118", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15878", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17971", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15886", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17979", "src/tachyon/tabs/diagnostic/checks/runByedpiCheck.ts:14", "src/tachyon/tabs/diagnostic/checks/runDnsCheck.ts:15", "src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:31", @@ -2577,7 +2577,7 @@ "call": "Clear DNS cache", "key": "Clear DNS cache", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17122", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17130", "src/tachyon/tabs/diagnostic/initController.ts:1085" ] }, @@ -2687,15 +2687,15 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12207", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12789", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12999", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13514", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15067", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15511", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15792", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17526", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19136", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19179", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20977", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21018", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13516", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15075", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15519", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15800", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17534", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19144", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19187", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20985", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21026", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:8596", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:12680", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:4074", @@ -2709,7 +2709,7 @@ "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:415", "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:178", "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:871", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:594", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:596", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:284", "src/tachyon/tabs/monitoring/initController.ts:904", "src/tachyon/tabs/monitoring/initController.ts:959", @@ -2721,8 +2721,8 @@ "call": "Close all connections", "key": "Close all connections", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18450", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18451", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18458", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18459", "src/tachyon/tabs/monitoring/render.ts:68", "src/tachyon/tabs/monitoring/render.ts:69" ] @@ -2731,8 +2731,8 @@ "call": "Close connection", "key": "Close connection", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19105", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19106", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19113", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19114", "src/tachyon/tabs/monitoring/initController.ts:871", "src/tachyon/tabs/monitoring/initController.ts:872" ] @@ -2741,8 +2741,8 @@ "call": "Closed", "key": "Closed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18413", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19003", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18421", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19011", "src/tachyon/tabs/monitoring/initController.ts:740", "src/tachyon/tabs/monitoring/render.ts:29" ] @@ -2786,8 +2786,8 @@ "call": "Command-line arguments string...", "key": "Command-line arguments string...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13784", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:899" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13786", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:901" ] }, { @@ -2862,8 +2862,8 @@ "call": "confidence", "key": "confidence", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14560", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1795" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14563", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1806" ] }, { @@ -2906,7 +2906,7 @@ "call": "Conflict", "key": "Conflict", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15978", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15986", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2069", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5713", "src/tachyon/methods/custom/getDashboardSections.ts:1860", @@ -2935,7 +2935,7 @@ "call": "Connected Devices", "key": "Connected Devices", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17282", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17290", "src/tachyon/tabs/diagnostic/initController.ts:1274" ] }, @@ -2950,7 +2950,7 @@ "call": "Connection Path", "key": "Connection Path", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15290", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15298", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:151" ] }, @@ -2965,7 +2965,7 @@ "call": "Connections are unavailable", "key": "Connections are unavailable", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19231", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19239", "src/tachyon/tabs/monitoring/initController.ts:1023" ] }, @@ -2973,7 +2973,7 @@ "call": "Connectivity probe failed", "key": "Connectivity probe failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16024", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16032", "src/tachyon/tabs/diagnostic/checks/runSectionsCheck.ts:223" ] }, @@ -2981,8 +2981,8 @@ "call": "Consulting DPI Knowledge Base & AI...", "key": "Consulting DPI Knowledge Base & AI...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14664", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1912" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14669", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1925" ] }, { @@ -3020,7 +3020,7 @@ "call": "Copied!", "key": "Copied!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15718", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15726", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:201" ] }, @@ -3037,7 +3037,7 @@ "call": "Copy address", "key": "Copy address", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22517", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22525", "src/tachyon/tabs/updates/initController.ts:1952" ] }, @@ -3045,8 +3045,8 @@ "call": "Copy Address", "key": "Copy Address", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15712", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15724", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15720", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15732", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:195", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:207" ] @@ -3055,7 +3055,7 @@ "call": "Copy log", "key": "Copy log", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20767", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20775", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:165" ] }, @@ -3075,7 +3075,7 @@ "call": "Copy Support Report", "key": "Copy Support Report", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17488", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17496", "src/tachyon/tabs/diagnostic/initController.ts:1509" ] }, @@ -3098,7 +3098,7 @@ "call": "Could not contact leak test endpoints. Please ensure router has internet access.", "key": "Could not contact leak test endpoints. Please ensure router has internet access.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15248", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15256", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:93" ] }, @@ -3106,7 +3106,7 @@ "call": "Country", "key": "Country", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15450", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15458", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:347" ] }, @@ -3121,7 +3121,7 @@ "call": "Credit Cards / SBP / Tinkoff Pay", "key": "Credit Cards / SBP / Tinkoff Pay", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15675", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15683", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:152" ] }, @@ -3129,7 +3129,7 @@ "call": "Cryptocurrency", "key": "Cryptocurrency", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15780", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15788", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:269" ] }, @@ -3137,7 +3137,7 @@ "call": "Current Diagnosis", "key": "Current Diagnosis", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17439", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17447", "src/tachyon/tabs/diagnostic/initController.ts:1450" ] }, @@ -3246,8 +3246,8 @@ "call": "Custom strategy added!", "key": "Custom strategy added!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13807", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:927" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13809", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:929" ] }, { @@ -3315,16 +3315,16 @@ "call": "Data transfer verified: streamed >= 32KB without throttling or disconnect", "key": "Data transfer verified: streamed >= 32KB without throttling or disconnect", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14237", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1416" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14239", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1418" ] }, { "call": "Date", "key": "Date", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14064", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1220" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14066", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1222" ] }, { @@ -3338,7 +3338,7 @@ "call": "Dedicated cgroup unavailable", "key": "Dedicated cgroup unavailable", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22140", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22148", "src/tachyon/tabs/updates/initController.ts:1494" ] }, @@ -3397,11 +3397,11 @@ "call": "Delete", "key": "Delete", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13909", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13911", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1856", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:724", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:732", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1039" + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1041" ] }, { @@ -3468,7 +3468,7 @@ "call": "Device updated", "key": "Device updated", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17357", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17365", "src/tachyon/tabs/diagnostic/initController.ts:1357" ] }, @@ -3506,7 +3506,7 @@ "call": "Diagnostic check completed", "key": "Diagnostic check completed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15233", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15241", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:73" ] }, @@ -3514,7 +3514,7 @@ "call": "Diagnostic check failed to complete", "key": "Diagnostic check failed to complete", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15240", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15248", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:84" ] }, @@ -3542,7 +3542,7 @@ "call": "DIRECT", "key": "DIRECT", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15359", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15367", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:232" ] }, @@ -3557,7 +3557,7 @@ "call": "Direct Bypass", "key": "Direct Bypass", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17345", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17353", "src/tachyon/tabs/diagnostic/initController.ts:1344" ] }, @@ -3573,7 +3573,7 @@ "key": "Direct connection via ISP", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10906", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15306", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15314", "src/tachyon/tabs/diagnostic/checks/runFakeIPCheck.ts:127", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:168" ] @@ -3582,7 +3582,7 @@ "call": "Direct Proxy", "key": "Direct Proxy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22131", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22139", "src/tachyon/tabs/updates/initController.ts:1477" ] }, @@ -3590,7 +3590,7 @@ "call": "Direct WAN", "key": "Direct WAN", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17339", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17347", "src/tachyon/tabs/diagnostic/initController.ts:1335" ] }, @@ -3598,7 +3598,7 @@ "call": "Direct WAN (ISP)", "key": "Direct WAN (ISP)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15300", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15308", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:161" ] }, @@ -3606,8 +3606,8 @@ "call": "Disable", "key": "Disable", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22073", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22088", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22081", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22096", "src/tachyon/tabs/updates/initController.ts:1402", "src/tachyon/tabs/updates/initController.ts:1420" ] @@ -3645,8 +3645,8 @@ "call": "Disabled", "key": "Disabled", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22132", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22140", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22148", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:1012", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:1045", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:461", @@ -3667,8 +3667,8 @@ "call": "Disorder Values (-d)", "key": "Disorder Values (-d)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13696", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:801" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13698", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:803" ] }, { @@ -3698,8 +3698,8 @@ "call": "DNS Blocking", "key": "DNS Blocking", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14519", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1745" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14522", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1756" ] }, { @@ -3767,7 +3767,7 @@ "call": "DNS Protocol", "key": "DNS Protocol", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15002", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15010", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:213" ] }, @@ -3798,15 +3798,15 @@ "call": "DNS resolution failed — likely DNS-level blocking or hijacking.", "key": "DNS resolution failed — likely DNS-level blocking or hijacking.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14536", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1765" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14539", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1776" ] }, { "call": "DNS resolvers through proxy are not captured (proxy is offline or test domain is not intercepted).", "key": "DNS resolvers through proxy are not captured (proxy is offline or test domain is not intercepted).", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15394", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15402", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:280" ] }, @@ -3922,7 +3922,7 @@ "call": "DNS Upstream Resolver Analysis", "key": "DNS Upstream Resolver Analysis", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15488", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15496", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:389" ] }, @@ -3944,7 +3944,7 @@ "call": "Do not panic, everything can be fixed, just...", "key": "Do not panic, everything can be fixed, just...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15829", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15837", "src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:31" ] }, @@ -3994,9 +3994,9 @@ "call": "Doctor failed", "key": "Doctor failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16910", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16930", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16918", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16938", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16946", "src/tachyon/tabs/diagnostic/initController.ts:729", "src/tachyon/tabs/diagnostic/initController.ts:771", "src/tachyon/tabs/diagnostic/initController.ts:779" @@ -4006,8 +4006,8 @@ "call": "Doctor repair", "key": "Doctor repair", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16919", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16921", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16927", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16929", "src/tachyon/tabs/diagnostic/initController.ts:745", "src/tachyon/tabs/diagnostic/initController.ts:757", "src/tachyon/tabs/diagnostic/initController.ts:758" @@ -4184,9 +4184,9 @@ "call": "Downloaded", "key": "Downloaded", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19129", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19176", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19315", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19137", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19184", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19323", "src/tachyon/tabs/monitoring/initController.ts:1145", "src/tachyon/tabs/monitoring/initController.ts:897", "src/tachyon/tabs/monitoring/initController.ts:956" @@ -4203,24 +4203,24 @@ "call": "DPI bandwidth throttling or delay detected — connection throttled during data transfer.", "key": "DPI bandwidth throttling or delay detected — connection throttled during data transfer.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14540", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1769" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14543", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1780" ] }, { "call": "DPI Detected", "key": "DPI Detected", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14559", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1794" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14562", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1805" ] }, { "call": "DPI Engine", "key": "DPI Engine", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13136", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:166" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13138", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:168" ] }, { @@ -4235,16 +4235,16 @@ "call": "DPI throttling: stream cut off after ~16KB payload transfer", "key": "DPI throttling: stream cut off after ~16KB payload transfer", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14251", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1431" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14253", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1433" ] }, { "call": "DPI Type", "key": "DPI Type", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14079", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1235" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14081", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1237" ] }, { @@ -4352,8 +4352,8 @@ "call": "Enable", "key": "Enable", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22079", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22094", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22087", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22102", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:286", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:704", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:7732", @@ -4423,7 +4423,7 @@ "call": "Enable Direct WAN Bypass", "key": "Enable Direct WAN Bypass", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17130", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17138", "src/tachyon/tabs/diagnostic/initController.ts:1093" ] }, @@ -4564,8 +4564,8 @@ "call": "Enabled", "key": "Enabled", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22132", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22140", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22148", "src/tachyon/tabs/updates/initController.ts:1479", "src/tachyon/tabs/updates/initController.ts:1496" ] @@ -4616,8 +4616,8 @@ "call": "endpoints OK", "key": "endpoints OK", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14280", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1462" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14282", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1464" ] }, { @@ -4631,12 +4631,12 @@ "call": "Engine", "key": "Engine", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13432", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13847", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14069", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1225", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:507", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:972" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13434", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13849", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14071", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1227", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:509", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:974" ] }, { @@ -4787,7 +4787,7 @@ "call": "EXCELLENT", "key": "EXCELLENT", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14879", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14887", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:74" ] }, @@ -4939,7 +4939,7 @@ "call": "FAILED", "key": "FAILED", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14891", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14899", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:86" ] }, @@ -4955,7 +4955,7 @@ "call": "Failed to apply DNS settings", "key": "Failed to apply DNS settings", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15146", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15154", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:374" ] }, @@ -4963,7 +4963,7 @@ "call": "Failed to apply fix", "key": "Failed to apply fix", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17217", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17225", "src/tachyon/tabs/diagnostic/initController.ts:1200" ] }, @@ -4971,10 +4971,10 @@ "call": "Failed to apply strategy", "key": "Failed to apply strategy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14733", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14741", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:4124", "src/tachyon/methods/shell/index.ts:1278", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1992" + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2008" ] }, { @@ -4997,8 +4997,8 @@ "call": "Failed to close connection", "key": "Failed to close connection", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19504", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19518", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19512", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19526", "src/tachyon/tabs/monitoring/initController.ts:1411", "src/tachyon/tabs/monitoring/initController.ts:1426" ] @@ -5007,8 +5007,8 @@ "call": "Failed to close connections", "key": "Failed to close connections", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19533", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19545", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19541", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19553", "src/tachyon/tabs/monitoring/initController.ts:1445", "src/tachyon/tabs/monitoring/initController.ts:1458" ] @@ -5017,15 +5017,15 @@ "call": "Failed to communicate with AI provider", "key": "Failed to communicate with AI provider", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14699", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1954" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14707", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1970" ] }, { "call": "Failed to copy address", "key": "Failed to copy address", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15730", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15738", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:213" ] }, @@ -5033,7 +5033,7 @@ "call": "Failed to copy report to clipboard", "key": "Failed to copy report to clipboard", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17075", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17083", "src/tachyon/tabs/diagnostic/initController.ts:972" ] }, @@ -5065,9 +5065,9 @@ "call": "Failed to execute", "key": "Failed to execute", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21544", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21606", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21780", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21552", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21614", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21788", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3293", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3296", "src/tachyon/methods/shell/index.ts:199", @@ -5100,7 +5100,7 @@ "call": "Failed to generate bug report", "key": "Failed to generate bug report", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17711", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17719", "src/tachyon/tabs/diagnostic/initController.ts:1771" ] }, @@ -5164,8 +5164,8 @@ "call": "Failed to load history", "key": "Failed to load history", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14173", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1338" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14175", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1340" ] }, { @@ -5179,7 +5179,7 @@ "call": "Failed to load versions", "key": "Failed to load versions", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22262", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22270", "src/tachyon/tabs/updates/initController.ts:1656" ] }, @@ -5240,8 +5240,8 @@ "call": "Failed to restore native internet", "key": "Failed to restore native internet", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17516", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17610", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17524", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17618", "src/tachyon/tabs/diagnostic/initController.ts:1541", "src/tachyon/tabs/diagnostic/initController.ts:1653" ] @@ -5273,8 +5273,8 @@ "call": "Failed to save patterns", "key": "Failed to save patterns", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13741", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:849" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13743", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:851" ] }, { @@ -5288,10 +5288,10 @@ "call": "Failed to start benchmark", "key": "Failed to start benchmark", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14648", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15114", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14653", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15122", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:339", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1893" + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1906" ] }, { @@ -5386,7 +5386,7 @@ "call": "Failed to update device", "key": "Failed to update device", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17362", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17370", "src/tachyon/tabs/diagnostic/initController.ts:1362" ] }, @@ -5420,7 +5420,7 @@ "call": "FAIR", "key": "FAIR", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14885", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14893", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:80" ] }, @@ -5428,8 +5428,8 @@ "call": "Fake packets reached remote server (HTTP 400 Bad Request)", "key": "Fake packets reached remote server (HTTP 400 Bad Request)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14265", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1446" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14267", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1448" ] }, { @@ -5467,7 +5467,7 @@ "call": "Fallback DNS", "key": "Fallback DNS", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15036", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15044", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:248" ] }, @@ -5572,8 +5572,8 @@ "call": "Filter:", "key": "Filter:", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13349", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:412" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13351", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:414" ] }, { @@ -5602,7 +5602,7 @@ "call": "Fix applied", "key": "Fix applied", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17211", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17219", "src/tachyon/tabs/diagnostic/initController.ts:1194" ] }, @@ -5610,7 +5610,7 @@ "call": "Fix resolv.conf", "key": "Fix resolv.conf", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17116", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17124", "src/tachyon/tabs/diagnostic/initController.ts:1079" ] }, @@ -5626,8 +5626,8 @@ "call": "Fixed", "key": "Fixed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16919", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17207", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16927", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17215", "src/tachyon/tabs/diagnostic/initController.ts:1190", "src/tachyon/tabs/diagnostic/initController.ts:751" ] @@ -5636,7 +5636,7 @@ "call": "Flush Conntrack Table", "key": "Flush Conntrack Table", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17133", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17141", "src/tachyon/tabs/diagnostic/initController.ts:1096" ] }, @@ -5644,16 +5644,16 @@ "call": "Fooling Methods (dpi-desync-fooling)", "key": "Fooling Methods (dpi-desync-fooling)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13665", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:768" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13667", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:770" ] }, { "call": "Fooling Methods (fooling)", "key": "Fooling Methods (fooling)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13616", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:717" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13618", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:719" ] }, { @@ -5688,8 +5688,8 @@ "call": "Found", "key": "Found", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14407", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1609" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14409", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1611" ] }, { @@ -5920,7 +5920,7 @@ "call": "Global check", "key": "Global check", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16885", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16893", "src/tachyon/tabs/diagnostic/initController.ts:701" ] }, @@ -5928,8 +5928,8 @@ "call": "Global check failed", "key": "Global check failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16896", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16900", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16904", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16908", "src/tachyon/tabs/diagnostic/initController.ts:712", "src/tachyon/tabs/diagnostic/initController.ts:716" ] @@ -5938,17 +5938,17 @@ "call": "Global Default", "key": "Global Default", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14718", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14724", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1974", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1980" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14726", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14732", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1990", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1996" ] }, { "call": "GOOD", "key": "GOOD", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14882", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14890", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:77" ] }, @@ -6139,7 +6139,7 @@ "call": "Hide versions", "key": "Hide versions", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22554", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22562", "src/tachyon/tabs/updates/initController.ts:1992" ] }, @@ -6163,28 +6163,28 @@ "call": "History", "key": "History", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13082", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17463", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13084", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17471", "src/tachyon/tabs/diagnostic/initController.ts:1478", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:96" + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:98" ] }, { "call": "History cleared", "key": "History cleared", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14028", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14030", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:4344", "src/tachyon/methods/shell/index.ts:1580", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1179" + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1181" ] }, { "call": "Host", "key": "Host", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19119", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19172", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19127", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19180", "src/tachyon/tabs/monitoring/initController.ts:887", "src/tachyon/tabs/monitoring/initController.ts:952" ] @@ -6293,7 +6293,7 @@ "call": "ℹ️ Direct connection (WAN): Public IP matches your ISP. Under selective routing (by domains or blocklists), unblocked resources bypass the proxy — this is standard operation.", "key": "ℹ️ Direct connection (WAN): Public IP matches your ISP. Under selective routing (by domains or blocklists), unblocked resources bypass the proxy — this is standard operation.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15278", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15286", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:137" ] }, @@ -6301,7 +6301,7 @@ "call": "ℹ️ ISP DNS detected: DNS queries are handled by your local Internet Service Provider. If you use selective routing, this is standard behavior for direct connections.", "key": "ℹ️ ISP DNS detected: DNS queries are handled by your local Internet Service Provider. If you use selective routing, this is standard behavior for direct connections.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15396", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15404", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:284" ] }, @@ -6326,7 +6326,7 @@ "call": "If Tachyon powers your daily networking and keeps your connection fast and secure, consider supporting ongoing development! ☕ 🧀 🌭", "key": "If Tachyon powers your daily networking and keeps your connection fast and secure, consider supporting ongoing development! ☕ 🧀 🌭", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15611", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15619", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:79" ] }, @@ -6386,7 +6386,7 @@ "call": "INACTIVE", "key": "INACTIVE", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15352", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15360", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:222" ] }, @@ -6556,7 +6556,7 @@ "call": "Initializing router-level IP & DNS leak test...", "key": "Initializing router-level IP & DNS leak test...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15197", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15205", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:29" ] }, @@ -6564,10 +6564,10 @@ "call": "Install", "key": "Install", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20967", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21806", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22277", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22324", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20975", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21814", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22285", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22332", "src/tachyon/tabs/updates/initController.ts:1078", "src/tachyon/tabs/updates/initController.ts:1676", "src/tachyon/tabs/updates/initController.ts:1729", @@ -6578,7 +6578,7 @@ "call": "Install another build:", "key": "Install another build:", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22541", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22549", "src/tachyon/tabs/updates/initController.ts:1978" ] }, @@ -6586,19 +6586,19 @@ "call": "Installed", "key": "Installed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14751", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14754", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14757", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2017", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2022", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2027" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14759", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14762", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14765", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2033", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2038", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2043" ] }, { "call": "Installed build → Available build", "key": "Installed build → Available build", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22409", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22417", "src/tachyon/tabs/updates/initController.ts:1824" ] }, @@ -6606,8 +6606,8 @@ "call": "Installed version is newer than release", "key": "Installed version is newer than release", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21281", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22417", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21289", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22425", "src/tachyon/tabs/updates/initController.ts:1832", "src/tachyon/tabs/updates/initController.ts:388" ] @@ -7378,24 +7378,24 @@ "call": "IP Block (TCP SYN Timeout)", "key": "IP Block (TCP SYN Timeout)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14520", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1746" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14523", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1757" ] }, { "call": "IP Frag Bounds (--ip-frag)", "key": "IP Frag Bounds (--ip-frag)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13720", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:825" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13722", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:827" ] }, { "call": "IP-level blocking detected! The resource is blocked at the network level (no TCP SYN response). DPI bypass methods (Zapret / ByeDPI) cannot bypass this address — configure proxy/VPN routing (Sing-box) for this domain!", "key": "IP-level blocking detected! The resource is blocked at the network level (no TCP SYN response). DPI bypass methods (Zapret / ByeDPI) cannot bypass this address — configure proxy/VPN routing (Sing-box) for this domain!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14552", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1785" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14555", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1796" ] }, { @@ -7445,7 +7445,7 @@ "call": "ISP / Organization", "key": "ISP / Organization", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15293", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15301", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:154" ] }, @@ -7453,7 +7453,7 @@ "call": "ISP DNS", "key": "ISP DNS", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15414", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15422", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:307" ] }, @@ -7461,7 +7461,7 @@ "call": "Issues", "key": "Issues", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16919", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16927", "src/tachyon/tabs/diagnostic/initController.ts:747" ] }, @@ -7479,7 +7479,7 @@ "call": "Issues detected. Review the diagnosis above.", "key": "Issues detected. Review the diagnosis above.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17233", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17241", "src/tachyon/tabs/diagnostic/initController.ts:1219" ] }, @@ -7712,7 +7712,7 @@ "call": "LAN Devices", "key": "LAN Devices", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17449", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17457", "src/tachyon/tabs/diagnostic/initController.ts:1462" ] }, @@ -7734,7 +7734,7 @@ "call": "Latency", "key": "Latency", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14856", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14864", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:46" ] }, @@ -7759,8 +7759,8 @@ "call": "Latest version is installed", "key": "Latest version is installed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21283", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22415", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21291", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22423", "src/tachyon/tabs/updates/initController.ts:1830", "src/tachyon/tabs/updates/initController.ts:391" ] @@ -7769,7 +7769,7 @@ "call": "Latest version:", "key": "Latest version:", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22417", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22425", "src/tachyon/tabs/updates/initController.ts:1832" ] }, @@ -7913,7 +7913,7 @@ "call": "Loading connected LAN devices...", "key": "Loading connected LAN devices...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17252", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17260", "src/tachyon/tabs/diagnostic/initController.ts:1241" ] }, @@ -7921,8 +7921,8 @@ "call": "Loading connections", "key": "Loading connections", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18482", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19222", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18490", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19230", "src/tachyon/tabs/monitoring/initController.ts:1013", "src/tachyon/tabs/monitoring/render.ts:101" ] @@ -7941,7 +7941,7 @@ "call": "Loading versions...", "key": "Loading versions...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22292", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22300", "src/tachyon/tabs/updates/initController.ts:1695" ] }, @@ -7949,15 +7949,15 @@ "call": "Loading...", "key": "Loading...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22106", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22120", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22147", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22158", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22169", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22179", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22190", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22201", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22212", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22114", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22128", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22155", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22166", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22177", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22187", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22198", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22209", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22220", "src/tachyon/tabs/updates/initController.ts:1441", "src/tachyon/tabs/updates/initController.ts:1457", "src/tachyon/tabs/updates/initController.ts:1507", @@ -7980,7 +7980,7 @@ "call": "Location", "key": "Location", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15292", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15300", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:153" ] }, @@ -7995,7 +7995,7 @@ "call": "Loss", "key": "Loss", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14857", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14865", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:47" ] }, @@ -8336,16 +8336,16 @@ "call": "My Strategies", "key": "My Strategies", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13080", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:94" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13082", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:96" ] }, { "call": "Name", "key": "Name", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13846", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:971" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13848", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:973" ] }, { @@ -8367,8 +8367,8 @@ "call": "Native internet restored. Tachyon stopped.", "key": "Native internet restored. Tachyon stopped.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17506", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17602", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17514", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17610", "src/tachyon/tabs/diagnostic/initController.ts:1531", "src/tachyon/tabs/diagnostic/initController.ts:1645" ] @@ -8429,8 +8429,8 @@ "call": "new build", "key": "new build", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20697", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20699", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20705", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20707", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:73", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:75" ] @@ -8524,7 +8524,7 @@ "call": "No active connections", "key": "No active connections", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19241", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19249", "src/tachyon/tabs/monitoring/initController.ts:1037" ] }, @@ -8532,7 +8532,7 @@ "call": "No active DHCP clients found on local network.", "key": "No active DHCP clients found on local network.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17263", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17271", "src/tachyon/tabs/diagnostic/initController.ts:1253" ] }, @@ -8547,7 +8547,7 @@ "call": "No benchmark data yet. Click \"Start Benchmark\" to begin.", "key": "No benchmark data yet. Click \"Start Benchmark\" to begin.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14912", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14920", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:109" ] }, @@ -8555,24 +8555,24 @@ "call": "No benchmark history yet. Run a benchmark to see results here.", "key": "No benchmark history yet. Run a benchmark to see results here.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14048", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1204" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14050", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1206" ] }, { "call": "No benchmark results yet. Configure options and click \"Start Benchmark\".", "key": "No benchmark results yet. Configure options and click \"Start Benchmark\".", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13492", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:567" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13494", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:569" ] }, { "call": "No Blocking Detected", "key": "No Blocking Detected", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14522", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1748" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14525", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1759" ] }, { @@ -8587,7 +8587,7 @@ "call": "No closed connections", "key": "No closed connections", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19241", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19249", "src/tachyon/tabs/monitoring/initController.ts:1038" ] }, @@ -8610,8 +8610,8 @@ "call": "No custom strategies added yet.", "key": "No custom strategies added yet.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13871", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:998" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13873", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1000" ] }, { @@ -8633,7 +8633,7 @@ "call": "No DHCP clients detected", "key": "No DHCP clients detected", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17046", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17054", "src/tachyon/tabs/diagnostic/initController.ts:941" ] }, @@ -8641,7 +8641,7 @@ "call": "No diagnostic history available yet.", "key": "No diagnostic history available yet.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17379", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17387", "src/tachyon/tabs/diagnostic/initController.ts:1380" ] }, @@ -8649,7 +8649,7 @@ "call": "No DNS resolvers recorded", "key": "No DNS resolvers recorded", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15472", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15480", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:371" ] }, @@ -8679,7 +8679,7 @@ "call": "No issues detected. System is running normally.", "key": "No issues detected. System is running normally.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17240", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17248", "src/tachyon/tabs/diagnostic/initController.ts:1228" ] }, @@ -8687,7 +8687,7 @@ "call": "No issues found", "key": "No issues found", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16921", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16929", "src/tachyon/tabs/diagnostic/initController.ts:758" ] }, @@ -8750,16 +8750,16 @@ "call": "No strategies match the active filter.", "key": "No strategies match the active filter.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14200", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1372" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14202", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1374" ] }, { "call": "No versions found", "key": "No versions found", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22248", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22251", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22256", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22259", "src/tachyon/tabs/updates/initController.ts:1642", "src/tachyon/tabs/updates/initController.ts:1645" ] @@ -8768,8 +8768,8 @@ "call": "No working strategy to apply", "key": "No working strategy to apply", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14739", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2001" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14747", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2017" ] }, { @@ -8792,7 +8792,7 @@ "call": "None", "key": "None", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17043", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17051", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:924", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:949", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:965", @@ -8809,7 +8809,7 @@ "key": "Not configured", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10599", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15989", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15997", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2069", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5713", "src/tachyon/methods/custom/getDashboardSections.ts:1863", @@ -8850,23 +8850,23 @@ "call": "Not installed", "key": "Not installed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14751", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14754", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14757", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22147", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22158", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22169", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22179", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22190", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22201", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22212", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14759", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14762", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14765", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22155", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22166", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22177", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22187", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22198", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22209", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22220", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6553", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6558", "src/tachyon/helpers/singBoxVariant.ts:34", "src/tachyon/helpers/singBoxVariant.ts:42", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2018", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2023", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2028", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2034", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2039", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2044", "src/tachyon/tabs/updates/initController.ts:1510", "src/tachyon/tabs/updates/initController.ts:1525", "src/tachyon/tabs/updates/initController.ts:1540", @@ -8896,10 +8896,10 @@ "call": "Not responding", "key": "Not responding", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15938", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15957", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15962", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16035", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15946", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15965", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15970", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16043", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2199", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2431", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2542", @@ -8918,10 +8918,10 @@ "call": "Not running", "key": "Not running", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16443", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16613", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16659", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16721", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16451", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16621", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16667", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16729", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6084", "src/tachyon/tabs/diagnostic/diagnostic.store.ts:168", "src/tachyon/tabs/diagnostic/initController.ts:125", @@ -9046,7 +9046,7 @@ "call": "Observed Public IP", "key": "Observed Public IP", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15291", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15299", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:152" ] }, @@ -9182,16 +9182,16 @@ "call": "OOB Values (-o)", "key": "OOB Values (-o)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13702", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:807" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13704", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:809" ] }, { "call": "Open", "key": "Open", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22392", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22429", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22400", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22437", "src/tachyon/tabs/updates/initController.ts:1806", "src/tachyon/tabs/updates/initController.ts:1845" ] @@ -9207,7 +9207,7 @@ "call": "Open Project Page", "key": "Open Project Page", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15834", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15842", "src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:36" ] }, @@ -9215,7 +9215,7 @@ "call": "Operation completed successfully!", "key": "Operation completed successfully!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20896", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20904", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:329" ] }, @@ -9223,7 +9223,7 @@ "call": "Operation failed", "key": "Operation failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21014", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21022", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:488" ] }, @@ -9231,8 +9231,8 @@ "call": "Operation in progress...", "key": "Operation in progress...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20723", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20778", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20731", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20786", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:115", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:177" ] @@ -9241,7 +9241,7 @@ "call": "Operation log", "key": "Operation log", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20764", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20772", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:162" ] }, @@ -9257,7 +9257,7 @@ "call": "Operation started. Waiting for log output...", "key": "Operation started. Waiting for log output...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20760", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20768", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:157" ] }, @@ -9277,7 +9277,7 @@ "call": "Optimize AWG MTU", "key": "Optimize AWG MTU", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17135", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17143", "src/tachyon/tabs/diagnostic/initController.ts:1098" ] }, @@ -9285,7 +9285,7 @@ "call": "Optimize RAM memory", "key": "Optimize RAM memory", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17127", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17135", "src/tachyon/tabs/diagnostic/initController.ts:1090" ] }, @@ -9308,8 +9308,8 @@ "call": "Optional context (e.g. \"Rostelecom, YouTube 4K buffering is slow\")...", "key": "Optional context (e.g. \"Rostelecom, YouTube 4K buffering is slow\")...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13935", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1071" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13937", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1073" ] }, { @@ -9507,7 +9507,7 @@ "call": "Path", "key": "Path", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15457", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15465", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:354" ] }, @@ -9544,16 +9544,16 @@ "call": "Pattern Builder", "key": "Pattern Builder", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13079", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:93" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13081", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:95" ] }, { "call": "Patterns reset to defaults!", "key": "Patterns reset to defaults!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13753", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:861" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13755", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:863" ] }, { @@ -9576,17 +9576,17 @@ "call": "Patterns saved successfully!", "key": "Patterns saved successfully!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13739", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:847" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13741", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:849" ] }, { "call": "Pause updates", "key": "Pause updates", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18462", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18463", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19014", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18470", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18471", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19022", "src/tachyon/tabs/monitoring/initController.ts:757", "src/tachyon/tabs/monitoring/render.ts:80", "src/tachyon/tabs/monitoring/render.ts:81" @@ -9728,8 +9728,8 @@ "call": "Please specify strategy name and arguments", "key": "Please specify strategy name and arguments", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13795", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:912" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13797", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:914" ] }, { @@ -9830,7 +9830,7 @@ "call": "pre-release", "key": "pre-release", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22318", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22326", "src/tachyon/tabs/updates/initController.ts:1723" ] }, @@ -9880,8 +9880,8 @@ "call": "Preparing strategies and isolated nftables queue...", "key": "Preparing strategies and isolated nftables queue...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14593", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1832" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14598", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1845" ] }, { @@ -9916,7 +9916,7 @@ "call": "Primary DNS", "key": "Primary DNS", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15020", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15028", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:232" ] }, @@ -10032,7 +10032,7 @@ "call": "Protocol", "key": "Protocol", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14854", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14862", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:10299", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:2434", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:2668", @@ -10065,7 +10065,7 @@ "call": "Provider", "key": "Provider", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14853", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14861", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:43" ] }, @@ -10073,8 +10073,8 @@ "call": "Provider Global Default", "key": "Provider Global Default", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13243", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:287" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13245", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:289" ] }, { @@ -10097,7 +10097,7 @@ "call": "Proxy / DPI", "key": "Proxy / DPI", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17339", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17347", "src/tachyon/tabs/diagnostic/initController.ts:1336" ] }, @@ -10134,7 +10134,7 @@ "call": "Proxy Outbound", "key": "Proxy Outbound", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15329", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15337", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:194" ] }, @@ -10142,7 +10142,7 @@ "call": "Proxy outbound is inactive or not configured for local testing.", "key": "Proxy outbound is inactive or not configured for local testing.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15278", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15286", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:135" ] }, @@ -10180,7 +10180,7 @@ "call": "Public IP Address Isolation", "key": "Public IP Address Isolation", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15382", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15390", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:259" ] }, @@ -10202,8 +10202,8 @@ "call": "Querying direct connection and proxy outbound...", "key": "Querying direct connection and proxy outbound...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15208", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15224", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15216", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15232", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:43", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:63" ] @@ -10220,7 +10220,7 @@ "call": "Quick donation via Russian bank cards or SBP", "key": "Quick donation via Russian bank cards or SBP", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15682", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15690", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:160" ] }, @@ -10228,8 +10228,8 @@ "call": "RAG Knowledge Base + Live ISP Probe Context", "key": "RAG Knowledge Base + Live ISP Probe Context", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13985", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1128" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13987", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1130" ] }, { @@ -10243,7 +10243,7 @@ "call": "Rating", "key": "Rating", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14858", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14866", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:48" ] }, @@ -10259,7 +10259,7 @@ "call": "Re-run Leak Test", "key": "Re-run Leak Test", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15504", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15512", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:407" ] }, @@ -10274,7 +10274,7 @@ "call": "Ready to benchmark DNS providers", "key": "Ready to benchmark DNS providers", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14841", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14849", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:29" ] }, @@ -10331,7 +10331,7 @@ "call": "Rebuild firewall rules", "key": "Rebuild firewall rules", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17114", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17122", "src/tachyon/tabs/diagnostic/initController.ts:1077" ] }, @@ -10339,7 +10339,7 @@ "call": "Rebuilt release", "key": "Rebuilt release", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22411", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22419", "src/tachyon/tabs/updates/initController.ts:1826" ] }, @@ -10347,15 +10347,15 @@ "call": "Recommended", "key": "Recommended", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14562", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1797" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14565", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1808" ] }, { "call": "Recommended DNS Configuration", "key": "Recommended DNS Configuration", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14992", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15000", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:202" ] }, @@ -10363,7 +10363,7 @@ "call": "Recommended DNS settings applied successfully and service restarted!", "key": "Recommended DNS settings applied successfully and service restarted!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15135", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15143", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:363" ] }, @@ -10371,7 +10371,7 @@ "call": "Recommended Quick Fixes:", "key": "Recommended Quick Fixes:", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17184", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17192", "src/tachyon/tabs/diagnostic/initController.ts:1161" ] }, @@ -10386,7 +10386,7 @@ "call": "Reconnect WAN", "key": "Reconnect WAN", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17120", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17128", "src/tachyon/tabs/diagnostic/initController.ts:1083" ] }, @@ -10416,7 +10416,7 @@ "call": "Refresh", "key": "Refresh", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17286", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17294", "src/tachyon/tabs/diagnostic/initController.ts:1278" ] }, @@ -10424,7 +10424,7 @@ "call": "Refresh Device List", "key": "Refresh Device List", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17267", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17275", "src/tachyon/tabs/diagnostic/initController.ts:1257" ] }, @@ -10446,7 +10446,7 @@ "call": "Reinstall", "key": "Reinstall", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21943", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21951", "src/tachyon/tabs/updates/initController.ts:1264" ] }, @@ -10478,7 +10478,7 @@ "call": "Reload now", "key": "Reload now", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20916", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20924", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:354" ] }, @@ -10486,7 +10486,7 @@ "call": "Reloading...", "key": "Reloading...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20943", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20951", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:390" ] }, @@ -10508,7 +10508,7 @@ "call": "Removal completed successfully!", "key": "Removal completed successfully!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20896", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20904", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:328" ] }, @@ -10516,7 +10516,7 @@ "call": "Remove", "key": "Remove", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21896", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21904", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:8963", "src/tachyon/tabs/updates/initController.ts:1203" ] @@ -10546,7 +10546,7 @@ "call": "Removing", "key": "Removing", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20727", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20735", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:119" ] }, @@ -10568,7 +10568,7 @@ "call": "Reset Bootstrap DNS", "key": "Reset Bootstrap DNS", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17134", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17142", "src/tachyon/tabs/diagnostic/initController.ts:1097" ] }, @@ -10599,7 +10599,7 @@ "call": "Resolve gateway", "key": "Resolve gateway", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17121", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17129", "src/tachyon/tabs/diagnostic/initController.ts:1084" ] }, @@ -10621,7 +10621,7 @@ "call": "Resolver IP", "key": "Resolver IP", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15449", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15457", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:346" ] }, @@ -10692,7 +10692,7 @@ "call": "Restart dnsmasq", "key": "Restart dnsmasq", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17115", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17123", "src/tachyon/tabs/diagnostic/initController.ts:1078" ] }, @@ -10700,7 +10700,7 @@ "call": "Restart firewall", "key": "Restart firewall", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17124", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17132", "src/tachyon/tabs/diagnostic/initController.ts:1087" ] }, @@ -10708,7 +10708,7 @@ "call": "Restart network", "key": "Restart network", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17125", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17133", "src/tachyon/tabs/diagnostic/initController.ts:1088" ] }, @@ -10716,7 +10716,7 @@ "call": "Restart sing-box DNS", "key": "Restart sing-box DNS", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17118", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17126", "src/tachyon/tabs/diagnostic/initController.ts:1081" ] }, @@ -10732,7 +10732,7 @@ "call": "Restart Zapret/ByeDPI", "key": "Restart Zapret/ByeDPI", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17126", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17134", "src/tachyon/tabs/diagnostic/initController.ts:1089" ] }, @@ -10756,7 +10756,7 @@ "call": "Restore config backup", "key": "Restore config backup", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17119", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17127", "src/tachyon/tabs/diagnostic/initController.ts:1082" ] }, @@ -10765,8 +10765,8 @@ "key": "Restore Native Internet", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11826", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17567", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17590", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17575", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17598", "src/tachyon/tabs/diagnostic/initController.ts:1605", "src/tachyon/tabs/diagnostic/initController.ts:1629", "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:144" @@ -10776,8 +10776,8 @@ "call": "Restore Native Internet (Stop Tachyon)", "key": "Restore Native Internet (Stop Tachyon)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17131", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17493", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17139", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17501", "src/tachyon/tabs/diagnostic/initController.ts:1094", "src/tachyon/tabs/diagnostic/initController.ts:1514" ] @@ -10800,8 +10800,8 @@ "call": "Restoring native direct internet (stopping Tachyon)...", "key": "Restoring native direct internet (stopping Tachyon)...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17496", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17594", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17504", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17602", "src/tachyon/tabs/diagnostic/initController.ts:1517", "src/tachyon/tabs/diagnostic/initController.ts:1633" ] @@ -10824,7 +10824,7 @@ "call": "Resume updates", "key": "Resume updates", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19014", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19022", "src/tachyon/tabs/monitoring/initController.ts:757" ] }, @@ -10839,7 +10839,7 @@ "call": "Rollback", "key": "Rollback", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21875", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21883", "src/tachyon/tabs/updates/initController.ts:1166" ] }, @@ -10848,8 +10848,8 @@ "key": "Route", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12433", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19123", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19174", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19131", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19182", "src/tachyon/tabs/diagnostic/partials/renderServiceCheckModal.ts:444", "src/tachyon/tabs/monitoring/initController.ts:891", "src/tachyon/tabs/monitoring/initController.ts:954" @@ -10915,7 +10915,7 @@ "call": "Route via Proxy", "key": "Route via Proxy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17345", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17353", "src/tachyon/tabs/diagnostic/initController.ts:1343" ] }, @@ -11042,8 +11042,8 @@ "call": "Rule:", "key": "Rule:", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13244", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:288" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13246", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:290" ] }, { @@ -11131,7 +11131,7 @@ "call": "Running", "key": "Running", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15972", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15980", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2069", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5610", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5713", @@ -11148,8 +11148,8 @@ "call": "Running benchmarks...", "key": "Running benchmarks...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14200", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1371" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14202", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1373" ] }, { @@ -11170,7 +11170,7 @@ "call": "SAFE", "key": "SAFE", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15421", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15429", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:316" ] }, @@ -11257,17 +11257,17 @@ "call": "Score", "key": "Score", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13469", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14092", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1248", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:544" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13471", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14094", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1250", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:546" ] }, { "call": "Search", "key": "Search", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18439", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:18447", "src/tachyon/tabs/monitoring/render.ts:57" ] }, @@ -11283,8 +11283,8 @@ "call": "Search Mode", "key": "Search Mode", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13234", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:276" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13236", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:278" ] }, { @@ -11357,7 +11357,7 @@ "call": "SECURE", "key": "SECURE", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15366", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15374", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:241" ] }, @@ -11718,8 +11718,8 @@ "call": "Sequence Overlaps (seqovl)", "key": "Sequence Overlaps (seqovl)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13628", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:729" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13630", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:731" ] }, { @@ -11901,7 +11901,7 @@ "call": "Service action failed", "key": "Service action failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16805", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16813", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3513", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:3532", "src/tachyon/methods/shell/index.ts:489", @@ -11935,7 +11935,7 @@ "call": "Services are online and ready! Reloading page...", "key": "Services are online and ready! Reloading page...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20940", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20948", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:387" ] }, @@ -11951,7 +11951,7 @@ "call": "Services restarted. Click to reload page.", "key": "Services restarted. Click to reload page.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20956", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20964", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:406" ] }, @@ -12048,7 +12048,7 @@ "key": "Show sing-box config", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11884", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17631", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17639", "src/tachyon/tabs/diagnostic/initController.ts:1679", "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:202" ] @@ -12057,8 +12057,8 @@ "call": "Show sing-box config failed", "key": "Show sing-box config failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17642", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17649", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17650", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17657", "src/tachyon/tabs/diagnostic/initController.ts:1690", "src/tachyon/tabs/diagnostic/initController.ts:1697" ] @@ -12074,7 +12074,7 @@ "call": "Simultaneous check of your public IP address and upstream DNS resolvers to verify network visibility through direct connection and proxy.", "key": "Simultaneous check of your public IP address and upstream DNS resolvers to verify network visibility through direct connection and proxy.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15519", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15527", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:425" ] }, @@ -12202,7 +12202,7 @@ "call": "SLOW", "key": "SLOW", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14888", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14896", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:83" ] }, @@ -12266,8 +12266,8 @@ "call": "Source", "key": "Source", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19135", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19178", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19143", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19186", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/section.js:12420", "src/tachyon/tabs/monitoring/initController.ts:903", "src/tachyon/tabs/monitoring/initController.ts:958" @@ -12313,40 +12313,40 @@ "call": "Speed", "key": "Speed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13461", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:536" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13463", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:538" ] }, { "call": "Split Modes (dpi-desync)", "key": "Split Modes (dpi-desync)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13653", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:756" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13655", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:758" ] }, { "call": "Split Positions (dpi-desync-split-pos)", "key": "Split Positions (dpi-desync-split-pos)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13659", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:762" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13661", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:764" ] }, { "call": "Split Positions (pos)", "key": "Split Positions (pos)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13610", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:711" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13612", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:713" ] }, { "call": "Split Values (-s)", "key": "Split Values (-s)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13690", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:795" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13692", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:797" ] }, { @@ -12472,7 +12472,7 @@ "call": "Start Benchmark", "key": "Start Benchmark", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15056", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15064", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:273" ] }, @@ -12494,7 +12494,7 @@ "call": "Start sing-box", "key": "Start sing-box", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17113", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17121", "src/tachyon/tabs/diagnostic/initController.ts:1076" ] }, @@ -12517,7 +12517,7 @@ "call": "Start watchdog", "key": "Start watchdog", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17117", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17125", "src/tachyon/tabs/diagnostic/initController.ts:1080" ] }, @@ -12525,7 +12525,7 @@ "call": "Starting DNS benchmark...", "key": "Starting DNS benchmark...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15107", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15115", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:331" ] }, @@ -12550,7 +12550,7 @@ "key": "Status", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:12470", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15294", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15302", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2107", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:1003", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:452", @@ -12563,8 +12563,8 @@ "call": "Status / Suite", "key": "Status / Suite", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13445", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:520" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13447", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:522" ] }, { @@ -12600,7 +12600,7 @@ "call": "Stopped", "key": "Stopped", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15984", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15992", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2069", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5610", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5713", @@ -12631,40 +12631,40 @@ "call": "Strategy & Parameters", "key": "Strategy & Parameters", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13437", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:512" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13439", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:514" ] }, { "call": "Strategy applied successfully and service reloaded!", "key": "Strategy applied successfully and service reloaded!", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14718", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1974" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14726", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1990" ] }, { "call": "Strategy benchmark started", "key": "Strategy benchmark started", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14640", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1885" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14645", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1898" ] }, { "call": "Strategy deleted", "key": "Strategy deleted", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13916", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1046" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13918", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1048" ] }, { "call": "Strategy Name", "key": "Strategy Name", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13766", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:881" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13768", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:883" ] }, { @@ -12789,7 +12789,7 @@ "call": "Subscriptions, one-time donations and exclusives", "key": "Subscriptions, one-time donations and exclusives", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15641", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15649", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:114" ] }, @@ -12832,8 +12832,8 @@ "call": "Support Development", "key": "Support Development", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15806", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15854", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15814", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15862", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:301", "src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:58" ] @@ -12842,7 +12842,7 @@ "call": "Support on Boosty", "key": "Support on Boosty", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15648", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15656", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:121" ] }, @@ -12850,7 +12850,7 @@ "call": "Support on CloudTips", "key": "Support on CloudTips", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15689", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15697", "src/tachyon/tabs/diagnostic/partials/renderSupportModal.ts:167" ] }, @@ -12865,7 +12865,7 @@ "call": "Switch DNS to DoH", "key": "Switch DNS to DoH", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17128", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17136", "src/tachyon/tabs/diagnostic/initController.ts:1091" ] }, @@ -12881,7 +12881,7 @@ "call": "Sync System Time (NTP)", "key": "Sync System Time (NTP)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17132", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17140", "src/tachyon/tabs/diagnostic/initController.ts:1095" ] }, @@ -12904,7 +12904,7 @@ "call": "System information", "key": "System information", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14791", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14799", "src/tachyon/tabs/diagnostic/partials/renderSystemInfo.ts:24" ] }, @@ -12927,12 +12927,12 @@ "call": "Tachyon", "key": "Tachyon", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14714", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15131", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15145", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14722", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15139", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15153", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:359", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:373", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1970" + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1986" ] }, { @@ -12946,7 +12946,7 @@ "call": "Tachyon DNS Benchmark & Auto-Tuning", "key": "Tachyon DNS Benchmark & Auto-Tuning", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15175", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15183", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:406" ] }, @@ -12970,7 +12970,7 @@ "call": "Tachyon IP & DNS Leak Detection", "key": "Tachyon IP & DNS Leak Detection", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15534", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15542", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:442" ] }, @@ -13006,7 +13006,7 @@ "call": "Tachyon proxy routing", "key": "Tachyon proxy routing", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15335", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15343", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:201" ] }, @@ -13014,7 +13014,7 @@ "call": "Tachyon service is stopped. Start the service to display connections.", "key": "Tachyon service is stopped. Start the service to display connections.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19212", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19220", "src/tachyon/tabs/monitoring/initController.ts:1002" ] }, @@ -13185,17 +13185,17 @@ "call": "Target", "key": "Target", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14074", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14076", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/parental.js:779", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1230" + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1232" ] }, { "call": "Target accessible — no DPI blocking detected.", "key": "Target accessible — no DPI blocking detected.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14544", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1773" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14547", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1784" ] }, { @@ -13216,40 +13216,40 @@ "call": "Target Service / Suite", "key": "Target Service / Suite", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13201", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:239" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13203", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:241" ] }, { "call": "TCP connect timed out before TLS handshake — host is blocked at the IP layer. DPI bypass cannot unblock this; route via Sing-box VPN/Proxy outbound instead.", "key": "TCP connect timed out before TLS handshake — host is blocked at the IP layer. DPI bypass cannot unblock this; route via Sing-box VPN/Proxy outbound instead.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14528", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1757" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14531", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1768" ] }, { "call": "TCP Reset Injection", "key": "TCP Reset Injection", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14517", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1743" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14520", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1754" ] }, { "call": "TCP RST received from DPI — active TCP reset injection detected.", "key": "TCP RST received from DPI — active TCP reset injection detected.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14532", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1761" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14535", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1772" ] }, { "call": "TCP Window Sizes (wsize)", "key": "TCP Window Sizes (wsize)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13634", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:735" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13636", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:737" ] }, { @@ -13294,7 +13294,7 @@ "call": "Telegram Channel", "key": "Telegram Channel", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15844", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15852", "src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:47" ] }, @@ -13391,7 +13391,7 @@ "call": "Testing", "key": "Testing", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15083", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15091", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:305" ] }, @@ -13407,24 +13407,24 @@ "call": "Testing bypass strategies in isolated sandbox...", "key": "Testing bypass strategies in isolated sandbox...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14624", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1867" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14629", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1880" ] }, { "call": "Testing strategy", "key": "Testing strategy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14403", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1605" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14405", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1607" ] }, { "call": "Testing upstream DNS resolvers...", "key": "Testing upstream DNS resolvers...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15214", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15222", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15230", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:52", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:61" ] @@ -13441,8 +13441,8 @@ "call": "Testing:", "key": "Testing:", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14422", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1627" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14424", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1629" ] }, { @@ -13521,7 +13521,7 @@ "call": "This action will stop Tachyon, restore standard dnsmasq/DNS, remove all proxy/anti-censorship firewall rules and restore direct Internet connection through your ISP.", "key": "This action will stop Tachyon, restore standard dnsmasq/DNS, remove all proxy/anti-censorship firewall rules and restore direct Internet connection through your ISP.", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17572", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17580", "src/tachyon/tabs/diagnostic/initController.ts:1610" ] }, @@ -13622,8 +13622,8 @@ "call": "Throttling / Deep Inspection", "key": "Throttling / Deep Inspection", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14518", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1744" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14521", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1755" ] }, { @@ -13644,9 +13644,9 @@ "call": "Time", "key": "Time", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19126", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19175", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19309", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19134", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19183", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19317", "src/tachyon/tabs/monitoring/initController.ts:1138", "src/tachyon/tabs/monitoring/initController.ts:894", "src/tachyon/tabs/monitoring/initController.ts:955" @@ -13677,7 +13677,7 @@ "call": "Timeout", "key": "Timeout", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14919", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14927", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:117" ] }, @@ -13715,8 +13715,8 @@ "call": "TLS-Rec Bounds (--tlsrec)", "key": "TLS-Rec Bounds (--tlsrec)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13714", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:819" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13716", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:821" ] }, { @@ -13753,7 +13753,7 @@ "call": "TorrServer Direct", "key": "TorrServer Direct", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22139", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22147", "src/tachyon/tabs/updates/initController.ts:1490" ] }, @@ -13761,7 +13761,7 @@ "call": "TorrServer not found", "key": "TorrServer not found", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22140", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22148", "src/tachyon/tabs/updates/initController.ts:1492" ] }, @@ -13872,7 +13872,7 @@ "call": "Transient connection error", "key": "Transient connection error", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21754", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21762", "src/tachyon/tabs/updates/initController.ts:1011" ] }, @@ -13931,7 +13931,7 @@ "call": "Troubleshooting", "key": "Troubleshooting", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15828", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15836", "src/tachyon/tabs/diagnostic/partials/renderWikiDisclaimer.ts:30" ] }, @@ -13953,8 +13953,8 @@ "call": "TTFB", "key": "TTFB", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13453", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:528" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13455", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:530" ] }, { @@ -13975,16 +13975,16 @@ "call": "TTL Values (dpi-desync-ttl)", "key": "TTL Values (dpi-desync-ttl)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13671", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:774" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13673", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:776" ] }, { "call": "TTL Values (ttl)", "key": "TTL Values (ttl)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13622", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:723" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13624", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:725" ] }, { @@ -14012,8 +14012,8 @@ "call": "Type", "key": "Type", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19120", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19173", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19128", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19181", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/server.js:1724", "src/tachyon/tabs/monitoring/initController.ts:888", "src/tachyon/tabs/monitoring/initController.ts:953" @@ -14205,7 +14205,7 @@ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11221", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11224", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11225", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21333", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21341", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:6553", "src/tachyon/helpers/singBoxVariant.ts:33", "src/tachyon/services/systemInfo.service.ts:10", @@ -14229,7 +14229,7 @@ "call": "Unknown", "key": "Unknown", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15994", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16002", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2069", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5713", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:3131", @@ -14259,28 +14259,28 @@ "call": "Unknown DPI Pattern", "key": "Unknown DPI Pattern", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14521", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1747" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14524", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1758" ] }, { "call": "Unknown error", "key": "Unknown error", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14475", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14647", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16910", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16929", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16996", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17537", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14478", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14652", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16918", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16937", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17004", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17545", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:5787", "src/tachyon/api.ts:40", "src/tachyon/tabs/diagnostic/initController.ts:1566", "src/tachyon/tabs/diagnostic/initController.ts:729", "src/tachyon/tabs/diagnostic/initController.ts:770", "src/tachyon/tabs/diagnostic/initController.ts:855", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1695", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1892" + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1706", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1905" ] }, { @@ -14339,7 +14339,7 @@ "call": "Update", "key": "Update", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21806", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21814", "src/tachyon/tabs/updates/initController.ts:1078" ] }, @@ -14361,7 +14361,7 @@ "call": "Update is available", "key": "Update is available", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21278", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:21286", "src/tachyon/tabs/updates/initController.ts:384" ] }, @@ -14369,7 +14369,7 @@ "call": "Update is available for current release", "key": "Update is available for current release", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22399", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22407", "src/tachyon/tabs/updates/initController.ts:1813" ] }, @@ -14377,7 +14377,7 @@ "call": "Update is available:", "key": "Update is available:", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22380", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22388", "src/tachyon/tabs/updates/initController.ts:1792" ] }, @@ -14401,7 +14401,7 @@ "call": "Update subscriptions", "key": "Update subscriptions", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17123", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17131", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2005", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:2016", "src/tachyon/tabs/dashboard/partials/renderSections.ts:231", @@ -14435,7 +14435,7 @@ "call": "Updating", "key": "Updating", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20729", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20737", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:121" ] }, @@ -14443,7 +14443,7 @@ "call": "Updating device routing mode...", "key": "Updating device routing mode...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17348", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:17356", "src/tachyon/tabs/diagnostic/initController.ts:1347" ] }, @@ -14475,9 +14475,9 @@ "call": "Uploaded", "key": "Uploaded", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19132", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19177", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19321", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19140", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19185", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:19329", "src/tachyon/tabs/monitoring/initController.ts:1152", "src/tachyon/tabs/monitoring/initController.ts:900", "src/tachyon/tabs/monitoring/initController.ts:957" @@ -14487,7 +14487,7 @@ "call": "Upstream Mode", "key": "Upstream Mode", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15012", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15020", "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/settings.js:1387", "src/tachyon/tabs/diagnostic/partials/renderDnsBenchmarkModal.ts:224" ] @@ -14496,7 +14496,7 @@ "call": "Upstream Provider / ASN", "key": "Upstream Provider / ASN", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15451", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15459", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:348" ] }, @@ -14732,8 +14732,8 @@ "call": "User custom strategy", "key": "User custom strategy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13804", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:923" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13806", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:925" ] }, { @@ -14849,7 +14849,7 @@ "call": "Verdict", "key": "Verdict", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15455", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15463", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:352" ] }, @@ -14857,7 +14857,7 @@ "call": "Verifying router and service readiness...", "key": "Verifying router and service readiness...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20936", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20944", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:382" ] }, @@ -14865,7 +14865,7 @@ "call": "Versions", "key": "Versions", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22554", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22562", "src/tachyon/tabs/updates/initController.ts:1992" ] }, @@ -14880,7 +14880,7 @@ "call": "via Proxy", "key": "via Proxy", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15434", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15442", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:330" ] }, @@ -14888,7 +14888,7 @@ "call": "via WAN", "key": "via WAN", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15437", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15445", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:333" ] }, @@ -14904,7 +14904,7 @@ "key": "View logs", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:11875", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16973", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16981", "src/tachyon/tabs/diagnostic/initController.ts:829", "src/tachyon/tabs/diagnostic/partials/renderAvailableActions.ts:193" ] @@ -14913,8 +14913,8 @@ "call": "View logs failed", "key": "View logs failed", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16983", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16986", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16991", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:16994", "src/tachyon/tabs/diagnostic/initController.ts:839", "src/tachyon/tabs/diagnostic/initController.ts:842" ] @@ -14944,7 +14944,7 @@ "call": "Waiting for router services to restart...", "key": "Waiting for router services to restart...", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20912", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:20920", "src/tachyon/tabs/updates/partials/renderUpdateProgressModal.ts:349" ] }, @@ -14952,7 +14952,7 @@ "call": "Waiting for TorrServer", "key": "Waiting for TorrServer", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22140", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:22148", "src/tachyon/tabs/updates/initController.ts:1498" ] }, @@ -14961,7 +14961,7 @@ "key": "WAN", "places": [ "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:10620", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15323", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:15331", "src/tachyon/tabs/diagnostic/checks/runInboundsCheck.ts:70", "src/tachyon/tabs/diagnostic/partials/renderLeakCheckModal.ts:188" ] @@ -15210,16 +15210,16 @@ "call": "Working", "key": "Working", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14100", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1256" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14102", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1258" ] }, { "call": "working strategies", "key": "working strategies", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14407", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1609" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14409", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:1611" ] }, { @@ -15324,38 +15324,38 @@ "call": "Zapret v1", "key": "Zapret v1", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13777", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:892" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13779", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:894" ] }, { "call": "Zapret v1 (nfqws)", "key": "Zapret v1 (nfqws)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13121", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14754", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:149", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2022", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2023" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13123", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14762", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:151", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2038", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2039" ] }, { "call": "Zapret v2", "key": "Zapret v2", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13776", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:891" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13778", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:893" ] }, { "call": "Zapret v2 (nfqws2)", "key": "Zapret v2 (nfqws2)", "places": [ - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13120", - "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14751", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:148", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2017", - "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2018" + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:13122", + "../luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js:14759", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:150", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2033", + "src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts:2034" ] }, { diff --git a/fe-app-tachyon/src/tachyon/methods/shell/tests/fuzzerAction.test.ts b/fe-app-tachyon/src/tachyon/methods/shell/tests/fuzzerAction.test.ts index cbf93c0a..b88b09b9 100644 --- a/fe-app-tachyon/src/tachyon/methods/shell/tests/fuzzerAction.test.ts +++ b/fe-app-tachyon/src/tachyon/methods/shell/tests/fuzzerAction.test.ts @@ -183,6 +183,42 @@ describe('TachyonShellMethods Fuzzer Actions', () => { } }); + it('starts fuzzer with custom_file from AI synthesis', async () => { + mocks.executeShellCommand.mockResolvedValueOnce({ + stdout: JSON.stringify({ + success: true, + job_id: 'fuzz_ai_42', + engine: 'zapret2', + target: 'youtube', + }), + stderr: '', + code: 0, + }); + + const res = await TachyonShellMethods.startFuzzer( + 'zapret2', + 'youtube', + '', + 'rule_1', + '/var/run/tachyon/fuzzer_ai_strategies.json', + 'ai_custom', + ); + expect(res.success).toBe(true); + expect(mocks.executeShellCommand).toHaveBeenCalledWith( + expect.objectContaining({ + args: [ + 'fuzzer_start', + 'zapret2', + 'youtube', + '', + 'rule_1', + '/var/run/tachyon/fuzzer_ai_strategies.json', + 'ai_custom', + ], + }), + ); + }); + it('gets fuzzer patterns configuration', async () => { mocks.executeShellCommand.mockResolvedValueOnce({ stdout: JSON.stringify({ diff --git a/fe-app-tachyon/src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts b/fe-app-tachyon/src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts index 5adb438a..297c1062 100644 --- a/fe-app-tachyon/src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts +++ b/fe-app-tachyon/src/tachyon/tabs/diagnostic/partials/renderStrategyFuzzerModal.ts @@ -19,6 +19,8 @@ export function renderStrategyFuzzerModal(ruleNames: string[] = []) { let currentState: Tachyon.FuzzerState | null = null; let resultFilter: 'all' | 'success' | 'fast' = 'all'; let autoApplyEnabled = false; + let autoAppliedJobId: string | null = null; + let stoppedManually = false; // eslint-disable-next-line @typescript-eslint/no-unused-vars let currentDpiDetection: Tachyon.FuzzerDpiDetection | null = null; @@ -1677,9 +1679,18 @@ export function renderStrategyFuzzerModal(ruleNames: string[] = []) { lastRenderedFinishedAt = finishedAt; } - if (!isRunning) { - // Auto-apply best strategy if enabled - if (autoApplyEnabled && currentState?.best_strategy) { + if (!isRunning && !stoppedManually) { + // Auto-apply best strategy only if benchmark completed 100%, without abort, and not already applied for this job + if ( + autoApplyEnabled && + currentState?.progress_pct === 100 && + !currentState?.aborted && + !currentState?.error && + currentState?.best_strategy && + currentState.job_id && + autoAppliedJobId !== currentState.job_id + ) { + autoAppliedJobId = currentState.job_id; try { const applyRes = await TachyonShellMethods.autoApplyFuzzerStrategy( @@ -1803,6 +1814,7 @@ export function renderStrategyFuzzerModal(ruleNames: string[] = []) { const handleToggleRun = async () => { if (isRunning) { + stoppedManually = true; (startBtn as HTMLButtonElement).disabled = true; startBtn.innerText = _('⏳ Stopping...'); await TachyonShellMethods.stopFuzzer(); @@ -1813,6 +1825,7 @@ export function renderStrategyFuzzerModal(ruleNames: string[] = []) { return; } + stoppedManually = false; (startBtn as HTMLButtonElement).disabled = true; startBtn.innerText = _('🛑 Stop Benchmark'); @@ -1932,6 +1945,7 @@ export function renderStrategyFuzzerModal(ruleNames: string[] = []) { activeTab = 'benchmark'; updateTabVisibility(); + stoppedManually = false; (startBtn as HTMLButtonElement).disabled = true; startBtn.innerText = _('🛑 Stop Benchmark'); @@ -1940,6 +1954,8 @@ export function renderStrategyFuzzerModal(ruleNames: string[] = []) { selectedTarget, customUrl, selectedRuleSection, + res.data.custom_file, + 'ai_custom', ); if (startRes.success) { diff --git a/fe-app-tachyon/src/tachyon/types.ts b/fe-app-tachyon/src/tachyon/types.ts index 91b60d97..cdb8ddb7 100644 --- a/fe-app-tachyon/src/tachyon/types.ts +++ b/fe-app-tachyon/src/tachyon/types.ts @@ -1120,6 +1120,7 @@ export namespace Tachyon { results: FuzzerStrategyResult[]; best_strategy?: FuzzerStrategyResult | null; error?: string | null; + aborted?: boolean; started_at: number; finished_at: number; dpi_detection?: FuzzerDpiDetection | null; @@ -1147,6 +1148,7 @@ export namespace Tachyon { target?: string; target_url?: string; analysis?: string; + custom_file?: string; strategies?: FuzzerStrategyItem[]; error?: string; } diff --git a/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js b/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js index c0605f29..5fe3d85b 100644 --- a/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js +++ b/luci-app-tachyon/htdocs/luci-static/resources/view/tachyon/main.js @@ -13020,6 +13020,8 @@ function renderStrategyFuzzerModal(ruleNames = []) { let currentState = null; let resultFilter = "all"; let autoApplyEnabled = false; + let autoAppliedJobId = null; + let stoppedManually = false; let currentDpiDetection = null; let patternsConfig = { zapret2: { @@ -14459,8 +14461,9 @@ function renderStrategyFuzzerModal(ruleNames = []) { lastRenderedCount = resultCount; lastRenderedFinishedAt = finishedAt; } - if (!isRunning) { - if (autoApplyEnabled && currentState?.best_strategy) { + if (!isRunning && !stoppedManually) { + if (autoApplyEnabled && currentState?.progress_pct === 100 && !currentState?.aborted && !currentState?.error && currentState?.best_strategy && currentState.job_id && autoAppliedJobId !== currentState.job_id) { + autoAppliedJobId = currentState.job_id; try { const applyRes = await TachyonShellMethods.autoApplyFuzzerStrategy( selectedRuleSection || void 0 @@ -14567,6 +14570,7 @@ function renderStrategyFuzzerModal(ruleNames = []) { }; const handleToggleRun = async () => { if (isRunning) { + stoppedManually = true; startBtn.disabled = true; startBtn.innerText = _("⏳ Stopping..."); await TachyonShellMethods.stopFuzzer(); @@ -14576,6 +14580,7 @@ function renderStrategyFuzzerModal(ruleNames = []) { await pollStatus(); return; } + stoppedManually = false; startBtn.disabled = true; startBtn.innerText = _("🛑 Stop Benchmark"); progressContainer.style.display = "flex"; @@ -14679,13 +14684,16 @@ function renderStrategyFuzzerModal(ruleNames = []) { } activeTab2 = "benchmark"; updateTabVisibility(); + stoppedManually = false; startBtn.disabled = true; startBtn.innerText = _("🛑 Stop Benchmark"); const startRes = await TachyonShellMethods.startFuzzer( selectedEngine, selectedTarget, customUrl, - selectedRuleSection + selectedRuleSection, + res.data.custom_file, + "ai_custom" ); if (startRes.success) { isRunning = true; diff --git a/tachyon/files/usr/lib/diagnostics/fuzzer.uc b/tachyon/files/usr/lib/diagnostics/fuzzer.uc index 45d5c16d..e998d461 100644 --- a/tachyon/files/usr/lib/diagnostics/fuzzer.uc +++ b/tachyon/files/usr/lib/diagnostics/fuzzer.uc @@ -4,6 +4,7 @@ let fs = require("fs"); let common = require("core.common"); let uci_core = require("core.uci"); let rag = require("diagnostics.rag"); +let fuzzer_runner = require("diagnostics.fuzzer_runner"); let as_string = common.as_string; let read_json_file = common.read_json_file; @@ -22,6 +23,7 @@ const LIB_DIR = getenv("TACHYON_LIB") || "/usr/lib/tachyon"; const STATE_DIR = getenv("TACHYON_FUZZER_STATE_DIR") || "/var/run/tachyon"; const STATE_FILE = STATE_DIR + "/fuzzer-state.json"; const PID_FILE = STATE_DIR + "/fuzzer-worker.pid"; +const JOBS_DIR = STATE_DIR + "/fuzzer"; const HISTORY_FILE = "/etc/tachyon/fuzzer_history.json"; const BYEDPI_PORT = 11089; const NFQUEUE_QNUM_ZAPRET = 298; @@ -29,6 +31,18 @@ const NFQUEUE_QNUM_ZAPRET2 = 299; const FUZZER_FWMARK = "0x40000000"; const FUZZER_OUTBOUND_MARK = getenv("NFT_OUTBOUND_MARK") || "0x08000000"; +function get_job_dir(job_id) { + if (!job_id || job_id == "") return null; + return JOBS_DIR + "/" + job_id; +} + +function ensure_job_dir(job_id) { + if (!job_id || job_id == "") return null; + let d = JOBS_DIR + "/" + job_id; + system(sprintf("mkdir -p %s 2>/dev/null", shell_quote(d))); + return d; +} + function resolve_binary(paths) { for (let p in paths) { if (p && fs.stat(p) != null) @@ -119,11 +133,17 @@ function get_timeout_prefix(sec) { return _has_timeout ? sprintf("timeout %d ", sec) : ""; } -function wrap_cmd_timeout(cmd, sec) { +function wrap_cmd_timeout(cmd, sec, pid_file) { sec = sec || 8; if (_has_timeout === null) { _has_timeout = (system("command -v timeout >/dev/null 2>&1") == 0); } + if (pid_file && pid_file != "") { + if (_has_timeout) { + return sprintf("sh -c 'echo $$ > %s; exec timeout -s KILL %d %s'", shell_quote(pid_file), sec, cmd); + } + return sprintf("sh -c 'echo $$ > %s; ( %s ) & p=$!; ( sleep %d; kill -9 $p 2>/dev/null ) & w=$!; wait $p 2>/dev/null; r=$?; kill -9 $w 2>/dev/null; wait $w 2>/dev/null; [ $r -ne 0 ] && printf \"\\t%%d\\n\" $r; exit $r'", shell_quote(pid_file), cmd, sec); + } if (_has_timeout) { return sprintf("timeout -s KILL %d %s", sec, cmd); } @@ -157,12 +177,14 @@ function get_resolved_host_flags(url) { if (!m || !m[1]) return ""; let host = m[1]; if (match(host, /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) || index(host, ":") >= 0) return ""; + if (!fuzzer_runner.is_valid_hostname(host)) return ""; if (exists(_fuzzer_host_cache, host)) return _fuzzer_host_cache[host]; + let safe_host = shell_quote(host); let ip = null; // 1. Try Cloudflare DoH JSON - let p = fs.popen(sprintf("curl -s -m 3 --connect-timeout 2 -H 'accept: application/dns-json' 'https://1.1.1.1/dns-query?name=%s&type=A'", host), "r"); + let p = fs.popen(sprintf("curl -s -m 3 --connect-timeout 2 -H 'accept: application/dns-json' 'https://1.1.1.1/dns-query?name=%s&type=A'", safe_host), "r"); let out = p ? p.read("all") : ""; if (p) p.close(); if (out && out != "") { @@ -180,7 +202,7 @@ function get_resolved_host_flags(url) { } // 2. Try Google DoH JSON if Cloudflare failed if (!ip) { - let gp = fs.popen(sprintf("curl -s -m 3 --connect-timeout 2 -H 'accept: application/dns-json' 'https://8.8.8.8/dns-query?name=%s&type=A'", host), "r"); + let gp = fs.popen(sprintf("curl -s -m 3 --connect-timeout 2 -H 'accept: application/dns-json' 'https://8.8.8.8/dns-query?name=%s&type=A'", safe_host), "r"); let gout = gp ? gp.read("all") : ""; if (gp) gp.close(); if (gout && gout != "") { @@ -199,7 +221,7 @@ function get_resolved_host_flags(url) { } // 3. Fallback: nslookup via 1.1.1.1 or system if (!ip) { - let np = fs.popen(sprintf("nslookup %s 1.1.1.1 2>/dev/null", host), "r"); + let np = fs.popen(sprintf("nslookup %s 1.1.1.1 2>/dev/null", safe_host), "r"); let nout = np ? np.read("all") : ""; if (np) np.close(); if (nout && nout != "") { @@ -316,27 +338,7 @@ function setup_fuzzer_direct_nftables(qnum, is_udp) { } function validate_strategy_args(engine, args_val) { - args_val = trim(as_string(args_val)); - if (args_val == "") return false; - engine = lc(as_string(engine)); - try { - if (engine == "zapret2") { - let val = require("providers.zapret2.validator"); - let res = val.validate_strategy("nfqws2", args_val, ""); - return res ? res.valid == true : true; - } else if (engine == "zapret") { - let val = require("providers.zapret.validator"); - let res = val.validate_strategy("nfqws", args_val, ""); - return res ? res.valid == true : true; - } else if (engine == "byedpi") { - let val = require("providers.byedpi.validator"); - let res = val.validate_strategy(args_val, ""); - return res ? res.valid == true : true; - } - } catch (e) { - return true; - } - return true; + return fuzzer_runner.validate_strategy_args(engine, args_val); } const PATTERNS_FILE = "/etc/tachyon/fuzzer_patterns.json"; @@ -1583,6 +1585,12 @@ function ensure_state_dir() { function save_fuzzer_state(state) { ensure_state_dir(); common.write_json_file(STATE_FILE, state); + if (state && state.job_id) { + let job_dir = get_job_dir(state.job_id); + if (job_dir) { + common.write_json_file(job_dir + "/state.json", state); + } + } } function safe_json_parse(str) { @@ -1839,6 +1847,18 @@ function get_fuzzer_state() { is_alive = (system(sprintf("kill -0 %s >/dev/null 2>&1", pid)) == 0); } } + if (!is_alive && state.job_id) { + let j_dir = get_job_dir(state.job_id); + if (j_dir) { + let j_pid_str = fs.readfile(j_dir + "/worker.pid"); + if (j_pid_str) { + let j_pid = trim(as_string(j_pid_str)); + if (j_pid != "" && match(j_pid, /^[0-9]+$/) != null) { + is_alive = (system(sprintf("kill -0 %s >/dev/null 2>&1", j_pid)) == 0); + } + } + } + } if (!is_alive) { state.running = false; if (!state.error && state.progress_pct < 100) { @@ -1854,24 +1874,21 @@ function get_fuzzer_state() { } function kill_pid_file(path) { - let pid_str = fs.readfile(path); - if (pid_str) { - let pid = trim(as_string(pid_str)); - if (pid != "" && match(pid, /^[0-9]+$/) != null) { - system(sprintf("kill %s >/dev/null 2>&1 || kill -9 %s >/dev/null 2>&1", pid, pid)); - for (let k = 0; k < 3; k++) { - if (system(sprintf("kill -0 %s >/dev/null 2>&1", pid)) != 0) break; - system("sleep 0.1"); - } - } - try { fs.unlink(path); } catch (e) {} - } + fuzzer_runner.kill_pid_file(path); } -function cleanup_temp_daemons() { +function cleanup_temp_daemons(job_id) { + if (job_id) { + let job_dir = get_job_dir(job_id); + if (job_dir) { + kill_pid_file(job_dir + "/engine.pid"); + kill_pid_file(job_dir + "/probe.pid"); + } + } kill_pid_file(STATE_DIR + "/fuzzer_byedpi.pid"); kill_pid_file(STATE_DIR + "/fuzzer_zapret.pid"); kill_pid_file(STATE_DIR + "/fuzzer_zapret2.pid"); + kill_pid_file(STATE_DIR + "/fuzzer_probe.pid"); // Directly parse /proc/net/netfilter/nfnetlink_queue to terminate any process bound to fuzzer queues for (let w = 0; w < 5; w++) { @@ -1915,8 +1932,7 @@ function cleanup_temp_daemons() { // Ensure ByeDPI port is released system(sprintf("fuser -k %d/tcp >/dev/null 2>&1", BYEDPI_PORT)); - // Terminate any leftover curl probe processes - system("killall -9 curl 2>/dev/null || true"); + // Notice: killall -9 curl removed to avoid killing external curl operations system("nft delete table inet tachyon_fuzzer >/dev/null 2>&1"); try { fs.unlink(STATE_DIR + "/fuzzer_daemon_err.log"); } catch (e) {} @@ -2247,8 +2263,11 @@ function rerank_strategies_by_dpi(strategies, dpi_type) { return result; } -function run_probe(engine, args_str, target_key, custom_url) { - cleanup_temp_daemons(); +function run_probe(engine, args_str, target_key, custom_url, job_id) { + cleanup_temp_daemons(job_id); + let job_dir = get_job_dir(job_id); + let probe_pid_path = job_dir ? (job_dir + "/probe.pid") : (STATE_DIR + "/fuzzer_probe.pid"); + try { fs.unlink(probe_pid_path); } catch (e) {} let urls_list = resolve_target_urls_list(target_key, custom_url); let total_urls = length(urls_list); @@ -2267,6 +2286,12 @@ function run_probe(engine, args_str, target_key, custom_url) { engine = lc(as_string(engine)); let is_udp = index(args_str, "--filter-udp") >= 0 || index(args_str, "--dpi-desync-any-protocol") >= 0 || target_key == "quic_http3"; + let tok_res = fuzzer_runner.tokenize_strategy_args(args_str); + if (!tok_res.valid) { + result.error = "Invalid strategy arguments: " + tok_res.error; + return result; + } + if (engine == "byedpi") { let bin = get_byedpi_bin(); if (!bin) { @@ -2274,12 +2299,13 @@ function run_probe(engine, args_str, target_key, custom_url) { return result; } - let pid_path = STATE_DIR + "/fuzzer_byedpi.pid"; - let stderr_log = STATE_DIR + "/fuzzer_daemon_err.log"; + let pid_path = job_dir ? (job_dir + "/engine.pid") : (STATE_DIR + "/fuzzer_byedpi.pid"); + let stderr_log = job_dir ? (job_dir + "/daemon_err.log") : (STATE_DIR + "/fuzzer_daemon_err.log"); try { fs.unlink(pid_path); } catch (e) {} try { fs.unlink(stderr_log); } catch (e) {} - let spawn_cmd = sprintf("cd /tmp && %s -i 127.0.0.1 -p %d %s 2>%s", bin, BYEDPI_PORT, args_str, shell_quote(stderr_log)); + let argv = fuzzer_runner.build_byedpi_argv(bin, BYEDPI_PORT, tok_res.tokens); + let spawn_cmd = "cd /tmp && " + common.command_from_args(argv) + " 2>" + shell_quote(stderr_log); system(common.background_command_with_pid(spawn_cmd, ">/dev/null", ">" + shell_quote(pid_path))); let pid_running = false; @@ -2308,7 +2334,7 @@ function run_probe(engine, args_str, target_key, custom_url) { } else { result.error = "ByeDPI daemon failed to start (invalid arguments)"; } - cleanup_temp_daemons(); + cleanup_temp_daemons(job_id); return result; } @@ -2333,11 +2359,13 @@ function run_probe(engine, args_str, target_key, custom_url) { BYEDPI_PORT, shell_quote(target_item.url) ), - 8 + 8, + probe_pid_path ); let pipe = fs.popen(curl_cmd, "r"); let output = pipe ? pipe.read("all") : ""; if (pipe) pipe.close(); + try { fs.unlink(probe_pid_path); } catch (e) {} let single_res = parse_curl_output(output, {}); single_res.target_name = target_item.name; @@ -2362,7 +2390,7 @@ function run_probe(engine, args_str, target_key, custom_url) { } } - cleanup_temp_daemons(); + cleanup_temp_daemons(job_id); if (passed_count == total_urls) { result.success = true; @@ -2391,12 +2419,12 @@ function run_probe(engine, args_str, target_key, custom_url) { } if (engine == "zapret" || engine == "zapret2") { - cleanup_temp_daemons(); + cleanup_temp_daemons(job_id); let is_z2 = engine == "zapret2"; let bin = is_z2 ? get_zapret2_bin() : get_zapret_bin(); let qnum = is_z2 ? NFQUEUE_QNUM_ZAPRET2 : NFQUEUE_QNUM_ZAPRET; - let pid_path = is_z2 ? (STATE_DIR + "/fuzzer_zapret2.pid") : (STATE_DIR + "/fuzzer_zapret.pid"); - let stderr_log = STATE_DIR + "/fuzzer_daemon_err.log"; + let pid_path = job_dir ? (job_dir + "/engine.pid") : (is_z2 ? (STATE_DIR + "/fuzzer_zapret2.pid") : (STATE_DIR + "/fuzzer_zapret.pid")); + let stderr_log = job_dir ? (job_dir + "/daemon_err.log") : (STATE_DIR + "/fuzzer_daemon_err.log"); try { fs.unlink(pid_path); } catch (e) {} try { fs.unlink(stderr_log); } catch (e) {} @@ -2429,7 +2457,8 @@ function run_probe(engine, args_str, target_key, custom_url) { fwmark_flag = sprintf("--dpi-desync-fwmark=%s ", FUZZER_FWMARK); } - let spawn_cmd = sprintf("cd /tmp && %s --qnum=%d %s%s%s%s%s --pidfile=%s --daemon >%s 2>&1", bin, qnum, fwmark_flag, lua_init_flags, blob_flags, filter_prefix, args_str, pid_path, shell_quote(stderr_log)); + let argv = fuzzer_runner.build_zapret_argv(bin, qnum, fwmark_flag, lua_init_flags, blob_flags, filter_prefix, tok_res.tokens, pid_path); + let spawn_cmd = "cd /tmp && " + common.command_from_args(argv) + " >" + shell_quote(stderr_log) + " 2>&1"; system(common.background_command(spawn_cmd)); let pid_running = false; @@ -2468,7 +2497,7 @@ function run_probe(engine, args_str, target_key, custom_url) { } else { result.error = sprintf("Daemon %s failed to start (invalid arguments or missing Lua library)", is_z2 ? "nfqws2" : "nfqws"); } - cleanup_temp_daemons(); + cleanup_temp_daemons(job_id); return result; } @@ -2494,11 +2523,13 @@ function run_probe(engine, args_str, target_key, custom_url) { target_flags, shell_quote(target_item.url) ), - 8 + 8, + probe_pid_path ); let pipe = fs.popen(curl_cmd, "r"); let output = pipe ? pipe.read("all") : ""; if (pipe) pipe.close(); + try { fs.unlink(probe_pid_path); } catch (e) {} let single_res = parse_curl_output(output, {}); single_res.target_name = target_item.name; @@ -2523,7 +2554,7 @@ function run_probe(engine, args_str, target_key, custom_url) { } } - cleanup_temp_daemons(); + cleanup_temp_daemons(job_id); if (passed_count == total_urls) { result.success = true; @@ -2576,6 +2607,7 @@ function run_fuzzer_worker(engine, target, custom_url, rule_section, custom_file results: [], best_strategy: null, error: null, + aborted: false, started_at: clock()[0], finished_at: 0, dpi_detection: null @@ -2583,6 +2615,15 @@ function run_fuzzer_worker(engine, target, custom_url, rule_section, custom_file save_fuzzer_state(state); } + if (custom_url && custom_url != "" && !fuzzer_runner.is_valid_url(custom_url)) { + state.running = false; + state.error = "Invalid custom URL: malformed or forbidden characters"; + state.finished_at = clock()[0]; + save_fuzzer_state(state); + cleanup_temp_daemons(state.job_id); + return; + } + // ── Pre-fuzz DPI detection ──────────────────────────────────────────── let dpi_detection = detect_dpi_type(target, custom_url); state.dpi_detection = dpi_detection; @@ -2596,6 +2637,23 @@ function run_fuzzer_worker(engine, target, custom_url, rule_section, custom_file strategies = get_strategies_for_engine(engine, mode); } + // Fail-closed re-validation of all candidate strategies before benchmarking + let validated_strategies = []; + for (let s in strategies) { + if (s && s.args && fuzzer_runner.validate_strategy_args(s.engine || engine, s.args)) { + push(validated_strategies, s); + } + } + strategies = validated_strategies; + if (length(strategies) == 0) { + state.running = false; + state.error = "No valid strategies found to benchmark"; + state.finished_at = clock()[0]; + save_fuzzer_state(state); + cleanup_temp_daemons(state.job_id); + return; + } + // Rerank strategies based on detected DPI type strategies = rerank_strategies_by_dpi(strategies, dpi_detection); @@ -2616,9 +2674,9 @@ function run_fuzzer_worker(engine, target, custom_url, rule_section, custom_file save_fuzzer_state(state); let probe = null; try { - probe = run_probe(strat.engine || engine, strat.args, target, custom_url); + probe = run_probe(strat.engine || engine, strat.args, target, custom_url, state.job_id); } catch (err) { - cleanup_temp_daemons(); + cleanup_temp_daemons(state.job_id); probe = { success: false, http_code: 0, @@ -2736,15 +2794,21 @@ function run_fuzzer_worker(engine, target, custom_url, rule_section, custom_file save_fuzzer_state(state); } - cleanup_temp_daemons(); + cleanup_temp_daemons(state.job_id); } function stop_fuzzer() { - kill_pid_file(PID_FILE); - cleanup_temp_daemons(); - let state = get_fuzzer_state(); + let job_id = state ? state.job_id : null; + let job_dir = get_job_dir(job_id); + if (job_dir) { + kill_pid_file(job_dir + "/worker.pid"); + } + kill_pid_file(PID_FILE); + cleanup_temp_daemons(job_id); + state.running = false; + state.aborted = true; state.current_strategy = null; state.error = "Stopped by user"; state.finished_at = clock()[0]; @@ -2774,10 +2838,15 @@ function start_fuzzer(engine, target, custom_url, rule_section, custom_file, mod system("sleep 0.25"); } + if (custom_url && custom_url != "" && !fuzzer_runner.is_valid_url(custom_url)) { + print(sprintf("%J\n", { success: false, error: "Invalid custom URL: malformed or forbidden characters" })); + return; + } + ensure_state_dir(); - cleanup_temp_daemons(); - let job_id = sprintf("fuzz_%d", clock()[0]); + ensure_job_dir(job_id); + cleanup_temp_daemons(job_id); // Immediately write starting state to prevent race conditions during frontend polling let state = { @@ -2796,6 +2865,7 @@ function start_fuzzer(engine, target, custom_url, rule_section, custom_file, mod results: [], best_strategy: null, error: null, + aborted: false, started_at: clock()[0], finished_at: 0, dpi_detection: null @@ -2813,7 +2883,8 @@ function start_fuzzer(engine, target, custom_url, rule_section, custom_file, mod shell_quote(job_id) ); - system(common.background_command_with_pid(cmd, ">/dev/null", ">" + shell_quote(PID_FILE))); + let job_worker_pid = get_job_dir(job_id) + "/worker.pid"; + system(common.background_command_with_pid(cmd, ">/dev/null", ">" + shell_quote(PID_FILE) + " && cp " + shell_quote(PID_FILE) + " " + shell_quote(job_worker_pid) + " 2>/dev/null")); print(sprintf("%J\n", { success: true, job_id, engine: engine || "zapret2", target: target || "youtube_suite", mode: mode || "presets" })); } @@ -2847,6 +2918,11 @@ function apply_strategy(engine, args_val, target_rule) { return; } + if (!fuzzer_runner.validate_strategy_args(engine, args_val)) { + print(sprintf("%J\n", { success: false, error: "Cannot apply invalid or insecure strategy arguments" })); + return; + } + args_val = normalize_strategy_for_uci(engine, args_val); let uci = uci_core.cursor(); @@ -2890,6 +2966,14 @@ function apply_strategy(engine, args_val, target_rule) { function auto_apply_best(target_rule) { let state = get_fuzzer_state(); + if (state.aborted) { + print(sprintf("%J\n", { success: false, error: "Cannot auto-apply: benchmark was stopped manually" })); + return; + } + if (state.progress_pct < 100) { + print(sprintf("%J\n", { success: false, error: "Cannot auto-apply: benchmark did not complete 100%" })); + return; + } if (!state.best_strategy || state.best_strategy.score <= 0) { print(sprintf("%J\n", { success: false, error: "No winning strategy found — run a benchmark first" })); return; diff --git a/tachyon/files/usr/lib/diagnostics/fuzzer_runner.uc b/tachyon/files/usr/lib/diagnostics/fuzzer_runner.uc new file mode 100644 index 00000000..3b0ae9b4 --- /dev/null +++ b/tachyon/files/usr/lib/diagnostics/fuzzer_runner.uc @@ -0,0 +1,148 @@ +#!/usr/bin/env ucode + +let fs = require("fs"); +let common = require("core.common"); +let as_string = common.as_string; +let shell_quote = common.shell_quote; + +function is_valid_hostname(host) { + host = trim(as_string(host)); + if (host == "" || length(host) > 253) return false; + // Allow IPv4 address + if (match(host, /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/)) return true; + // RFC 1123 hostname check + return match(host, /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/) != null; +} + +function is_valid_url(url) { + url = trim(as_string(url)); + if (url == "" || length(url) > 1024) return false; + // URL must start with http:// or https://, no shell metacharacters + return match(url, /^https?:\/\/[a-zA-Z0-9][-a-zA-Z0-9.]*(:[0-9]{1,5})?(\/[^\s;`$&|<>'"\\]*)?$/) != null; +} + +function tokenize_strategy_args(raw_args) { + let str = trim(as_string(raw_args)); + if (str == "") + return { valid: false, tokens: [], error: "Empty strategy string" }; + + if (length(str) > 2048) + return { valid: false, tokens: [], error: "Strategy string exceeds maximum length (2048)" }; + + // Strict rejection of shell metacharacters + if (match(str, /[;&|`$\r\n<>'\\(){}]/)) + return { valid: false, tokens: [], error: "Strategy contains forbidden shell characters" }; + + let raw_tokens = split(str, /[ \t]+/); + if (length(raw_tokens) == 0) + return { valid: false, tokens: [], error: "No tokens found" }; + + if (length(raw_tokens) > 64) + return { valid: false, tokens: [], error: "Strategy exceeds maximum token limit (64)" }; + + let tokens = []; + for (let t in raw_tokens) { + let tok = trim(t); + if (tok == "") continue; + if (length(tok) > 256) + return { valid: false, tokens: [], error: "Token exceeds maximum length (256): " + tok }; + + // Whitelist permitted characters: alphanumeric, -, _, ., /, :, =, +, @, ,, #, ~, % + if (!match(tok, /^[-a-zA-Z0-9_./:=+@,#~%]+$/)) + return { valid: false, tokens: [], error: "Token contains forbidden characters: " + tok }; + + push(tokens, tok); + } + + if (length(tokens) == 0) + return { valid: false, tokens: [], error: "No valid tokens found" }; + + return { valid: true, tokens: tokens }; +} + +function validate_strategy_args(engine, args_val) { + engine = lc(as_string(engine)); + if (engine != "zapret" && engine != "zapret2" && engine != "byedpi") + return false; + + let tok_res = tokenize_strategy_args(args_val); + if (!tok_res.valid) + return false; + + try { + if (engine == "zapret2") { + let val = require("providers.zapret2.validator"); + let res = val.validate_strategy("nfqws2", args_val, ""); + return (res && res.valid === true) ? true : false; + } else if (engine == "zapret") { + let val = require("providers.zapret.validator"); + let res = val.validate_strategy("nfqws", args_val, ""); + return (res && res.valid === true) ? true : false; + } else if (engine == "byedpi") { + let val = require("providers.byedpi.validator"); + let res = val.validate_strategy(args_val, ""); + return (res && res.valid === true) ? true : false; + } + } catch (e) { + return false; + } + return false; +} + +function build_byedpi_argv(bin, port, tokens) { + let argv = [ bin, "-i", "127.0.0.1", "-p", sprintf("%d", port) ]; + for (let tok in tokens) + push(argv, tok); + return argv; +} + +function build_zapret_argv(bin, qnum, fwmark_flag, lua_init_flags, blob_flags, filter_prefix, tokens, pid_path) { + let argv = [ bin, sprintf("--qnum=%d", qnum) ]; + + let append_flags = function(flag_str) { + if (!flag_str || flag_str == "") return; + let parts = split(trim(flag_str), /[ \t]+/); + for (let p in parts) { + if (p != "") push(argv, p); + } + }; + + append_flags(fwmark_flag); + append_flags(lua_init_flags); + append_flags(blob_flags); + append_flags(filter_prefix); + + for (let tok in tokens) + push(argv, tok); + + if (pid_path && pid_path != "") + push(argv, sprintf("--pidfile=%s", pid_path)); + + push(argv, "--daemon"); + return argv; +} + +function kill_pid_file(path) { + let pid_str = fs.readfile(path); + if (pid_str) { + let pid = trim(as_string(pid_str)); + if (pid != "" && match(pid, /^[0-9]+$/) != null) { + system(sprintf("kill %s >/dev/null 2>&1 || kill -9 %s >/dev/null 2>&1", pid, pid)); + for (let k = 0; k < 3; k++) { + if (system(sprintf("kill -0 %s >/dev/null 2>&1", pid)) != 0) break; + system("sleep 0.1"); + } + } + try { fs.unlink(path); } catch (e) {} + } +} + +return { + is_valid_hostname, + is_valid_url, + tokenize_strategy_args, + validate_strategy_args, + build_byedpi_argv, + build_zapret_argv, + kill_pid_file +}; diff --git a/tests/fuzzer_strategy_cli.sh b/tests/fuzzer_strategy_cli.sh index a3262fbe..684816e4 100644 --- a/tests/fuzzer_strategy_cli.sh +++ b/tests/fuzzer_strategy_cli.sh @@ -173,5 +173,64 @@ echo "$lua_res" | grep -q 'zapret-lib.lua' || fail "missing zapret-lib.lua in re echo "$lua_res" | grep -q 'zapret-antidpi.lua' || fail "missing zapret-antidpi.lua in resolved lua flags" echo "$lua_res" | grep -q 'zapret-auto.lua' || fail "missing zapret-auto.lua in resolved lua flags" -printf 'PASS: fuzzer_strategy_cli\n' +# 7. Check hardened runner, fail-closed validation, and absence of global killall curl +grep -q 'killall -9 curl' "$FUZZER" && fail "killall -9 curl must not be present in fuzzer.uc" || true +ucode -L "$TACHYON_LIB" -e ' +let r = require("diagnostics.fuzzer_runner"); + +// 1. Fail-closed: unknown engine rejected +if (r.validate_strategy_args("unknown_engine", "--split-pos=1") !== false) { + warn("Failed: unknown engine was not rejected\n"); + exit(1); +} + +// 2. Fail-closed: shell metacharacters rejected +if (r.validate_strategy_args("zapret2", "--split-pos=1; rm -rf /") !== false) { + warn("Failed: semicolon command injection was not rejected\n"); + exit(1); +} +if (r.validate_strategy_args("byedpi", "-s1 | reboot") !== false) { + warn("Failed: pipe command injection was not rejected\n"); + exit(1); +} +if (r.validate_strategy_args("zapret", "--dpi-desync=split2 `reboot`") !== false) { + warn("Failed: backtick command injection was not rejected\n"); + exit(1); +} +if (r.validate_strategy_args("zapret2", "--dpi-desync-split-pos=$(cat /etc/passwd)") !== false) { + warn("Failed: command substitution was not rejected\n"); + exit(1); +} + +// 3. Hostname and URL validation +if (!r.is_valid_hostname("youtube.com") || !r.is_valid_hostname("googlevideo.com") || !r.is_valid_hostname("1.1.1.1")) { + warn("Failed: valid hostname was rejected\n"); + exit(1); +} +if (r.is_valid_hostname("evil.com;rm") || r.is_valid_hostname("evil.com`id`") || r.is_valid_hostname("")) { + warn("Failed: malicious hostname was accepted\n"); + exit(1); +} +if (!r.is_valid_url("https://www.youtube.com/watch?v=dQw4w9WgXcQ")) { + warn("Failed: valid URL was rejected\n"); + exit(1); +} +if (r.is_valid_url("http://evil.com/`rm -rf /`") || r.is_valid_url("https://evil.com/;reboot") || r.is_valid_url("")) { + warn("Failed: malicious URL was accepted\n"); + exit(1); +} + +// 4. Tokenizer limit checks +let huge = ""; +for (let i = 0; i < 70; i++) huge += sprintf("--split-pos=%d ", i); +let tok = r.tokenize_strategy_args(huge); +if (tok.valid !== false) { + warn("Failed: token limit > 64 was not rejected\n"); + exit(1); +} + +print("Hardened runner and fail-closed validation checks passed.\n"); +' + +printf 'PASS: fuzzer_strategy_cli\n'