auto-sync-0230
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V41_Disk_Monitor",
|
||||
"ts": "2026-04-22T02:00:02+02:00",
|
||||
"ts": "2026-04-22T02:30:02+02:00",
|
||||
"disk_pct": 84,
|
||||
"disk_free_gb": 25,
|
||||
"growth_per_day_gb": 1.5,
|
||||
|
||||
42
api/ambre-find-v8.php
Normal file
42
api/ambre-find-v8.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$c = @file_get_contents("/var/www/html/wevia.html");
|
||||
|
||||
$markers = ["AMBRE-V2", "AMBRE-V3", "AMBRE-V4", "AMBRE-V5", "AMBRE-V6", "AMBRE-V7", "AMBRE-V8", "AMBRE-V9"];
|
||||
$found = [];
|
||||
foreach ($markers as $m) {
|
||||
$pos = strpos($c, $m);
|
||||
if ($pos !== false) {
|
||||
$line = substr_count(substr($c, 0, $pos), "\n") + 1;
|
||||
$found[$m] = $line;
|
||||
}
|
||||
}
|
||||
|
||||
// Script #2 starts at 718, so relative line 853 = abs 1570
|
||||
// Script relative line depends on the script bloc
|
||||
// Find the big script content
|
||||
$pos = 0; $big_start = 0;
|
||||
while (($p = strpos($c, "<script>", $pos)) !== false) {
|
||||
$end = strpos($c, "</script>", $p);
|
||||
if ($end === false) break;
|
||||
if ($end - $p > 20000) { $big_start = substr_count(substr($c, 0, $p + 8), "\n") + 1; break; }
|
||||
$pos = $end + 9;
|
||||
}
|
||||
|
||||
// Find the script content starting from <script> tag
|
||||
// The line 853 reported by browser = line 853 OF THE SCRIPT CONTENT
|
||||
// Script content starts right after <script> on line $big_start
|
||||
// So abs line = $big_start + 853 - 1 (if first line of script is line 1)
|
||||
// But the <script> tag line may count differently. Usually browser counts starting AFTER <script>\n
|
||||
|
||||
$abs = $big_start + 853 - 1;
|
||||
$lines_arr = explode("\n", $c);
|
||||
$target_line = $lines_arr[$abs-1] ?? "";
|
||||
|
||||
echo json_encode([
|
||||
"markers_found" => $found,
|
||||
"big_script_start_line" => $big_start,
|
||||
"target_abs_line" => $abs,
|
||||
"target_line_content" => substr($target_line, 0, 300),
|
||||
"target_length" => strlen($target_line),
|
||||
], JSON_PRETTY_PRINT);
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"status": "passed",
|
||||
"failedTests": []
|
||||
}
|
||||
Binary file not shown.
@@ -1,131 +0,0 @@
|
||||
{
|
||||
"config": {
|
||||
"configFile": "/var/www/html/api/ambre-pw-tests/playwright.config.js",
|
||||
"rootDir": "/var/www/html/api/ambre-pw-tests/tests",
|
||||
"forbidOnly": false,
|
||||
"fullyParallel": false,
|
||||
"globalSetup": null,
|
||||
"globalTeardown": null,
|
||||
"globalTimeout": 0,
|
||||
"grep": {},
|
||||
"grepInvert": null,
|
||||
"maxFailures": 0,
|
||||
"metadata": {
|
||||
"actualWorkers": 1
|
||||
},
|
||||
"preserveOutput": "always",
|
||||
"projects": [
|
||||
{
|
||||
"outputDir": "/var/www/html/api/ambre-pw-tests/output",
|
||||
"repeatEach": 1,
|
||||
"retries": 0,
|
||||
"metadata": {
|
||||
"actualWorkers": 1
|
||||
},
|
||||
"id": "chromium",
|
||||
"name": "chromium",
|
||||
"testDir": "/var/www/html/api/ambre-pw-tests/tests",
|
||||
"testIgnore": [],
|
||||
"testMatch": [
|
||||
"**/*.@(spec|test).?(c|m)[jt]s?(x)"
|
||||
],
|
||||
"timeout": 420000
|
||||
}
|
||||
],
|
||||
"quiet": false,
|
||||
"reporter": [
|
||||
[
|
||||
"list",
|
||||
null
|
||||
],
|
||||
[
|
||||
"json",
|
||||
{
|
||||
"outputFile": "./output/results.json"
|
||||
}
|
||||
]
|
||||
],
|
||||
"reportSlowTests": {
|
||||
"max": 5,
|
||||
"threshold": 300000
|
||||
},
|
||||
"shard": null,
|
||||
"tags": [],
|
||||
"updateSnapshots": "missing",
|
||||
"updateSourceMethod": "patch",
|
||||
"version": "1.59.1",
|
||||
"workers": 1,
|
||||
"webServer": null
|
||||
},
|
||||
"suites": [
|
||||
{
|
||||
"title": "v31-smoke.spec.js",
|
||||
"file": "v31-smoke.spec.js",
|
||||
"column": 0,
|
||||
"line": 0,
|
||||
"specs": [
|
||||
{
|
||||
"title": "V31 · find EXACT regex syntax error",
|
||||
"ok": true,
|
||||
"tags": [],
|
||||
"tests": [
|
||||
{
|
||||
"timeout": 30000,
|
||||
"annotations": [],
|
||||
"expectedStatus": "passed",
|
||||
"projectId": "chromium",
|
||||
"projectName": "chromium",
|
||||
"results": [
|
||||
{
|
||||
"workerIndex": 0,
|
||||
"parallelIndex": 0,
|
||||
"status": "passed",
|
||||
"duration": 5320,
|
||||
"errors": [],
|
||||
"stdout": [
|
||||
{
|
||||
"text": "{\n \"errors\": [\n {\n \"t\": \"warning\",\n \"text\": \"Uncaught SyntaxError: Invalid regular expression: missing /\",\n \"url\": \"https://weval-consulting.com/wevia.html\",\n \"line\": 853,\n \"col\": 132\n },\n {\n \"t\": \"error\",\n \"text\": \"Failed to load resource: the server responded with a status of 503 ()\",\n \"url\": \"https://weval-consulting.com/api/sovereign/v1/chat/completions\",\n \"line\": 0,\n \"col\": 0\n },\n {\n \"t\": \"warning\",\n \"text\": \"[retry] /api/sovereign/v1/chat/completions got 503, retry #1\",\n \"url\": \"https://weval-consulting.com/wevia.html\",\n \"line\": 739,\n \"col\": 36\n }\n ],\n \"total\": 3\n}\n"
|
||||
},
|
||||
{
|
||||
"text": "STATE: {\"sendMsg\":\"undefined\",\"send\":\"function\",\"addMsg\":\"function\",\"ambreFetch\":\"undefined\"}\n"
|
||||
}
|
||||
],
|
||||
"stderr": [],
|
||||
"retry": 0,
|
||||
"startTime": "2026-04-22T00:24:07.618Z",
|
||||
"annotations": [],
|
||||
"attachments": [
|
||||
{
|
||||
"name": "screenshot",
|
||||
"contentType": "image/png",
|
||||
"path": "/var/www/html/api/ambre-pw-tests/output/v31-smoke-V31-·-find-EXACT-regex-syntax-error-chromium/test-finished-1.png"
|
||||
},
|
||||
{
|
||||
"name": "video",
|
||||
"contentType": "video/webm",
|
||||
"path": "/var/www/html/api/ambre-pw-tests/output/v31-smoke-V31-·-find-EXACT-regex-syntax-error-chromium/video.webm"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"status": "expected"
|
||||
}
|
||||
],
|
||||
"id": "dd5a5bbbc8f72596bc94-471549f6acb4a206db62",
|
||||
"file": "v31-smoke.spec.js",
|
||||
"line": 3,
|
||||
"column": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"stats": {
|
||||
"startTime": "2026-04-22T00:24:06.895Z",
|
||||
"duration": 6321.03,
|
||||
"expected": 1,
|
||||
"skipped": 0,
|
||||
"unexpected": 0,
|
||||
"flaky": 0
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
BIN
api/ambre-pw-tests/output/v34-01-hello.png
Normal file
BIN
api/ambre-pw-tests/output/v34-01-hello.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
@@ -1,28 +0,0 @@
|
||||
const { test } = require("@playwright/test");
|
||||
|
||||
test("V31 · find EXACT regex syntax error", async ({ page }) => {
|
||||
test.setTimeout(30000);
|
||||
|
||||
const errors = [];
|
||||
page.on("pageerror", e => errors.push({t:"pe", m: e.message, s: (e.stack||"").substring(0,1000)}));
|
||||
page.on("console", m => {
|
||||
if (m.type() !== "log" && m.type() !== "debug") {
|
||||
const l = m.location();
|
||||
errors.push({ t: m.type(), text: m.text().substring(0,200), url: l.url, line: l.lineNumber, col: l.columnNumber });
|
||||
}
|
||||
});
|
||||
|
||||
await page.goto("/wevia.html");
|
||||
await page.waitForTimeout(4000);
|
||||
|
||||
console.log(JSON.stringify({ errors, total: errors.length }, null, 2));
|
||||
|
||||
// Also probe via DOM
|
||||
const state = await page.evaluate(() => ({
|
||||
sendMsg: typeof window.sendMsg,
|
||||
send: typeof window.send,
|
||||
addMsg: typeof window.addMsg,
|
||||
ambreFetch: typeof window.__ambreFetch,
|
||||
}));
|
||||
console.log("STATE:", JSON.stringify(state));
|
||||
});
|
||||
68
api/ambre-pw-tests/tests/v34-after-fix.spec.js
Normal file
68
api/ambre-pw-tests/tests/v34-after-fix.spec.js
Normal file
@@ -0,0 +1,68 @@
|
||||
const { test } = require("@playwright/test");
|
||||
|
||||
test("V34 · AFTER SSE FIX · verify sendMsg works + send HI", async ({ page }) => {
|
||||
test.setTimeout(90000);
|
||||
const errors = [];
|
||||
page.on("pageerror", e => errors.push({t:"PE", m:e.message.substring(0,120)}));
|
||||
page.on("console", m => { if (m.type()!=="log" && m.type()!=="debug") errors.push({t:m.type(), text:m.text().substring(0,150)}); });
|
||||
|
||||
await page.goto("/wevia.html");
|
||||
await page.waitForLoadState("networkidle");
|
||||
await page.waitForTimeout(3500);
|
||||
|
||||
console.log("=== Errors ===");
|
||||
errors.forEach(e => console.log(" ", JSON.stringify(e)));
|
||||
|
||||
const state = await page.evaluate(() => ({
|
||||
sendMsg: typeof window.sendMsg,
|
||||
send: typeof window.send,
|
||||
addMsg: typeof window.addMsg,
|
||||
ambreFetch: typeof window.__ambreFetch,
|
||||
}));
|
||||
console.log("State:", JSON.stringify(state));
|
||||
|
||||
await page.screenshot({ path: "output/v34-00-load.png" });
|
||||
|
||||
// Try simple hello
|
||||
const input = page.locator("#msgInput");
|
||||
await input.click({force:true});
|
||||
await input.fill("bonjour");
|
||||
await page.waitForTimeout(400);
|
||||
await input.press("Enter");
|
||||
|
||||
const waitStart = Date.now();
|
||||
let reply = "";
|
||||
const beforeCount = await page.evaluate(() => document.querySelectorAll(".msg.assistant").length);
|
||||
|
||||
while (Date.now() - waitStart < 45000) {
|
||||
const s = await page.evaluate((bc) => {
|
||||
const a = document.querySelectorAll(".msg.assistant .bubble");
|
||||
return a.length > bc ? a[a.length-1].innerText : "";
|
||||
}, beforeCount);
|
||||
if (s && s.length > 30) { reply = s; break; }
|
||||
await page.waitForTimeout(1500);
|
||||
}
|
||||
console.log(`\n✓ Reply in ${((Date.now()-waitStart)/1000).toFixed(1)}s: ${reply.substring(0,200).replace(/\n/g,' ')}`);
|
||||
await page.screenshot({ path: "output/v34-01-hello.png" });
|
||||
|
||||
// Try calc
|
||||
await input.click({force:true});
|
||||
await page.keyboard.press("Control+A");
|
||||
await page.keyboard.press("Delete");
|
||||
await input.fill("calcule 42 * 3");
|
||||
await input.press("Enter");
|
||||
|
||||
const ws = Date.now();
|
||||
let calc = "";
|
||||
const bc2 = await page.evaluate(() => document.querySelectorAll(".msg.assistant").length);
|
||||
while (Date.now() - ws < 30000) {
|
||||
const s = await page.evaluate((bc) => {
|
||||
const a = document.querySelectorAll(".msg.assistant .bubble");
|
||||
return a.length > bc ? a[a.length-1].innerText : "";
|
||||
}, bc2);
|
||||
if (s && s.length > 10) { calc = s; break; }
|
||||
await page.waitForTimeout(1500);
|
||||
}
|
||||
console.log(`\n✓ Calc: ${calc.substring(0,150).replace(/\n/g,' ')}`);
|
||||
await page.screenshot({ path: "output/v34-02-calc.png" });
|
||||
});
|
||||
7
api/ambre-pw-v32-deploy.php
Normal file
7
api/ambre-pw-v32-deploy.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests/tests";
|
||||
$spec = base64_decode("Y29uc3QgeyB0ZXN0IH0gPSByZXF1aXJlKCJAcGxheXdyaWdodC90ZXN0Iik7Cgp0ZXN0KCJWMzIgwrcgZXh0cmFjdCBiaWcgc2NyaXB0IGFuZCB0cnkgZXZhbCB0byBnZXQgZXhhY3QgZXJyb3IiLCBhc3luYyAoeyBwYWdlIH0pID0+IHsKICB0ZXN0LnNldFRpbWVvdXQoNDUwMDApOwogIAogIGF3YWl0IHBhZ2UuZ290bygiL3dldmlhLmh0bWwiKTsKICBhd2FpdCBwYWdlLndhaXRGb3JUaW1lb3V0KDI1MDApOwogIAogIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhZ2UuZXZhbHVhdGUoYXN5bmMgKCkgPT4gewogICAgLy8gRmV0Y2ggdGhlIEhUTUwgYW5kIGV4dHJhY3QgdGhlIGJpZyBzY3JpcHQKICAgIGNvbnN0IHIgPSBhd2FpdCBmZXRjaCgnL3dldmlhLmh0bWwnKTsKICAgIGNvbnN0IHRleHQgPSBhd2FpdCByLnRleHQoKTsKICAgIAogICAgLy8gRmluZCBhbGwgPHNjcmlwdD4gYmxvY2tzCiAgICBjb25zdCBzY3JpcHRzID0gW107CiAgICBjb25zdCByZSA9IC88c2NyaXB0KD86XHNbXj5dKik/PihbXHNcU10qPyk8XC9zY3JpcHQ+L2c7CiAgICBsZXQgbTsKICAgIHdoaWxlICgobSA9IHJlLmV4ZWModGV4dCkpICE9PSBudWxsKSB7CiAgICAgIHNjcmlwdHMucHVzaCh7IGNvbnRlbnQ6IG1bMV0sIHN0YXJ0SWR4OiBtLmluZGV4IH0pOwogICAgfQogICAgCiAgICBjb25zdCBiaWcgPSBzY3JpcHRzLnJlZHVjZSgoYSwgYikgPT4gYS5jb250ZW50Lmxlbmd0aCA+IGIuY29udGVudC5sZW5ndGggPyBhIDogYik7CiAgICAKICAgIC8vIFRyeSBwYXJzZSB3aXRoIG5ldyBGdW5jdGlvbigpCiAgICB0cnkgewogICAgICBuZXcgRnVuY3Rpb24oYmlnLmNvbnRlbnQpOwogICAgICByZXR1cm4geyBwYXJzZV9vazogdHJ1ZSwgc2NyaXB0c19jb3VudDogc2NyaXB0cy5sZW5ndGgsIGJpZ19zaXplOiBiaWcuY29udGVudC5sZW5ndGggfTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgLy8gRXh0cmFjdCBsaW5lL2NvbCBmcm9tIHN0YWNrCiAgICAgIGNvbnN0IHN0YWNrID0gZS5zdGFjayB8fCAiIjsKICAgICAgY29uc3QgbXNnID0gZS5tZXNzYWdlIHx8ICIiOwogICAgICAKICAgICAgLy8gRmluZCB0aGUgcHJvYmxlbWF0aWMgc3Vic3RyaW5nCiAgICAgIC8vIFRoZSBlcnJvciBpcyBhdCBzb21lIHBvc2l0aW9uIC0gdHJ5IHRvIGJpc2VjdAogICAgICBsZXQgZXJyTGluZSA9IDAsIGVyckNvbCA9IDA7CiAgICAgIGNvbnN0IHN0YWNrTWF0Y2ggPSBzdGFjay5tYXRjaCgvOihcZCspOihcZCspLyk7CiAgICAgIGlmIChzdGFja01hdGNoKSB7IGVyckxpbmUgPSArc3RhY2tNYXRjaFsxXTsgZXJyQ29sID0gK3N0YWNrTWF0Y2hbMl07IH0KICAgICAgCiAgICAgIC8vIFNob3cgYSBjaHVuayBvZiB0aGUgYmlnIHNjcmlwdCBhcm91bmQgdGhlIGVycm9yCiAgICAgIGNvbnN0IGxpbmVzID0gYmlnLmNvbnRlbnQuc3BsaXQoJ1xuJyk7CiAgICAgIGNvbnN0IGNvbnRleHRTdGFydCA9IE1hdGgubWF4KDAsIGVyckxpbmUgLSAzKTsKICAgICAgY29uc3QgY29udGV4dEVuZCA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgZXJyTGluZSArIDMpOwogICAgICBjb25zdCBjdHggPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IGNvbnRleHRTdGFydDsgaSA8IGNvbnRleHRFbmQ7IGkrKykgewogICAgICAgIGN0eC5wdXNoKHsgbGluZTogaSsxLCBsZW46IGxpbmVzW2ldLmxlbmd0aCwgY29udGVudDogbGluZXNbaV0uc3Vic3RyaW5nKDAsIDMwMCkgfSk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiB7CiAgICAgICAgcGFyc2Vfb2s6IGZhbHNlLAogICAgICAgIGVycm9yOiBtc2csCiAgICAgICAgc3RhY2s6IHN0YWNrLnN1YnN0cmluZygwLCAyMDAwKSwKICAgICAgICBlcnJfbGluZTogZXJyTGluZSwKICAgICAgICBlcnJfY29sOiBlcnJDb2wsCiAgICAgICAgY29udGV4dDogY3R4LAogICAgICB9OwogICAgfQogIH0pOwogIAogIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMikpOwp9KTsK");
|
||||
foreach (glob("$base/*.spec.js") as $old) @unlink($old);
|
||||
$written = @file_put_contents("$base/v32-extract.spec.js", $spec);
|
||||
echo json_encode(["written" => $written]);
|
||||
7
api/ambre-pw-v33-deploy.php
Normal file
7
api/ambre-pw-v33-deploy.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests/tests";
|
||||
$spec = base64_decode("Y29uc3QgeyB0ZXN0IH0gPSByZXF1aXJlKCJAcGxheXdyaWdodC90ZXN0Iik7Cgp0ZXN0KCJWMzMgwrcgcGFyc2UgZWFjaCBpbmxpbmUgc2NyaXB0IGluZGl2aWR1YWxseSIsIGFzeW5jICh7IHBhZ2UgfSkgPT4gewogIHRlc3Quc2V0VGltZW91dCg2MDAwMCk7CiAgCiAgYXdhaXQgcGFnZS5nb3RvKCIvd2V2aWEuaHRtbCIpOwogIGF3YWl0IHBhZ2Uud2FpdEZvclRpbWVvdXQoMjUwMCk7CiAgCiAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHBhZ2UuZXZhbHVhdGUoYXN5bmMgKCkgPT4gewogICAgY29uc3QgciA9IGF3YWl0IGZldGNoKCcvd2V2aWEuaHRtbCcpOwogICAgY29uc3QgdGV4dCA9IGF3YWl0IHIudGV4dCgpOwogICAgY29uc3QgcmUgPSAvPHNjcmlwdCg/OlxzKFtePl0qKSk/PihbXHNcU10qPyk8XC9zY3JpcHQ+L2c7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBpZHggPSAwOwogICAgbGV0IG07CiAgICB3aGlsZSAoKG0gPSByZS5leGVjKHRleHQpKSAhPT0gbnVsbCkgewogICAgICBpZHgrKzsKICAgICAgY29uc3QgYXR0cnMgPSBtWzFdIHx8ICIiOwogICAgICBjb25zdCBjb250ZW50ID0gbVsyXSB8fCAiIjsKICAgICAgaWYgKGF0dHJzLmluY2x1ZGVzKCJzcmM9IikpIHsKICAgICAgICBvdXQucHVzaCh7IGlkeCwgdHlwZTogImV4dGVybmFsIiwgYXR0cnM6IGF0dHJzLnN1YnN0cmluZygwLDgwKSB9KTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoIWNvbnRlbnQudHJpbSgpKSB7CiAgICAgICAgb3V0LnB1c2goeyBpZHgsIHR5cGU6ICJlbXB0eSIgfSk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICBuZXcgRnVuY3Rpb24oY29udGVudCk7CiAgICAgICAgb3V0LnB1c2goeyBpZHgsIHR5cGU6ICJpbmxpbmUiLCBzaXplOiBjb250ZW50Lmxlbmd0aCwgcGFyc2Vfb2s6IHRydWUgfSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBvdXQucHVzaCh7IGlkeCwgdHlwZTogImlubGluZSIsIHNpemU6IGNvbnRlbnQubGVuZ3RoLCBwYXJzZV9vazogZmFsc2UsIGVycm9yOiBlLm1lc3NhZ2UsIGZpcnN0X2NoYXJzOiBjb250ZW50LnN1YnN0cmluZygwLCAyMDApIH0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0pOwogIAogIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3VsdHMsIG51bGwsIDIpKTsKfSk7Cg==");
|
||||
foreach (glob("$base/*.spec.js") as $old) @unlink($old);
|
||||
$written = @file_put_contents("$base/v33-each.spec.js", $spec);
|
||||
echo json_encode(["written" => $written]);
|
||||
7
api/ambre-pw-v34-deploy.php
Normal file
7
api/ambre-pw-v34-deploy.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
$base = "/var/www/html/api/ambre-pw-tests/tests";
|
||||
$spec = base64_decode("Y29uc3QgeyB0ZXN0IH0gPSByZXF1aXJlKCJAcGxheXdyaWdodC90ZXN0Iik7Cgp0ZXN0KCJWMzQgwrcgQUZURVIgU1NFIEZJWCDCtyB2ZXJpZnkgc2VuZE1zZyB3b3JrcyArIHNlbmQgSEkiLCBhc3luYyAoeyBwYWdlIH0pID0+IHsKICB0ZXN0LnNldFRpbWVvdXQoOTAwMDApOwogIGNvbnN0IGVycm9ycyA9IFtdOwogIHBhZ2Uub24oInBhZ2VlcnJvciIsIGUgPT4gZXJyb3JzLnB1c2goe3Q6IlBFIiwgbTplLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsMTIwKX0pKTsKICBwYWdlLm9uKCJjb25zb2xlIiwgbSA9PiB7IGlmIChtLnR5cGUoKSE9PSJsb2ciICYmIG0udHlwZSgpIT09ImRlYnVnIikgZXJyb3JzLnB1c2goe3Q6bS50eXBlKCksIHRleHQ6bS50ZXh0KCkuc3Vic3RyaW5nKDAsMTUwKX0pOyB9KTsKICAKICBhd2FpdCBwYWdlLmdvdG8oIi93ZXZpYS5odG1sIik7CiAgYXdhaXQgcGFnZS53YWl0Rm9yTG9hZFN0YXRlKCJuZXR3b3JraWRsZSIpOwogIGF3YWl0IHBhZ2Uud2FpdEZvclRpbWVvdXQoMzUwMCk7CiAgCiAgY29uc29sZS5sb2coIj09PSBFcnJvcnMgPT09Iik7CiAgZXJyb3JzLmZvckVhY2goZSA9PiBjb25zb2xlLmxvZygiICIsIEpTT04uc3RyaW5naWZ5KGUpKSk7CiAgCiAgY29uc3Qgc3RhdGUgPSBhd2FpdCBwYWdlLmV2YWx1YXRlKCgpID0+ICh7CiAgICBzZW5kTXNnOiB0eXBlb2Ygd2luZG93LnNlbmRNc2csCiAgICBzZW5kOiB0eXBlb2Ygd2luZG93LnNlbmQsCiAgICBhZGRNc2c6IHR5cGVvZiB3aW5kb3cuYWRkTXNnLAogICAgYW1icmVGZXRjaDogdHlwZW9mIHdpbmRvdy5fX2FtYnJlRmV0Y2gsCiAgfSkpOwogIGNvbnNvbGUubG9nKCJTdGF0ZToiLCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpOwogIAogIGF3YWl0IHBhZ2Uuc2NyZWVuc2hvdCh7IHBhdGg6ICJvdXRwdXQvdjM0LTAwLWxvYWQucG5nIiB9KTsKICAKICAvLyBUcnkgc2ltcGxlIGhlbGxvCiAgY29uc3QgaW5wdXQgPSBwYWdlLmxvY2F0b3IoIiNtc2dJbnB1dCIpOwogIGF3YWl0IGlucHV0LmNsaWNrKHtmb3JjZTp0cnVlfSk7CiAgYXdhaXQgaW5wdXQuZmlsbCgiYm9uam91ciIpOwogIGF3YWl0IHBhZ2Uud2FpdEZvclRpbWVvdXQoNDAwKTsKICBhd2FpdCBpbnB1dC5wcmVzcygiRW50ZXIiKTsKICAKICBjb25zdCB3YWl0U3RhcnQgPSBEYXRlLm5vdygpOwogIGxldCByZXBseSA9ICIiOwogIGNvbnN0IGJlZm9yZUNvdW50ID0gYXdhaXQgcGFnZS5ldmFsdWF0ZSgoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubXNnLmFzc2lzdGFudCIpLmxlbmd0aCk7CiAgCiAgd2hpbGUgKERhdGUubm93KCkgLSB3YWl0U3RhcnQgPCA0NTAwMCkgewogICAgY29uc3QgcyA9IGF3YWl0IHBhZ2UuZXZhbHVhdGUoKGJjKSA9PiB7CiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubXNnLmFzc2lzdGFudCAuYnViYmxlIik7CiAgICAgIHJldHVybiBhLmxlbmd0aCA+IGJjID8gYVthLmxlbmd0aC0xXS5pbm5lclRleHQgOiAiIjsKICAgIH0sIGJlZm9yZUNvdW50KTsKICAgIGlmIChzICYmIHMubGVuZ3RoID4gMzApIHsgcmVwbHkgPSBzOyBicmVhazsgfQogICAgYXdhaXQgcGFnZS53YWl0Rm9yVGltZW91dCgxNTAwKTsKICB9CiAgY29uc29sZS5sb2coYFxu4pyTIFJlcGx5IGluICR7KChEYXRlLm5vdygpLXdhaXRTdGFydCkvMTAwMCkudG9GaXhlZCgxKX1zOiAke3JlcGx5LnN1YnN0cmluZygwLDIwMCkucmVwbGFjZSgvXG4vZywnICcpfWApOwogIGF3YWl0IHBhZ2Uuc2NyZWVuc2hvdCh7IHBhdGg6ICJvdXRwdXQvdjM0LTAxLWhlbGxvLnBuZyIgfSk7CiAgCiAgLy8gVHJ5IGNhbGMKICBhd2FpdCBpbnB1dC5jbGljayh7Zm9yY2U6dHJ1ZX0pOwogIGF3YWl0IHBhZ2Uua2V5Ym9hcmQucHJlc3MoIkNvbnRyb2wrQSIpOwogIGF3YWl0IHBhZ2Uua2V5Ym9hcmQucHJlc3MoIkRlbGV0ZSIpOwogIGF3YWl0IGlucHV0LmZpbGwoImNhbGN1bGUgNDIgKiAzIik7CiAgYXdhaXQgaW5wdXQucHJlc3MoIkVudGVyIik7CiAgCiAgY29uc3Qgd3MgPSBEYXRlLm5vdygpOwogIGxldCBjYWxjID0gIiI7CiAgY29uc3QgYmMyID0gYXdhaXQgcGFnZS5ldmFsdWF0ZSgoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubXNnLmFzc2lzdGFudCIpLmxlbmd0aCk7CiAgd2hpbGUgKERhdGUubm93KCkgLSB3cyA8IDMwMDAwKSB7CiAgICBjb25zdCBzID0gYXdhaXQgcGFnZS5ldmFsdWF0ZSgoYmMpID0+IHsKICAgICAgY29uc3QgYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tc2cuYXNzaXN0YW50IC5idWJibGUiKTsKICAgICAgcmV0dXJuIGEubGVuZ3RoID4gYmMgPyBhW2EubGVuZ3RoLTFdLmlubmVyVGV4dCA6ICIiOwogICAgfSwgYmMyKTsKICAgIGlmIChzICYmIHMubGVuZ3RoID4gMTApIHsgY2FsYyA9IHM7IGJyZWFrOyB9CiAgICBhd2FpdCBwYWdlLndhaXRGb3JUaW1lb3V0KDE1MDApOwogIH0KICBjb25zb2xlLmxvZyhgXG7inJMgQ2FsYzogJHtjYWxjLnN1YnN0cmluZygwLDE1MCkucmVwbGFjZSgvXG4vZywnICcpfWApOwogIGF3YWl0IHBhZ2Uuc2NyZWVuc2hvdCh7IHBhdGg6ICJvdXRwdXQvdjM0LTAyLWNhbGMucG5nIiB9KTsKfSk7Cg==");
|
||||
foreach (glob("$base/*.spec.js") as $old) @unlink($old);
|
||||
$written = @file_put_contents("$base/v34-after-fix.spec.js", $spec);
|
||||
echo json_encode(["written" => $written]);
|
||||
51
api/ambre-sse-fix.php
Normal file
51
api/ambre-sse-fix.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
header("Content-Type: application/json");
|
||||
|
||||
$path = "/var/www/html/js/wevia-sse-override.js";
|
||||
if (!file_exists($path)) {
|
||||
// Try alternate location
|
||||
$alt = "/var/www/html/wevia-sse-override.js";
|
||||
if (file_exists($alt)) $path = $alt;
|
||||
}
|
||||
|
||||
$content = @file_get_contents($path);
|
||||
if (!$content) { echo json_encode(["error"=>"file not found", "path"=>$path]); exit; }
|
||||
$orig_size = strlen($content);
|
||||
|
||||
// The bug: regex literal /\n/g split by an actual newline
|
||||
// Replace with proper string-based approach
|
||||
$old = "last.innerHTML = fullText.replace(/\n/g, '<br>');";
|
||||
$new = "last.innerHTML = fullText.split(String.fromCharCode(10)).join('<br>');";
|
||||
|
||||
$pos = strpos($content, $old);
|
||||
if ($pos === false) {
|
||||
// Try alternate without leading spaces
|
||||
$old2 = "fullText.replace(/\n/g, '<br>');";
|
||||
$new2 = "fullText.split(String.fromCharCode(10)).join('<br>');";
|
||||
if (strpos($content, $old2) !== false) {
|
||||
$new_content = str_replace($old2, $new2, $content);
|
||||
} else {
|
||||
echo json_encode(["error"=>"pattern not found", "path"=>$path, "size"=>$orig_size, "snippet_around_47" => substr($content, 1800, 400)]);
|
||||
exit;
|
||||
}
|
||||
} else {
|
||||
$new_content = str_replace($old, $new, $content);
|
||||
}
|
||||
|
||||
// Backup + write
|
||||
$backup = "/opt/wevads/vault/wevia-sse-override.js.GOLD-" . date("Ymd-His");
|
||||
@copy($path, $backup);
|
||||
$wrote = @file_put_contents($path, $new_content);
|
||||
|
||||
// Lint
|
||||
$lint = @shell_exec("node --check $path 2>&1");
|
||||
|
||||
echo json_encode([
|
||||
"path" => $path,
|
||||
"orig_size" => $orig_size,
|
||||
"new_size" => strlen($new_content),
|
||||
"delta" => strlen($new_content) - $orig_size,
|
||||
"wrote" => $wrote,
|
||||
"backup" => basename($backup),
|
||||
"lint" => trim($lint) ?: "OK",
|
||||
]);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -135,5 +135,91 @@
|
||||
"categories": {
|
||||
"sap": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"ts": "2026-04-22T00:25:56+00:00",
|
||||
"q": "B2B SaaS conversion",
|
||||
"preset": null,
|
||||
"results": 10,
|
||||
"categories": {
|
||||
"general": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"ts": "2026-04-22T00:25:57+00:00",
|
||||
"q": "LinkedIn outbound",
|
||||
"preset": null,
|
||||
"results": 10,
|
||||
"categories": {
|
||||
"ai": 6,
|
||||
"general": 3,
|
||||
"lead": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"ts": "2026-04-22T00:25:57+00:00",
|
||||
"q": "pharma digital transformation",
|
||||
"preset": null,
|
||||
"results": 10,
|
||||
"categories": {
|
||||
"pharma": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"ts": "2026-04-22T00:25:58+00:00",
|
||||
"q": "SAP consulting",
|
||||
"preset": null,
|
||||
"results": 10,
|
||||
"categories": {
|
||||
"sap": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"ts": "2026-04-22T00:27:32+00:00",
|
||||
"q": "B2B SaaS conversion",
|
||||
"preset": null,
|
||||
"results": 10,
|
||||
"categories": {
|
||||
"general": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"ts": "2026-04-22T00:27:40+00:00",
|
||||
"q": "LinkedIn outbound",
|
||||
"preset": null,
|
||||
"results": 10,
|
||||
"categories": {
|
||||
"ai": 6,
|
||||
"general": 3,
|
||||
"lead": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"ts": "2026-04-22T00:27:48+00:00",
|
||||
"q": "pharma digital transformation",
|
||||
"preset": null,
|
||||
"results": 10,
|
||||
"categories": {
|
||||
"pharma": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"ts": "2026-04-22T00:27:56+00:00",
|
||||
"q": "SAP consulting",
|
||||
"preset": null,
|
||||
"results": 10,
|
||||
"categories": {
|
||||
"sap": 10
|
||||
}
|
||||
},
|
||||
{
|
||||
"ts": "2026-04-22T00:29:43+00:00",
|
||||
"q": "SaaS conversion",
|
||||
"preset": null,
|
||||
"results": 10,
|
||||
"categories": {
|
||||
"general": 9,
|
||||
"ai": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-22T00:24:41+00:00",
|
||||
"ts": "2026-04-22T00:27:41+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
|
||||
317
arsenal-master.html
Normal file
317
arsenal-master.html
Normal file
@@ -0,0 +1,317 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0,viewport-fit=cover">
|
||||
<title>Arsenal Master - 173 Ecrans</title>
|
||||
<style>
|
||||
:root{--bg:#060a14;--s:#0c1220;--s2:#111827;--b:#1e293b;--t:#e2e8f0;--d:#64748b;--cy:#22d3ee;--gn:#34d399;--am:#fbbf24;--rd:#f87171;--pu:#a78bfa;--bl:#60a5fa}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{background:var(--bg);color:var(--t);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;line-height:1.5}
|
||||
.hdr{background:var(--s);border-bottom:1px solid var(--b);padding:18px 24px;display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;z-index:10;backdrop-filter:blur(10px)}
|
||||
.hdr h1{font-size:22px;font-weight:700;background:linear-gradient(135deg,var(--cy),var(--pu));-webkit-background-clip:text;-webkit-text-fill-color:transparent}
|
||||
.hdr .meta{color:var(--d);font-size:11px;margin-top:4px}
|
||||
.btn{padding:8px 16px;border-radius:6px;border:1px solid var(--b);background:var(--s2);color:var(--t);text-decoration:none;font-size:11px;font-weight:600}
|
||||
.btn:hover{border-color:var(--cy)}
|
||||
.wrap{padding:24px;max-width:1600px;margin:0 auto}
|
||||
.kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:28px}
|
||||
.k{background:var(--s);border:1px solid var(--b);border-radius:10px;padding:18px;text-align:center}
|
||||
.k .n{font-family:'JetBrains Mono',monospace;font-size:28px;font-weight:700}
|
||||
.k .l{font-size:10px;text-transform:uppercase;color:var(--d);margin-top:6px;letter-spacing:.5px}
|
||||
.k.gn .n{color:var(--gn)}.k.am .n{color:var(--am)}.k.rd .n{color:var(--rd)}.k.cy .n{color:var(--cy)}.k.pu .n{color:var(--pu)}.k.bl .n{color:var(--bl)}
|
||||
.search{margin-bottom:22px}
|
||||
.search input{width:100%;padding:14px 18px;background:var(--s);border:1px solid var(--b);border-radius:10px;color:var(--t);font-size:14px}
|
||||
.search input:focus{outline:none;border-color:var(--cy)}
|
||||
.cat{margin-bottom:32px}
|
||||
.cat-title{font-size:14px;font-weight:700;margin-bottom:12px;display:flex;align-items:center;gap:10px}
|
||||
.cat-title .count{font-size:10px;font-weight:600;color:var(--d);background:var(--s2);padding:3px 10px;border-radius:12px}
|
||||
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:8px}
|
||||
.lnk{padding:11px 14px;background:var(--s);border:1px solid var(--b);border-radius:8px;color:var(--t);text-decoration:none;font-size:12px;display:flex;align-items:center;justify-content:space-between;transition:all .15s}
|
||||
.lnk:hover{border-color:var(--cy);background:var(--s2)}
|
||||
.lnk .badge{font-size:9px;padding:2px 7px;border-radius:10px;font-weight:600}
|
||||
.badge-honest{background:rgba(52,211,153,.15);color:var(--gn)}
|
||||
.badge-fake{background:rgba(248,113,113,.15);color:var(--rd)}
|
||||
.badge-broken{background:rgba(251,191,36,.15);color:var(--am)}
|
||||
</style></head><body>
|
||||
|
||||
<div class="hdr">
|
||||
<div>
|
||||
<h1>🎯 Arsenal Master</h1>
|
||||
<div class="meta">173 ecrans Arsenal · audit complet · doctrine #4 honnetete</div>
|
||||
</div>
|
||||
<div style="display:flex;gap:8px">
|
||||
<a href="/weval-technology-platform.html" class="btn">WTP ERP</a>
|
||||
<a href="/all-ia-hub.html" class="btn">IA Hub</a>
|
||||
<a href="/wevia-master.html" class="btn">WEVIA Master</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wrap">
|
||||
|
||||
<div class="kpi">
|
||||
<div class="k cy"><div class="n">173</div><div class="l">Total Ecrans</div></div>
|
||||
<div class="k gn"><div class="n">156</div><div class="l">Live / OK</div></div>
|
||||
<div class="k am"><div class="n">14</div><div class="l">Broken / Empty</div></div>
|
||||
<div class="k rd"><div class="n">3</div><div class="l">Fake (neutralized)</div></div>
|
||||
<div class="k pu"><div class="n">13</div><div class="l">Categories</div></div>
|
||||
<div class="k bl"><div class="n">100%</div><div class="l">Catalogue</div></div>
|
||||
</div>
|
||||
|
||||
<div class="search">
|
||||
<input type="text" id="q" placeholder="🔍 Rechercher un ecran (ex: brain, send, sentinel, ethica...)" onkeyup="filter()">
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">🤖 AI & Brain <span class="count">14</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/adversarial-sandbox.html" class="lnk" target="_blank" data-name="adversarial-sandbox.html">adversarial sandbox <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ai-copywriter.html" class="lnk" target="_blank" data-name="ai-copywriter.html">ai copywriter <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/brain-central.html" class="lnk" target="_blank" data-name="brain-central.html">brain central <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/brain-combo-discovery.html" class="lnk" target="_blank" data-name="brain-combo-discovery.html">brain combo discovery <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/brain-consent.html" class="lnk" target="_blank" data-name="brain-consent.html">brain consent <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/brain-drilldown.html" class="lnk" target="_blank" data-name="brain-drilldown.html">brain drilldown <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/brain-report.html" class="lnk" target="_blank" data-name="brain-report.html">brain report <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/brain-send.html" class="lnk" target="_blank" data-name="brain-send.html">brain send <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/brain-unified-send.html" class="lnk" target="_blank" data-name="brain-unified-send.html">brain unified send <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/deepfake-social.html" class="lnk" target="_blank" data-name="deepfake-social.html">deepfake social <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/gan-adversarial.html" class="lnk" target="_blank" data-name="gan-adversarial.html">gan adversarial <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ia-discover.html" class="lnk" target="_blank" data-name="ia-discover.html">ia discover <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/ia-provider-factory.html" class="lnk" target="_blank" data-name="ia-provider-factory.html">ia provider factory <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/neural-dom-mutator.html" class="lnk" target="_blank" data-name="neural-dom-mutator.html">neural dom mutator <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">📧 Email & MTA <span class="count">23</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/bounce-manager.html" class="lnk" target="_blank" data-name="bounce-manager.html">bounce manager <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/crm-send.html" class="lnk" target="_blank" data-name="crm-send.html">crm send <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/emailing-pipeline.html" class="lnk" target="_blank" data-name="emailing-pipeline.html">emailing pipeline <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/graph-ews-sender.html" class="lnk" target="_blank" data-name="graph-ews-sender.html">graph ews sender <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/inbox-tester.html" class="lnk" target="_blank" data-name="inbox-tester.html">inbox tester <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/isp-deliverability.html" class="lnk" target="_blank" data-name="isp-deliverability.html">isp deliverability <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/mail-personas.html" class="lnk" target="_blank" data-name="mail-personas.html">mail personas <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/mua-mimicry.html" class="lnk" target="_blank" data-name="mua-mimicry.html">mua mimicry <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/newsletter-extractor.html" class="lnk" target="_blank" data-name="newsletter-extractor.html">newsletter extractor <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/predictive-send-window.html" class="lnk" target="_blank" data-name="predictive-send-window.html">predictive send window <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/semi-auto-send.html" class="lnk" target="_blank" data-name="semi-auto-send.html">semi auto send <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/send-capacity-dashboard.html" class="lnk" target="_blank" data-name="send-capacity-dashboard.html">send capacity dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/send-data-factory.html" class="lnk" target="_blank" data-name="send-data-factory.html">send data factory <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/send-engines-dashboard.html" class="lnk" target="_blank" data-name="send-engines-dashboard.html">send engines dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/send-pipeline.html" class="lnk" target="_blank" data-name="send-pipeline.html">send pipeline <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/send-process-fix.html" class="lnk" target="_blank" data-name="send-process-fix.html">send process fix <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/send-process.html" class="lnk" target="_blank" data-name="send-process.html">send process <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/sms-send-engine.html" class="lnk" target="_blank" data-name="sms-send-engine.html">sms send engine <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/smtp-smuggler.html" class="lnk" target="_blank" data-name="smtp-smuggler.html">smtp smuggler <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/temp-email-factory.html" class="lnk" target="_blank" data-name="temp-email-factory.html">temp email factory <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/temp-email-manager.html" class="lnk" target="_blank" data-name="temp-email-manager.html">temp email manager <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/test-send-tracking-full.html" class="lnk" target="_blank" data-name="test-send-tracking-full.html">test send tracking full <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/warming-engine.html" class="lnk" target="_blank" data-name="warming-engine.html">warming engine <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">📊 Analytics & Tracking <span class="count">28</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/adherence-monitor.html" class="lnk" target="_blank" data-name="adherence-monitor.html">adherence monitor <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/advanced-dashboard.html" class="lnk" target="_blank" data-name="advanced-dashboard.html">advanced dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/affiliate-monitor.html" class="lnk" target="_blank" data-name="affiliate-monitor.html">affiliate monitor <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/auto-healing-dashboard.html" class="lnk" target="_blank" data-name="auto-healing-dashboard.html">auto healing dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/beast-monitor.html" class="lnk" target="_blank" data-name="beast-monitor.html">beast monitor <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/blacklist-monitor.html" class="lnk" target="_blank" data-name="blacklist-monitor.html">blacklist monitor <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ceo-dashboard.html" class="lnk" target="_blank" data-name="ceo-dashboard.html">ceo dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/cloud-cost-monitor.html" class="lnk" target="_blank" data-name="cloud-cost-monitor.html">cloud cost monitor <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/creative-performance.html" class="lnk" target="_blank" data-name="creative-performance.html">creative performance <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/dashboard-etat.html" class="lnk" target="_blank" data-name="dashboard-etat.html">dashboard etat <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/dashboard.html" class="lnk" target="_blank" data-name="dashboard.html">dashboard <span class="badge badge-honest">honest</span></a>
|
||||
<a href="/arsenal-proxy/ethica-dashboard.html" class="lnk" target="_blank" data-name="ethica-dashboard.html">ethica dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/guardian-dashboard.html" class="lnk" target="_blank" data-name="guardian-dashboard.html">guardian dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/kb-sync-monitor.html" class="lnk" target="_blank" data-name="kb-sync-monitor.html">kb sync monitor <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/performance-dashboard.html" class="lnk" target="_blank" data-name="performance-dashboard.html">performance dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/pipeline-monitor.html" class="lnk" target="_blank" data-name="pipeline-monitor.html">pipeline monitor <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/progression-dashboard.html" class="lnk" target="_blank" data-name="progression-dashboard.html">progression dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/reputation-monitor.html" class="lnk" target="_blank" data-name="reputation-monitor.html">reputation monitor <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/sentinel-dashboard.html" class="lnk" target="_blank" data-name="sentinel-dashboard.html">sentinel dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/sentinel-v5-dashboard.html" class="lnk" target="_blank" data-name="sentinel-v5-dashboard.html">sentinel v5 dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/system-dashboard.html" class="lnk" target="_blank" data-name="system-dashboard.html">system dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/test-metrics.html" class="lnk" target="_blank" data-name="test-metrics.html">test metrics <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/tracking-arsenal.html" class="lnk" target="_blank" data-name="tracking-arsenal.html">tracking arsenal <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/unified-tracking.html" class="lnk" target="_blank" data-name="unified-tracking.html">unified tracking <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/wevads-monitor-v3.html" class="lnk" target="_blank" data-name="wevads-monitor-v3.html">wevads monitor v3 <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/weval-mind-dashboard-enhanced.html" class="lnk" target="_blank" data-name="weval-mind-dashboard-enhanced.html">weval mind dashboard enhanced <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/weval-mind-dashboard.html" class="lnk" target="_blank" data-name="weval-mind-dashboard.html">weval mind dashboard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/world-map-live.html" class="lnk" target="_blank" data-name="world-map-live.html">world map live <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">🛡️ Security & Stealth <span class="count">9</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/behavioral-mimicry.html" class="lnk" target="_blank" data-name="behavioral-mimicry.html">behavioral mimicry <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/fingerprint-sync.html" class="lnk" target="_blank" data-name="fingerprint-sync.html">fingerprint sync <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ghost-network.html" class="lnk" target="_blank" data-name="ghost-network.html">ghost network <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ocr-noise-forge.html" class="lnk" target="_blank" data-name="ocr-noise-forge.html">ocr noise forge <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/pattern-shuffler.html" class="lnk" target="_blank" data-name="pattern-shuffler.html">pattern shuffler <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/sandbox-decoy.html" class="lnk" target="_blank" data-name="sandbox-decoy.html">sandbox decoy <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/session-hijacker.html" class="lnk" target="_blank" data-name="session-hijacker.html">session hijacker <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/shadow-responder.html" class="lnk" target="_blank" data-name="shadow-responder.html">shadow responder <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/trap-detector.html" class="lnk" target="_blank" data-name="trap-detector.html">trap detector <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">🎯 CRM & Pipeline <span class="count">8</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/campaign-manager.html" class="lnk" target="_blank" data-name="campaign-manager.html">campaign manager <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/crm-global.html" class="lnk" target="_blank" data-name="crm-global.html">crm global <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/crm.html" class="lnk" target="_blank" data-name="crm.html">crm <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/e2e-pipeline.html" class="lnk" target="_blank" data-name="e2e-pipeline.html">e2e pipeline <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/lookalike-engine.html" class="lnk" target="_blank" data-name="lookalike-engine.html">lookalike engine <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/offer-engine.html" class="lnk" target="_blank" data-name="offer-engine.html">offer engine <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/pipeline-admin.html" class="lnk" target="_blank" data-name="pipeline-admin.html">pipeline admin <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/profit-orchestrator.html" class="lnk" target="_blank" data-name="profit-orchestrator.html">profit orchestrator <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">💼 Ethica/HCP <span class="count">5</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/ethica-consent.html" class="lnk" target="_blank" data-name="ethica-consent.html">ethica consent <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ethica-crossvalidator.html" class="lnk" target="_blank" data-name="ethica-crossvalidator.html">ethica crossvalidator <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ethica-drill.html" class="lnk" target="_blank" data-name="ethica-drill.html">ethica drill <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ethica-hcp-manager.html" class="lnk" target="_blank" data-name="ethica-hcp-manager.html">ethica hcp manager <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ethica-sms.html" class="lnk" target="_blank" data-name="ethica-sms.html">ethica sms <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">🌐 Domains & DNS <span class="count">9</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/cloud-account-factory-extended.html" class="lnk" target="_blank" data-name="cloud-account-factory-extended.html">cloud account factory extended <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/cloud-account-factory.html" class="lnk" target="_blank" data-name="cloud-account-factory.html">cloud account factory <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/cloud-providers.html" class="lnk" target="_blank" data-name="cloud-providers.html">cloud providers <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/cloudflare-accounts.html" class="lnk" target="_blank" data-name="cloudflare-accounts.html">cloudflare accounts <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/cloudflare-manager.html" class="lnk" target="_blank" data-name="cloudflare-manager.html">cloudflare manager <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/cvc-vault.html" class="lnk" target="_blank" data-name="cvc-vault.html">cvc vault <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/domain-manager.html" class="lnk" target="_blank" data-name="domain-manager.html">domain manager <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/freedns-factory.html" class="lnk" target="_blank" data-name="freedns-factory.html">freedns factory <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/ptr-discovery.html" class="lnk" target="_blank" data-name="ptr-discovery.html">ptr discovery <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">📱 Ads & Social <span class="count">11</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/ads-commander.html" class="lnk" target="_blank" data-name="ads-commander.html">ads commander <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/facebook-ads.html" class="lnk" target="_blank" data-name="facebook-ads.html">facebook ads <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/google-ads.html" class="lnk" target="_blank" data-name="google-ads.html">google ads <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/linkedin-ads.html" class="lnk" target="_blank" data-name="linkedin-ads.html">linkedin ads <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/native-ads.html" class="lnk" target="_blank" data-name="native-ads.html">native ads <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/pinterest-ads.html" class="lnk" target="_blank" data-name="pinterest-ads.html">pinterest ads <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/snapchat-ads.html" class="lnk" target="_blank" data-name="snapchat-ads.html">snapchat ads <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/tiktok-ads.html" class="lnk" target="_blank" data-name="tiktok-ads.html">tiktok ads <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/twitter-ads.html" class="lnk" target="_blank" data-name="twitter-ads.html">twitter ads <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/wevads-architecture.html" class="lnk" target="_blank" data-name="wevads-architecture.html">wevads architecture <span class="badge badge-honest">honest</span></a>
|
||||
<a href="/arsenal-proxy/youtube-factory.html" class="lnk" target="_blank" data-name="youtube-factory.html">youtube factory <span class="badge badge-honest">honest</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">⚙️ Infra & System <span class="count">14</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/auto-healing-rotation.html" class="lnk" target="_blank" data-name="auto-healing-rotation.html">auto healing rotation <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/configuration-manager.html" class="lnk" target="_blank" data-name="configuration-manager.html">configuration manager <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/control-hub.html" class="lnk" target="_blank" data-name="control-hub.html">control hub <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/cron-control.html" class="lnk" target="_blank" data-name="cron-control.html">cron control <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/edge-routing.html" class="lnk" target="_blank" data-name="edge-routing.html">edge routing <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/financial-guard.html" class="lnk" target="_blank" data-name="financial-guard.html">financial guard <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/health.html" class="lnk" target="_blank" data-name="health.html">health <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/nexus-control.html" class="lnk" target="_blank" data-name="nexus-control.html">nexus control <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/self-healing.html" class="lnk" target="_blank" data-name="self-healing.html">self healing <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/sentinel-v4.html" class="lnk" target="_blank" data-name="sentinel-v4.html">sentinel v4 <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/sentinel-vault-controller.html" class="lnk" target="_blank" data-name="sentinel-vault-controller.html">sentinel vault controller <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/status.html" class="lnk" target="_blank" data-name="status.html">status <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/system-health.html" class="lnk" target="_blank" data-name="system-health.html">system health <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/winning-config.html" class="lnk" target="_blank" data-name="winning-config.html">winning config <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">🔧 Tools & Factory <span class="count">12</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/account-creator.html" class="lnk" target="_blank" data-name="account-creator.html">account creator <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/advanced-craping-factory.html" class="lnk" target="_blank" data-name="advanced-craping-factory.html">advanced craping factory <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/captcha-solver.html" class="lnk" target="_blank" data-name="captcha-solver.html">captcha solver <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/creative-factory.html" class="lnk" target="_blank" data-name="creative-factory.html">creative factory <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/dark-scout.html" class="lnk" target="_blank" data-name="dark-scout.html">dark scout <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/dark-scraper.html" class="lnk" target="_blank" data-name="dark-scraper.html">dark scraper <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/harvest-manager.html" class="lnk" target="_blank" data-name="harvest-manager.html">harvest manager <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/host-hunter.html" class="lnk" target="_blank" data-name="host-hunter.html">host hunter <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/phone-generator.html" class="lnk" target="_blank" data-name="phone-generator.html">phone generator <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/scout-intelligence.html" class="lnk" target="_blank" data-name="scout-intelligence.html">scout intelligence <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/scrapping-factory-enhanced.html" class="lnk" target="_blank" data-name="scrapping-factory-enhanced.html">scrapping factory enhanced <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/scrapping-factory.html" class="lnk" target="_blank" data-name="scrapping-factory.html">scrapping factory <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">🏢 Office 365 <span class="count">4</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/gsuite-accounts.html" class="lnk" target="_blank" data-name="gsuite-accounts.html">gsuite accounts <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/office-admins.html" class="lnk" target="_blank" data-name="office-admins.html">office admins <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/office-checker.html" class="lnk" target="_blank" data-name="office-checker.html">office checker <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/office-workflow.html" class="lnk" target="_blank" data-name="office-workflow.html">office workflow <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">📡 SMS & Tels <span class="count">1</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/sms-templates.html" class="lnk" target="_blank" data-name="sms-templates.html">sms templates <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cat">
|
||||
<div class="cat-title">🎨 Other <span class="count">35</span></div>
|
||||
<div class="grid">
|
||||
<a href="/arsenal-proxy/api-key-pool.html" class="lnk" target="_blank" data-name="api-key-pool.html">api key pool <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/aqualink.html" class="lnk" target="_blank" data-name="aqualink.html">aqualink <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/arbitrage-bot.html" class="lnk" target="_blank" data-name="arbitrage-bot.html">arbitrage bot <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/arsenal-widget.html" class="lnk" target="_blank" data-name="arsenal-widget.html">arsenal widget <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/auto-mirroring.html" class="lnk" target="_blank" data-name="auto-mirroring.html">auto mirroring <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/auto-supply.html" class="lnk" target="_blank" data-name="auto-supply.html">auto supply <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/bpms-command-center.html" class="lnk" target="_blank" data-name="bpms-command-center.html">bpms command center <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/bpms-gare.html" class="lnk" target="_blank" data-name="bpms-gare.html">bpms gare <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/chef-boss.html" class="lnk" target="_blank" data-name="chef-boss.html">chef boss <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/command-center.html" class="lnk" target="_blank" data-name="command-center.html">command center <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/cross-channel-sync.html" class="lnk" target="_blank" data-name="cross-channel-sync.html">cross channel sync <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/dark-data.html" class="lnk" target="_blank" data-name="dark-data.html">dark data <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/dark-matrix.html" class="lnk" target="_blank" data-name="dark-matrix.html">dark matrix <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/dark-slot.html" class="lnk" target="_blank" data-name="dark-slot.html">dark slot <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/data-manager.html" class="lnk" target="_blank" data-name="data-manager.html">data manager <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/drill-inject.html" class="lnk" target="_blank" data-name="drill-inject.html">drill inject <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/global-vision.html" class="lnk" target="_blank" data-name="global-vision.html">global vision <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/index.html" class="lnk" target="_blank" data-name="index.html">index <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/key-manager.html" class="lnk" target="_blank" data-name="key-manager.html">key manager <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/login-modern.html" class="lnk" target="_blank" data-name="login-modern.html">login modern <span class="badge badge-broken">empty</span></a>
|
||||
<a href="/arsenal-proxy/menu-twig.html" class="lnk" target="_blank" data-name="menu-twig.html">menu twig <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/n8n-bridge.html" class="lnk" target="_blank" data-name="n8n-bridge.html">n8n bridge <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/operations-overview.html" class="lnk" target="_blank" data-name="operations-overview.html">operations overview <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/orchestrator-central.html" class="lnk" target="_blank" data-name="orchestrator-central.html">orchestrator central <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/postback-setup.html" class="lnk" target="_blank" data-name="postback-setup.html">postback setup <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/provider-onboarding.html" class="lnk" target="_blank" data-name="provider-onboarding.html">provider onboarding <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/seed-cleaner.html" class="lnk" target="_blank" data-name="seed-cleaner.html">seed cleaner <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/sidebar-admin.html" class="lnk" target="_blank" data-name="sidebar-admin.html">sidebar admin <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/smart-failover.html" class="lnk" target="_blank" data-name="smart-failover.html">smart failover <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/smart-report.html" class="lnk" target="_blank" data-name="smart-report.html">smart report <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/supply-chain.html" class="lnk" target="_blank" data-name="supply-chain.html">supply chain <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/test-integration.html" class="lnk" target="_blank" data-name="test-integration.html">test integration <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/test-results-live.html" class="lnk" target="_blank" data-name="test-results-live.html">test results live <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/universal-drill.html" class="lnk" target="_blank" data-name="universal-drill.html">universal drill <span class="badge badge-honest">live</span></a>
|
||||
<a href="/arsenal-proxy/workflow-visual.html" class="lnk" target="_blank" data-name="workflow-visual.html">workflow visual <span class="badge badge-honest">live</span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function filter(){
|
||||
var q = document.getElementById('q').value.toLowerCase();
|
||||
document.querySelectorAll('.lnk').forEach(function(el){
|
||||
var n = el.dataset.name.toLowerCase();
|
||||
el.style.display = n.includes(q) ? '' : 'none';
|
||||
});
|
||||
document.querySelectorAll('.cat').forEach(function(c){
|
||||
var visible = Array.from(c.querySelectorAll('.lnk')).some(function(l){ return l.style.display !== 'none'; });
|
||||
c.style.display = visible ? '' : 'none';
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body></html>
|
||||
@@ -45,8 +45,7 @@
|
||||
var thinkEls = document.querySelectorAll('.think-stream');
|
||||
if (thinkEls.length > 0) {
|
||||
var last = thinkEls[thinkEls.length - 1];
|
||||
last.innerHTML = fullText.replace(/
|
||||
/g, '<br>');
|
||||
last.innerHTML = fullText.split(String.fromCharCode(10)).join('<br>');
|
||||
}
|
||||
}
|
||||
if (d.choices && d.choices[0] && d.choices[0].message) {
|
||||
|
||||
Reference in New Issue
Block a user