larkin 0.4.25 → 0.4.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/agent-cli.mjs +1 -1
- package/dist/app/agent-config.mjs +9 -3
- package/dist/app/runtime-model-directory.mjs +22 -3
- package/dist/dashboard/dashboard-config-controller.mjs +24 -14
- package/dist/dashboard/dashboard-view-model.mjs +5 -1
- package/dist/dashboard/web/assets/dashboard.css +1 -1
- package/dist/dashboard/web/assets/dashboard.js +15 -15
- package/dist/runtime/pi-distribution-label.cjs +6 -0
- package/dist/runtime/pi-distribution-label.mjs +3 -0
- package/dist/runtime/pi-provider-config.cjs +20 -1
- package/dist/runtime/pi-provider-config.mjs +16 -0
- package/package.json +1 -1
package/dist/app/agent-cli.mjs
CHANGED
|
@@ -21,7 +21,7 @@ import { loadTelemetryConfig } from "../platform/telemetry-config.mjs";
|
|
|
21
21
|
import { telemetrySingleton } from "../platform/telemetry-tracing.mjs";
|
|
22
22
|
import { feishuImFreshnessAdapter, feishuImTarget, mergeFeishuImCursor, serializeFeishuImTarget, } from "../feishu/im-freshness-adapter.mjs";
|
|
23
23
|
function discoverRuntimeModelDirectorySync(input, env) {
|
|
24
|
-
const childSpec = internalCommandSpec("runtime-model-directory", [input.runtime, input.cwd], env);
|
|
24
|
+
const childSpec = internalCommandSpec("runtime-model-directory", [input.runtime, input.cwd, input.agentId], env);
|
|
25
25
|
const result = spawnSync(childSpec.command, childSpec.args, {
|
|
26
26
|
encoding: "utf8", env: { ...process.env, ...env }, timeout: 20_000, maxBuffer: 1024 * 1024,
|
|
27
27
|
});
|
|
@@ -11,7 +11,7 @@ import { isChannelReconnecting, projectAgentReadiness } from "./agent-readiness.
|
|
|
11
11
|
import { requestAgentUpsert } from "./local-control.mjs";
|
|
12
12
|
import * as larkinConfig from "../platform/config.mjs";
|
|
13
13
|
import { managedOfficialLarkCli } from "./agent-lark-cli-workspace.mjs";
|
|
14
|
-
import { assertBuiltinPiAgentDirectory, piAgentDirectory } from "../runtime/pi-provider-config.mjs";
|
|
14
|
+
import { assertBuiltinPiAgentDirectory, ownedPiCatalogAgentDir, piAgentDirectory, piCatalogCommandSpec, piDistributionLabel } from "../runtime/pi-provider-config.mjs";
|
|
15
15
|
import { traceProcessBoundary } from "../platform/process-boundary-trace.mjs";
|
|
16
16
|
function safeDocumentCommentCapabilities(configDir, profile) {
|
|
17
17
|
try {
|
|
@@ -493,14 +493,20 @@ if ((["model", "effort"].includes(kind || "") && agent.runtime === "claude") ||
|
|
|
493
493
|
}
|
|
494
494
|
let piCatalog = null;
|
|
495
495
|
if (agent.runtime === "pi" || (kind === "runtime" && value === "pi")) {
|
|
496
|
+
if (kind === "model" && !value)
|
|
497
|
+
say(`发行版: ${piDistributionLabel(agent.piDistribution)}`);
|
|
496
498
|
try {
|
|
499
|
+
const catalogCommand = piCatalogCommandSpec(agent.piDistribution, process.env);
|
|
497
500
|
piCatalog = await discoverPiModelCatalog({
|
|
498
501
|
cwd: String(agent.workspaceDir),
|
|
499
|
-
|
|
502
|
+
agentDir: ownedPiCatalogAgentDir(configDir, selectedKey),
|
|
503
|
+
command: catalogCommand.command,
|
|
504
|
+
commandArgs: catalogCommand.commandArgs,
|
|
505
|
+
env: process.env,
|
|
500
506
|
});
|
|
501
507
|
}
|
|
502
508
|
catch (error) {
|
|
503
|
-
die(`Pi 模型目录加载失败:${error instanceof Error ? error.message : String(error)}。请先用官方 pi
|
|
509
|
+
die(`Pi 模型目录加载失败:${error instanceof Error ? error.message : String(error)}。请先用官方 pi 登录或检查该 Agent 的隔离 provider 目录。`);
|
|
504
510
|
}
|
|
505
511
|
if (!piCatalog)
|
|
506
512
|
die("Pi 模型目录加载失败");
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { loadConfig, resolveConfigDir } from "../platform/config.mjs";
|
|
5
6
|
import { discoverClaudeModelCatalog } from "../runtime/claude-model-catalog.mjs";
|
|
6
|
-
import { discoverCodexModelCatalog } from "../runtime/codex-model-catalog.mjs";
|
|
7
7
|
import { discoverPiModelCatalog } from "../runtime/pi-model-catalog.mjs";
|
|
8
|
+
import { discoverCodexModelCatalog } from "../runtime/codex-model-catalog.mjs";
|
|
9
|
+
import { ownedPiCatalogAgentDir, piCatalogCommandSpec } from "../runtime/pi-provider-config.mjs";
|
|
8
10
|
function readTestModelDirectory(env) {
|
|
9
11
|
const fixture = env?.LARKIN_TEST_RUNTIME_MODEL_DIRECTORY_FILE;
|
|
10
12
|
if (!fixture)
|
|
@@ -35,7 +37,23 @@ export async function discoverRuntimeModelDirectory(input) {
|
|
|
35
37
|
];
|
|
36
38
|
}
|
|
37
39
|
if (input.runtime === "pi") {
|
|
38
|
-
const
|
|
40
|
+
const env = input.env ?? process.env;
|
|
41
|
+
const agentId = input.agentId || "";
|
|
42
|
+
if (!agentId)
|
|
43
|
+
throw new Error("runtime model directory requires agentId for Pi");
|
|
44
|
+
const configDir = resolveConfigDir(env);
|
|
45
|
+
const { config } = loadConfig(env);
|
|
46
|
+
const agent = config.agents[agentId];
|
|
47
|
+
if (!agent)
|
|
48
|
+
throw new Error(`unknown agent: ${agentId}`);
|
|
49
|
+
const catalogCommand = piCatalogCommandSpec(agent.piDistribution, env);
|
|
50
|
+
const catalog = await discoverPiModelCatalog({
|
|
51
|
+
cwd: input.cwd,
|
|
52
|
+
agentDir: ownedPiCatalogAgentDir(configDir, agentId),
|
|
53
|
+
command: catalogCommand.command,
|
|
54
|
+
commandArgs: catalogCommand.commandArgs,
|
|
55
|
+
env,
|
|
56
|
+
});
|
|
39
57
|
if (!catalog.effectiveModel)
|
|
40
58
|
throw new Error("Pi 模型目录未解析出默认模型");
|
|
41
59
|
return [
|
|
@@ -60,13 +78,14 @@ function isMainEntry(argvPath = process.argv[1]) {
|
|
|
60
78
|
export async function main() {
|
|
61
79
|
const runtime = process.argv[2] || "";
|
|
62
80
|
const cwd = process.argv[3] || "";
|
|
81
|
+
const agentId = process.argv[4] || "";
|
|
63
82
|
if (!runtime || !cwd)
|
|
64
83
|
throw new Error("runtime model directory requires runtime and cwd");
|
|
65
84
|
const models = await discoverRuntimeModelDirectory({
|
|
66
85
|
runtime,
|
|
67
86
|
cwd,
|
|
68
87
|
env: process.env,
|
|
69
|
-
...(
|
|
88
|
+
...(agentId ? { agentId } : {}),
|
|
70
89
|
});
|
|
71
90
|
process.stdout.write(`${JSON.stringify({ models })}\n`);
|
|
72
91
|
}
|
|
@@ -7,6 +7,7 @@ import { discoverClaudeModelCatalog } from "../runtime/claude-model-catalog.mjs"
|
|
|
7
7
|
import { discoverCodexModelCatalog } from "../runtime/codex-model-catalog.mjs";
|
|
8
8
|
import { discoverPiModelCatalog } from "../runtime/pi-model-catalog.mjs";
|
|
9
9
|
import { managedOfficialLarkCli } from "../app/agent-lark-cli-workspace.mjs";
|
|
10
|
+
import { ownedPiCatalogAgentDir, piCatalogCommandSpec } from "../runtime/pi-provider-config.mjs";
|
|
10
11
|
function pruneCache(cache, expired, maxEntries) {
|
|
11
12
|
for (const [key, value] of cache)
|
|
12
13
|
if (expired(value))
|
|
@@ -170,7 +171,7 @@ export function createPiModelDirectoryResolver(options = {}) {
|
|
|
170
171
|
const inFlight = new Map();
|
|
171
172
|
return {
|
|
172
173
|
async resolve(input) {
|
|
173
|
-
const key = [input.agentId, input.cwd, input.agentDir ?? ""].join("\u0000");
|
|
174
|
+
const key = [input.agentId, input.cwd, input.agentDir, input.command ?? "", ...(input.commandArgs ?? [])].join("\u0000");
|
|
174
175
|
pruneCache(cache, (entry) => now() >= entry.expiresAt, 64);
|
|
175
176
|
pruneCache(failures, (entry) => now() >= entry.expiresAt, 64);
|
|
176
177
|
const cached = cache.get(key);
|
|
@@ -182,7 +183,12 @@ export function createPiModelDirectoryResolver(options = {}) {
|
|
|
182
183
|
if (!pending) {
|
|
183
184
|
pending = (async () => {
|
|
184
185
|
try {
|
|
185
|
-
const catalog = await discover({
|
|
186
|
+
const catalog = await discover({
|
|
187
|
+
cwd: input.cwd,
|
|
188
|
+
agentDir: input.agentDir,
|
|
189
|
+
...(input.command ? { command: input.command } : {}),
|
|
190
|
+
...(input.commandArgs ? { commandArgs: input.commandArgs } : {}),
|
|
191
|
+
});
|
|
186
192
|
const models = [
|
|
187
193
|
{ id: "default", label: `default: ${catalog.effectiveModel}` },
|
|
188
194
|
...catalog.models.map(({ id, label, contextWindow, supportedReasoningEfforts, defaultReasoningEffort }) => ({
|
|
@@ -377,15 +383,27 @@ function dashboardMutation(value) {
|
|
|
377
383
|
return { kind: "set-agent-effort", agentId, effort: value.effort === null || value.effort === "default" ? null : String(value.effort || "") };
|
|
378
384
|
}
|
|
379
385
|
export function createDashboardConfigController({ csrfCapability, env = process.env, requestUpsert = requestAgentUpsert, chatDirectoryResolver = createChatDirectoryResolver(), claudeModelDirectoryResolver = createClaudeModelDirectoryResolver(), codexModelDirectoryResolver = createCodexModelDirectoryResolver(), piModelDirectoryResolver = createPiModelDirectoryResolver(), }) {
|
|
386
|
+
const resolvePiModelDirectory = async (agentId) => {
|
|
387
|
+
const { config, configDir } = loadConfig(env);
|
|
388
|
+
const agent = config.agents[agentId];
|
|
389
|
+
if (!agent)
|
|
390
|
+
throw new Error("unknown agent");
|
|
391
|
+
const catalogCommand = piCatalogCommandSpec(agent.piDistribution, env);
|
|
392
|
+
return await piModelDirectoryResolver.resolve({
|
|
393
|
+
agentId,
|
|
394
|
+
cwd: agent.workspaceDir,
|
|
395
|
+
agentDir: ownedPiCatalogAgentDir(configDir, agentId),
|
|
396
|
+
command: catalogCommand.command,
|
|
397
|
+
commandArgs: catalogCommand.commandArgs,
|
|
398
|
+
});
|
|
399
|
+
};
|
|
380
400
|
const resolveModelDirectory = async (runtime, agentId) => {
|
|
381
401
|
const { config } = loadConfig(env);
|
|
382
402
|
const agent = config.agents[agentId];
|
|
383
403
|
if (!agent)
|
|
384
404
|
throw new Error("unknown agent");
|
|
385
405
|
if (runtime === "pi")
|
|
386
|
-
return await
|
|
387
|
-
agentId, cwd: agent.workspaceDir, ...(env.PI_CODING_AGENT_DIR ? { agentDir: env.PI_CODING_AGENT_DIR } : {}),
|
|
388
|
-
});
|
|
406
|
+
return await resolvePiModelDirectory(agentId);
|
|
389
407
|
if (runtime === "codex")
|
|
390
408
|
return await codexModelDirectoryResolver.resolve({ agentId, cwd: agent.workspaceDir, env });
|
|
391
409
|
if (runtime === "claude")
|
|
@@ -433,15 +451,7 @@ export function createDashboardConfigController({ csrfCapability, env = process.
|
|
|
433
451
|
try {
|
|
434
452
|
assertPrivateReadRequest(req, csrfCapability);
|
|
435
453
|
const agentId = requestUrl.searchParams.get("agent") || "";
|
|
436
|
-
const
|
|
437
|
-
const agent = config.agents[agentId];
|
|
438
|
-
if (!agent)
|
|
439
|
-
throw new Error("unknown agent");
|
|
440
|
-
const models = await piModelDirectoryResolver.resolve({
|
|
441
|
-
agentId,
|
|
442
|
-
cwd: agent.workspaceDir,
|
|
443
|
-
...(env.PI_CODING_AGENT_DIR ? { agentDir: env.PI_CODING_AGENT_DIR } : {}),
|
|
444
|
-
});
|
|
454
|
+
const models = await resolvePiModelDirectory(agentId);
|
|
445
455
|
json(res, 200, { models });
|
|
446
456
|
}
|
|
447
457
|
catch (error) {
|
|
@@ -12,6 +12,7 @@ import { isAllowedDashboardAvatarUrl } from "./dashboard-avatar.mjs";
|
|
|
12
12
|
import { collectWorkspaceEntry as collectTypedWorkspaceEntry } from "./dashboard-workspace.mjs";
|
|
13
13
|
import { buildFingerprint, packageVersion } from "../platform/build-info.mjs";
|
|
14
14
|
import * as larkinConfig from "../platform/config.mjs";
|
|
15
|
+
import { ownedPiCatalogAgentDir, piCatalogCommandSpec } from "../runtime/pi-provider-config.mjs";
|
|
15
16
|
const HERE = path.dirname(fileURLToPath(import.meta.url));
|
|
16
17
|
const ROOT = path.resolve(HERE, "../..");
|
|
17
18
|
export const PACKAGE_VERSION = packageVersion(ROOT);
|
|
@@ -442,10 +443,13 @@ async function collectAgentStatus(a, configDir, daemonStartedAt, piModelResolver
|
|
|
442
443
|
let piCatalog = [];
|
|
443
444
|
if (a.runtime === "pi" && piModelResolver) {
|
|
444
445
|
try {
|
|
446
|
+
const catalogCommand = piCatalogCommandSpec(a.piDistribution, process.env);
|
|
445
447
|
piCatalog = await piModelResolver.resolve({
|
|
446
448
|
agentId: a.agentId,
|
|
447
449
|
cwd: a.workspaceDir,
|
|
448
|
-
|
|
450
|
+
agentDir: ownedPiCatalogAgentDir(configDir, a.agentId),
|
|
451
|
+
command: catalogCommand.command,
|
|
452
|
+
commandArgs: catalogCommand.commandArgs,
|
|
449
453
|
});
|
|
450
454
|
}
|
|
451
455
|
catch { /* unknown or unavailable catalog keeps the explicit turns fallback */ }
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@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;--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{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hidden{display:none}}:root{--paper:#f4f0e8;--panel:#fbf8f1;--ink:#201c18;--subtle:#6e675e;--faint:#989084;--line:#ddd5c7;--accent:#a3402c;--accent-soft:#f2e3dc;--success:#2d6a4f;--warning:#9a6700;--danger:#a3402c;--shadow:0 14px 44px #33281f14;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-synthesis:none;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}@media (prefers-color-scheme:dark){:root{--paper:#181513;--panel:#211d1a;--ink:#eee7dc;--subtle:#aaa195;--faint:#766d63;--line:#37302a;--accent:#d17862;--accent-soft:#3a2420;--success:#75b798;--warning:#e0ad55;--shadow:0 14px 44px #0000003d;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html,body,#root{min-height:100%}html{background:var(--paper);overflow-x:clip}body{background:var(--paper);color:var(--ink);margin:0;overflow-x:clip}button,input,select{font:inherit}button,select{cursor:pointer}button:disabled,select:disabled,input:disabled{cursor:not-allowed;opacity:.55}[hidden]{display:none!important}:focus-visible{outline:3px solid var(--accent)}@supports (color:color-mix(in lab, red, red)){:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 40%, transparent)}}:focus-visible{outline-offset:2px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.app-shell{grid-template-columns:292px minmax(0,1fr);min-height:100vh;display:grid}.app-shell.workspace-app-active{height:100dvh;min-height:0;overflow:hidden}.desktop-sidebar{border-right:1px solid var(--line);background:var(--panel);flex-direction:column;min-width:0;height:100vh;display:flex;position:sticky;top:0}@supports (color:color-mix(in lab, red, red)){.desktop-sidebar{background:color-mix(in srgb, var(--panel) 94%, transparent)}}.brand{border-bottom:1px solid var(--line);align-items:center;gap:12px;height:78px;padding:18px 22px;display:flex}.brand img{width:38px;height:38px}.brand strong{color:var(--accent);letter-spacing:-.03em;font:600 22px Georgia,serif}.brand-version{color:var(--faint);letter-spacing:0;white-space:nowrap;font:600 10px ui-monospace,monospace}.desktop-sidebar footer{border-top:1px solid var(--line);color:var(--faint);padding:13px 18px;font-size:11px}.sidebar-inner{flex-direction:column;flex:1;min-height:0;padding:14px 12px;display:flex}.agent-search,.table-search{border:1px solid var(--line);background:var(--paper);color:var(--faint);border-radius:9px;align-items:center;gap:8px;display:flex}.agent-search{margin-bottom:12px;padding:9px 11px}.agent-search input,.table-search input{width:100%;min-width:0;color:var(--ink);background:0 0;border:0;outline:0}.agent-list{align-content:start;gap:6px;min-height:0;display:grid;overflow-y:auto}.agent-list-item{width:100%;min-width:0;color:var(--subtle);text-align:left;background:0 0;border:1px solid #0000;border-radius:11px;grid-template-columns:42px minmax(0,1fr) 16px;align-items:center;gap:10px;padding:10px;display:grid}.agent-list-item:hover{background:var(--ink)}@supports (color:color-mix(in lab, red, red)){.agent-list-item:hover{background:color-mix(in srgb, var(--ink) 4%, transparent)}}.agent-list-item:hover{color:var(--ink)}.agent-list-item.selected{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.agent-list-item.selected{border-color:color-mix(in srgb, var(--accent) 42%, var(--line))}}.agent-list-item.selected{background:var(--accent-soft);color:var(--ink)}.agent-list-copy{gap:1px;min-width:0;display:grid}.agent-list-copy strong,.agent-list-copy small,.status-line{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.agent-list-copy strong{font-size:13px}.agent-list-copy small{color:var(--faint);font-size:10.5px}.status-line{color:var(--subtle);align-items:center;gap:4px;font-size:10px;display:flex}.agent-avatar{border:1px solid var(--line);background:var(--accent);border-radius:50%;flex:none;place-items:center;width:42px;height:42px;display:grid;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.agent-avatar{background:color-mix(in srgb, var(--accent) 12%, var(--panel))}}.agent-avatar{color:var(--accent);font:700 13px Georgia,serif}.agent-avatar img{object-fit:cover;width:100%;height:100%;display:block}.danger{color:var(--danger)}.workspace-shell{flex-direction:column;min-width:0;min-height:100vh;display:flex}.workspace-shell.workspace-route-active{height:100dvh;min-height:0;overflow:hidden}.workspace-route-active>.app-topbar,.workspace-route-active>.agent-header,.workspace-route-active>.agent-tabs,.workspace-route-active>.stale-banner,.workspace-route-active>.notice{flex:none}.app-topbar{z-index:20;border-bottom:1px solid var(--line);background:var(--paper);justify-content:space-between;align-items:center;gap:16px;height:64px;padding:0 28px;display:flex;position:sticky;top:0}@supports (color:color-mix(in lab, red, red)){.app-topbar{background:color-mix(in srgb, var(--paper) 94%, transparent)}}.app-topbar{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.app-topbar>div{align-items:center;gap:10px;min-width:0;display:flex}.app-topbar>div>strong{color:var(--accent);font:600 19px Georgia,serif;display:none}.app-topbar>div>span{color:var(--subtle);font-size:12px}.mobile-menu{display:none!important}.ui-button{border:1px solid var(--line);background:var(--panel);min-height:34px;color:var(--ink);border-radius:8px;justify-content:center;align-items:center;gap:7px;padding:7px 11px;font-size:12px;font-weight:600;display:inline-flex}.ui-button:hover{border-color:var(--accent);background:var(--accent-soft)}.ui-button.primary{border-color:var(--accent);background:var(--accent);color:#fff}.ui-button.icon-button{width:36px;padding:0}.ui-badge{border:1px solid var(--line);color:var(--subtle);background:var(--ink);border-radius:999px;align-items:center;padding:2px 8px;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.ui-badge{background:color-mix(in srgb, var(--ink) 3%, var(--panel))}}.ui-badge{white-space:nowrap;font-size:10.5px;font-weight:600}.ui-badge.success{border-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.ui-badge.success{border-color:color-mix(in srgb, var(--success) 55%, var(--line))}}.ui-badge.success{color:var(--success)}.ui-badge.warning{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.ui-badge.warning{border-color:color-mix(in srgb, var(--warning) 55%, var(--line))}}.ui-badge.warning{color:var(--warning)}.ui-badge.accent,.ui-badge.danger-badge{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui-badge.accent,.ui-badge.danger-badge{border-color:color-mix(in srgb, var(--accent) 55%, var(--line))}}.ui-badge.accent,.ui-badge.danger-badge{color:var(--accent)}.stale-banner,.notice{border:1px solid var(--warning);align-items:center;gap:8px;margin:16px 28px 0;display:flex}@supports (color:color-mix(in lab, red, red)){.stale-banner,.notice{border:1px solid color-mix(in srgb, var(--warning) 50%, var(--line))}}.stale-banner,.notice{background:var(--warning);border-radius:9px;padding:8px 11px}@supports (color:color-mix(in lab, red, red)){.stale-banner,.notice{background:color-mix(in srgb, var(--warning) 7%, var(--panel))}}.stale-banner,.notice{color:var(--warning);font-size:12px}.stale-banner .ui-button,.notice .ui-button{min-height:28px;margin-left:auto;padding-block:4px}.notice{border-color:var(--line);background:var(--panel);color:var(--subtle)}.agent-header{z-index:15;background:var(--paper);justify-content:space-between;align-items:center;gap:28px;min-width:0;padding:24px 30px 18px;display:flex;position:sticky;top:64px}@supports (color:color-mix(in lab, red, red)){.agent-header{background:color-mix(in srgb, var(--paper) 96%, transparent)}}.agent-header{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.agent-title{align-items:center;gap:13px;min-width:0;display:flex}.agent-title .agent-avatar{width:52px;height:52px}.agent-title div{min-width:0}.agent-title p{text-overflow:ellipsis;color:var(--faint);margin:0;font:10px ui-monospace,monospace;overflow:hidden}.agent-title h1{text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.025em;margin:1px 0 0;font:600 clamp(23px,3vw,34px) Georgia,serif;overflow:hidden}.agent-header-summary{min-width:0;max-width:62%;color:var(--subtle);flex-wrap:wrap;justify-content:flex-end;gap:6px 14px;font-size:11.5px;display:flex}.agent-tabs{z-index:14;border-bottom:1px solid var(--line);background:var(--paper);gap:2px;padding:0 30px;display:flex;position:sticky;top:158px}@supports (color:color-mix(in lab, red, red)){.agent-tabs{background:color-mix(in srgb, var(--paper) 96%, transparent)}}.agent-tabs{scrollbar-width:thin;overflow-x:auto}.agent-tabs button{color:var(--subtle);background:0 0;border:0;border-bottom:2px solid #0000;flex:none;align-items:center;gap:7px;padding:11px 14px 9px;font-size:12px;font-weight:600;display:inline-flex}.agent-tabs button svg{width:14px;height:14px}.agent-tabs button:hover{color:var(--ink)}.agent-tabs button.active{color:var(--accent);border-bottom-color:var(--accent)}.agent-content{min-width:0;padding:24px 30px 64px}.agent-content>section{min-width:0}.agent-content.workspace-active{flex:1 1 0;height:auto;min-height:0;padding-bottom:24px;display:flex;overflow:hidden}.workspace-tab-panel{flex:1;min-height:0;display:flex}.overview-page{gap:28px;display:grid}.metrics-band{border-block:1px solid var(--line);grid-template-columns:repeat(4,minmax(0,1fr));min-width:0;display:grid}.metric-stat{flex-direction:column;min-width:0;min-height:126px;padding:16px 14px;display:flex}.metric-stat:not(:last-child){border-right:1px solid var(--line)}.metric-stat{border-bottom:1px solid var(--line)}.metric-stat:nth-child(4n){border-right:0}.metric-stat:nth-last-child(-n+3){border-bottom:0}.metric-stat>span{color:var(--faint);letter-spacing:.08em;text-transform:uppercase;margin-top:10px;font-size:9.5px;font-weight:700}.metric-stat>strong{text-overflow:ellipsis;margin-top:3px;font:600 18px Georgia,serif;overflow:hidden}.metric-stat>small{color:var(--subtle);margin-top:auto;font-size:10px}.metric-icon{width:20px;height:20px;color:var(--accent);place-items:center;display:grid}.metric-icon svg{width:15px;height:15px}.overview-sections{grid-template-columns:minmax(0,3fr) minmax(220px,1fr);gap:28px;min-width:0;display:grid}.content-section,.config-section,.group-policy-section,.logs-section{border-block:1px solid var(--line);min-width:0;padding:18px 0}.content-section h3,.config-section h3,.group-policy-section h3,.logs-section h3{margin:0;font:600 17px Georgia,serif}.section-heading{justify-content:space-between;align-items:flex-start;gap:16px;min-width:0;margin-bottom:14px;display:flex}.section-heading p{color:var(--subtle);margin:2px 0 0;font-size:11px}.facts{gap:0;margin:14px 0 0;display:grid}.facts div{border-top:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:16px;padding:9px 0;display:flex}.facts dt{color:var(--subtle);font-size:11px}.facts dd{text-overflow:ellipsis;min-width:0;margin:0;font-size:12px;font-weight:600;overflow:hidden}.timeline{gap:0;margin:0;padding:0;list-style:none;display:grid}.timeline li{grid-template-columns:14px minmax(0,1fr);gap:10px;padding:8px 0;display:grid;position:relative}.timeline li:not(:last-child):before{content:"";background:var(--line);width:1px;position:absolute;top:21px;bottom:-7px;left:5px}.timeline-dot{z-index:1;border:2px solid var(--panel);background:var(--subtle);width:11px;height:11px;box-shadow:0 0 0 1px var(--line);border-radius:50%;margin-top:4px;position:relative}.timeline-dot.state-active{background:var(--warning)}.timeline-dot.state-idle{background:var(--success)}.timeline-dot.state-deliver{background:#3977b8}.timeline-dot.state-error{background:var(--danger)}.timeline-dot.state-unknown{background:var(--faint)}.timeline strong{font-size:11.5px}.timeline p{color:var(--subtle);overflow-wrap:anywhere;margin:1px 0;font-size:11px}.timeline time,.error-stack time{color:var(--faint);font-size:9.5px}.conversation-list,.reminder-list{border-top:1px solid var(--line);gap:0;max-width:900px;display:grid}.conversation-item,.reminder-list article{border:0;border-bottom:1px solid var(--line);background:0 0;padding:14px 10px}.conversation-item.outbound{border-left:3px solid var(--accent)}.conversation-item.inbound{border-left:3px solid var(--success)}.conversation-item.listening{border-left-color:var(--warning)}.conversation-item header{justify-content:space-between;gap:16px;display:flex}.conversation-item header>div{align-items:center;gap:8px;display:flex}.conversation-item header strong{font-size:12px}.conversation-item time,.conversation-item small{color:var(--faint);font-size:10px}.conversation-item p{white-space:pre-wrap;overflow-wrap:anywhere;margin:7px 0 0;font:13px/1.65 Georgia,serif}.reminder-list article{grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:10px;display:grid}.reminder-list article.status-scheduled,.reminder-list article.status-pending{border-left:3px solid var(--warning)}.reminder-list article.status-fired{border-left:3px solid var(--success)}.reminder-list article.status-canceled{border-left:3px solid var(--faint)}.reminder-list article.status-failed{border-left:3px solid var(--danger)}.reminder-list article.done{opacity:.7;text-decoration:line-through}.reminder-list strong{font-size:12px}.reminder-list p{color:var(--subtle);margin:2px 0 0;font-size:10.5px}.configuration-page{gap:18px;display:grid}.cli-guidance{border-left:2px solid var(--accent);color:var(--subtle);margin:0 0 14px;padding:6px 10px;font-size:11px;line-height:1.55}.cli-guidance code{color:var(--ink);overflow-wrap:anywhere;font:600 10.5px ui-monospace,monospace}.config-grid{grid-template-columns:repeat(4,minmax(120px,1fr));gap:12px;display:grid}.config-grid label,.settings-form label,.chat-add label{min-width:0;color:var(--subtle);gap:5px;font-size:11px;font-weight:600;display:grid}.config-grid select,.settings-form select,.chat-add select,.chat-add input,.policy-table select{border:1px solid var(--line);background:var(--paper);width:100%;min-width:0;min-height:37px;color:var(--ink);border-radius:8px;padding:7px 9px;font-size:12px}.form-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.feedback{color:var(--subtle);margin:10px 0 0;font-size:11px}.table-search{min-width:min(300px,42vw);padding:7px 9px}.policy-table-wrap{width:100%;overflow-x:auto}.policy-table{border-collapse:collapse;width:100%;font-size:11px}.policy-table th{color:var(--faint);text-align:left;letter-spacing:.06em;text-transform:uppercase;font-size:9.5px}.policy-table th,.policy-table td{border-bottom:1px solid var(--line);vertical-align:middle;min-width:120px;padding:10px 8px}.policy-table th:first-child,.policy-table td:first-child{min-width:190px}.policy-table th:last-child,.policy-table td:last-child{min-width:150px}.policy-table td strong,.policy-table td code{display:block}.policy-table td code{color:var(--faint);margin-top:2px;font-size:9.5px}.policy-table td small{color:var(--faint);margin-top:2px;font-size:9.5px;display:block}.chat-add{grid-template-columns:minmax(190px,1fr) 140px auto;align-items:end;gap:9px;margin-top:14px;display:grid}.workspace-browser{border-block:1px solid var(--line);background:0 0;flex:1;grid-template-columns:minmax(240px,32%) minmax(0,1fr);min-width:0;min-height:0;display:grid;overflow:hidden}.workspace-side{border-right:1px solid var(--line);flex-direction:column;min-width:0;min-height:0;display:flex}.breadcrumbs{border-bottom:1px solid var(--line);white-space:nowrap;align-items:center;gap:3px;min-height:42px;padding:7px 10px;display:flex;overflow-x:auto}.breadcrumbs span{align-items:center;display:inline-flex}.breadcrumbs button{color:var(--accent);background:0 0;border:0;font-size:10.5px}.workspace-list{overscroll-behavior:contain;scrollbar-gutter:stable;flex:1 1 0;min-height:0;padding:6px;overflow:auto}.workspace-list>button{width:100%;min-width:0;color:var(--ink);text-align:left;background:0 0;border:0;border-radius:7px;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:7px;padding:7px 8px;font-size:11.5px;display:grid}.workspace-list>button:hover{background:var(--accent-soft)}.workspace-list>button span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.workspace-list>button small{color:var(--faint);font-size:9.5px}.workspace-preview{overscroll-behavior:contain;scrollbar-gutter:stable;min-width:0;min-height:0;overflow:auto}.workspace-preview>header{border-bottom:1px solid var(--line);background:var(--panel);justify-content:space-between;gap:12px;padding:11px 14px;display:flex;position:sticky;top:0}.workspace-preview header small{color:var(--faint)}.workspace-preview pre{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:16px;font:11.5px/1.65 ui-monospace,monospace}.logs-section{max-width:920px}.error-stack{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.error-stack h4{margin:0 0 8px;font-size:12px}.error-stack>div{color:var(--danger);grid-template-columns:16px minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 0;font-size:11px;display:grid}.empty-state{min-width:0;min-height:120px;color:var(--subtle);text-align:center;align-content:center;place-items:center;padding:20px;display:grid}.empty-state strong{color:var(--ink);font:600 15px Georgia,serif}.empty-state p{max-width:460px;margin:4px 0 0;font-size:11px}.page-loading{min-height:50vh;color:var(--subtle);justify-content:center;align-items:center;gap:10px;display:flex}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.sheet-overlay{z-index:50;background:#14100d7a;animation:.15s ease-out fade-in;position:fixed;inset:0}.sheet-content{z-index:51;border-left:1px solid var(--line);background:var(--panel);width:min(440px,94vw);max-width:100%;color:var(--ink);box-shadow:var(--shadow);padding:22px;animation:.2s ease-out slide-in;position:fixed;inset:0 0 0 auto;overflow-y:auto}.sheet-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:16px;padding-bottom:18px;display:flex}.sheet-head h2{margin:0;font:600 24px Georgia,serif}.sheet-head p{color:var(--subtle);margin:4px 0 0;font-size:11.5px}.settings-form{padding-top:18px}.field-help{color:var(--subtle);font-size:11px}.compact-sidebar{padding:16px 0}@keyframes fade-in{0%{opacity:0}}@keyframes slide-in{0%{opacity:.5;transform:translate(24px)}}@media (width>=1600px){.metrics-band{grid-template-columns:repeat(7,minmax(0,1fr))}.metrics-band .metric-stat{border-right:1px solid var(--line);border-bottom:0}.metrics-band .metric-stat:last-child{border-right:0}}@media (width<=1100px){.config-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.app-shell{display:block}.app-shell.workspace-app-active{height:auto;min-height:100vh;overflow:visible}.desktop-sidebar{display:none}.mobile-menu{display:inline-flex!important}.app-topbar{height:58px;padding:0 14px}.app-topbar>div>strong{display:inline}.agent-header{padding:17px 16px 12px;display:block;top:58px}.agent-header-summary{justify-content:flex-start;max-width:none;margin-top:12px}.agent-tabs{padding:0 8px;top:150px}.agent-tabs button{padding-inline:10px}.agent-content{padding:16px 14px 48px}.metrics-band{grid-template-columns:repeat(2,minmax(0,1fr))}.metrics-band .metric-stat{border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:116px;padding:13px 10px}.metric-stat:nth-child(2n){border-right:0}.metric-stat:nth-last-child(-n+1){border-bottom:0}.overview-sections{grid-template-columns:1fr;gap:22px}.config-grid{grid-template-columns:1fr}.section-heading{display:block}.section-heading>.ui-badge,.section-heading>.table-search{margin-top:9px}.table-search{width:100%;min-width:0}.policy-table{display:block}.policy-table thead{clip:rect(0, 0, 0, 0);width:1px;height:1px;position:absolute;overflow:hidden}.policy-table tbody{border-top:1px solid var(--line);gap:0;display:grid}.policy-table tr{border:0;border-bottom:1px solid var(--line);gap:8px;min-width:0;padding:12px 0;display:grid}.policy-table td,.policy-table td:first-child,.policy-table td:last-child{border:0;min-width:0;padding:0}.policy-table td:before{color:var(--faint);text-transform:uppercase;margin-bottom:3px;font-size:9px;display:block}.policy-table td:nth-child(2):before{content:"消息策略"}.policy-table td:nth-child(3):before{content:"操作"}.chat-add{grid-template-columns:1fr}.workspace-shell,.workspace-shell.workspace-route-active{height:auto;min-height:100vh;display:block;overflow:visible}.agent-content.workspace-active{height:auto;min-height:0;display:block;overflow:visible}.workspace-tab-panel{display:block}.workspace-browser{grid-template-columns:1fr;height:auto;min-height:0;overflow:hidden}.workspace-side{border-right:0;border-bottom:1px solid var(--line);height:min(300px,42dvh)}.workspace-preview{height:min(520px,58dvh);min-height:280px}.workspace-list,.workspace-preview{overscroll-behavior:auto}.stale-banner,.notice{margin-inline:14px}}@media (width<=420px){.metrics-band{grid-template-columns:repeat(2,minmax(0,1fr))}.metrics-band .metric-stat{min-height:94px}.metrics-band .metric-stat:last-child{border-bottom:0;border-right:0;grid-column:1/-1}.agent-header-summary span:nth-of-type(n+4),.app-topbar>div>span{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
|
|
2
|
+
@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;--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{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hidden{display:none}}:root{--paper:#f4f0e8;--panel:#fbf8f1;--ink:#201c18;--subtle:#6e675e;--faint:#989084;--line:#ddd5c7;--accent:#a3402c;--accent-soft:#f2e3dc;--success:#2d6a4f;--warning:#9a6700;--danger:#a3402c;--shadow:0 14px 44px #33281f14;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-synthesis:none;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}@media (prefers-color-scheme:dark){:root{--paper:#181513;--panel:#211d1a;--ink:#eee7dc;--subtle:#aaa195;--faint:#766d63;--line:#37302a;--accent:#d17862;--accent-soft:#3a2420;--success:#75b798;--warning:#e0ad55;--shadow:0 14px 44px #0000003d;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html,body,#root{min-height:100%}html{background:var(--paper);overflow-x:clip}body{background:var(--paper);color:var(--ink);margin:0;overflow-x:clip}button,input,select{font:inherit}button,select{cursor:pointer}button:disabled,select:disabled,input:disabled{cursor:not-allowed;opacity:.55}[hidden]{display:none!important}:focus-visible{outline:3px solid var(--accent)}@supports (color:color-mix(in lab, red, red)){:focus-visible{outline:3px solid color-mix(in srgb, var(--accent) 40%, transparent)}}:focus-visible{outline-offset:2px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.app-shell{grid-template-columns:292px minmax(0,1fr);min-height:100vh;display:grid}.app-shell.workspace-app-active{height:100dvh;min-height:0;overflow:hidden}.desktop-sidebar{border-right:1px solid var(--line);background:var(--panel);flex-direction:column;min-width:0;height:100vh;display:flex;position:sticky;top:0}@supports (color:color-mix(in lab, red, red)){.desktop-sidebar{background:color-mix(in srgb, var(--panel) 94%, transparent)}}.brand{border-bottom:1px solid var(--line);align-items:center;gap:12px;height:78px;padding:18px 22px;display:flex}.brand img{width:38px;height:38px}.brand strong{color:var(--accent);letter-spacing:-.03em;font:600 22px Georgia,serif}.brand-version{color:var(--faint);letter-spacing:0;white-space:nowrap;font:600 10px ui-monospace,monospace}.desktop-sidebar footer{border-top:1px solid var(--line);color:var(--faint);padding:13px 18px;font-size:11px}.sidebar-inner{flex-direction:column;flex:1;min-height:0;padding:14px 12px;display:flex}.agent-search,.table-search{border:1px solid var(--line);background:var(--paper);color:var(--faint);border-radius:9px;align-items:center;gap:8px;display:flex}.agent-search{margin-bottom:12px;padding:9px 11px}.agent-search input,.table-search input{width:100%;min-width:0;color:var(--ink);background:0 0;border:0;outline:0}.agent-list{align-content:start;gap:6px;min-height:0;display:grid;overflow-y:auto}.agent-list-item{width:100%;min-width:0;color:var(--subtle);text-align:left;background:0 0;border:1px solid #0000;border-radius:11px;grid-template-columns:42px minmax(0,1fr) 16px;align-items:center;gap:10px;padding:10px;display:grid}.agent-list-item:hover{background:var(--ink)}@supports (color:color-mix(in lab, red, red)){.agent-list-item:hover{background:color-mix(in srgb, var(--ink) 4%, transparent)}}.agent-list-item:hover{color:var(--ink)}.agent-list-item.selected{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.agent-list-item.selected{border-color:color-mix(in srgb, var(--accent) 42%, var(--line))}}.agent-list-item.selected{background:var(--accent-soft);color:var(--ink)}.agent-list-copy{gap:1px;min-width:0;display:grid}.agent-list-copy strong,.agent-list-copy small,.status-line{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.agent-list-copy strong{font-size:13px}.agent-list-copy small{color:var(--faint);font-size:10.5px}.status-line{color:var(--subtle);align-items:center;gap:4px;font-size:10px;display:flex}.agent-avatar{border:1px solid var(--line);background:var(--accent);border-radius:50%;flex:none;place-items:center;width:42px;height:42px;display:grid;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.agent-avatar{background:color-mix(in srgb, var(--accent) 12%, var(--panel))}}.agent-avatar{color:var(--accent);font:700 13px Georgia,serif}.agent-avatar img{object-fit:cover;width:100%;height:100%;display:block}.danger{color:var(--danger)}.workspace-shell{flex-direction:column;min-width:0;min-height:100vh;display:flex}.workspace-shell.workspace-route-active{height:100dvh;min-height:0;overflow:hidden}.workspace-route-active>.app-topbar,.workspace-route-active>.agent-header,.workspace-route-active>.agent-tabs,.workspace-route-active>.stale-banner,.workspace-route-active>.notice{flex:none}.app-topbar{z-index:20;border-bottom:1px solid var(--line);background:var(--paper);justify-content:space-between;align-items:center;gap:16px;height:64px;padding:0 28px;display:flex;position:sticky;top:0}@supports (color:color-mix(in lab, red, red)){.app-topbar{background:color-mix(in srgb, var(--paper) 94%, transparent)}}.app-topbar{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.app-topbar>div{align-items:center;gap:10px;min-width:0;display:flex}.app-topbar>div>strong{color:var(--accent);font:600 19px Georgia,serif;display:none}.app-topbar>div>span{color:var(--subtle);font-size:12px}.mobile-menu{display:none!important}.ui-button{border:1px solid var(--line);background:var(--panel);min-height:34px;color:var(--ink);border-radius:8px;justify-content:center;align-items:center;gap:7px;padding:7px 11px;font-size:12px;font-weight:600;display:inline-flex}.ui-button:hover{border-color:var(--accent);background:var(--accent-soft)}.ui-button.primary{border-color:var(--accent);background:var(--accent);color:#fff}.ui-button.icon-button{width:36px;padding:0}.ui-badge{border:1px solid var(--line);color:var(--subtle);background:var(--ink);border-radius:999px;align-items:center;padding:2px 8px;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.ui-badge{background:color-mix(in srgb, var(--ink) 3%, var(--panel))}}.ui-badge{white-space:nowrap;font-size:10.5px;font-weight:600}.ui-badge.success{border-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.ui-badge.success{border-color:color-mix(in srgb, var(--success) 55%, var(--line))}}.ui-badge.success{color:var(--success)}.ui-badge.warning{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.ui-badge.warning{border-color:color-mix(in srgb, var(--warning) 55%, var(--line))}}.ui-badge.warning{color:var(--warning)}.ui-badge.accent,.ui-badge.danger-badge{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui-badge.accent,.ui-badge.danger-badge{border-color:color-mix(in srgb, var(--accent) 55%, var(--line))}}.ui-badge.accent,.ui-badge.danger-badge{color:var(--accent)}.stale-banner,.notice{border:1px solid var(--warning);align-items:center;gap:8px;margin:16px 28px 0;display:flex}@supports (color:color-mix(in lab, red, red)){.stale-banner,.notice{border:1px solid color-mix(in srgb, var(--warning) 50%, var(--line))}}.stale-banner,.notice{background:var(--warning);border-radius:9px;padding:8px 11px}@supports (color:color-mix(in lab, red, red)){.stale-banner,.notice{background:color-mix(in srgb, var(--warning) 7%, var(--panel))}}.stale-banner,.notice{color:var(--warning);font-size:12px}.stale-banner .ui-button,.notice .ui-button{min-height:28px;margin-left:auto;padding-block:4px}.notice{border-color:var(--line);background:var(--panel);color:var(--subtle)}.agent-header{z-index:15;background:var(--paper);justify-content:space-between;align-items:center;gap:28px;min-width:0;padding:24px 30px 18px;display:flex;position:sticky;top:64px}@supports (color:color-mix(in lab, red, red)){.agent-header{background:color-mix(in srgb, var(--paper) 96%, transparent)}}.agent-header{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.agent-title{align-items:center;gap:13px;min-width:0;display:flex}.agent-title .agent-avatar{width:52px;height:52px}.agent-title div{min-width:0}.agent-title p{text-overflow:ellipsis;color:var(--faint);margin:0;font:10px ui-monospace,monospace;overflow:hidden}.agent-title h1{text-overflow:ellipsis;white-space:nowrap;letter-spacing:-.025em;margin:1px 0 0;font:600 clamp(23px,3vw,34px) Georgia,serif;overflow:hidden}.agent-header-summary{min-width:0;max-width:62%;color:var(--subtle);flex-wrap:wrap;justify-content:flex-end;gap:6px 14px;font-size:11.5px;display:flex}.agent-tabs{z-index:14;border-bottom:1px solid var(--line);background:var(--paper);gap:2px;padding:0 30px;display:flex;position:sticky;top:158px}@supports (color:color-mix(in lab, red, red)){.agent-tabs{background:color-mix(in srgb, var(--paper) 96%, transparent)}}.agent-tabs{scrollbar-width:thin;overflow-x:auto}.agent-tabs button{color:var(--subtle);background:0 0;border:0;border-bottom:2px solid #0000;flex:none;align-items:center;gap:7px;padding:11px 14px 9px;font-size:12px;font-weight:600;display:inline-flex}.agent-tabs button svg{width:14px;height:14px}.agent-tabs button:hover{color:var(--ink)}.agent-tabs button.active{color:var(--accent);border-bottom-color:var(--accent)}.agent-content{min-width:0;padding:24px 30px 64px}.agent-content>section{min-width:0}.agent-content.workspace-active{flex:1 1 0;height:auto;min-height:0;padding-bottom:24px;display:flex;overflow:hidden}.workspace-tab-panel{flex:1;min-height:0;display:flex}.overview-page{gap:28px;display:grid}.metrics-band{border-block:1px solid var(--line);grid-template-columns:repeat(4,minmax(0,1fr));min-width:0;display:grid}.metric-stat{flex-direction:column;min-width:0;min-height:126px;padding:16px 14px;display:flex}.metric-stat:not(:last-child){border-right:1px solid var(--line)}.metric-stat{border-bottom:1px solid var(--line)}.metric-stat:nth-child(4n){border-right:0}.metric-stat:nth-last-child(-n+3){border-bottom:0}.metric-stat>span{color:var(--faint);letter-spacing:.08em;text-transform:uppercase;margin-top:10px;font-size:9.5px;font-weight:700}.metric-stat>strong{text-overflow:ellipsis;margin-top:3px;font:600 18px Georgia,serif;overflow:hidden}.metric-stat>small{color:var(--subtle);margin-top:auto;font-size:10px}.metric-icon{width:20px;height:20px;color:var(--accent);place-items:center;display:grid}.metric-icon svg{width:15px;height:15px}.overview-sections{grid-template-columns:minmax(0,3fr) minmax(220px,1fr);gap:28px;min-width:0;display:grid}.content-section,.config-section,.group-policy-section,.logs-section{border-block:1px solid var(--line);min-width:0;padding:18px 0}.content-section h3,.config-section h3,.group-policy-section h3,.logs-section h3{margin:0;font:600 17px Georgia,serif}.section-heading{justify-content:space-between;align-items:flex-start;gap:16px;min-width:0;margin-bottom:14px;display:flex}.section-heading p{color:var(--subtle);margin:2px 0 0;font-size:11px}.facts{gap:0;margin:14px 0 0;display:grid}.facts div{border-top:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:16px;padding:9px 0;display:flex}.facts dt{color:var(--subtle);font-size:11px}.facts dd{text-overflow:ellipsis;min-width:0;margin:0;font-size:12px;font-weight:600;overflow:hidden}.timeline{gap:0;margin:0;padding:0;list-style:none;display:grid}.timeline li{grid-template-columns:14px minmax(0,1fr);gap:10px;padding:8px 0;display:grid;position:relative}.timeline li:not(:last-child):before{content:"";background:var(--line);width:1px;position:absolute;top:21px;bottom:-7px;left:5px}.timeline-dot{z-index:1;border:2px solid var(--panel);background:var(--subtle);width:11px;height:11px;box-shadow:0 0 0 1px var(--line);border-radius:50%;margin-top:4px;position:relative}.timeline-dot.state-active{background:var(--warning)}.timeline-dot.state-idle{background:var(--success)}.timeline-dot.state-deliver{background:#3977b8}.timeline-dot.state-error{background:var(--danger)}.timeline-dot.state-unknown{background:var(--faint)}.timeline strong{font-size:11.5px}.timeline p{color:var(--subtle);overflow-wrap:anywhere;margin:1px 0;font-size:11px}.timeline time,.error-stack time{color:var(--faint);font-size:9.5px}.conversation-list,.reminder-list{border-top:1px solid var(--line);gap:0;max-width:900px;display:grid}.conversation-item,.reminder-list article{border:0;border-bottom:1px solid var(--line);background:0 0;padding:14px 10px}.conversation-item.outbound{border-left:3px solid var(--accent)}.conversation-item.inbound{border-left:3px solid var(--success)}.conversation-item.listening{border-left-color:var(--warning)}.conversation-item header{justify-content:space-between;gap:16px;display:flex}.conversation-item header>div{align-items:center;gap:8px;display:flex}.conversation-item header strong{font-size:12px}.conversation-item time,.conversation-item small{color:var(--faint);font-size:10px}.conversation-item p{white-space:pre-wrap;overflow-wrap:anywhere;margin:7px 0 0;font:13px/1.65 Georgia,serif}.reminder-list article{grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:10px;display:grid}.reminder-list article.status-scheduled,.reminder-list article.status-pending{border-left:3px solid var(--warning)}.reminder-list article.status-fired{border-left:3px solid var(--success)}.reminder-list article.status-canceled{border-left:3px solid var(--faint)}.reminder-list article.status-failed{border-left:3px solid var(--danger)}.reminder-list article.done{opacity:.7;text-decoration:line-through}.reminder-list strong{font-size:12px}.reminder-list p{color:var(--subtle);margin:2px 0 0;font-size:10.5px}.configuration-page{gap:18px;display:grid}.cli-guidance{border-left:2px solid var(--accent);color:var(--subtle);margin:0 0 14px;padding:6px 10px;font-size:11px;line-height:1.55}.cli-guidance code{color:var(--ink);overflow-wrap:anywhere;font:600 10.5px ui-monospace,monospace}.config-grid{grid-template-columns:repeat(4,minmax(120px,1fr));gap:12px;display:grid}.config-grid label,.settings-form label,.chat-add label{min-width:0;color:var(--subtle);gap:5px;font-size:11px;font-weight:600;display:grid}.config-grid select,.config-grid input,.settings-form select,.chat-add select,.chat-add input,.policy-table select{border:1px solid var(--line);background:var(--paper);width:100%;min-width:0;min-height:37px;color:var(--ink);border-radius:8px;padding:7px 9px;font-size:12px}.config-grid input:disabled{color:var(--subtle)}.form-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.feedback{color:var(--subtle);margin:10px 0 0;font-size:11px}.table-search{min-width:min(300px,42vw);padding:7px 9px}.policy-table-wrap{width:100%;overflow-x:auto}.policy-table{border-collapse:collapse;width:100%;font-size:11px}.policy-table th{color:var(--faint);text-align:left;letter-spacing:.06em;text-transform:uppercase;font-size:9.5px}.policy-table th,.policy-table td{border-bottom:1px solid var(--line);vertical-align:middle;min-width:120px;padding:10px 8px}.policy-table th:first-child,.policy-table td:first-child{min-width:190px}.policy-table th:last-child,.policy-table td:last-child{min-width:150px}.policy-table td strong,.policy-table td code{display:block}.policy-table td code{color:var(--faint);margin-top:2px;font-size:9.5px}.policy-table td small{color:var(--faint);margin-top:2px;font-size:9.5px;display:block}.chat-add{grid-template-columns:minmax(190px,1fr) 140px auto;align-items:end;gap:9px;margin-top:14px;display:grid}.workspace-browser{border-block:1px solid var(--line);background:0 0;flex:1;grid-template-columns:minmax(240px,32%) minmax(0,1fr);min-width:0;min-height:0;display:grid;overflow:hidden}.workspace-side{border-right:1px solid var(--line);flex-direction:column;min-width:0;min-height:0;display:flex}.breadcrumbs{border-bottom:1px solid var(--line);white-space:nowrap;align-items:center;gap:3px;min-height:42px;padding:7px 10px;display:flex;overflow-x:auto}.breadcrumbs span{align-items:center;display:inline-flex}.breadcrumbs button{color:var(--accent);background:0 0;border:0;font-size:10.5px}.workspace-list{overscroll-behavior:contain;scrollbar-gutter:stable;flex:1 1 0;min-height:0;padding:6px;overflow:auto}.workspace-list>button{width:100%;min-width:0;color:var(--ink);text-align:left;background:0 0;border:0;border-radius:7px;grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:7px;padding:7px 8px;font-size:11.5px;display:grid}.workspace-list>button:hover{background:var(--accent-soft)}.workspace-list>button span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.workspace-list>button small{color:var(--faint);font-size:9.5px}.workspace-preview{overscroll-behavior:contain;scrollbar-gutter:stable;min-width:0;min-height:0;overflow:auto}.workspace-preview>header{border-bottom:1px solid var(--line);background:var(--panel);justify-content:space-between;gap:12px;padding:11px 14px;display:flex;position:sticky;top:0}.workspace-preview header small{color:var(--faint)}.workspace-preview pre{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:16px;font:11.5px/1.65 ui-monospace,monospace}.logs-section{max-width:920px}.error-stack{border-top:1px solid var(--line);margin-top:18px;padding-top:14px}.error-stack h4{margin:0 0 8px;font-size:12px}.error-stack>div{color:var(--danger);grid-template-columns:16px minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 0;font-size:11px;display:grid}.empty-state{min-width:0;min-height:120px;color:var(--subtle);text-align:center;align-content:center;place-items:center;padding:20px;display:grid}.empty-state strong{color:var(--ink);font:600 15px Georgia,serif}.empty-state p{max-width:460px;margin:4px 0 0;font-size:11px}.page-loading{min-height:50vh;color:var(--subtle);justify-content:center;align-items:center;gap:10px;display:flex}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.sheet-overlay{z-index:50;background:#14100d7a;animation:.15s ease-out fade-in;position:fixed;inset:0}.sheet-content{z-index:51;border-left:1px solid var(--line);background:var(--panel);width:min(440px,94vw);max-width:100%;color:var(--ink);box-shadow:var(--shadow);padding:22px;animation:.2s ease-out slide-in;position:fixed;inset:0 0 0 auto;overflow-y:auto}.sheet-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:16px;padding-bottom:18px;display:flex}.sheet-head h2{margin:0;font:600 24px Georgia,serif}.sheet-head p{color:var(--subtle);margin:4px 0 0;font-size:11.5px}.settings-form{padding-top:18px}.field-help{color:var(--subtle);font-size:11px}.compact-sidebar{padding:16px 0}@keyframes fade-in{0%{opacity:0}}@keyframes slide-in{0%{opacity:.5;transform:translate(24px)}}@media (width>=1600px){.metrics-band{grid-template-columns:repeat(7,minmax(0,1fr))}.metrics-band .metric-stat{border-right:1px solid var(--line);border-bottom:0}.metrics-band .metric-stat:last-child{border-right:0}}@media (width<=1100px){.config-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.app-shell{display:block}.app-shell.workspace-app-active{height:auto;min-height:100vh;overflow:visible}.desktop-sidebar{display:none}.mobile-menu{display:inline-flex!important}.app-topbar{height:58px;padding:0 14px}.app-topbar>div>strong{display:inline}.agent-header{padding:17px 16px 12px;display:block;top:58px}.agent-header-summary{justify-content:flex-start;max-width:none;margin-top:12px}.agent-tabs{padding:0 8px;top:150px}.agent-tabs button{padding-inline:10px}.agent-content{padding:16px 14px 48px}.metrics-band{grid-template-columns:repeat(2,minmax(0,1fr))}.metrics-band .metric-stat{border-right:1px solid var(--line);border-bottom:1px solid var(--line);min-height:116px;padding:13px 10px}.metric-stat:nth-child(2n){border-right:0}.metric-stat:nth-last-child(-n+1){border-bottom:0}.overview-sections{grid-template-columns:1fr;gap:22px}.config-grid{grid-template-columns:1fr}.section-heading{display:block}.section-heading>.ui-badge,.section-heading>.table-search{margin-top:9px}.table-search{width:100%;min-width:0}.policy-table{display:block}.policy-table thead{clip:rect(0, 0, 0, 0);width:1px;height:1px;position:absolute;overflow:hidden}.policy-table tbody{border-top:1px solid var(--line);gap:0;display:grid}.policy-table tr{border:0;border-bottom:1px solid var(--line);gap:8px;min-width:0;padding:12px 0;display:grid}.policy-table td,.policy-table td:first-child,.policy-table td:last-child{border:0;min-width:0;padding:0}.policy-table td:before{color:var(--faint);text-transform:uppercase;margin-bottom:3px;font-size:9px;display:block}.policy-table td:nth-child(2):before{content:"消息策略"}.policy-table td:nth-child(3):before{content:"操作"}.chat-add{grid-template-columns:1fr}.workspace-shell,.workspace-shell.workspace-route-active{height:auto;min-height:100vh;display:block;overflow:visible}.agent-content.workspace-active{height:auto;min-height:0;display:block;overflow:visible}.workspace-tab-panel{display:block}.workspace-browser{grid-template-columns:1fr;height:auto;min-height:0;overflow:hidden}.workspace-side{border-right:0;border-bottom:1px solid var(--line);height:min(300px,42dvh)}.workspace-preview{height:min(520px,58dvh);min-height:280px}.workspace-list,.workspace-preview{overscroll-behavior:auto}.stale-banner,.notice{margin-inline:14px}}@media (width<=420px){.metrics-band{grid-template-columns:repeat(2,minmax(0,1fr))}.metrics-band .metric-stat{min-height:94px}.metrics-band .metric-stat:last-child{border-bottom:0;border-right:0;grid-column:1/-1}.agent-header-summary span:nth-of-type(n+4),.app-topbar>div>span{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
|
|
3
3
|
/*$vite$:1*/
|