9router/src/mitm/config.js

74 lines
2.9 KiB
JavaScript
Raw Normal View History

2026-03-17 05:12:25 -04:00
// All intercepted domains + URL patterns per tool
2026-05-18 04:27:29 -04:00
const fs = require("fs");
const IS_DEV = process.env.NODE_ENV === "development";
2026-05-18 04:27:29 -04:00
// Resolve lsof absolute path — packaged apps / sudo secure_path may strip /usr/sbin from PATH
const LSOF_BIN = (() => {
if (process.platform === "win32") return null;
for (const p of ["/usr/sbin/lsof", "/usr/bin/lsof", "/sbin/lsof"]) {
try { fs.accessSync(p, fs.constants.X_OK); return p; } catch { /* try next */ }
}
return "lsof"; // last-resort fallback (depends on PATH)
})();
2026-03-17 05:12:25 -04:00
const TARGET_HOSTS = [
"daily-cloudcode-pa.googleapis.com",
"cloudcode-pa.googleapis.com",
"api.individual.githubcopilot.com",
"q.us-east-1.amazonaws.com",
"api2.cursor.sh",
2026-03-17 05:12:25 -04:00
];
const URL_PATTERNS = {
antigravity: [":generateContent", ":streamGenerateContent"],
copilot: ["/chat/completions", "/v1/messages", "/responses"],
kiro: ["/generateAssistantResponse"],
cursor: ["/BidiAppend", "/RunSSE", "/RunPoll", "/Run"],
2026-03-17 05:12:25 -04:00
};
// Synonym map: rawModel from request → canonical alias key in mitmAlias DB
const MODEL_SYNONYMS = {
antigravity: {
2026-05-26 00:03:47 -04:00
"gemini-default": "gemini-3.5-flash-low",
"gemini-3.1-pro-high": "gemini-pro-agent",
"gemini-3-pro-high": "gemini-pro-agent",
"gemini-3-pro-low": "gemini-3.1-pro-low",
},
};
// Pattern fallback: rawModel regex → canonical alias key (when exact + prefix match fail)
// Order matters: more specific patterns first. Catches AG renamed variants (e.g. gemini-pro-agent)
const MODEL_PATTERNS = {
antigravity: [
{ match: /flash.*low|low.*flash|flash.*medium|medium.*flash/i, alias: "gemini-3.5-flash-low" },
{ match: /flash.*agent|agent.*flash|flash/i, alias: "gemini-3-flash-agent" },
{ match: /pro.*low|low.*pro/i, alias: "gemini-3.1-pro-low" },
{ match: /gemini.*pro|pro.*gemini/i, alias: "gemini-pro-agent" },
{ match: /opus/i, alias: "claude-opus-4-6-thinking" },
{ match: /sonnet|claude/i, alias: "claude-sonnet-4-6" },
{ match: /gpt.*oss|oss/i, alias: "gpt-oss-120b-medium" },
],
};
2026-04-29 06:28:38 -04:00
// URL substrings whose request/response should NOT be dumped to file (telemetry, polling, empty)
const LOG_BLACKLIST_URL_PARTS = [
"recordCodeAssistMetrics",
"recordTrajectoryAnalytics",
"fetchAdminControls",
"listExperiments",
"fetchUserInfo",
];
2026-03-17 05:12:25 -04:00
function getToolForHost(host) {
const h = (host || "").split(":")[0];
if (h === "api.individual.githubcopilot.com") return "copilot";
if (h === "daily-cloudcode-pa.googleapis.com" || h === "cloudcode-pa.googleapis.com") return "antigravity";
if (h === "q.us-east-1.amazonaws.com") return "kiro";
if (h === "api2.cursor.sh") return "cursor";
2026-03-17 05:12:25 -04:00
return null;
}
2026-05-18 04:27:29 -04:00
module.exports = { IS_DEV, LSOF_BIN, TARGET_HOSTS, URL_PATTERNS, MODEL_SYNONYMS, MODEL_PATTERNS, LOG_BLACKLIST_URL_PARTS, getToolForHost };