@oeronteros-1/opencode-orchestra 1.0.34 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -6
- package/dashboard-dist/assets/index-D1JhVhPt.css +2 -0
- package/dashboard-dist/assets/index-YMCkRwnG.js +132 -0
- package/dashboard-dist/index.html +2 -2
- package/dist/agents/editor.d.ts +1 -1
- package/dist/agents/editor.js +2 -1
- package/dist/agents/editor.js.map +1 -1
- package/dist/agents/integrator.d.ts +1 -1
- package/dist/agents/integrator.js +2 -1
- package/dist/agents/integrator.js.map +1 -1
- package/dist/agents/lead.d.ts +1 -1
- package/dist/agents/lead.js +5 -8
- package/dist/agents/lead.js.map +1 -1
- package/dist/agents/types.d.ts +6 -0
- package/dist/agents/types.js +51 -1
- package/dist/agents/types.js.map +1 -1
- package/dist/agents/workers.d.ts +1 -1
- package/dist/agents/workers.js +7 -9
- package/dist/agents/workers.js.map +1 -1
- package/dist/cli.js +94 -22
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/server.js +52 -12
- package/dist/dashboard/server.js.map +1 -1
- package/dist/diagnostics/completion.js +9 -1
- package/dist/diagnostics/completion.js.map +1 -1
- package/dist/diagnostics/doctor.js +2 -2
- package/dist/diagnostics/doctor.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/commands.d.ts +5 -0
- package/dist/mcp/commands.js +21 -0
- package/dist/mcp/commands.js.map +1 -0
- package/dist/mcp/config-smoke.d.ts +21 -0
- package/dist/mcp/config-smoke.js +95 -0
- package/dist/mcp/config-smoke.js.map +1 -0
- package/dist/mcp/smoke.d.ts +23 -0
- package/dist/mcp/smoke.js +148 -0
- package/dist/mcp/smoke.js.map +1 -0
- package/dist/plugin-status.js +13 -7
- package/dist/plugin-status.js.map +1 -1
- package/dist/telemetry/ledger.d.ts +24 -0
- package/dist/telemetry/ledger.js +48 -0
- package/dist/telemetry/ledger.js.map +1 -1
- package/package.json +4 -2
- package/prompts/editor.md +4 -3
- package/prompts/lead.md +4 -1
- package/prompts/repo.md +1 -1
- package/prompts/tests.md +1 -0
- package/dashboard-dist/assets/index-CbNmtkWh.css +0 -2
- package/dashboard-dist/assets/index-DTImj8fu.js +0 -132
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { quoteLineForCmd, safeForCmdRetry } from "../spawn.js";
|
|
3
|
+
function bounded(value, limit = 400) {
|
|
4
|
+
return String(value ?? "").replace(/[\r\n]+/g, " ").replace(/\s+/g, " ").trim().slice(0, limit);
|
|
5
|
+
}
|
|
6
|
+
function startProcess(command, cwd) {
|
|
7
|
+
const [executable, ...args] = command;
|
|
8
|
+
if (!executable)
|
|
9
|
+
throw new Error("MCP command is empty");
|
|
10
|
+
if (process.platform === "win32" && /\.(cmd|bat)$/i.test(executable)) {
|
|
11
|
+
if (!safeForCmdRetry(command))
|
|
12
|
+
throw new Error("MCP command contains characters unsafe for cmd.exe");
|
|
13
|
+
return spawn(process.env.COMSPEC ?? "cmd.exe", ["/d", "/s", "/c", quoteLineForCmd(command)], {
|
|
14
|
+
...(cwd ? { cwd } : {}),
|
|
15
|
+
windowsHide: true,
|
|
16
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return spawn(executable, args, {
|
|
20
|
+
...(cwd ? { cwd } : {}),
|
|
21
|
+
windowsHide: true,
|
|
22
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Start a stdio MCP server, complete initialize + tools/list, and optionally
|
|
27
|
+
* execute one harmless smoke call. This validates the real protocol surface,
|
|
28
|
+
* not merely that the launcher prints --help.
|
|
29
|
+
*/
|
|
30
|
+
export async function smokeMcp(options) {
|
|
31
|
+
const startedAt = Date.now();
|
|
32
|
+
const timeoutMs = options.timeoutMs ?? 45_000;
|
|
33
|
+
let child;
|
|
34
|
+
try {
|
|
35
|
+
child = startProcess(options.command, options.cwd);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
return { ok: false, durationMs: Date.now() - startedAt, tools: [], error: bounded(error) };
|
|
39
|
+
}
|
|
40
|
+
return await new Promise((resolve) => {
|
|
41
|
+
let settled = false;
|
|
42
|
+
let resolved = false;
|
|
43
|
+
let stdout = "";
|
|
44
|
+
let stderr = "";
|
|
45
|
+
let tools = [];
|
|
46
|
+
let timer;
|
|
47
|
+
const finish = (result) => {
|
|
48
|
+
if (settled)
|
|
49
|
+
return;
|
|
50
|
+
settled = true;
|
|
51
|
+
clearTimeout(timer);
|
|
52
|
+
child.stdin.end();
|
|
53
|
+
const finalResult = { ...result, durationMs: Date.now() - startedAt, tools: result.tools ?? tools };
|
|
54
|
+
const complete = () => {
|
|
55
|
+
if (resolved)
|
|
56
|
+
return;
|
|
57
|
+
resolved = true;
|
|
58
|
+
resolve(finalResult);
|
|
59
|
+
};
|
|
60
|
+
if (child.exitCode !== null) {
|
|
61
|
+
complete();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
child.once("exit", complete);
|
|
65
|
+
// Closing stdin normally stops stdio MCP servers. Escalate only if a
|
|
66
|
+
// server ignores EOF, while still bounding how long callers wait.
|
|
67
|
+
const terminate = setTimeout(() => child.kill(), 500);
|
|
68
|
+
terminate.unref?.();
|
|
69
|
+
const hardStop = setTimeout(complete, 5_000);
|
|
70
|
+
hardStop.unref?.();
|
|
71
|
+
};
|
|
72
|
+
const send = (message) => {
|
|
73
|
+
child.stdin.write(`${JSON.stringify(message)}\n`);
|
|
74
|
+
};
|
|
75
|
+
const handleMessage = (message) => {
|
|
76
|
+
if (message.error !== undefined) {
|
|
77
|
+
finish({ ok: false, error: bounded(JSON.stringify(message.error)) });
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (message.id === 1) {
|
|
81
|
+
send({ jsonrpc: "2.0", method: "notifications/initialized" });
|
|
82
|
+
send({ jsonrpc: "2.0", id: 2, method: "tools/list", params: {} });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (message.id === 2) {
|
|
86
|
+
const result = message.result;
|
|
87
|
+
tools = (result?.tools ?? []).map((tool) => tool.name).filter((name) => typeof name === "string");
|
|
88
|
+
if (!options.call) {
|
|
89
|
+
finish({ ok: true });
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (!tools.includes(options.call.tool)) {
|
|
93
|
+
finish({ ok: false, error: `tool not found: ${options.call.tool}` });
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
send({ jsonrpc: "2.0", id: 3, method: "tools/call", params: { name: options.call.tool, arguments: options.call.arguments } });
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (message.id === 3) {
|
|
100
|
+
const result = message.result;
|
|
101
|
+
const callOutput = (result?.content ?? []).map((item) => typeof item.text === "string" ? item.text : "").join("\n");
|
|
102
|
+
if (result?.isError)
|
|
103
|
+
finish({ ok: false, callOutput: bounded(callOutput), error: bounded(callOutput || "MCP tool returned an error") });
|
|
104
|
+
else
|
|
105
|
+
finish({ ok: true, callOutput: bounded(callOutput) });
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const consume = () => {
|
|
109
|
+
while (true) {
|
|
110
|
+
const newline = stdout.indexOf("\n");
|
|
111
|
+
if (newline < 0)
|
|
112
|
+
return;
|
|
113
|
+
const line = stdout.slice(0, newline).trim();
|
|
114
|
+
stdout = stdout.slice(newline + 1);
|
|
115
|
+
if (!line)
|
|
116
|
+
continue;
|
|
117
|
+
try {
|
|
118
|
+
handleMessage(JSON.parse(line));
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Ignore non-protocol stdout and continue until timeout or response.
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
child.stdout.setEncoding("utf8");
|
|
126
|
+
child.stderr.setEncoding("utf8");
|
|
127
|
+
child.stdout.on("data", (chunk) => { stdout += chunk; consume(); });
|
|
128
|
+
child.stderr.on("data", (chunk) => { stderr = `${stderr}${chunk}`.slice(-2_000); });
|
|
129
|
+
child.on("error", (error) => finish({ ok: false, error: bounded(error) }));
|
|
130
|
+
child.on("exit", (code) => {
|
|
131
|
+
if (!settled)
|
|
132
|
+
finish({ ok: false, error: bounded(stderr || `MCP server exited with ${code ?? "unknown"}`) });
|
|
133
|
+
});
|
|
134
|
+
timer = setTimeout(() => finish({ ok: false, error: bounded(stderr || `MCP smoke test timed out after ${timeoutMs}ms`) }), timeoutMs);
|
|
135
|
+
timer.unref?.();
|
|
136
|
+
send({
|
|
137
|
+
jsonrpc: "2.0",
|
|
138
|
+
id: 1,
|
|
139
|
+
method: "initialize",
|
|
140
|
+
params: {
|
|
141
|
+
protocolVersion: "2024-11-05",
|
|
142
|
+
capabilities: {},
|
|
143
|
+
clientInfo: { name: "opencode-orchestra", version: "1" },
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=smoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smoke.js","sourceRoot":"","sources":["../../src/mcp/smoke.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin-status.js
CHANGED
|
@@ -58,13 +58,19 @@ export async function detectMcpPresence(configDirectory = openCodeConfigDirector
|
|
|
58
58
|
const mcp = typeof root.mcp === "object" && root.mcp !== null && !Array.isArray(root.mcp)
|
|
59
59
|
? root.mcp
|
|
60
60
|
: {};
|
|
61
|
+
const enabled = (name) => {
|
|
62
|
+
const entry = mcp[name];
|
|
63
|
+
return typeof entry === "object" && entry !== null && !Array.isArray(entry)
|
|
64
|
+
? entry.enabled !== false
|
|
65
|
+
: entry !== undefined;
|
|
66
|
+
};
|
|
61
67
|
return {
|
|
62
|
-
context7: "context7"
|
|
63
|
-
codebaseMemory: "codebase-memory"
|
|
64
|
-
memoryGraph: "memorygraph"
|
|
65
|
-
playwright: "playwright"
|
|
66
|
-
git: "git"
|
|
67
|
-
astGrep: "ast-grep"
|
|
68
|
+
context7: enabled("context7"),
|
|
69
|
+
codebaseMemory: enabled("codebase-memory"),
|
|
70
|
+
memoryGraph: enabled("memorygraph"),
|
|
71
|
+
playwright: enabled("playwright"),
|
|
72
|
+
git: enabled("git"),
|
|
73
|
+
astGrep: enabled("ast-grep"),
|
|
68
74
|
};
|
|
69
75
|
}
|
|
70
76
|
/**
|
|
@@ -73,7 +79,7 @@ export async function detectMcpPresence(configDirectory = openCodeConfigDirector
|
|
|
73
79
|
export async function formatPluginStatus(status) {
|
|
74
80
|
const mcp = Object.entries({ ...status.mcp })
|
|
75
81
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
76
|
-
.map(([name, present]) => ` ${name.padEnd(24)} ${present ? "configured" : "not configured"}`)
|
|
82
|
+
.map(([name, present]) => ` ${name.padEnd(24)} ${present ? "configured and enabled" : "disabled or not configured"}`)
|
|
77
83
|
.join("\n");
|
|
78
84
|
return [
|
|
79
85
|
"OpenCode Orchestra plugin status",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-status.js","sourceRoot":"","sources":["../src/plugin-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,MAAM,CAAC,MAAM,YAAY,GAAG,kCAAkC,CAAA;AAE9D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAyB,CAAA;QAC9E,IAAI,GAAG,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,OAAO,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAoBD,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,QAAgB;IACtD,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAA;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,eAAuB;IACnD,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;QAClD,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;YACjC,OAAO,SAAS,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAA;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAA;IACpF,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAA;AACR,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,kBAA0B,uBAAuB,EAAE;IACzF,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,MAAM,cAAc,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IACtF,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QACvF,CAAC,CAAE,IAAI,CAAC,GAA+B;QACvC,CAAC,CAAC,EAAE,CAAA;IACN,OAAO;QACL,QAAQ,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"plugin-status.js","sourceRoot":"","sources":["../src/plugin-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,27 @@ export interface ReliabilityEvent {
|
|
|
40
40
|
nextModel?: string;
|
|
41
41
|
at: number;
|
|
42
42
|
}
|
|
43
|
+
/** Aggregate MCP effectiveness metrics; raw arguments and outputs are never persisted. */
|
|
44
|
+
export interface McpUsage {
|
|
45
|
+
calls: number;
|
|
46
|
+
successes: number;
|
|
47
|
+
failures: number;
|
|
48
|
+
retries: number;
|
|
49
|
+
totalLatencyMs: number;
|
|
50
|
+
maxLatencyMs: number;
|
|
51
|
+
outputChars: number;
|
|
52
|
+
lastUsedAt: number;
|
|
53
|
+
lastOutcome: "success" | "failure";
|
|
54
|
+
}
|
|
55
|
+
export interface McpCallMetric {
|
|
56
|
+
server: string;
|
|
57
|
+
tool: string;
|
|
58
|
+
durationMs: number;
|
|
59
|
+
success: boolean;
|
|
60
|
+
outputChars?: number;
|
|
61
|
+
retry?: boolean;
|
|
62
|
+
at?: number;
|
|
63
|
+
}
|
|
43
64
|
export interface SessionLedger {
|
|
44
65
|
profile?: ProfileName;
|
|
45
66
|
agents: Record<string, number>;
|
|
@@ -54,6 +75,7 @@ export interface SessionLedger {
|
|
|
54
75
|
consensusNotes?: string;
|
|
55
76
|
messages: Record<string, MessageUsage>;
|
|
56
77
|
reliability?: ReliabilityEvent[];
|
|
78
|
+
mcp: Record<string, McpUsage>;
|
|
57
79
|
}
|
|
58
80
|
export interface LedgerState {
|
|
59
81
|
version: 2;
|
|
@@ -128,6 +150,8 @@ export declare class Ledger {
|
|
|
128
150
|
* error text) and the session's event list is capped.
|
|
129
151
|
*/
|
|
130
152
|
recordReliabilityEvent(sessionID: string, event: ReliabilityEvent): Promise<void>;
|
|
153
|
+
/** Record one completed MCP call without retaining tool arguments or output. */
|
|
154
|
+
recordMcpCall(sessionID: string, metric: McpCallMetric): Promise<void>;
|
|
131
155
|
/**
|
|
132
156
|
* Opt-in debug text. No-op unless the ledger was constructed with
|
|
133
157
|
* `storeTexts`, so prompts and replies are never persisted by default.
|
package/dist/telemetry/ledger.js
CHANGED
|
@@ -17,6 +17,7 @@ function emptySession() {
|
|
|
17
17
|
unknownPriceCalls: 0,
|
|
18
18
|
paidCallsUsed: 0,
|
|
19
19
|
messages: {},
|
|
20
|
+
mcp: {},
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
23
|
export function emptyLedgerState() {
|
|
@@ -128,6 +129,7 @@ function upgradeState(input) {
|
|
|
128
129
|
const sessions = candidate.sessions ?? {};
|
|
129
130
|
for (const session of Object.values(sessions)) {
|
|
130
131
|
session.messages ??= {};
|
|
132
|
+
session.mcp ??= {};
|
|
131
133
|
session.agents ??= {};
|
|
132
134
|
session.premiumEscalations ??= 0;
|
|
133
135
|
session.estimatedPaidUsage ??= 0;
|
|
@@ -349,6 +351,40 @@ export class Ledger {
|
|
|
349
351
|
this.appendReliabilityEvent(session, event);
|
|
350
352
|
});
|
|
351
353
|
}
|
|
354
|
+
/** Record one completed MCP call without retaining tool arguments or output. */
|
|
355
|
+
async recordMcpCall(sessionID, metric) {
|
|
356
|
+
const server = boundedString(metric.server);
|
|
357
|
+
if (!server)
|
|
358
|
+
return;
|
|
359
|
+
const durationMs = Math.max(0, Math.round(Number.isFinite(metric.durationMs) ? metric.durationMs : 0));
|
|
360
|
+
const outputChars = Math.max(0, Math.round(Number.isFinite(metric.outputChars) ? (metric.outputChars ?? 0) : 0));
|
|
361
|
+
await this.mutate((state) => {
|
|
362
|
+
const session = (state.sessions[sessionID] ??= emptySession());
|
|
363
|
+
const usage = (session.mcp[server] ??= {
|
|
364
|
+
calls: 0,
|
|
365
|
+
successes: 0,
|
|
366
|
+
failures: 0,
|
|
367
|
+
retries: 0,
|
|
368
|
+
totalLatencyMs: 0,
|
|
369
|
+
maxLatencyMs: 0,
|
|
370
|
+
outputChars: 0,
|
|
371
|
+
lastUsedAt: 0,
|
|
372
|
+
lastOutcome: "success",
|
|
373
|
+
});
|
|
374
|
+
usage.calls += 1;
|
|
375
|
+
if (metric.success)
|
|
376
|
+
usage.successes += 1;
|
|
377
|
+
else
|
|
378
|
+
usage.failures += 1;
|
|
379
|
+
if (metric.retry)
|
|
380
|
+
usage.retries += 1;
|
|
381
|
+
usage.totalLatencyMs += durationMs;
|
|
382
|
+
usage.maxLatencyMs = Math.max(usage.maxLatencyMs, durationMs);
|
|
383
|
+
usage.outputChars += outputChars;
|
|
384
|
+
usage.lastUsedAt = metric.at ?? Date.now();
|
|
385
|
+
usage.lastOutcome = metric.success ? "success" : "failure";
|
|
386
|
+
});
|
|
387
|
+
}
|
|
352
388
|
/**
|
|
353
389
|
* Opt-in debug text. No-op unless the ledger was constructed with
|
|
354
390
|
* `storeTexts`, so prompts and replies are never persisted by default.
|
|
@@ -380,6 +416,15 @@ export class Ledger {
|
|
|
380
416
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
381
417
|
.map(([name, calls]) => ` ${name.padEnd(24)} ${calls}`)
|
|
382
418
|
.join("\n");
|
|
419
|
+
const mcp = Object.entries(session.mcp)
|
|
420
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
421
|
+
.map(([name, usage]) => {
|
|
422
|
+
const successRate = usage.calls > 0 ? Math.round((usage.successes / usage.calls) * 100) : 0;
|
|
423
|
+
const averageLatency = usage.calls > 0 ? Math.round(usage.totalLatencyMs / usage.calls) : 0;
|
|
424
|
+
const estimatedOutputTokens = Math.ceil(usage.outputChars / 4);
|
|
425
|
+
return ` ${name.padEnd(20)} ${usage.calls} calls, ${successRate}% ok, ${averageLatency}ms avg, ~${estimatedOutputTokens} output tokens, ${usage.retries} retries`;
|
|
426
|
+
})
|
|
427
|
+
.join("\n");
|
|
383
428
|
return [
|
|
384
429
|
"OpenCode Orchestra status",
|
|
385
430
|
"",
|
|
@@ -388,6 +433,9 @@ export class Ledger {
|
|
|
388
433
|
"agents:",
|
|
389
434
|
agents || " no recorded calls",
|
|
390
435
|
"",
|
|
436
|
+
"MCP:",
|
|
437
|
+
mcp || " no recorded calls",
|
|
438
|
+
"",
|
|
391
439
|
`premium escalations: ${session.premiumEscalations}`,
|
|
392
440
|
`estimated paid usage: $${session.estimatedPaidUsage.toFixed(4)}`,
|
|
393
441
|
`free worker calls: ${session.freeWorkerCalls}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/telemetry/ledger.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/telemetry/ledger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oeronteros-1/opencode-orchestra",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Production-ready model routing, specialist agents, diagnostics, telemetry, and dashboard for OpenCode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -57,7 +57,9 @@
|
|
|
57
57
|
"prepublishOnly": "npm run check",
|
|
58
58
|
"prepack": "npm run build",
|
|
59
59
|
"typecheck": "tsc --noEmit && tsc -p dashboard/tsconfig.json",
|
|
60
|
-
"test": "tsc -p tsconfig.test.json && tsc -p tsconfig.build.json && node --test dist-test/test/config.test.js dist-test/test/classifier.test.js dist-test/test/cache-refresh.test.js dist-test/test/model-resolver.test.js dist-test/test/model-discovery.test.js dist-test/test/budget.test.js dist-test/test/agents.test.js dist-test/test/plugin.test.js dist-test/test/plugin-status.test.js dist-test/test/cli.test.js dist-test/test/cli-smoke.test.js dist-test/test/diagnostics-update.test.js dist-test/test/dashboard.test.js dist-test/test/live.test.js dist-test/test/ledger.test.js dist-test/test/analytics.test.js dist-test/test/routing-features.test.js dist-test/test/ownership.test.js dist-test/test/worktrees.test.js dist-test/test/pricing.test.js dist-test/test/fallback.test.js dist-test/test/integration.test.js dist-test/test/doctor.test.js dist-test/test/spawn-fallback.test.js dist-test/test/model-match.test.js dist-test/test/cost.test.js dist-test/test/openrouter.test.js dist-test/test/pricing-resolver.test.js dist-test/test/snapshot-reset.test.js dist-test/test/tokens.test.js dist-test/test/i18n.test.js",
|
|
60
|
+
"test": "tsc -p tsconfig.test.json && tsc -p tsconfig.build.json && node --test dist-test/test/config.test.js dist-test/test/classifier.test.js dist-test/test/cache-refresh.test.js dist-test/test/model-resolver.test.js dist-test/test/model-discovery.test.js dist-test/test/budget.test.js dist-test/test/agents.test.js dist-test/test/plugin.test.js dist-test/test/plugin-status.test.js dist-test/test/cli.test.js dist-test/test/cli-smoke.test.js dist-test/test/mcp-smoke.test.js dist-test/test/mcp-config-smoke.test.js dist-test/test/diagnostics-update.test.js dist-test/test/dashboard.test.js dist-test/test/live.test.js dist-test/test/ledger.test.js dist-test/test/analytics.test.js dist-test/test/routing-features.test.js dist-test/test/ownership.test.js dist-test/test/worktrees.test.js dist-test/test/pricing.test.js dist-test/test/fallback.test.js dist-test/test/integration.test.js dist-test/test/doctor.test.js dist-test/test/spawn-fallback.test.js dist-test/test/model-match.test.js dist-test/test/cost.test.js dist-test/test/openrouter.test.js dist-test/test/pricing-resolver.test.js dist-test/test/snapshot-reset.test.js dist-test/test/tokens.test.js dist-test/test/i18n.test.js",
|
|
61
|
+
"test:mcp-live": "tsc -p tsconfig.test.json && node scripts/run-live-mcp-tests.mjs",
|
|
62
|
+
"test:mcp-live:windows": "npm run test:mcp-live",
|
|
61
63
|
"check": "npm run typecheck && npm test"
|
|
62
64
|
},
|
|
63
65
|
"dependencies": {
|
package/prompts/editor.md
CHANGED
|
@@ -6,6 +6,7 @@ Return exactly:
|
|
|
6
6
|
- Tests and verification commands/results;
|
|
7
7
|
- Unresolved risks or blockers.
|
|
8
8
|
|
|
9
|
-
## Structural
|
|
10
|
-
- Use `ast-grep_*`
|
|
11
|
-
-
|
|
9
|
+
## Structural Validation via ast-grep
|
|
10
|
+
- Use `ast-grep_*` to locate all targets before a systematic code change and to verify that expected patterns disappeared or changed afterward. Cap searches with `max_results` and prefer compact text output.
|
|
11
|
+
- ast-grep MCP is read-only. Apply changes with the normal edit tool; do not claim the MCP itself performed a rewrite or guaranteed semantic correctness.
|
|
12
|
+
- Do not use `ast-grep` for arbitrary text matching in non-code files (YAML, JSON, Markdown); use standard file reading and patch editing tools instead.
|
package/prompts/lead.md
CHANGED
|
@@ -34,7 +34,7 @@ For implementation tasks, continue through editing and verification instead of s
|
|
|
34
34
|
|
|
35
35
|
### 1. Tool Routing: Codebase Memory vs ast-grep
|
|
36
36
|
- **Use `codebase-memory_*` for architectural topology:** finding symbol declarations, mapping caller/callee hierarchies, tracing imports, and determining blast radius across files.
|
|
37
|
-
- **Use `ast-grep_*` for syntactic matching and structural
|
|
37
|
+
- **Use `ast-grep_*` for syntactic matching and structural validation:** locate exact code forms, test rules on snippets, cap searches with `max_results`, and use compact text output. The server is read-only: apply changes with the normal edit tool, then run the same structural query again to verify the transformation.
|
|
38
38
|
- **Rule:** Never use `ast-grep` to guess dependency graphs; never use `codebase-memory` to find AST code patterns.
|
|
39
39
|
|
|
40
40
|
### 2. Bash Execution & Context Economy
|
|
@@ -47,3 +47,6 @@ For implementation tasks, continue through editing and verification instead of s
|
|
|
47
47
|
### 3. Verification Precedence & Commit Gating
|
|
48
48
|
- **Commit Guard:** You are strictly forbidden from calling `git_commit` (or delegating final commits) until verification passes.
|
|
49
49
|
- **Enforcement Flow:** Changes must produce a green test suite and clean linter exit code (`exit 0`) via `orch-tests` or local test execution BEFORE any commit is registered.
|
|
50
|
+
|
|
51
|
+
### 4. Browser Verification
|
|
52
|
+
- Use `playwright_*` for browser behavior, screenshots, console errors, and accessibility-relevant interaction checks. Prefer `orch-tests` for deterministic browser verification and visual workers for reference/review evidence.
|
package/prompts/repo.md
CHANGED
|
@@ -8,5 +8,5 @@ Return exactly:
|
|
|
8
8
|
|
|
9
9
|
## Search Tooling Protocol
|
|
10
10
|
- Use `codebase-memory_*` exclusively for symbol lookups, caller graphs, and understanding project architecture.
|
|
11
|
-
- Use `ast-grep_*` exclusively for finding exact syntactic patterns, code shapes, and anti-patterns.
|
|
11
|
+
- Use `ast-grep_*` exclusively for finding exact syntactic patterns, code shapes, and anti-patterns. Always set a finite `max_results` and prefer compact text output.
|
|
12
12
|
- Read-only Git access: You may inspect history via `git_log` or `git_diff` to explain legacy decisions. Never invoke mutation operations (`git_commit`, `git_add`, `git_reset`).
|
package/prompts/tests.md
CHANGED
|
@@ -11,3 +11,4 @@ Return exactly:
|
|
|
11
11
|
- You are solely responsible for verification: run tests, typecheckers, and linters.
|
|
12
12
|
- Large stdout outputs are prohibited. Always invoke runners in compact mode (`pytest -q`, `npm test -- --reporter=dot`, `cargo test -- -q`).
|
|
13
13
|
- If an error occurs, print only the failing assertions and relevant stack trace. Do not re-run full verbose suites without filtering.
|
|
14
|
+
- Use `playwright_*` for browser smoke tests, console failures, screenshots, and interaction verification when the task has a UI surface.
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-zinc-700:oklch(37% .013 285.805);--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-semibold:600;--radius-xl:.75rem;--radius-2xl:1rem;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--ease-out:cubic-bezier(0, 0, .2, 1);--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.-top-\[200px\]{top:-200px}.-right-\[100px\]{right:-100px}.-bottom-\[150px\]{bottom:-150px}.-left-\[100px\]{left:-100px}.block{display:block}.inline-flex{display:inline-flex}.table{display:table}.table-row{display:table-row}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-10{height:calc(var(--spacing) * 10)}.h-\[500px\]{height:500px}.h-\[600px\]{height:600px}.w-11{width:calc(var(--spacing) * 11)}.w-\[500px\]{width:500px}.w-\[600px\]{width:600px}.translate-x-0\.5{--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[shimmer_3s_ease-in-out_infinite\]{animation:3s ease-in-out infinite shimmer}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:2147483647px}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[var\(--border-medium\)\]{border-color:var(--border-medium)}.border-\[var\(--border-subtle\)\]{border-color:var(--border-subtle)}.border-white\/\[0\.06\]{border-color:#ffffff0f}@supports (color:color-mix(in lab, red, red)){.border-white\/\[0\.06\]{border-color:color-mix(in oklab, var(--color-white) 6%, transparent)}}.bg-\[var\(--bg-card\)\]{background-color:var(--bg-card)}.bg-\[var\(--bg-glass\)\]{background-color:var(--bg-glass)}.bg-white{background-color:var(--color-white)}.bg-zinc-700\/50{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){.bg-zinc-700\/50{background-color:color-mix(in oklab, var(--color-zinc-700) 50%, transparent)}}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-violet-600{--tw-gradient-from:var(--color-violet-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-white\/\[0\.03\]{--tw-gradient-via:#ffffff08}@supports (color:color-mix(in lab, red, red)){.via-white\/\[0\.03\]{--tw-gradient-via:color-mix(in oklab, var(--color-white) 3%, transparent)}}.via-white\/\[0\.03\]{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-violet-500{--tw-gradient-to:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-\[length\:200\%_100\%\]{background-size:200% 100%}.px-4{padding-inline:calc(var(--spacing) * 4)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-white{color:var(--color-white)}.opacity-0{opacity:0}.shadow-\[0_4px_16px_rgba\(139\,92\,246\,0\.3\)\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#8b5cf64d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_8px_32px_rgba\(0\,0\,0\,0\.3\)\]{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:translate-y-\[-1px\]:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[var\(--border-accent\)\]:hover{border-color:var(--border-accent)}.hover\:border-\[var\(--border-medium\)\]:hover{border-color:var(--border-medium)}.hover\:border-white\/\[0\.1\]:hover{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\:border-white\/\[0\.1\]:hover{border-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.hover\:bg-\[var\(--bg-glass-hover\)\]:hover{background-color:var(--bg-glass-hover)}.hover\:from-violet-500:hover{--tw-gradient-from:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:to-violet-400:hover{--tw-gradient-to:var(--color-violet-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:text-\[var\(--text-primary\)\]:hover{color:var(--text-primary)}.hover\:shadow-\[0_2px_8px_rgba\(0\,0\,0\,0\.15\)\]:hover{--tw-shadow:0 2px 8px var(--tw-shadow-color,#00000026);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-\[0_4px_16px_rgba\(0\,0\,0\,0\.2\)\]:hover{--tw-shadow:0 4px 16px var(--tw-shadow-color,#0003);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-\[0_8px_24px_rgba\(139\,92\,246\,0\.4\)\]:hover{--tw-shadow:0 8px 24px var(--tw-shadow-color,#8b5cf666);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-\[var\(--shadow-lg\)\]:hover{--tw-shadow:var(--shadow-lg);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-violet-400:focus-visible{--tw-ring-color:var(--color-violet-400)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-transparent:focus-visible{--tw-ring-offset-color:transparent}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:translate-y-0:active{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.active\:shadow-\[0_2px_8px_rgba\(139\,92\,246\,0\.3\)\]:active{--tw-shadow:0 2px 8px var(--tw-shadow-color,#8b5cf64d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.data-\[checked\]\:translate-x-\[22px\][data-checked]{--tw-translate-x:22px;translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[checked\]\:border-violet-500\/30[data-checked]{border-color:#8d54ff4d}@supports (color:color-mix(in lab, red, red)){.data-\[checked\]\:border-violet-500\/30[data-checked]{border-color:color-mix(in oklab, var(--color-violet-500) 30%, transparent)}}.data-\[checked\]\:bg-gradient-to-r[data-checked]{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.data-\[checked\]\:from-violet-600[data-checked]{--tw-gradient-from:var(--color-violet-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.data-\[checked\]\:to-violet-500[data-checked]{--tw-gradient-to:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.data-\[checked\]\:shadow-\[0_0_16px_rgba\(139\,92\,246\,0\.3\)\][data-checked]{--tw-shadow:0 0 16px var(--tw-shadow-color,#8b5cf64d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[checked\]\:shadow-\[0_2px_8px_rgba\(0\,0\,0\,0\.3\)\][data-checked]{--tw-shadow:0 2px 8px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.data-\[checked\]\:hover\:border-violet-400\/40[data-checked]:hover{border-color:#a685ff66}@supports (color:color-mix(in lab, red, red)){.data-\[checked\]\:hover\:border-violet-400\/40[data-checked]:hover{border-color:color-mix(in oklab, var(--color-violet-400) 40%, transparent)}}}}:root{--font-sans:"Geist", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--bg-primary:#06080d;--bg-secondary:#0a0d14;--bg-tertiary:#0f1219;--bg-card:#0c0f16bf;--bg-card-hover:#10141ed9;--bg-glass:#ffffff08;--bg-glass-hover:#ffffff0f;--border-subtle:#ffffff0f;--border-medium:#ffffff1a;--border-accent:#8b5cf64d;--text-primary:#f4f4f5;--text-secondary:#a1a1aa;--text-tertiary:#9a9aa3;--text-muted:#85858f;--accent-violet:#8b5cf6;--accent-violet-light:#a78bfa;--accent-violet-dark:#6d28d9;--accent-cyan:#22d3ee;--accent-emerald:#34d399;--accent-amber:#f59e0b;--accent-rose:#f43f5e;--shadow-sm:0 2px 8px #0000004d;--shadow-md:0 8px 32px #0006;--shadow-lg:0 16px 64px #00000080;--shadow-glow-violet:0 0 20px #8b5cf626;--shadow-glow-cyan:0 0 20px #22d3ee26;color:var(--text-primary);background:var(--bg-primary);font-family:var(--font-sans);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}body{background:radial-gradient(ellipse 80% 50% at 50% -20%, #8b5cf61f, transparent), radial-gradient(ellipse 60% 40% at 80% 50%, #22d3ee0f, transparent), radial-gradient(ellipse 50% 30% at 20% 80%, #8b5cf614, transparent), var(--bg-primary);min-width:320px;min-height:100vh;margin:0}button,input,select{font:inherit}button{cursor:pointer}@keyframes mesh-float{0%,to{transform:translate(0)scale(1)}25%{transform:translate(2%,-3%)scale(1.02)}50%{transform:translate(-1%,2%)scale(.98)}75%{transform:translate(3%,1%)scale(1.01)}}@keyframes mesh-opacity{0%,to{opacity:.6}50%{opacity:1}}.mesh-bg{z-index:-1;pointer-events:none;position:fixed;inset:0;overflow:hidden}.mesh-bg:before,.mesh-bg:after{content:"";filter:blur(80px);border-radius:50%;animation:20s ease-in-out infinite mesh-float;position:absolute}.mesh-bg:before{background:radial-gradient(circle,#8b5cf626,#0000 70%);width:600px;height:600px;animation-delay:-5s;top:-200px;right:-100px}.mesh-bg:after{background:radial-gradient(circle,#22d3ee1a,#0000 70%);width:500px;height:500px;animation-delay:-10s;bottom:-150px;left:-100px}.app-shell{grid-template-columns:260px minmax(0,1fr);min-height:100vh;display:grid}.sidebar{border-right:1px solid var(--border-subtle);-webkit-backdrop-filter:blur(24px)saturate(1.2);backdrop-filter:blur(24px)saturate(1.2);z-index:10;background:#080a0fd9;flex-direction:column;height:100vh;padding:28px 18px 24px;transition:background .3s;display:flex;position:sticky;top:0}.brand{align-items:center;gap:14px;padding:0 10px 32px;display:flex}.brand strong,.brand small{letter-spacing:.18em;display:block}.brand strong{font-size:14px;font-weight:700}.brand small{color:var(--text-tertiary);margin-top:4px;font-size:9px;font-weight:500}.brand-mark{color:#fff;background:linear-gradient(145deg, var(--accent-violet), var(--accent-violet-dark));border-radius:12px;justify-content:center;align-items:end;gap:3px;width:36px;height:36px;padding:8px;transition:transform .3s,box-shadow .3s;display:flex;box-shadow:0 8px 32px #8b5cf64d,inset 0 1px #ffffff26}.brand-mark:hover{transform:scale(1.05);box-shadow:0 12px 40px #8b5cf666,inset 0 1px #fff3}.brand-mark span{background:currentColor;border-radius:2px;width:3px;transition:height .3s;display:block}.brand-mark span:first-child{opacity:.65;height:8px}.brand-mark span:nth-child(2){height:17px}.brand-mark span:nth-child(3){opacity:.8;height:12px}nav{gap:4px;display:grid}.nav-link{height:44px;color:var(--text-tertiary);border-radius:12px;align-items:center;gap:14px;padding:0 14px;font-size:13px;font-weight:550;text-decoration:none;transition:all .2s;display:flex;position:relative}.nav-link:hover{color:var(--text-primary);background:var(--bg-glass-hover)}.nav-link.active{color:#fff;box-shadow:var(--shadow-glow-violet);background:#8b5cf61f}.nav-link.active:before{content:"";background:linear-gradient(180deg, var(--accent-violet), var(--accent-cyan));border-radius:2px;width:3px;height:24px;position:absolute;left:-18px;box-shadow:0 0 16px #8b5cf699}.sidebar-foot{border-top:1px solid var(--border-subtle);margin-top:auto;padding:18px 12px 0}.local-chip{color:var(--text-secondary);letter-spacing:.16em;text-transform:uppercase;align-items:center;gap:8px;font-size:10px;font-weight:700;display:flex}.project-name{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;margin-top:8px;font-size:11px;overflow:hidden}.status-dot{background:var(--accent-emerald);border-radius:50%;flex:none;width:8px;height:8px;animation:2s ease-in-out infinite pulse-glow;box-shadow:0 0 12px #34d39999}.status-dot.off{background:var(--text-muted);box-shadow:none;animation:none}@keyframes pulse-glow{0%,to{box-shadow:0 0 12px #34d39999}50%{box-shadow:0 0 20px #34d399e6}}.main-panel{min-width:0}.topbar{border-bottom:1px solid var(--border-subtle);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);z-index:5;background:#06080d99;justify-content:space-between;align-items:center;height:72px;padding:0 4vw;display:flex;position:sticky;top:0}.top-actions{align-items:center;gap:6px;display:flex}.eyebrow{color:var(--text-muted);letter-spacing:.18em;text-transform:uppercase;font-size:11px;font-weight:700;line-height:1.4}.topbar .eyebrow{white-space:nowrap;text-overflow:ellipsis;max-width:60vw;display:block;overflow:hidden}.topbar>div:first-child{align-items:center;gap:14px;min-width:0;display:flex}.project-select{border:1px solid var(--border-medium);max-width:260px;height:36px;color:var(--text-primary);background:var(--bg-tertiary);border-radius:10px;outline:none;padding:0 32px 0 12px;transition:all .2s}.project-select:focus{border-color:var(--accent-violet);box-shadow:0 0 0 3px #8b5cf626}.content{max-width:1520px;margin:0 auto;padding:48px 4vw 80px}.page-intro{margin-bottom:36px}.page-intro h1{letter-spacing:-.045em;background:linear-gradient(135deg, var(--text-primary) 0%, var(--text-secondary) 100%);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin:10px 0;font-size:clamp(30px,3.2vw,48px);font-weight:700;line-height:1.05}.page-intro p{max-width:640px;color:var(--text-tertiary);margin:0;font-size:14px;line-height:1.65}h2{letter-spacing:-.02em;margin:5px 0 0;font-size:16px;font-weight:600}.metrics-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:18px;display:grid}.insight-banner{background:var(--bg-card);border:1px solid var(--border-subtle);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:16px;flex-wrap:wrap;align-items:center;gap:36px;margin-bottom:18px;padding:20px 26px;display:flex}.insight-banner>div{gap:3px;display:grid}.insight-banner .eyebrow{color:var(--text-muted)}.insight-banner strong{letter-spacing:-.035em;font-size:22px}.insight-banner small{color:var(--text-muted);font-size:11px}.metric-card{background:var(--bg-card);border:1px solid var(--border-subtle);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:16px;grid-template-columns:1fr auto;align-items:center;min-height:168px;padding:24px;transition:all .3s;display:grid;position:relative;overflow:hidden}.metric-card:before{content:"";opacity:0;background:linear-gradient(90deg,#0000,#8b5cf64d,#0000);height:1px;transition:opacity .3s;position:absolute;top:0;left:0;right:0}.metric-card:hover{border-color:var(--border-accent);background:var(--bg-card-hover);box-shadow:var(--shadow-glow-violet);transform:translateY(-2px)}.metric-card:hover:before{opacity:1}.metric-card>span{color:var(--text-muted);letter-spacing:.08em;text-transform:uppercase;font-size:11px;font-weight:650}.metric-card strong{letter-spacing:-.05em;grid-column:1/-1;font-size:clamp(28px,2.6vw,40px);font-weight:700}.metric-card small{color:var(--text-muted);grid-column:1/-1;font-size:11px}.metric-icon{width:40px;height:40px;color:var(--accent-violet-light);box-shadow:var(--shadow-glow-violet);background:#8b5cf61f;border-radius:12px;place-items:center;transition:all .3s;display:grid}.metric-card:hover .metric-icon{background:#8b5cf633;transform:scale(1.05)}.dashboard-grid{grid-template-columns:minmax(0,2fr) minmax(280px,1fr);gap:16px;margin-bottom:18px;display:grid}.chart-card,.mcp-card,.list-card,.ranking-card,.settings-card{background:var(--bg-card);border:1px solid var(--border-subtle);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-radius:16px;padding:26px;transition:all .3s}.chart-card:hover,.mcp-card:hover,.list-card:hover,.ranking-card:hover{border-color:var(--border-medium)}.card-heading{justify-content:space-between;align-items:start;margin-bottom:24px;display:flex}.updated{color:var(--text-muted);font-size:10px}.chart-wrap{height:280px;margin:4px -4px -8px -16px;font-size:10px}.chart-controls{align-items:center;gap:14px;display:flex}.chart-controls select{border:1px solid var(--border-medium);height:32px;color:var(--text-secondary);background:var(--bg-tertiary);border-radius:9px;padding:0 10px;transition:all .2s}.chart-controls select:focus{border-color:var(--accent-violet);box-shadow:0 0 0 3px #8b5cf626}.mcp-list{margin-top:24px;display:grid}.mcp-list>div{border-top:1px solid var(--border-subtle);grid-template-columns:auto 1fr auto;align-items:center;gap:12px;min-height:54px;font-size:12px;transition:background .2s;display:grid}.mcp-list>div:hover{background:var(--bg-glass)}.mcp-list small{color:var(--text-muted);font-size:10px}.project-list{margin-top:18px;display:grid}.project-list button{border:0;border-top:1px solid var(--border-subtle);min-height:58px;color:var(--text-secondary);text-align:left;background:0 0;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:14px;padding:10px 0;transition:all .2s;display:grid}.project-list button:hover{background:var(--bg-glass)}.project-list button:hover strong{color:var(--accent-violet-light)}.project-list strong,.project-list small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.project-list strong{color:var(--text-primary);font-size:12px}.project-list small{color:var(--text-muted);margin-top:4px;font-size:9px}.text-link{color:var(--accent-violet-light);font-size:11px;text-decoration:none;transition:color .2s}.text-link:hover{color:var(--accent-violet)}.recent-list>div{border-top:1px solid var(--border-subtle);min-height:60px;color:var(--text-secondary);grid-template-columns:100px minmax(0,1fr) 110px 90px;align-items:center;gap:16px;padding:0 4px;font-size:11px;transition:background .2s;display:grid}.recent-list>div:hover{background:var(--bg-glass)}.recent-list strong,.recent-list small{display:block}.recent-list strong{color:var(--text-primary);font-size:12px;font-weight:550}.recent-list small{color:var(--text-muted);margin-top:4px;font-size:10px}.agent-badge{color:var(--accent-violet-light);letter-spacing:.02em;background:#8b5cf614;border:1px solid #8b5cf633;border-radius:8px;justify-self:start;padding:5px 10px;font-size:10px;font-weight:600;transition:all .2s}.agent-badge:hover{background:#8b5cf626;border-color:#8b5cf659}.empty-state{min-height:200px;color:var(--text-muted);justify-content:center;align-items:center;gap:12px;font-size:12px;display:flex}.table-card{overflow:hidden}.virtual-table{min-width:0}.table-head,.table-row{align-items:center;min-width:940px;display:flex}.table-head{border-bottom:1px solid var(--border-medium);height:48px;color:var(--text-muted);letter-spacing:.12em;text-transform:uppercase;font-size:9px;font-weight:700}.table-head>div,.table-row>div{text-overflow:ellipsis;white-space:nowrap;flex:none;padding:0 16px;overflow:hidden}.table-scroll{height:min(65vh,650px);overflow:auto}.table-row{border-bottom:1px solid var(--border-subtle);min-height:48px;color:var(--text-secondary);font-size:11px;transition:all .2s;position:absolute;inset-inline:0}.table-row:hover{background:var(--bg-glass-hover)}.ranking-list>div{border-top:1px solid var(--border-subtle);min-height:70px;color:var(--text-secondary);grid-template-columns:46px minmax(240px,1fr) 100px 110px 100px;align-items:center;gap:18px;padding:0 4px;font-size:11px;transition:all .2s;display:grid}.ranking-list>div:first-child{border-top:0}.ranking-list>div:hover{background:var(--bg-glass)}.rank{color:var(--text-muted);font-variant-numeric:tabular-nums;font-weight:600}.rank-main strong{color:var(--text-primary);font-size:12px;font-weight:550}.usage-bar{background:#ffffff0f;border-radius:3px;width:100%;max-width:420px;height:3px;margin-top:12px;overflow:hidden}.usage-bar span{background:linear-gradient(90deg, var(--accent-violet), var(--accent-cyan));border-radius:3px;height:100%;display:block;box-shadow:0 0 8px #8b5cf666}.settings-stack{gap:16px;display:grid}.setting-title{justify-content:space-between;align-items:start;gap:24px;margin-bottom:24px;display:flex}.setting-title h2,.inline-setting h2{margin:0 0 6px}.setting-title p,.inline-setting p{color:var(--text-tertiary);margin:0;font-size:12px;line-height:1.55}.setting-title select{border:1px solid var(--border-medium);min-width:130px;height:38px;color:var(--text-primary);background:var(--bg-tertiary);border-radius:10px;outline:none;padding:0 34px 0 14px;transition:all .2s}.setting-title select:focus{border-color:var(--accent-violet);box-shadow:0 0 0 3px #8b5cf626}.budget-grid{grid-template-columns:repeat(4,1fr);gap:12px;display:grid}.budget-option{border:1px solid var(--border-subtle);min-height:100px;color:var(--text-secondary);background:var(--bg-glass);text-align:left;border-radius:14px;padding:16px;transition:all .25s}.budget-option strong,.budget-option span{display:block}.budget-option strong{color:var(--text-primary);text-transform:uppercase;font-size:13px;font-weight:600}.budget-option span{margin-top:8px;font-size:10px;line-height:1.45}.budget-option:hover,.budget-option.selected{border-color:var(--border-accent);box-shadow:var(--shadow-glow-violet);background:#8b5cf61a}.budget-option.selected strong{color:var(--accent-violet-light)}.model-empty{color:#d6b86f;background:#fbbf240f;border:1px solid #fbbf2433;border-radius:12px;margin:-8px 0 18px;padding:14px 16px;font-size:12px;line-height:1.55}.model-empty code{color:#fde68a;font-family:var(--font-mono)}.agent-model-list{border:1px solid var(--border-subtle);border-radius:16px;overflow:hidden}.agent-model-row{border-bottom:1px solid var(--border-subtle);grid-template-columns:minmax(240px,.8fr) minmax(300px,1.2fr);align-items:center;gap:28px;min-height:78px;padding:14px 18px;transition:background .2s;display:grid}.agent-model-row:last-child{border-bottom:0}.agent-model-row:hover{background:var(--bg-glass)}.agent-identity strong,.agent-identity span,.agent-identity small{display:block}.agent-identity strong{color:var(--text-primary);font-size:13px}.agent-identity span{color:var(--text-secondary);margin-top:4px;font-size:11px}.agent-identity small{color:var(--text-muted);letter-spacing:.04em;font-size:9px;font-family:var(--font-mono);margin-top:6px}.agent-model-row select{border:1px solid var(--border-subtle);width:100%;height:44px;color:var(--text-primary);background:var(--bg-tertiary);text-overflow:ellipsis;border-radius:11px;outline:none;padding:0 38px 0 14px;transition:all .2s;overflow:hidden}.agent-model-row select:focus{border-color:var(--accent-violet);box-shadow:0 0 0 3px #8b5cf626}.inline-setting{justify-content:space-between;align-items:center;gap:28px;display:flex}.form-actions{color:var(--text-muted);justify-content:space-between;align-items:center;gap:18px;font-size:10px;display:flex}.settings-fields{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;display:grid}.settings-fields label{color:var(--text-secondary);gap:7px;font-size:11px;display:grid}.settings-fields input{border:1px solid var(--border-subtle);height:40px;color:var(--text-primary);background:var(--bg-tertiary);border-radius:10px;outline:none;padding:0 12px;transition:all .2s}.settings-fields input:focus{border-color:var(--accent-violet);box-shadow:0 0 0 3px #8b5cf626}.check-setting{grid-template-columns:1fr auto;align-items:center}.settings-field{max-width:240px;color:var(--text-secondary);gap:7px;font-size:11px;display:grid}.settings-field input{border:1px solid var(--border-subtle);height:40px;color:var(--text-primary);background:var(--bg-tertiary);border-radius:10px;padding:0 12px}.form-actions>span{white-space:nowrap;text-overflow:ellipsis;max-width:65%;overflow:hidden}.loading,.error-state{min-height:55vh;color:var(--text-tertiary);justify-content:center;align-items:center;gap:12px;font-size:12px;display:flex}.error-state{color:var(--accent-rose)}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.export-menu{position:relative}.export-scrim{z-index:40;cursor:default;background:0 0;border:0;position:fixed;inset:0}.export-panel{z-index:50;border:1px solid var(--border-medium);background:var(--bg-tertiary);-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);width:280px;box-shadow:var(--shadow-lg);border-radius:16px;padding:14px;position:absolute;top:calc(100% + 10px);right:0}.export-head{justify-content:space-between;align-items:center;margin-bottom:12px;padding:0 4px;display:flex}.export-close{color:var(--text-tertiary);background:0 0;border:0;font-size:20px;line-height:1;transition:color .2s}.export-close:hover{color:var(--text-primary)}.export-list{gap:3px;display:grid}.export-item{border-radius:10px;justify-content:space-between;align-items:center;gap:12px;padding:8px 6px;transition:background .2s;display:flex}.export-item:hover{background:var(--bg-glass-hover)}.export-item-label{color:var(--text-primary);font-size:12px}.export-item-actions{gap:6px;display:flex}.export-item-actions .inline-flex{letter-spacing:.06em;height:28px;padding:0 10px;font-size:10px;font-weight:700}.export-error{color:var(--accent-rose);border:1px solid #f8717140;border-radius:10px;margin-top:12px;padding:10px 12px;font-size:11px}.form-errors{color:var(--accent-rose);border:1px solid #f8717140;border-radius:10px;flex-direction:column;gap:4px;padding:10px 12px;font-size:11px;display:flex}.truncation-note{color:var(--accent-amber);border:1px solid #fbbf2440;border-radius:10px;margin:0 0 12px;padding:10px 12px;font-size:11px}.live-card{padding:26px}.live-state{color:var(--text-muted);align-items:center;gap:8px;font-size:11px;font-weight:600;display:inline-flex}.live-state.active{color:var(--accent-emerald)}.live-state.off{color:var(--text-tertiary)}.live-state .status-dot{background:var(--text-muted);width:9px;height:9px}.live-state.active .status-dot{background:var(--accent-emerald);animation:1.6s ease-in-out infinite live-pulse}@keyframes live-pulse{0%,to{opacity:1;box-shadow:0 0 12px #34d39999}50%{opacity:.4;box-shadow:0 0 20px #34d399e6}}.live-list{gap:12px;margin-top:6px;display:grid}.live-row{background:#8b5cf60d;border:1px solid #8b5cf62e;border-radius:14px;grid-template-columns:100px minmax(0,1fr) 90px;align-items:start;gap:16px;padding:14px;transition:all .3s;display:grid}.live-row:hover{box-shadow:var(--shadow-glow-violet);background:#8b5cf614;border-color:#8b5cf64d}.live-body{min-width:0}.live-meta{align-items:baseline;gap:12px;display:flex}.live-meta strong{color:var(--text-primary);font-size:13px;font-weight:600}.live-meta span{color:var(--text-muted);font-size:10px}.live-snippet{color:var(--text-secondary);max-width:100ch;margin:8px 0 0;font-size:12px;line-height:1.55}.live-stats{color:var(--text-muted);gap:14px;margin-top:8px;font-size:10px;display:flex}.live-warn{color:var(--accent-amber);cursor:help}.live-cost{color:var(--accent-violet-light);white-space:nowrap;justify-self:end;font-size:13px;font-weight:600}.live-total{color:var(--text-muted);grid-template-columns:1fr auto 1fr;align-items:baseline;gap:12px;padding:14px 6px 0;font-size:10px;display:grid}.live-total strong{color:var(--text-primary);text-align:right;font-size:13px;font-weight:600}.live-card .empty-state{min-height:120px}.live-card .agent-badge{justify-self:start}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.shimmer{background:linear-gradient(90deg,#0000 0%,#ffffff0a 50%,#0000 100%) 0 0/200% 100%;animation:3s ease-in-out infinite shimmer}@keyframes float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.float-animation{animation:6s ease-in-out infinite float}html.light{--bg-primary:#f8f9fb;--bg-secondary:#f0f1f4;--bg-tertiary:#e8e9ed;--bg-card:#ffffffd9;--bg-card-hover:#fffffff2;--bg-glass:#00000005;--bg-glass-hover:#0000000a;--border-subtle:#0000000f;--border-medium:#0000001a;--border-accent:#8b5cf640;--text-primary:#18181b;--text-secondary:#52525b;--text-tertiary:#52525b;--text-muted:#62626b;--shadow-sm:0 2px 8px #00000014;--shadow-md:0 8px 32px #0000001f;--shadow-lg:0 16px 64px #00000029;--shadow-glow-violet:0 0 20px #8b5cf61a;--shadow-glow-cyan:0 0 20px #22d3ee1a;color:var(--text-primary);background:var(--bg-primary)}html.light body{background:radial-gradient(ellipse 80% 50% at 50% -20%, #8b5cf614, transparent), radial-gradient(ellipse 60% 40% at 80% 50%, #22d3ee0a, transparent), var(--bg-primary)}html.light .sidebar{border-color:var(--border-subtle);background:#ffffffe0}html.light .nav-link{color:var(--text-tertiary)}html.light .nav-link.active{color:var(--accent-violet-dark)}html.light .topbar{border-color:var(--border-subtle);background:#f8f9fbb3}html.light .page-intro p,html.light .setting-title p,html.light .inline-setting p{color:var(--text-tertiary)}html.light h1,html.light h2,html.light .metric-card strong,html.light .recent-list strong,html.light .rank-main strong{color:var(--text-primary)}html.light .table-row,html.light .recent-list>div,html.light .ranking-list>div,html.light .mcp-list>div{border-color:var(--border-subtle)}html.light .live-row{background:#8b5cf60a;border-color:#8b5cf626}html.light .live-meta strong,html.light .live-total strong{color:var(--text-primary)}html.light .live-snippet{color:var(--text-secondary)}html.light .export-panel{border-color:var(--border-subtle);background:#fffffff2}html.light .export-item:hover{background:var(--bg-glass)}html.light .export-item-label{color:var(--text-primary)}html.light .export-close{color:var(--text-tertiary)}html.light .export-close:hover{color:var(--text-primary)}:focus-visible{outline:2px solid var(--accent-violet-light);outline-offset:3px}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.mesh-bg{display:none}}@media (width<=1000px){.metrics-grid{grid-template-columns:repeat(2,1fr)}.dashboard-grid{grid-template-columns:1fr}.budget-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=720px){.settings-fields{grid-template-columns:1fr}.app-shell{display:block}.sidebar{border:0;border-top:1px solid var(--border-subtle);width:100%;height:70px;padding:8px 12px;position:fixed;inset:auto 0 0}.brand,.sidebar-foot{display:none}.sidebar nav{justify-content:space-around;display:flex}.nav-link{flex-direction:column;justify-content:center;gap:3px;width:60px;height:52px;padding:0;font-size:9px}.nav-link.active:before{display:none}.topbar{height:60px;padding:0 18px}.content{padding:32px 18px 110px}.metrics-grid{grid-template-columns:1fr 1fr}.metric-card{min-height:145px;padding:18px}.recent-list>div{grid-template-columns:80px minmax(0,1fr) 80px}.recent-list>div>span:last-child{display:none}.agent-model-row{grid-template-columns:1fr;gap:12px;padding:16px}.ranking-list>div{grid-template-columns:34px minmax(160px,1fr) 90px}.ranking-list>div>span:nth-last-child(-n+2){display:none}.form-actions{flex-direction:column;align-items:stretch}.form-actions>span{max-width:100%}.form-actions button{width:100%}}@media (width<=470px){.metrics-grid{grid-template-columns:1fr}.budget-grid{grid-template-columns:1fr 1fr}.page-intro h1{font-size:32px}.mcp-list small{display:none}.mcp-list>div{grid-template-columns:auto 1fr}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|