chainlesschain 0.45.81 → 0.47.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 +10 -0
- package/bin/chainlesschain.js +0 -0
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{Analytics-C1AnPdMx.js → Analytics-DgypYeUB.js} +2 -2
- package/src/assets/web-panel/assets/AppLayout-Bzf3mSZI.js +1 -0
- package/src/assets/web-panel/assets/AppLayout-DQyDwGut.css +1 -0
- package/src/assets/web-panel/assets/{Backup-D31iZX3l.js → Backup-Ba9UybpT.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DiXJ3TuK.js → Chat-BwXskT21.js} +1 -1
- package/src/assets/web-panel/assets/Cowork-CXuhlHew.css +1 -0
- package/src/assets/web-panel/assets/Cowork-UmOe7qvE.js +7 -0
- package/src/assets/web-panel/assets/{Cron-DBt1ueXh.js → Cron-JHS-rc-4.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-HPh9FcPt.js → Dashboard-B95cMCO7.js} +2 -2
- package/src/assets/web-panel/assets/Dashboard-CKeMmCoT.css +1 -0
- package/src/assets/web-panel/assets/{Git-hwQ1oZHj.js → Git-CSYO0_zk.js} +2 -2
- package/src/assets/web-panel/assets/{Logs-4D9p6PRM.js → Logs-Hxw_K0km.js} +2 -2
- package/src/assets/web-panel/assets/{McpTools-CyAUjbbs.js → McpTools-DIE75TrB.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-BMqOR7S-.js → Memory-C4KVnLlp.js} +2 -2
- package/src/assets/web-panel/assets/{Notes-Cmas8i4E.js → Notes-DuzrHMAk.js} +2 -2
- package/src/assets/web-panel/assets/{Organization-DnSa58Tl.js → Organization-DTq6uF82.js} +4 -4
- package/src/assets/web-panel/assets/{P2P-BxksIBWs.js → P2P-C0hjlhsR.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-Bq5Qn2s3.js → Permissions-Ec0NH-xC.js} +4 -4
- package/src/assets/web-panel/assets/{Projects-B7EM0uPg.js → Projects-U8D0asCS.js} +2 -2
- package/src/assets/web-panel/assets/{Providers-DAwgG5KV.js → Providers-BngtTLvJ.js} +2 -2
- package/src/assets/web-panel/assets/{RssFeed-HSZoRXvS.js → RssFeed-B9NbwCKM.js} +3 -3
- package/src/assets/web-panel/assets/{Security-Cz17qBny.js → Security-BL5Rkr1T.js} +3 -3
- package/src/assets/web-panel/assets/{Services-D2EsLq-v.js → Services-D4MJzLld.js} +2 -2
- package/src/assets/web-panel/assets/{Skills-C9v-f3vZ.js → Skills-CQTOMDwF.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-yMEcU0n7.js → Tasks-DepbJMnL.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-l7SvlKuB.js → Templates-C24PVZPu.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BHWhLWn9.js → Wallet-PQoSpN_P.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-kWhFYaUK.js → WebAuthn-BcuyQ4Lr.js} +4 -4
- package/src/assets/web-panel/assets/WorkflowEditor-C-SvXbHW.js +1 -0
- package/src/assets/web-panel/assets/WorkflowEditor-D5bX6woe.css +1 -0
- package/src/assets/web-panel/assets/{antd-D6h4fDFf.js → antd-DEjZPGMj.js} +82 -82
- package/src/assets/web-panel/assets/index-CwvzTTw_.js +2 -0
- package/src/assets/web-panel/assets/{markdown-BZsB-Dsv.js → markdown-CusdXFxb.js} +1 -1
- package/src/assets/web-panel/index.html +2 -2
- package/src/commands/cowork.js +867 -0
- package/src/gateways/ws/action-protocol.js +182 -2
- package/src/gateways/ws/message-dispatcher.js +5 -0
- package/src/gateways/ws/ws-server.js +21 -0
- package/src/lib/cowork-cron.js +474 -0
- package/src/lib/cowork-evomap-adapter.js +121 -0
- package/src/lib/cowork-learning.js +438 -0
- package/src/lib/cowork-mcp-tools.js +182 -0
- package/src/lib/cowork-observe-html.js +108 -0
- package/src/lib/cowork-observe.js +160 -0
- package/src/lib/cowork-share.js +322 -0
- package/src/lib/cowork-task-runner.js +317 -3
- package/src/lib/cowork-task-templates.js +101 -13
- package/src/lib/cowork-template-marketplace.js +205 -0
- package/src/lib/cowork-workflow.js +571 -0
- package/src/lib/provider-options.js +133 -0
- package/src/lib/skill-loader.js +65 -0
- package/src/lib/sub-agent-context.js +54 -2
- package/src/lib/sub-agent-profiles.js +164 -0
- package/src/lib/todo-manager.js +108 -0
- package/src/lib/turn-context.js +95 -0
- package/src/lib/web-fetch.js +224 -0
- package/src/lib/workflow-expr.js +318 -0
- package/src/repl/agent-repl.js +4 -0
- package/src/runtime/agent-core.js +135 -3
- package/src/runtime/coding-agent-contract-shared.cjs +131 -0
- package/src/runtime/coding-agent-policy.cjs +30 -0
- package/src/assets/web-panel/assets/AppLayout-YdvJBMHH.js +0 -1
- package/src/assets/web-panel/assets/AppLayout-cxfKLu-m.css +0 -1
- package/src/assets/web-panel/assets/Cowork-BnrHWwZw.js +0 -7
- package/src/assets/web-panel/assets/Cowork-CcSoS3eX.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-BS-tzGNj.css +0 -1
- package/src/assets/web-panel/assets/index-ByUk2Wmr.js +0 -2
|
@@ -698,7 +698,10 @@ async function executeToolInner(
|
|
|
698
698
|
const shellPolicyOpts = shellPolicyOverrides
|
|
699
699
|
? { overrideRuleIds: shellPolicyOverrides }
|
|
700
700
|
: {};
|
|
701
|
-
const shellPolicy = evaluateShellCommandPolicy(
|
|
701
|
+
const shellPolicy = evaluateShellCommandPolicy(
|
|
702
|
+
args.command,
|
|
703
|
+
shellPolicyOpts,
|
|
704
|
+
);
|
|
702
705
|
const override = getRuntimeToolDescriptorByCommand(args.command);
|
|
703
706
|
if (!shellPolicy.allowed) {
|
|
704
707
|
return attachDescriptor(
|
|
@@ -784,6 +787,80 @@ async function executeToolInner(
|
|
|
784
787
|
);
|
|
785
788
|
}
|
|
786
789
|
|
|
790
|
+
case "web_fetch": {
|
|
791
|
+
try {
|
|
792
|
+
const { webFetch } = await import("../lib/web-fetch.js");
|
|
793
|
+
let webFetchConfig = {};
|
|
794
|
+
try {
|
|
795
|
+
const { loadProjectConfig: _lpc, findProjectRoot: _fpr } =
|
|
796
|
+
await import("../lib/project-detector.js");
|
|
797
|
+
const projectRoot = _fpr(cwd);
|
|
798
|
+
if (projectRoot) {
|
|
799
|
+
const cfg = _lpc(projectRoot);
|
|
800
|
+
webFetchConfig = cfg?.webFetch || {};
|
|
801
|
+
}
|
|
802
|
+
} catch (_err) {
|
|
803
|
+
// Config optional — use defaults
|
|
804
|
+
}
|
|
805
|
+
const result = await webFetch(args.url, {
|
|
806
|
+
format: args.format,
|
|
807
|
+
maxBytes: args.maxBytes,
|
|
808
|
+
timeout: args.timeout,
|
|
809
|
+
config: webFetchConfig,
|
|
810
|
+
});
|
|
811
|
+
return attachDescriptor(result);
|
|
812
|
+
} catch (err) {
|
|
813
|
+
return attachDescriptor({ error: `web_fetch failed: ${err.message}` });
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
case "todo_write": {
|
|
818
|
+
try {
|
|
819
|
+
const { writeTodos } = await import("../lib/todo-manager.js");
|
|
820
|
+
const result = writeTodos(sessionId, args.todos);
|
|
821
|
+
if (!result.success) {
|
|
822
|
+
return attachDescriptor({ error: result.error });
|
|
823
|
+
}
|
|
824
|
+
return attachDescriptor({
|
|
825
|
+
success: true,
|
|
826
|
+
count: result.count,
|
|
827
|
+
summary: result.summary,
|
|
828
|
+
});
|
|
829
|
+
} catch (err) {
|
|
830
|
+
return attachDescriptor({ error: `todo_write failed: ${err.message}` });
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
case "ask_user_question": {
|
|
835
|
+
if (!interaction || typeof interaction.askUser !== "function") {
|
|
836
|
+
return attachDescriptor({
|
|
837
|
+
error: "user_not_reachable",
|
|
838
|
+
hint: "Non-interactive context (headless/gateway). Proceed autonomously using best judgement.",
|
|
839
|
+
});
|
|
840
|
+
}
|
|
841
|
+
try {
|
|
842
|
+
const answer = await interaction.askUser({
|
|
843
|
+
question: args.question,
|
|
844
|
+
options: Array.isArray(args.options) ? args.options : null,
|
|
845
|
+
multiSelect: args.multiSelect === true,
|
|
846
|
+
timeoutMs:
|
|
847
|
+
typeof args.timeoutMs === "number" ? args.timeoutMs : 60000,
|
|
848
|
+
sessionId,
|
|
849
|
+
});
|
|
850
|
+
return attachDescriptor({ answer });
|
|
851
|
+
} catch (err) {
|
|
852
|
+
if (err && err.code === "USER_TIMEOUT") {
|
|
853
|
+
return attachDescriptor({
|
|
854
|
+
error: "user_timeout",
|
|
855
|
+
hint: "User did not respond in time. Proceed with best judgement.",
|
|
856
|
+
});
|
|
857
|
+
}
|
|
858
|
+
return attachDescriptor({
|
|
859
|
+
error: `ask_user_question failed: ${err.message}`,
|
|
860
|
+
});
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
|
|
787
864
|
case "search_sessions": {
|
|
788
865
|
try {
|
|
789
866
|
const { SessionSearchIndex } = await import("../lib/session-search.js");
|
|
@@ -1285,12 +1362,40 @@ async function _executeRunCode(args, cwd) {
|
|
|
1285
1362
|
* @returns {Promise<object>}
|
|
1286
1363
|
*/
|
|
1287
1364
|
async function _executeSpawnSubAgent(args, ctx) {
|
|
1288
|
-
const {
|
|
1365
|
+
const {
|
|
1366
|
+
role,
|
|
1367
|
+
task,
|
|
1368
|
+
context: inheritedContext,
|
|
1369
|
+
tools: explicitTools,
|
|
1370
|
+
profile: profileName,
|
|
1371
|
+
} = args;
|
|
1289
1372
|
|
|
1290
1373
|
if (!role || !task) {
|
|
1291
1374
|
return { error: "Both 'role' and 'task' are required for spawn_sub_agent" };
|
|
1292
1375
|
}
|
|
1293
1376
|
|
|
1377
|
+
// Phase 3: resolve declarative profile if requested. Explicit tools/context
|
|
1378
|
+
// override profile defaults; missing fields fall back to the profile.
|
|
1379
|
+
let profile = null;
|
|
1380
|
+
if (profileName) {
|
|
1381
|
+
try {
|
|
1382
|
+
const { getSubAgentProfile } =
|
|
1383
|
+
await import("../lib/sub-agent-profiles.js");
|
|
1384
|
+
profile = getSubAgentProfile(profileName);
|
|
1385
|
+
if (!profile) {
|
|
1386
|
+
return {
|
|
1387
|
+
error: `Unknown sub-agent profile: "${profileName}". Valid: explorer|executor|design`,
|
|
1388
|
+
};
|
|
1389
|
+
}
|
|
1390
|
+
} catch (_err) {
|
|
1391
|
+
// profile module optional — proceed without
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
const allowedTools = Array.isArray(explicitTools)
|
|
1396
|
+
? explicitTools
|
|
1397
|
+
: profile?.toolAllowlist || null;
|
|
1398
|
+
|
|
1294
1399
|
// Auto-condense parent context if caller didn't provide explicit context
|
|
1295
1400
|
let resolvedContext = inheritedContext || null;
|
|
1296
1401
|
if (!resolvedContext && Array.isArray(ctx.parentMessages)) {
|
|
@@ -1315,6 +1420,7 @@ async function _executeSpawnSubAgent(args, ctx) {
|
|
|
1315
1420
|
inheritedContext: resolvedContext,
|
|
1316
1421
|
allowedTools: allowedTools || null,
|
|
1317
1422
|
cwd: ctx.cwd,
|
|
1423
|
+
profile: profile || null,
|
|
1318
1424
|
});
|
|
1319
1425
|
|
|
1320
1426
|
const emit = (type, payload) => {
|
|
@@ -1723,7 +1829,33 @@ export async function* agentLoop(messages, options) {
|
|
|
1723
1829
|
};
|
|
1724
1830
|
}
|
|
1725
1831
|
|
|
1726
|
-
|
|
1832
|
+
// Turn-scoped context injection (open-agents prepareCall parity).
|
|
1833
|
+
// prepareCall runs fresh each iteration and returns an ephemeral
|
|
1834
|
+
// system-message supplement that is NOT persisted to messages history.
|
|
1835
|
+
let callMessages = messages;
|
|
1836
|
+
if (typeof options.prepareCall === "function") {
|
|
1837
|
+
try {
|
|
1838
|
+
const hook = await options.prepareCall({
|
|
1839
|
+
iteration: budget.consumed,
|
|
1840
|
+
cwd: toolContext.cwd,
|
|
1841
|
+
sessionId: toolContext.sessionId,
|
|
1842
|
+
});
|
|
1843
|
+
if (
|
|
1844
|
+
hook &&
|
|
1845
|
+
typeof hook.systemSuffix === "string" &&
|
|
1846
|
+
hook.systemSuffix
|
|
1847
|
+
) {
|
|
1848
|
+
callMessages = [
|
|
1849
|
+
...messages,
|
|
1850
|
+
{ role: "system", content: hook.systemSuffix },
|
|
1851
|
+
];
|
|
1852
|
+
}
|
|
1853
|
+
} catch (_e) {
|
|
1854
|
+
// prepareCall failures are non-critical — proceed with original messages
|
|
1855
|
+
}
|
|
1856
|
+
}
|
|
1857
|
+
|
|
1858
|
+
const result = await llmCall(callMessages, options);
|
|
1727
1859
|
throwIfAborted(signal);
|
|
1728
1860
|
const msg = result?.message;
|
|
1729
1861
|
|
|
@@ -390,6 +390,12 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
|
|
|
390
390
|
description:
|
|
391
391
|
'Optional tool whitelist for the sub-agent (e.g. ["read_file", "search_files"]). If omitted, all tools are available.',
|
|
392
392
|
},
|
|
393
|
+
profile: {
|
|
394
|
+
type: "string",
|
|
395
|
+
enum: ["explorer", "executor", "design"],
|
|
396
|
+
description:
|
|
397
|
+
"Optional declarative profile (from sub-agent-profiles). When set, seeds systemPrompt / tool allowlist / iteration cap. Explicit `tools` overrides the profile allowlist.",
|
|
398
|
+
},
|
|
393
399
|
},
|
|
394
400
|
required: ["role", "task"],
|
|
395
401
|
},
|
|
@@ -403,6 +409,131 @@ const CODING_AGENT_TOOL_CONTRACTS = Object.freeze([
|
|
|
403
409
|
tags: ["tool:spawn_sub_agent", "contract:coding-agent", "tier:extension"],
|
|
404
410
|
},
|
|
405
411
|
},
|
|
412
|
+
{
|
|
413
|
+
name: "web_fetch",
|
|
414
|
+
title: "Web Fetch",
|
|
415
|
+
kind: "network",
|
|
416
|
+
tier: "extension",
|
|
417
|
+
description:
|
|
418
|
+
"Fetch a web page or API endpoint over HTTP(S). Returns extracted markdown text by default. Honors allowlist from .chainlesschain/config.json:webFetch.",
|
|
419
|
+
inputSchema: {
|
|
420
|
+
type: "object",
|
|
421
|
+
properties: {
|
|
422
|
+
url: {
|
|
423
|
+
type: "string",
|
|
424
|
+
description: "Absolute http:// or https:// URL to fetch",
|
|
425
|
+
},
|
|
426
|
+
format: {
|
|
427
|
+
type: "string",
|
|
428
|
+
enum: ["markdown", "text", "html", "json"],
|
|
429
|
+
description: "Output format (default: markdown)",
|
|
430
|
+
},
|
|
431
|
+
maxBytes: {
|
|
432
|
+
type: "number",
|
|
433
|
+
description: "Maximum response size in bytes (default: 2000000)",
|
|
434
|
+
},
|
|
435
|
+
timeout: {
|
|
436
|
+
type: "number",
|
|
437
|
+
description: "Request timeout in ms (default: 15000)",
|
|
438
|
+
},
|
|
439
|
+
},
|
|
440
|
+
required: ["url"],
|
|
441
|
+
},
|
|
442
|
+
...TOOL_POLICY_METADATA.web_fetch,
|
|
443
|
+
permissions: {
|
|
444
|
+
level: "readonly",
|
|
445
|
+
scopes: ["network:read"],
|
|
446
|
+
},
|
|
447
|
+
telemetry: {
|
|
448
|
+
category: "network",
|
|
449
|
+
tags: ["tool:web_fetch", "contract:coding-agent", "tier:extension"],
|
|
450
|
+
},
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
name: "todo_write",
|
|
454
|
+
title: "Todo Write",
|
|
455
|
+
kind: "planning",
|
|
456
|
+
tier: "extension",
|
|
457
|
+
description:
|
|
458
|
+
"Write or update the session's TODO list. Use this to track multi-step work; exactly one item may be in_progress at a time.",
|
|
459
|
+
inputSchema: {
|
|
460
|
+
type: "object",
|
|
461
|
+
properties: {
|
|
462
|
+
todos: {
|
|
463
|
+
type: "array",
|
|
464
|
+
description: "Full TODO list (replaces any existing list)",
|
|
465
|
+
items: {
|
|
466
|
+
type: "object",
|
|
467
|
+
properties: {
|
|
468
|
+
id: { type: "string", description: "Stable identifier" },
|
|
469
|
+
content: { type: "string", description: "TODO description" },
|
|
470
|
+
status: {
|
|
471
|
+
type: "string",
|
|
472
|
+
enum: ["pending", "in_progress", "completed", "cancelled"],
|
|
473
|
+
description: "Item state",
|
|
474
|
+
},
|
|
475
|
+
},
|
|
476
|
+
required: ["id", "content", "status"],
|
|
477
|
+
},
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
required: ["todos"],
|
|
481
|
+
},
|
|
482
|
+
...TOOL_POLICY_METADATA.todo_write,
|
|
483
|
+
permissions: {
|
|
484
|
+
level: "session",
|
|
485
|
+
scopes: ["session:write"],
|
|
486
|
+
},
|
|
487
|
+
telemetry: {
|
|
488
|
+
category: "planning",
|
|
489
|
+
tags: ["tool:todo_write", "contract:coding-agent", "tier:extension"],
|
|
490
|
+
},
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
name: "ask_user_question",
|
|
494
|
+
title: "Ask User Question",
|
|
495
|
+
kind: "interaction",
|
|
496
|
+
tier: "extension",
|
|
497
|
+
description:
|
|
498
|
+
"Pause the agent and ask the user a structured question. In non-interactive contexts (headless, WS gateway), returns an error so the agent can proceed autonomously.",
|
|
499
|
+
inputSchema: {
|
|
500
|
+
type: "object",
|
|
501
|
+
properties: {
|
|
502
|
+
question: {
|
|
503
|
+
type: "string",
|
|
504
|
+
description: "Question to show the user",
|
|
505
|
+
},
|
|
506
|
+
options: {
|
|
507
|
+
type: "array",
|
|
508
|
+
items: { type: "string" },
|
|
509
|
+
description:
|
|
510
|
+
"Optional multiple-choice options. When provided, user picks one (or many if multiSelect=true)",
|
|
511
|
+
},
|
|
512
|
+
multiSelect: {
|
|
513
|
+
type: "boolean",
|
|
514
|
+
description: "Allow multiple selections (default: false)",
|
|
515
|
+
},
|
|
516
|
+
timeoutMs: {
|
|
517
|
+
type: "number",
|
|
518
|
+
description: "Max wait for user reply in ms (default: 60000)",
|
|
519
|
+
},
|
|
520
|
+
},
|
|
521
|
+
required: ["question"],
|
|
522
|
+
},
|
|
523
|
+
...TOOL_POLICY_METADATA.ask_user_question,
|
|
524
|
+
permissions: {
|
|
525
|
+
level: "readonly",
|
|
526
|
+
scopes: ["interaction:prompt"],
|
|
527
|
+
},
|
|
528
|
+
telemetry: {
|
|
529
|
+
category: "interaction",
|
|
530
|
+
tags: [
|
|
531
|
+
"tool:ask_user_question",
|
|
532
|
+
"contract:coding-agent",
|
|
533
|
+
"tier:extension",
|
|
534
|
+
],
|
|
535
|
+
},
|
|
536
|
+
},
|
|
406
537
|
{
|
|
407
538
|
name: "search_sessions",
|
|
408
539
|
title: "Search Sessions",
|
|
@@ -165,6 +165,36 @@ const TOOL_POLICY_METADATA = Object.freeze({
|
|
|
165
165
|
approvalFlow: "policy",
|
|
166
166
|
isReadOnly: false,
|
|
167
167
|
},
|
|
168
|
+
web_fetch: {
|
|
169
|
+
riskLevel: RISK_LEVELS.MEDIUM,
|
|
170
|
+
category: TOOL_CATEGORIES.READ,
|
|
171
|
+
availableInPlanMode: true,
|
|
172
|
+
planModeBehavior: "allow",
|
|
173
|
+
requiresPlanApproval: false,
|
|
174
|
+
requiresConfirmation: false,
|
|
175
|
+
approvalFlow: "auto",
|
|
176
|
+
isReadOnly: true,
|
|
177
|
+
},
|
|
178
|
+
todo_write: {
|
|
179
|
+
riskLevel: RISK_LEVELS.LOW,
|
|
180
|
+
category: TOOL_CATEGORIES.WRITE,
|
|
181
|
+
availableInPlanMode: true,
|
|
182
|
+
planModeBehavior: "allow",
|
|
183
|
+
requiresPlanApproval: false,
|
|
184
|
+
requiresConfirmation: false,
|
|
185
|
+
approvalFlow: "auto",
|
|
186
|
+
isReadOnly: false,
|
|
187
|
+
},
|
|
188
|
+
ask_user_question: {
|
|
189
|
+
riskLevel: RISK_LEVELS.LOW,
|
|
190
|
+
category: TOOL_CATEGORIES.READ,
|
|
191
|
+
availableInPlanMode: true,
|
|
192
|
+
planModeBehavior: "allow",
|
|
193
|
+
requiresPlanApproval: false,
|
|
194
|
+
requiresConfirmation: false,
|
|
195
|
+
approvalFlow: "auto",
|
|
196
|
+
isReadOnly: true,
|
|
197
|
+
},
|
|
168
198
|
});
|
|
169
199
|
|
|
170
200
|
function normalizeGitCommand(command) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as fe,W as f,Z as t,X as d,$ as ve,a0 as ge,Y as i,k as e,a1 as a,a2 as w,a3 as r,a4 as S,F as j,u as s,a5 as g,G as l,a6 as be,a7 as Oe,f as Ce,c as m}from"./vendor-CN0Iv_qZ.js";import{u as we}from"./ws-Dma34ig_.js";import{u as je,T as Te}from"./index-ByUk2Wmr.js";import{_ as Se}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as B,G as x,D as M,M as F,R as K,C as P,b as A,c as G,d as I,e as W,B as D,f as V,h as z,T as E,S as U,L as $,W as H,i as X,j as Y,P as Z,k as q,l as J,m as Q,n as h,o as ee,K as te,I as Be}from"./antd-D6h4fDFf.js";const xe={key:0,class:"logo-text"},Le={key:0,class:"mode-banner project"},Ne={class:"banner-info"},Re={class:"banner-name"},Me={key:1,class:"mode-banner global"},Fe=["title"],Ke={key:0,class:"footer-text"},Pe={class:"header-left"},Ae={class:"header-right"},Ge={class:"theme-switcher"},Ie=["data-theme-key","onClick"],We={__name:"AppLayout",setup(De){const oe=ve(),se=ge(),b=we(),T=je(),u=Ce(!1),y=window.__CC_CONFIG__||{},p=m(()=>y.mode==="project"),ne=m(()=>T.current),le=m(()=>T.config.vars["--menu-mode"]),L=m(()=>{const c=se.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[c]||c]}),O=m(()=>b.status),ae=m(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[b.status]||"default"),ie=m(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[b.status]||"未知");function de(c){T.setTheme(c)}function ue({key:c}){oe.push({mcp:"/mcp"}[c]||`/${c}`)}return fe(()=>b.connect()),(c,o)=>{const n=d("a-menu-item"),k=d("a-menu-item-group"),v=d("a-menu-divider"),re=d("a-menu"),ce=d("a-badge"),pe=d("a-layout-sider"),N=d("a-tooltip"),me=d("a-tag"),ye=d("a-layout-header"),ke=d("router-view"),_e=d("a-layout-content"),R=d("a-layout");return i(),f(R,{class:"app-root"},{default:t(()=>[e(pe,{collapsed:u.value,"onUpdate:collapsed":o[1]||(o[1]=_=>u.value=_),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:w(["logo",{collapsed:u.value}])},[o[2]||(o[2]=a("span",{class:"logo-icon"},"⛓",-1)),u.value?S("",!0):(i(),r("span",xe,"ChainlessChain"))],2),u.value?(i(),r("div",{key:1,class:"mode-icon-sm",title:p.value?s(y).projectName:"全局模式"},[p.value?(i(),f(s(B),{key:0,style:{color:"#1677ff"}})):(i(),f(s(x),{key:1,style:{color:"#722ed1"}}))],8,Fe)):(i(),r(j,{key:0},[p.value?(i(),r("div",Le,[e(s(B),{class:"banner-icon"}),a("div",Ne,[a("div",Re,g(s(y).projectName||"项目"),1),o[3]||(o[3]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(i(),r("div",Me,[e(s(x),{class:"banner-icon"}),o[4]||(o[4]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(re,{selectedKeys:L.value,"onUpdate:selectedKeys":o[0]||(o[0]=_=>L.value=_),theme:le.value,mode:"inline","inline-collapsed":u.value,class:"side-menu",onClick:ue},{default:t(()=>[u.value?(i(),r(j,{key:1},[e(n,{key:"dashboard"},{icon:t(()=>[e(s(M))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(F))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(K))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(P))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(A))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"skills"},{icon:t(()=>[e(s(G))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(I))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(W))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"notes"},{icon:t(()=>[e(s(D))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(E))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"security"},{icon:t(()=>[e(s(U))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s($))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(H))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Y))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(Z))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"wallet"},{icon:t(()=>[e(s(q))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(J))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(Q))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(h))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"rssfeed"},{icon:t(()=>[e(s(ee))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(te))]),_:1})],64)):(i(),r(j,{key:0},[e(k,null,{title:t(()=>[...o[5]||(o[5]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(n,{key:"dashboard"},{icon:t(()=>[e(s(M))]),default:t(()=>[o[6]||(o[6]=l("仪表板",-1))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(F))]),default:t(()=>[o[7]||(o[7]=l("AI 对话",-1))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(K))]),default:t(()=>[o[8]||(o[8]=l("日常协作",-1))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(P))]),default:t(()=>[o[9]||(o[9]=l("服务管理",-1))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(A))]),default:t(()=>[o[10]||(o[10]=l("日志查看",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[11]||(o[11]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(n,{key:"skills"},{icon:t(()=>[e(s(G))]),default:t(()=>[o[12]||(o[12]=l("技能管理",-1))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(I))]),default:t(()=>[o[13]||(o[13]=l("LLM 配置",-1))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(W))]),default:t(()=>[o[14]||(o[14]=l("MCP 工具",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[15]||(o[15]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(n,{key:"notes"},{icon:t(()=>[e(s(D))]),default:t(()=>[o[16]||(o[16]=l("笔记管理",-1))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),default:t(()=>[o[17]||(o[17]=l("记忆文件",-1))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),default:t(()=>[o[18]||(o[18]=l("定时任务",-1))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(E))]),default:t(()=>[o[19]||(o[19]=l("后台任务",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[20]||(o[20]=[a("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(n,{key:"security"},{icon:t(()=>[e(s(U))]),default:t(()=>[o[21]||(o[21]=l("安全中心",-1))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s($))]),default:t(()=>[o[22]||(o[22]=l("权限管理",-1))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(H))]),default:t(()=>[o[23]||(o[23]=l("P2P 网络",-1))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),default:t(()=>[o[24]||(o[24]=l("备份同步",-1))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Y))]),default:t(()=>[o[25]||(o[25]=l("Git 与数据",-1))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(Z))]),default:t(()=>[o[26]||(o[26]=l("项目管理",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[27]||(o[27]=[a("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(n,{key:"wallet"},{icon:t(()=>[e(s(q))]),default:t(()=>[o[28]||(o[28]=l("钱包管理",-1))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(J))]),default:t(()=>[o[29]||(o[29]=l("组织管理",-1))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(Q))]),default:t(()=>[o[30]||(o[30]=l("使用分析",-1))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(h))]),default:t(()=>[o[31]||(o[31]=l("模板中心",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[32]||(o[32]=[a("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(n,{key:"rssfeed"},{icon:t(()=>[e(s(ee))]),default:t(()=>[o[33]||(o[33]=l("RSS 订阅",-1))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(te))]),default:t(()=>[o[34]||(o[34]=l("身份认证",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","theme","inline-collapsed"]),a("div",{class:w(["sidebar-footer",{collapsed:u.value}])},[e(ce,{status:ae.value},null,8,["status"]),u.value?S("",!0):(i(),r("span",Ke,g(ie.value),1))],2)]),_:1},8,["collapsed"]),e(R,{class:"main-area"},{default:t(()=>[e(ye,{class:"app-header"},{default:t(()=>[a("div",Pe,[a("div",{class:w(["scope-tag",p.value?"project":"global"])},[(i(),f(be(p.value?s(B):s(x)))),a("span",null,g(p.value?s(y).projectName||"项目":"全局模式"),1),p.value&&s(y).projectRoot?(i(),f(N,{key:0,title:s(y).projectRoot},{default:t(()=>[e(s(Be),{class:"info-icon"})]),_:1},8,["title"])):S("",!0)],2)]),a("div",Ae,[a("div",Ge,[(i(!0),r(j,null,Oe(s(Te),(_,C)=>(i(),f(N,{key:C,title:_.label},{default:t(()=>[a("button",{class:w(["theme-btn",{active:ne.value===C}]),"data-theme-key":C,onClick:Ve=>de(C)},g(_.icon),11,Ie)]),_:2},1032,["title"]))),128))]),o[35]||(o[35]=a("span",{class:"version-tag"},"v5.0.2.9",-1)),e(me,{color:O.value==="connected"?"green":O.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(g(O.value==="connected"?"已连接":O.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(_e,{class:"page-content"},{default:t(()=>[e(ke)]),_:1})]),_:1})]),_:1})}}},Xe=Se(We,[["__scopeId","data-v-2d496e96"]]);export{Xe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.app-root[data-v-2d496e96]{min-height:100vh;background:var(--bg-base)}.sidebar[data-v-2d496e96]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s}[data-v-2d496e96] .ant-layout-sider-children{display:flex;flex-direction:column;overflow:hidden}.main-area[data-v-2d496e96]{background:var(--bg-base)}.logo[data-v-2d496e96]{height:52px;display:flex;align-items:center;padding:0 18px;gap:10px;border-bottom:1px solid var(--border-color);overflow:hidden;white-space:nowrap;flex-shrink:0}.logo.collapsed[data-v-2d496e96]{padding:0;justify-content:center}.logo-icon[data-v-2d496e96]{font-size:20px;flex-shrink:0}.logo-text[data-v-2d496e96]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-2d496e96]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-2d496e96]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-2d496e96]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-2d496e96]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-2d496e96]{color:#722ed1}.banner-info[data-v-2d496e96]{flex:1;min-width:0}.banner-name[data-v-2d496e96]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-2d496e96]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-2d496e96]{color:#c084fc}.mode-icon-sm[data-v-2d496e96]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-2d496e96]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important;flex:1;overflow-y:auto;overflow-x:hidden}.group-label[data-v-2d496e96]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-2d496e96] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-2d496e96] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-2d496e96]{margin:4px 0!important}.sidebar-footer[data-v-2d496e96]{flex-shrink:0;padding:8px 18px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border-color)}.sidebar-footer.collapsed[data-v-2d496e96]{justify-content:center;padding:8px 0}.footer-text[data-v-2d496e96]{color:var(--text-secondary);font-size:11px}.app-header[data-v-2d496e96]{background:var(--bg-header)!important;padding:0 20px!important;border-bottom:1px solid var(--border-color);height:50px!important;line-height:50px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;box-shadow:0 1px 4px #0000000f}.header-left[data-v-2d496e96],.header-right[data-v-2d496e96]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-2d496e96]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-2d496e96]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-2d496e96]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-2d496e96]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-2d496e96]{display:flex;align-items:center;gap:4px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:20px;padding:3px 6px}.theme-btn[data-v-2d496e96]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;opacity:.55}.theme-btn[data-v-2d496e96]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-2d496e96]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-2d496e96]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-2d496e96]{margin:0!important;font-size:11px}.page-content[data-v-2d496e96]{padding:24px;overflow:auto;background:var(--bg-base);min-height:calc(100vh - 50px)}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{V as Tn,w as tn,f as I,c as He,o as En,a3 as T,a1 as f,k as N,u as r,F as ie,a7 as le,a2 as ke,A as lt,a5 as v,a4 as V,G as Q,W as te,a6 as rt,Z as W,a9 as An,X as _e,Y as p,n as Wt}from"./vendor-CN0Iv_qZ.js";import{m as Yt,H as ct}from"./markdown-BZsB-Dsv.js";/* empty css */import{u as ut}from"./ws-Dma34ig_.js";import{u as he}from"./chat-BYmuDvol.js";import{_ as yn}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as Me,T as vn,v as $t,H as Sn,o as On,G as Rn,r as bn,j as wn,w as Cn,x as Dn,m as Ln,y as kn,b as Mn,s as In,u as xn}from"./antd-D6h4fDFf.js";const{entries:nn,setPrototypeOf:Vt,isFrozen:Nn,getPrototypeOf:Pn,getOwnPropertyDescriptor:Fn}=Object;let{freeze:F,seal:Y,create:Ue}=Object,{apply:gt,construct:Tt}=typeof Reflect<"u"&&Reflect;F||(F=function(t){return t});Y||(Y=function(t){return t});gt||(gt=function(t,c){for(var l=arguments.length,_=new Array(l>2?l-2:0),E=2;E<l;E++)_[E-2]=arguments[E];return t.apply(c,_)});Tt||(Tt=function(t){for(var c=arguments.length,l=new Array(c>1?c-1:0),_=1;_<c;_++)l[_-1]=arguments[_];return new t(...l)});const Ie=U(Array.prototype.forEach),Un=U(Array.prototype.lastIndexOf),Xt=U(Array.prototype.pop),xe=U(Array.prototype.push),Hn=U(Array.prototype.splice),je=U(String.prototype.toLowerCase),ft=U(String.prototype.toString),dt=U(String.prototype.match),ye=U(String.prototype.replace),zn=U(String.prototype.indexOf),Gn=U(String.prototype.trim),X=U(Object.prototype.hasOwnProperty),P=U(RegExp.prototype.test),Ne=Bn(TypeError);function U(u){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var c=arguments.length,l=new Array(c>1?c-1:0),_=1;_<c;_++)l[_-1]=arguments[_];return gt(u,t,l)}}function Bn(u){return function(){for(var t=arguments.length,c=new Array(t),l=0;l<t;l++)c[l]=arguments[l];return Tt(u,c)}}function m(u,t){let c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:je;Vt&&Vt(u,null);let l=t.length;for(;l--;){let _=t[l];if(typeof _=="string"){const E=c(_);E!==_&&(Nn(t)||(t[l]=E),_=E)}u[_]=!0}return u}function Wn(u){for(let t=0;t<u.length;t++)X(u,t)||(u[t]=null);return u}function Z(u){const t=Ue(null);for(const[c,l]of nn(u))X(u,c)&&(Array.isArray(l)?t[c]=Wn(l):l&&typeof l=="object"&&l.constructor===Object?t[c]=Z(l):t[c]=l);return t}function Pe(u,t){for(;u!==null;){const l=Fn(u,t);if(l){if(l.get)return U(l.get);if(typeof l.value=="function")return U(l.value)}u=Pn(u)}function c(){return null}return c}const jt=F(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),pt=F(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),mt=F(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Yn=F(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),_t=F(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),$n=F(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),qt=F(["#text"]),Kt=F(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),ht=F(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Qt=F(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Xe=F(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Vn=Y(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Xn=Y(/<%[\w\W]*|[\w\W]*%>/gm),jn=Y(/\$\{[\w\W]*/gm),qn=Y(/^data-[\-\w.\u00B7-\uFFFF]+$/),Kn=Y(/^aria-[\-\w]+$/),sn=Y(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Qn=Y(/^(?:\w+script|data):/i),Zn=Y(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),an=Y(/^html$/i),Jn=Y(/^[a-z][.\w]*(-[.\w]+)+$/i);var Zt=Object.freeze({__proto__:null,ARIA_ATTR:Kn,ATTR_WHITESPACE:Zn,CUSTOM_ELEMENT:Jn,DATA_ATTR:qn,DOCTYPE_NAME:an,ERB_EXPR:Xn,IS_ALLOWED_URI:sn,IS_SCRIPT_OR_DATA:Qn,MUSTACHE_EXPR:Vn,TMPLIT_EXPR:jn});const Fe={element:1,text:3,progressingInstruction:7,comment:8,document:9},es=function(){return typeof window>"u"?null:window},ts=function(t,c){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let l=null;const _="data-tt-policy-suffix";c&&c.hasAttribute(_)&&(l=c.getAttribute(_));const E="dompurify"+(l?"#"+l:"");try{return t.createPolicy(E,{createHTML(x){return x},createScriptURL(x){return x}})}catch{return console.warn("TrustedTypes policy "+E+" could not be created."),null}},Jt=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function on(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:es();const t=i=>on(i);if(t.version="3.4.0",t.removed=[],!u||!u.document||u.document.nodeType!==Fe.document||!u.Element)return t.isSupported=!1,t;let{document:c}=u;const l=c,_=l.currentScript,{DocumentFragment:E,HTMLTemplateElement:x,Node:S,Element:z,NodeFilter:B,NamedNodeMap:re=u.NamedNodeMap||u.MozNamedAttrMap,HTMLFormElement:ve,DOMParser:ce,trustedTypes:J}=u,j=z.prototype,Se=Pe(j,"cloneNode"),Oe=Pe(j,"remove"),ne=Pe(j,"nextSibling"),ue=Pe(j,"childNodes"),A=Pe(j,"parentNode");if(typeof x=="function"){const i=c.createElement("template");i.content&&i.content.ownerDocument&&(c=i.content.ownerDocument)}let o,C="";const{implementation:fe,createNodeIterator:Re,createDocumentFragment:be,getElementsByTagName:d}=c,{importNode:h}=l;let g=Jt();t.isSupported=typeof nn=="function"&&typeof A=="function"&&fe&&fe.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:a,ERB_EXPR:k,TMPLIT_EXPR:se,DATA_ATTR:ln,ARIA_ATTR:rn,IS_SCRIPT_OR_DATA:cn,ATTR_WHITESPACE:Et,CUSTOM_ELEMENT:un}=Zt;let{IS_ALLOWED_URI:At}=Zt,w=null;const yt=m({},[...jt,...pt,...mt,..._t,...qt]);let D=null;const vt=m({},[...Kt,...ht,...Qt,...Xe]);let O=Object.seal(Ue(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),we=null,ze=null;const ae=Object.seal(Ue(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let St=!0,qe=!0,Ot=!1,Rt=!0,de=!1,Ce=!0,pe=!1,Ke=!1,Qe=!1,ge=!1,Ge=!1,Be=!1,bt=!0,wt=!1;const fn="user-content-";let Ze=!0,De=!1,Te={},q=null;const Je=m({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Ct=null;const Dt=m({},["audio","video","img","source","image","track"]);let et=null;const Lt=m({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),We="http://www.w3.org/1998/Math/MathML",Ye="http://www.w3.org/2000/svg",K="http://www.w3.org/1999/xhtml";let Ee=K,tt=!1,nt=null;const dn=m({},[We,Ye,K],ft);let $e=m({},["mi","mo","mn","ms","mtext"]),Ve=m({},["annotation-xml"]);const pn=m({},["title","style","font","a","script"]);let Le=null;const mn=["application/xhtml+xml","text/html"],_n="text/html";let b=null,Ae=null;const hn=c.createElement("form"),kt=function(e){return e instanceof RegExp||e instanceof Function},st=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Ae&&Ae===e)){if((!e||typeof e!="object")&&(e={}),e=Z(e),Le=mn.indexOf(e.PARSER_MEDIA_TYPE)===-1?_n:e.PARSER_MEDIA_TYPE,b=Le==="application/xhtml+xml"?ft:je,w=X(e,"ALLOWED_TAGS")?m({},e.ALLOWED_TAGS,b):yt,D=X(e,"ALLOWED_ATTR")?m({},e.ALLOWED_ATTR,b):vt,nt=X(e,"ALLOWED_NAMESPACES")?m({},e.ALLOWED_NAMESPACES,ft):dn,et=X(e,"ADD_URI_SAFE_ATTR")?m(Z(Lt),e.ADD_URI_SAFE_ATTR,b):Lt,Ct=X(e,"ADD_DATA_URI_TAGS")?m(Z(Dt),e.ADD_DATA_URI_TAGS,b):Dt,q=X(e,"FORBID_CONTENTS")?m({},e.FORBID_CONTENTS,b):Je,we=X(e,"FORBID_TAGS")?m({},e.FORBID_TAGS,b):Z({}),ze=X(e,"FORBID_ATTR")?m({},e.FORBID_ATTR,b):Z({}),Te=X(e,"USE_PROFILES")?e.USE_PROFILES:!1,St=e.ALLOW_ARIA_ATTR!==!1,qe=e.ALLOW_DATA_ATTR!==!1,Ot=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Rt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,de=e.SAFE_FOR_TEMPLATES||!1,Ce=e.SAFE_FOR_XML!==!1,pe=e.WHOLE_DOCUMENT||!1,ge=e.RETURN_DOM||!1,Ge=e.RETURN_DOM_FRAGMENT||!1,Be=e.RETURN_TRUSTED_TYPE||!1,Qe=e.FORCE_BODY||!1,bt=e.SANITIZE_DOM!==!1,wt=e.SANITIZE_NAMED_PROPS||!1,Ze=e.KEEP_CONTENT!==!1,De=e.IN_PLACE||!1,At=e.ALLOWED_URI_REGEXP||sn,Ee=e.NAMESPACE||K,$e=e.MATHML_TEXT_INTEGRATION_POINTS||$e,Ve=e.HTML_INTEGRATION_POINTS||Ve,O=e.CUSTOM_ELEMENT_HANDLING||Ue(null),e.CUSTOM_ELEMENT_HANDLING&&kt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(O.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&kt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(O.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(O.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),de&&(qe=!1),Ge&&(ge=!0),Te&&(w=m({},qt),D=Ue(null),Te.html===!0&&(m(w,jt),m(D,Kt)),Te.svg===!0&&(m(w,pt),m(D,ht),m(D,Xe)),Te.svgFilters===!0&&(m(w,mt),m(D,ht),m(D,Xe)),Te.mathMl===!0&&(m(w,_t),m(D,Qt),m(D,Xe))),ae.tagCheck=null,ae.attributeCheck=null,e.ADD_TAGS&&(typeof e.ADD_TAGS=="function"?ae.tagCheck=e.ADD_TAGS:(w===yt&&(w=Z(w)),m(w,e.ADD_TAGS,b))),e.ADD_ATTR&&(typeof e.ADD_ATTR=="function"?ae.attributeCheck=e.ADD_ATTR:(D===vt&&(D=Z(D)),m(D,e.ADD_ATTR,b))),e.ADD_URI_SAFE_ATTR&&m(et,e.ADD_URI_SAFE_ATTR,b),e.FORBID_CONTENTS&&(q===Je&&(q=Z(q)),m(q,e.FORBID_CONTENTS,b)),e.ADD_FORBID_CONTENTS&&(q===Je&&(q=Z(q)),m(q,e.ADD_FORBID_CONTENTS,b)),Ze&&(w["#text"]=!0),pe&&m(w,["html","head","body"]),w.table&&(m(w,["tbody"]),delete we.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ne('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ne('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');o=e.TRUSTED_TYPES_POLICY,C=o.createHTML("")}else o===void 0&&(o=ts(J,_)),o!==null&&typeof C=="string"&&(C=o.createHTML(""));F&&F(e),Ae=e}},Mt=m({},[...pt,...mt,...Yn]),It=m({},[..._t,...$n]),gn=function(e){let n=A(e);(!n||!n.tagName)&&(n={namespaceURI:Ee,tagName:"template"});const s=je(e.tagName),y=je(n.tagName);return nt[e.namespaceURI]?e.namespaceURI===Ye?n.namespaceURI===K?s==="svg":n.namespaceURI===We?s==="svg"&&(y==="annotation-xml"||$e[y]):!!Mt[s]:e.namespaceURI===We?n.namespaceURI===K?s==="math":n.namespaceURI===Ye?s==="math"&&Ve[y]:!!It[s]:e.namespaceURI===K?n.namespaceURI===Ye&&!Ve[y]||n.namespaceURI===We&&!$e[y]?!1:!It[s]&&(pn[s]||!Mt[s]):!!(Le==="application/xhtml+xml"&&nt[e.namespaceURI]):!1},$=function(e){xe(t.removed,{element:e});try{A(e).removeChild(e)}catch{Oe(e)}},me=function(e,n){try{xe(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{xe(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e==="is")if(ge||Ge)try{$(n)}catch{}else try{n.setAttribute(e,"")}catch{}},xt=function(e){let n=null,s=null;if(Qe)e="<remove></remove>"+e;else{const R=dt(e,/^[\r\n\t ]+/);s=R&&R[0]}Le==="application/xhtml+xml"&&Ee===K&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");const y=o?o.createHTML(e):e;if(Ee===K)try{n=new ce().parseFromString(y,Le)}catch{}if(!n||!n.documentElement){n=fe.createDocument(Ee,"template",null);try{n.documentElement.innerHTML=tt?C:y}catch{}}const M=n.body||n.documentElement;return e&&s&&M.insertBefore(c.createTextNode(s),M.childNodes[0]||null),Ee===K?d.call(n,pe?"html":"body")[0]:pe?n.documentElement:M},Nt=function(e){return Re.call(e.ownerDocument||e,e,B.SHOW_ELEMENT|B.SHOW_COMMENT|B.SHOW_TEXT|B.SHOW_PROCESSING_INSTRUCTION|B.SHOW_CDATA_SECTION,null)},at=function(e){return e instanceof ve&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof re)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},ot=function(e){return typeof S=="function"&&e instanceof S};function ee(i,e,n){Ie(i,s=>{s.call(t,e,n,Ae)})}const Pt=function(e){let n=null;if(ee(g.beforeSanitizeElements,e,null),at(e))return $(e),!0;const s=b(e.nodeName);if(ee(g.uponSanitizeElement,e,{tagName:s,allowedTags:w}),Ce&&e.hasChildNodes()&&!ot(e.firstElementChild)&&P(/<[/\w!]/g,e.innerHTML)&&P(/<[/\w!]/g,e.textContent)||Ce&&e.namespaceURI===K&&s==="style"&&ot(e.firstElementChild)||e.nodeType===Fe.progressingInstruction||Ce&&e.nodeType===Fe.comment&&P(/<[/\w]/g,e.data))return $(e),!0;if(we[s]||!(ae.tagCheck instanceof Function&&ae.tagCheck(s))&&!w[s]){if(!we[s]&&Ut(s)&&(O.tagNameCheck instanceof RegExp&&P(O.tagNameCheck,s)||O.tagNameCheck instanceof Function&&O.tagNameCheck(s)))return!1;if(Ze&&!q[s]){const y=A(e)||e.parentNode,M=ue(e)||e.childNodes;if(M&&y){const R=M.length;for(let H=R-1;H>=0;--H){const G=Se(M[H],!0);G.__removalCount=(e.__removalCount||0)+1,y.insertBefore(G,ne(e))}}}return $(e),!0}return e instanceof z&&!gn(e)||(s==="noscript"||s==="noembed"||s==="noframes")&&P(/<\/no(script|embed|frames)/i,e.innerHTML)?($(e),!0):(de&&e.nodeType===Fe.text&&(n=e.textContent,Ie([a,k,se],y=>{n=ye(n,y," ")}),e.textContent!==n&&(xe(t.removed,{element:e.cloneNode()}),e.textContent=n)),ee(g.afterSanitizeElements,e,null),!1)},Ft=function(e,n,s){if(ze[n]||bt&&(n==="id"||n==="name")&&(s in c||s in hn))return!1;if(!(qe&&!ze[n]&&P(ln,n))){if(!(St&&P(rn,n))){if(!(ae.attributeCheck instanceof Function&&ae.attributeCheck(n,e))){if(!D[n]||ze[n]){if(!(Ut(e)&&(O.tagNameCheck instanceof RegExp&&P(O.tagNameCheck,e)||O.tagNameCheck instanceof Function&&O.tagNameCheck(e))&&(O.attributeNameCheck instanceof RegExp&&P(O.attributeNameCheck,n)||O.attributeNameCheck instanceof Function&&O.attributeNameCheck(n,e))||n==="is"&&O.allowCustomizedBuiltInElements&&(O.tagNameCheck instanceof RegExp&&P(O.tagNameCheck,s)||O.tagNameCheck instanceof Function&&O.tagNameCheck(s))))return!1}else if(!et[n]){if(!P(At,ye(s,Et,""))){if(!((n==="src"||n==="xlink:href"||n==="href")&&e!=="script"&&zn(s,"data:")===0&&Ct[e])){if(!(Ot&&!P(cn,ye(s,Et,"")))){if(s)return!1}}}}}}}return!0},Ut=function(e){return e!=="annotation-xml"&&dt(e,un)},Ht=function(e){ee(g.beforeSanitizeAttributes,e,null);const{attributes:n}=e;if(!n||at(e))return;const s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:D,forceKeepAttr:void 0};let y=n.length;for(;y--;){const M=n[y],{name:R,namespaceURI:H,value:G}=M,oe=b(R),it=G;let L=R==="value"?it:Gn(it);if(s.attrName=oe,s.attrValue=L,s.keepAttr=!0,s.forceKeepAttr=void 0,ee(g.uponSanitizeAttribute,e,s),L=s.attrValue,wt&&(oe==="id"||oe==="name")&&(me(R,e),L=fn+L),Ce&&P(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,L)){me(R,e);continue}if(oe==="attributename"&&dt(L,"href")){me(R,e);continue}if(s.forceKeepAttr)continue;if(!s.keepAttr){me(R,e);continue}if(!Rt&&P(/\/>/i,L)){me(R,e);continue}de&&Ie([a,k,se],Bt=>{L=ye(L,Bt," ")});const Gt=b(e.nodeName);if(!Ft(Gt,oe,L)){me(R,e);continue}if(o&&typeof J=="object"&&typeof J.getAttributeType=="function"&&!H)switch(J.getAttributeType(Gt,oe)){case"TrustedHTML":{L=o.createHTML(L);break}case"TrustedScriptURL":{L=o.createScriptURL(L);break}}if(L!==it)try{H?e.setAttributeNS(H,R,L):e.setAttribute(R,L),at(e)?$(e):Xt(t.removed)}catch{me(R,e)}}ee(g.afterSanitizeAttributes,e,null)},zt=function(e){let n=null;const s=Nt(e);for(ee(g.beforeSanitizeShadowDOM,e,null);n=s.nextNode();)ee(g.uponSanitizeShadowNode,n,null),Pt(n),Ht(n),n.content instanceof E&&zt(n.content);ee(g.afterSanitizeShadowDOM,e,null)};return t.sanitize=function(i){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=null,s=null,y=null,M=null;if(tt=!i,tt&&(i="<!-->"),typeof i!="string"&&!ot(i))if(typeof i.toString=="function"){if(i=i.toString(),typeof i!="string")throw Ne("dirty is not a string, aborting")}else throw Ne("toString is not a function");if(!t.isSupported)return i;if(Ke||st(e),t.removed=[],typeof i=="string"&&(De=!1),De){if(i.nodeName){const G=b(i.nodeName);if(!w[G]||we[G])throw Ne("root node is forbidden and cannot be sanitized in-place")}}else if(i instanceof S)n=xt("<!---->"),s=n.ownerDocument.importNode(i,!0),s.nodeType===Fe.element&&s.nodeName==="BODY"||s.nodeName==="HTML"?n=s:n.appendChild(s);else{if(!ge&&!de&&!pe&&i.indexOf("<")===-1)return o&&Be?o.createHTML(i):i;if(n=xt(i),!n)return ge?null:Be?C:""}n&&Qe&&$(n.firstChild);const R=Nt(De?i:n);for(;y=R.nextNode();)Pt(y),Ht(y),y.content instanceof E&&zt(y.content);if(De)return i;if(ge){if(de){n.normalize();let G=n.innerHTML;Ie([a,k,se],oe=>{G=ye(G,oe," ")}),n.innerHTML=G}if(Ge)for(M=be.call(n.ownerDocument);n.firstChild;)M.appendChild(n.firstChild);else M=n;return(D.shadowroot||D.shadowrootmode)&&(M=h.call(l,M,!0)),M}let H=pe?n.outerHTML:n.innerHTML;return pe&&w["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&P(an,n.ownerDocument.doctype.name)&&(H="<!DOCTYPE "+n.ownerDocument.doctype.name+`>
|
|
2
|
-
`+H),de&&Ie([a,k,se],G=>{H=ye(H,G," ")}),o&&Be?o.createHTML(H):H},t.setConfig=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};st(i),Ke=!0},t.clearConfig=function(){Ae=null,Ke=!1},t.isValidAttribute=function(i,e,n){Ae||st({});const s=b(i),y=b(e);return Ft(s,y,n)},t.addHook=function(i,e){typeof e=="function"&&xe(g[i],e)},t.removeHook=function(i,e){if(e!==void 0){const n=Un(g[i],e);return n===-1?void 0:Hn(g[i],n,1)[0]}return Xt(g[i])},t.removeHooks=function(i){g[i]=[]},t.removeAllHooks=function(){g=Jt()},t}var en=on();const ns=[{id:"doc-convert",name:"文档格式转换",icon:"FileTextOutlined",category:"document",description:"Word、Markdown、HTML、PDF 之间的格式互转",examples:["把 report.docx 转成 PDF","合并多个 Markdown 为一个文档"],acceptsFiles:!0},{id:"media-process",name:"音视频处理",icon:"PlayCircleOutlined",category:"media",description:"视频压缩、音频提取、格式转换、剪辑",examples:["提取 MP4 的音频","压缩视频到 50MB 以内"],acceptsFiles:!0},{id:"data-analysis",name:"数据分析",icon:"BarChartOutlined",category:"data",description:"CSV/Excel 分析、统计、可视化图表",examples:["分析 sales.csv 的月度趋势"],acceptsFiles:!0},{id:"web-research",name:"信息检索与调研",icon:"SearchOutlined",category:"research",description:"网页抓取、API 调用、多源信息汇总",examples:["调研 AI Agent 框架对比"],acceptsFiles:!1},{id:"image-process",name:"图片处理",icon:"PictureOutlined",category:"media",description:"批量压缩、格式转换、加水印、OCR",examples:["批量压缩到 500KB"],acceptsFiles:!0},{id:"code-helper",name:"代码辅助",icon:"CodeOutlined",category:"development",description:"生成脚本、调试代码、自动化任务",examples:["写一个批量重命名脚本"],acceptsFiles:!0},{id:"system-admin",name:"系统运维",icon:"DesktopOutlined",category:"system",description:"磁盘分析、进程管理、日志分析",examples:["查看磁盘使用情况"],acceptsFiles:!1},{id:"file-organize",name:"文件整理",icon:"FolderOpenOutlined",category:"file",description:"批量重命名、分类整理、查找重复",examples:["按文件类型分类整理"],acceptsFiles:!1},{id:"network-tools",name:"网络工具",icon:"GlobalOutlined",category:"network",description:"API 调试、网页抓取、网络诊断",examples:["测试 API 接口"],acceptsFiles:!1},{id:"learning-assist",name:"学习辅助",icon:"ReadOutlined",category:"learning",description:"文档翻译、内容总结、论文分析",examples:["翻译 PDF 摘要"],acceptsFiles:!0}],ss=Tn("cowork",()=>{const u=I(ns),t=I(null),c=I([]),l=I(!1),_=I([]),E=I([]),x=I(null),S=I(null),z=I(null),B=I([]),re=he();tn(()=>re.isLoading,d=>{!d&&S.value&&(l.value=!1)});function ve(d){t.value=d,ce()}function ce(){_.value=[],E.value=[],x.value=null,l.value=!1,S.value=null,z.value=null}function J(d){c.value.includes(d)||c.value.push(d)}function j(d){c.value=c.value.filter(h=>h!==d)}async function Se(){const d=ut();try{await d.waitConnected(5e3);const h=await d.sendRaw({type:"cowork-templates"},1e4);h?.templates?.length&&(u.value=h.templates)}catch{}}async function Oe(){const d=ut();try{await d.waitConnected(5e3);const h=await d.sendRaw({type:"cowork-history",limit:50},1e4);h?.entries&&(B.value=h.entries)}catch{}}async function ne(d){z.value={mode:"session",message:d},l.value=!0;const h=t.value;let g="";h&&(g=`## 当前任务类型: ${h.name}
|
|
3
|
-
${h.description||""}`);let a=d;c.value.length&&(a+=`
|
|
4
|
-
|
|
5
|
-
[用户提供的文件: ${c.value.join(", ")}]`),E.value.push({role:"user",content:d,timestamp:Date.now()});const k={systemPromptExtension:g};h?.shellPolicyOverrides&&(k.shellPolicyOverrides=h.shellPolicyOverrides);const se=await re.createSession("agent",k);S.value=se,await re.sendMessage(se,a)}async function ue(d){z.value={mode:"direct",message:d};const h=ut();l.value=!0,E.value.push({role:"user",content:d,timestamp:Date.now()});try{await h.waitConnected(8e3);const g=await h.sendRaw({type:"cowork-task",templateId:t.value?.id||null,userMessage:d,files:c.value},3e5);E.value.push({role:"assistant",content:g.summary||"(No output)",timestamp:Date.now(),toolsUsed:g.toolsUsed||[],iterationCount:g.iterationCount||0}),x.value=g}catch(g){E.value.push({role:"assistant",content:`Error: ${g.message}`,timestamp:Date.now()})}finally{l.value=!1}}const A=He(()=>S.value?he().getMessages(S.value):[]),o=He(()=>{if(!S.value)return null;const h=he().streaming[S.value];return h?.active?h.content:null}),C=He(()=>S.value&&he().pendingQuestion[S.value]||null);function fe(d){if(!S.value)return;he().answerQuestion(S.value,d)}async function Re(){if(!z.value)return;const{mode:d,message:h}=z.value;d==="direct"?await ue(h):await ne(h)}async function be(d){if(!S.value)return;const h=he();E.value.push({role:"user",content:d,timestamp:Date.now()});let g=d;c.value.length&&(g+=`
|
|
6
|
-
|
|
7
|
-
[用户提供的文件: ${c.value.join(", ")}]`),await h.sendMessage(S.value,g)}return{selectedTemplate:t,files:c,isRunning:l,steps:_,messages:E,result:x,agentSessionId:S,currentAgentMessages:A,currentStreaming:o,currentQuestion:C,selectTemplate:ve,reset:ce,addFile:J,removeFile:j,execute:ne,executeDirectWs:ue,sendFollowUp:be,answerQuestion:fe,loadTemplates:Se,templates:u,lastRequest:z,retry:Re,history:B,loadHistory:Oe}}),as={class:"cowork-root"},os={class:"template-panel"},is={class:"template-header"},ls={class:"template-list"},rs=["onClick"],cs={class:"card-icon"},us={class:"card-body"},fs={class:"card-name"},ds={class:"card-desc"},ps={class:"card-icon"},ms={class:"drop-text"},_s={key:0,class:"file-list"},hs={key:1,class:"history-section"},gs={key:0,class:"history-list"},Ts={class:"history-summary"},Es={class:"history-meta"},As={class:"exec-panel"},ys={key:0,class:"empty-state"},vs={class:"empty-icon"},Ss={class:"example-grid"},Os=["onClick"],Rs={key:1,class:"ready-state"},bs={class:"ready-header"},ws={class:"ready-name"},Cs={class:"ready-examples"},Ds=["onClick"],Ls={key:0,class:"tool-msg"},ks={class:"tool-input"},Ms={key:0,class:"tool-result-box"},Is={class:"tool-result"},xs={key:1,class:"user-msg"},Ns={class:"bubble user"},Ps={key:2,class:"assistant-msg"},Fs=["innerHTML"],Us={key:0,class:"assistant-msg"},Hs=["innerHTML"],zs={key:1,class:"question-card"},Gs={class:"question-text"},Bs={key:0,class:"question-choices"},Ws={key:3,class:"task-stats"},Ys={class:"input-area"},$s={key:0,class:"input-context"},Vs={class:"input-row"},Xs={__name:"Cowork",setup(u){Yt.setOptions({highlight:(A,o)=>o&&ct.getLanguage(o)?ct.highlight(A,{language:o}).value:ct.highlightAuto(A).value,breaks:!0});const t=ss(),c=he(),l=I(""),_=I(null),E=I(!1),x=I(""),S=I(!1),z=I(!1),B={FileTextOutlined:Mn,PlayCircleOutlined:kn,BarChartOutlined:Ln,SearchOutlined:Dn,PictureOutlined:Cn,CodeOutlined:wn,DesktopOutlined:bn,FolderOpenOutlined:$t,GlobalOutlined:Rn,ReadOutlined:On},re=["把 report.docx 转成 PDF","压缩视频到 50MB","分析 CSV 生成图表","查询今天的汇率","批量压缩图片","写一个自动化脚本"],ve=He(()=>c.isLoading?"等待响应中...":t.selectedTemplate?t.selectedTemplate.examples?.[0]||"描述你的需求...":"描述你想完成的任务,Agent 会帮你搞定"),ce=He(()=>t.currentAgentMessages);function J(A){try{return en.sanitize(Yt(A||""))}catch{return en.sanitize(A||"")}}function j(A){return A.split(/[\\/]/).pop()||A}function Se(A){E.value=!1;const o=A.dataTransfer?.files;if(o)for(const C of o)t.addFile(C.path||C.name)}function Oe(){const A=x.value.trim();A&&(t.addFile(A),x.value="")}async function ne(){const A=l.value.trim();!A||c.isLoading||(l.value="",t.agentSessionId?await t.sendFollowUp(A):await t.execute(A))}function ue(A){l.value=A,Wt(()=>ne())}return tn([ce,()=>t.currentStreaming],()=>{Wt(()=>{_.value&&(_.value.scrollTop=_.value.scrollHeight)})},{deep:!0}),En(()=>{c.loadSessions(),t.loadTemplates(),t.loadHistory()}),(A,o)=>{const C=_e("a-tag"),fe=_e("a-input"),Re=_e("a-collapse-panel"),be=_e("a-collapse"),d=_e("a-button"),h=_e("a-input-search"),g=_e("a-textarea");return p(),T("div",as,[f("div",os,[f("div",is,[N(r(Me),{class:"header-icon"}),o[7]||(o[7]=f("span",{class:"header-title"},"日常协作",-1))]),o[9]||(o[9]=f("div",{class:"template-hint"},"选择任务类型,或直接输入需求",-1)),f("div",ls,[(p(!0),T(ie,null,le(r(t).templates,a=>(p(),T("div",{key:a.id,class:ke(["template-card",{active:r(t).selectedTemplate?.id===a.id}]),onClick:k=>r(t).selectTemplate(a)},[f("div",cs,[(p(),te(rt(B[a.icon]||r(Me))))]),f("div",us,[f("div",fs,v(a.name),1),f("div",ds,v(a.description),1)])],10,rs))),128)),f("div",{class:ke(["template-card free",{active:r(t).selectedTemplate===null&&S.value}]),onClick:o[0]||(o[0]=a=>{r(t).selectTemplate(null),S.value=!0})},[f("div",ps,[N(r(vn))]),o[8]||(o[8]=f("div",{class:"card-body"},[f("div",{class:"card-name"},"自由提问"),f("div",{class:"card-desc"},"任意任务,Agent 自主完成")],-1))],2)]),r(t).selectedTemplate?.acceptsFiles!==!1?(p(),T("div",{key:0,class:ke(["file-zone",{dragging:E.value}]),onDragover:o[2]||(o[2]=lt(a=>E.value=!0,["prevent"])),onDragleave:o[3]||(o[3]=a=>E.value=!1),onDrop:lt(Se,["prevent"])},[N(r($t),{class:"drop-icon"}),f("div",ms,v(E.value?"松开以添加文件":"拖拽文件到此处"),1),r(t).files.length?(p(),T("div",_s,[(p(!0),T(ie,null,le(r(t).files,a=>(p(),te(C,{key:a,closable:"",onClose:k=>r(t).removeFile(a),class:"file-tag"},{default:W(()=>[Q(v(j(a)),1)]),_:2},1032,["onClose"]))),128))])):V("",!0),N(fe,{value:x.value,"onUpdate:value":o[1]||(o[1]=a=>x.value=a),placeholder:"或输入文件路径,按 Enter 添加",size:"small",class:"path-input",onPressEnter:Oe},null,8,["value"])],34)):V("",!0),r(t).history.length?(p(),T("div",hs,[f("div",{class:"history-header",onClick:o[4]||(o[4]=a=>z.value=!z.value)},[N(r(Sn)),Q(" 历史记录 ("+v(r(t).history.length)+") ",1)]),z.value?(p(),T("div",gs,[(p(!0),T(ie,null,le(r(t).history.slice().reverse().slice(0,20),(a,k)=>(p(),T("div",{key:k,class:ke(["history-item",a.status])},[f("div",Ts,v(a.userMessage),1),f("div",Es,[f("span",null,v(a.templateName||"自由模式"),1),f("span",null,v(a.status),1)])],2))),128))])):V("",!0)])):V("",!0)]),f("div",As,[!r(t).agentSessionId&&!r(t).selectedTemplate?(p(),T("div",ys,[f("div",vs,[N(r(Me))]),o[10]||(o[10]=f("div",{class:"empty-title"},"选择一个任务模板开始",-1)),o[11]||(o[11]=f("div",{class:"empty-sub"},"或选择「自由提问」处理任何问题",-1)),f("div",Ss,[(p(),T(ie,null,le(re,a=>f("div",{key:a,class:"example-chip",onClick:k=>ue(a)},v(a),9,Os)),64))])])):r(t).selectedTemplate&&!r(t).agentSessionId?(p(),T("div",Rs,[f("div",bs,[(p(),te(rt(B[r(t).selectedTemplate.icon]||r(Me)),{class:"ready-icon"})),f("span",ws,v(r(t).selectedTemplate.name),1)]),f("div",Cs,[o[12]||(o[12]=f("div",{class:"example-label"},"试试这些:",-1)),(p(!0),T(ie,null,le(r(t).selectedTemplate.examples,a=>(p(),T("div",{key:a,class:"example-chip",onClick:k=>ue(a)},v(a),9,Ds))),128))])])):(p(),T("div",{key:2,class:"messages-area",ref_key:"messagesEl",ref:_},[(p(!0),T(ie,null,le(ce.value,(a,k)=>(p(),T("div",{key:k,class:ke(["message-row",a.role])},[a.role==="tool"?(p(),T("div",Ls,[N(be,{ghost:"",size:"small"},{default:W(()=>[N(Re,{class:"tool-collapse"},{header:W(()=>[N(r(In)),Q(" "+v(a.tool)+" "+v(a.status==="running"?"(执行中...)":"✓"),1)]),default:W(()=>[f("pre",ks,v(JSON.stringify(a.input,null,2)),1),a.result?(p(),T("div",Ms,[f("pre",Is,v(typeof a.result=="string"?a.result:JSON.stringify(a.result,null,2)),1)])):V("",!0)]),_:2},1024)]),_:2},1024)])):a.role==="user"?(p(),T("div",xs,[f("div",Ns,v(a.content),1)])):(p(),T("div",Ps,[o[14]||(o[14]=f("div",{class:"avatar"},"AI",-1)),f("div",{class:"bubble assistant",innerHTML:J(a.content)},null,8,Fs),a.content?.startsWith("Error:")&&!r(t).isRunning&&r(t).lastRequest?(p(),te(d,{key:0,size:"small",type:"link",onClick:o[5]||(o[5]=se=>r(t).retry())},{default:W(()=>[...o[13]||(o[13]=[Q(" 重试 ",-1)])]),_:1})):V("",!0)]))],2))),128)),r(t).currentStreaming?(p(),T("div",Us,[o[15]||(o[15]=f("div",{class:"avatar"},"AI",-1)),f("div",{class:"bubble assistant streaming",innerHTML:J(r(t).currentStreaming)},null,8,Hs)])):V("",!0),r(t).currentQuestion?(p(),T("div",zs,[f("div",Gs,v(r(t).currentQuestion.question),1),r(t).currentQuestion.choices?.length?(p(),T("div",Bs,[(p(!0),T(ie,null,le(r(t).currentQuestion.choices,a=>(p(),te(d,{key:a,size:"small",onClick:k=>r(t).answerQuestion(a)},{default:W(()=>[Q(v(a),1)]),_:2},1032,["onClick"]))),128))])):(p(),te(h,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:r(t).answerQuestion},null,8,["onSearch"]))])):V("",!0)],512)),r(t).result&&!r(t).isRunning?(p(),T("div",Ws,[N(C,{color:"geekblue"},{default:W(()=>[Q(v(r(t).result.iterationCount||0)+" iterations",1)]),_:1}),N(C,{color:"cyan"},{default:W(()=>[Q("~"+v((r(t).result.tokenCount||0).toLocaleString())+" tokens",1)]),_:1}),r(t).result.toolsUsed?.length?(p(),te(C,{key:0,color:"green"},{default:W(()=>[Q(v(r(t).result.toolsUsed.length)+" tools",1)]),_:1})):V("",!0)])):V("",!0),f("div",Ys,[r(t).selectedTemplate?(p(),T("div",$s,[N(C,{color:"blue",class:"context-tag"},{default:W(()=>[(p(),te(rt(B[r(t).selectedTemplate.icon]||r(Me)))),Q(" "+v(r(t).selectedTemplate.name),1)]),_:1}),(p(!0),T(ie,null,le(r(t).files,a=>(p(),te(C,{key:a,class:"context-tag file"},{default:W(()=>[Q(v(j(a)),1)]),_:2},1024))),128))])):V("",!0),f("div",Vs,[N(g,{value:l.value,"onUpdate:value":o[6]||(o[6]=a=>l.value=a),placeholder:ve.value,"auto-size":{minRows:1,maxRows:6},disabled:r(c).isLoading,class:"msg-input",onKeydown:An(lt(ne,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),N(d,{type:"primary",loading:r(c).isLoading,class:"send-btn",onClick:ne},{icon:W(()=>[N(r(xn))]),_:1},8,["loading"])])])])])}}},ta=yn(Xs,[["__scopeId","data-v-4cf2adfc"]]);export{ta as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.cowork-root[data-v-4cf2adfc]{display:flex;height:calc(100vh - 104px);gap:16px}.template-panel[data-v-4cf2adfc]{width:280px;flex-shrink:0;background:var(--bg-card);border-radius:8px;border:1px solid var(--border-color);display:flex;flex-direction:column;overflow:hidden}.template-header[data-v-4cf2adfc]{padding:16px 16px 8px;display:flex;align-items:center;gap:8px;font-size:16px;font-weight:600;color:var(--text-primary)}.header-icon[data-v-4cf2adfc]{font-size:18px;color:#1677ff}.template-hint[data-v-4cf2adfc]{padding:0 16px 12px;font-size:12px;color:var(--text-muted);border-bottom:1px solid var(--border-color)}.template-list[data-v-4cf2adfc]{flex:1;overflow-y:auto;padding:8px}.template-card[data-v-4cf2adfc]{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:8px;cursor:pointer;transition:all .15s;margin-bottom:4px;border:1px solid transparent}.template-card[data-v-4cf2adfc]:hover{background:var(--bg-card-hover)}.template-card.active[data-v-4cf2adfc]{background:#1677ff14;border-color:#1677ff4d}.template-card.free .card-icon[data-v-4cf2adfc]{color:#faad14}.card-icon[data-v-4cf2adfc]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#1677ff;background:#1677ff14;border-radius:8px;flex-shrink:0;margin-top:2px}.card-name[data-v-4cf2adfc]{font-size:13px;font-weight:500;color:var(--text-primary)}.card-desc[data-v-4cf2adfc]{font-size:11px;color:var(--text-muted);margin-top:2px;line-height:1.4}.file-zone[data-v-4cf2adfc]{padding:12px;border-top:1px solid var(--border-color);text-align:center;transition:background .2s}.file-zone.dragging[data-v-4cf2adfc]{background:#1677ff14}.drop-icon[data-v-4cf2adfc]{font-size:20px;color:var(--text-muted)}.drop-text[data-v-4cf2adfc]{font-size:11px;color:var(--text-muted);margin:4px 0 8px}.file-list[data-v-4cf2adfc]{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px;justify-content:center}.file-tag[data-v-4cf2adfc]{max-width:140px;overflow:hidden;text-overflow:ellipsis;font-size:11px}.path-input[data-v-4cf2adfc]{font-size:11px}.exec-panel[data-v-4cf2adfc]{flex:1;background:var(--bg-card);border-radius:8px;border:1px solid var(--border-color);display:flex;flex-direction:column;overflow:hidden}.empty-state[data-v-4cf2adfc],.ready-state[data-v-4cf2adfc]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 24px}.empty-icon[data-v-4cf2adfc]{font-size:48px;color:#1677ff40;margin-bottom:16px}.empty-title[data-v-4cf2adfc]{font-size:16px;color:var(--text-primary);margin-bottom:6px}.empty-sub[data-v-4cf2adfc]{font-size:13px;color:var(--text-muted);margin-bottom:24px}.ready-header[data-v-4cf2adfc]{display:flex;align-items:center;gap:10px;margin-bottom:20px}.ready-icon[data-v-4cf2adfc]{font-size:28px;color:#1677ff}.ready-name[data-v-4cf2adfc]{font-size:18px;font-weight:600;color:var(--text-primary)}.ready-examples[data-v-4cf2adfc]{text-align:center}.example-label[data-v-4cf2adfc]{font-size:13px;color:var(--text-muted);margin-bottom:12px}.example-grid[data-v-4cf2adfc]{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:500px}.example-chip[data-v-4cf2adfc]{padding:6px 14px;border-radius:16px;font-size:12px;color:var(--text-primary);background:var(--bg-card-hover);border:1px solid var(--border-color);cursor:pointer;transition:all .15s}.example-chip[data-v-4cf2adfc]:hover{border-color:#1677ff;background:#1677ff14;color:#1677ff}.messages-area[data-v-4cf2adfc]{flex:1;overflow-y:auto;padding:20px}.message-row[data-v-4cf2adfc]{margin-bottom:16px}.user-msg[data-v-4cf2adfc]{display:flex;justify-content:flex-end}.assistant-msg[data-v-4cf2adfc]{display:flex;gap:10px;align-items:flex-start}.avatar[data-v-4cf2adfc]{width:32px;height:32px;border-radius:50%;background:#1677ff;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--text-primary);flex-shrink:0}.bubble[data-v-4cf2adfc]{padding:10px 14px;border-radius:12px;max-width:80%;line-height:1.6;font-size:14px}.bubble.user[data-v-4cf2adfc]{background:#1677ff;color:var(--text-primary);border-bottom-right-radius:4px}.bubble.assistant[data-v-4cf2adfc]{background:var(--bg-card-hover);color:var(--text-primary);border-bottom-left-radius:4px}.bubble.streaming[data-v-4cf2adfc]:after{content:"○";animation:blink-4cf2adfc .7s step-start infinite;color:#1677ff}@keyframes blink-4cf2adfc{50%{opacity:0}}.tool-msg[data-v-4cf2adfc]{margin:8px 0}.tool-collapse[data-v-4cf2adfc]{border:1px solid var(--border-color);border-radius:6px;background:var(--bg-card)}.tool-input[data-v-4cf2adfc]{margin:0;font-size:11px;color:#aaa;white-space:pre-wrap}.tool-result-box[data-v-4cf2adfc]{margin-top:8px;padding-top:8px;border-top:1px solid var(--border-color)}.tool-result[data-v-4cf2adfc]{margin:0;font-size:11px;color:#52c41a;white-space:pre-wrap}.question-card[data-v-4cf2adfc]{background:var(--bg-card-hover);border:1px solid #1677ff40;border-radius:10px;padding:14px 16px;margin-top:8px}.question-text[data-v-4cf2adfc]{color:#aaa;font-size:13px}.question-choices[data-v-4cf2adfc]{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.task-stats[data-v-4cf2adfc]{display:flex;gap:6px;padding:6px 16px;border-top:1px solid var(--border-color);justify-content:flex-end}.input-area[data-v-4cf2adfc]{padding:12px 16px 16px;border-top:1px solid var(--border-color)}.input-context[data-v-4cf2adfc]{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}.context-tag[data-v-4cf2adfc]{font-size:11px}.context-tag.file[data-v-4cf2adfc]{background:var(--bg-card-hover)}.input-row[data-v-4cf2adfc]{display:flex;gap:8px;align-items:flex-end}.msg-input[data-v-4cf2adfc]{flex:1;background:var(--bg-card-hover);border-color:var(--border-color);color:var(--text-primary);resize:none}.send-btn[data-v-4cf2adfc]{height:40px}[data-v-4cf2adfc] .bubble.assistant pre{background:var(--bg-base);border-radius:6px;padding:12px;overflow-x:auto;font-size:12px}[data-v-4cf2adfc] .bubble.assistant code:not(pre code){background:var(--bg-card-hover);padding:1px 5px;border-radius:3px;font-size:12px;color:#f0a500}[data-v-4cf2adfc] .bubble.assistant p{margin:0 0 8px}[data-v-4cf2adfc] .bubble.assistant p:last-child{margin:0}.history-section[data-v-4cf2adfc]{margin-top:12px;border-top:1px solid var(--border-color);padding-top:8px}.history-header[data-v-4cf2adfc]{display:flex;align-items:center;gap:6px;font-size:12px;color:#888;cursor:pointer;padding:4px 0}.history-header[data-v-4cf2adfc]:hover{color:#1677ff}.history-list[data-v-4cf2adfc]{max-height:200px;overflow-y:auto}.history-item[data-v-4cf2adfc]{padding:6px 8px;border-radius:6px;margin-bottom:4px;background:var(--bg-card-hover);cursor:default}.history-item.failed[data-v-4cf2adfc]{border-left:2px solid #ff4d4f}.history-item.completed[data-v-4cf2adfc]{border-left:2px solid #52c41a}.history-summary[data-v-4cf2adfc]{font-size:12px;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.history-meta[data-v-4cf2adfc]{display:flex;justify-content:space-between;font-size:10px;color:#888;margin-top:2px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.stat-card[data-v-39c5aabc]{background:var(--bg-card)!important;border-color:var(--border-color)!important;transition:border-color .2s}.stat-card[data-v-39c5aabc]:hover{border-color:var(--text-muted)!important}.stat-header[data-v-39c5aabc]{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.stat-label[data-v-39c5aabc]{color:var(--text-secondary);font-size:12px}.stat-value[data-v-39c5aabc]{font-size:22px;font-weight:600;line-height:1.2;margin-bottom:4px}.stat-sub[data-v-39c5aabc]{color:var(--text-muted);font-size:11px}.gateway-card[data-v-39c5aabc]{border-left:3px solid #1677ff!important}.status-log[data-v-39c5aabc]{background:var(--bg-base);border:1px solid var(--border-color);border-radius:6px;padding:10px 14px;color:var(--text-secondary);font-size:11px;font-family:Consolas,monospace;max-height:200px;overflow-y:auto;white-space:pre-wrap;margin:0;line-height:1.6}.telemetry-card[data-v-39c5aabc]{background:var(--bg-base);border:1px solid var(--border-color);border-radius:8px;padding:14px;height:100%}.telemetry-filter[data-v-39c5aabc]{display:flex;flex-direction:column;gap:6px}.telemetry-filter-label[data-v-39c5aabc]{color:var(--text-muted);font-size:12px}.telemetry-label[data-v-39c5aabc]{color:var(--text-muted);font-size:12px;margin-bottom:6px}.telemetry-value[data-v-39c5aabc]{color:#91caff;font-size:24px;font-weight:600;line-height:1.2}.telemetry-sub[data-v-39c5aabc]{color:var(--text-secondary);font-size:11px;margin-top:4px}.telemetry-section[data-v-39c5aabc]{background:var(--bg-base);border:1px solid var(--border-color);border-radius:8px;padding:14px;min-height:140px}.telemetry-section-title[data-v-39c5aabc]{color:var(--text-secondary);font-size:12px;margin-bottom:10px}.telemetry-list[data-v-39c5aabc]{display:flex;flex-direction:column;gap:8px}.telemetry-row[data-v-39c5aabc]{display:flex;justify-content:space-between;gap:12px;color:var(--text-secondary);font-size:12px}.telemetry-empty[data-v-39c5aabc]{color:var(--text-muted);font-size:12px}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./AppLayout-YdvJBMHH.js","./vendor-CN0Iv_qZ.js","./ws-Dma34ig_.js","./_plugin-vue_export-helper-DlAUqK2U.js","./antd-D6h4fDFf.js","./AppLayout-cxfKLu-m.css","./Dashboard-HPh9FcPt.js","./chat-BYmuDvol.js","./Dashboard-BS-tzGNj.css","./Chat-DiXJ3TuK.js","./markdown-BZsB-Dsv.js","./Chat-DfR76jyX.css","./github-dark-Dfs9RUU9.css","./Cowork-BnrHWwZw.js","./Cowork-CcSoS3eX.css","./Services-D2EsLq-v.js","./Services-C8Qs6KXv.css","./Logs-4D9p6PRM.js","./Logs-Gf_Mv9Nx.css","./Skills-C9v-f3vZ.js","./parsers-DftYMnlk.js","./Skills-BdjRyorN.css","./Providers-DAwgG5KV.js","./Providers-BEakqcO5.css","./McpTools-CyAUjbbs.js","./McpTools-CyhSLDwf.css","./Notes-Cmas8i4E.js","./Notes-BG69sJKi.css","./Memory-BMqOR7S-.js","./Memory-DRghrGJr.css","./Cron-DBt1ueXh.js","./Tasks-yMEcU0n7.js","./Tasks-BJjN_YEm.css","./Security-Cz17qBny.js","./Security-Dwxw7rfP.css","./Permissions-Bq5Qn2s3.js","./Permissions-C9WlkGl-.css","./P2P-BxksIBWs.js","./P2P-OEzOeMZX.css","./Git-hwQ1oZHj.js","./Git-DGcuBXST.css","./Projects-B7EM0uPg.js","./Projects-DxKelI5h.css","./Wallet-BHWhLWn9.js","./Wallet-DnIumafl.css","./Organization-DnSa58Tl.js","./Organization-DdOOM4ic.css","./Analytics-C1AnPdMx.js","./Analytics-B4OM8S8X.css","./Templates-l7SvlKuB.js","./Templates-DOY_oZnm.css","./Backup-D31iZX3l.js","./Backup-fZqtfC1m.css","./RssFeed-HSZoRXvS.js","./RssFeed-BlFC20eg.css","./WebAuthn-kWhFYaUK.js","./WebAuthn-CNPl2VQR.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{S as B,U as L,V as I,f as T,c as E,o as R,W as O,u as k,X as y,Y as V,Z as x,k as D,R as S,_ as w}from"./vendor-CN0Iv_qZ.js";import{a as g,A as M}from"./antd-D6h4fDFf.js";(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))m(t);new MutationObserver(t=>{for(const o of t)if(o.type==="childList")for(const n of o.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&m(n)}).observe(document,{childList:!0,subtree:!0});function c(t){const o={};return t.integrity&&(o.integrity=t.integrity),t.referrerPolicy&&(o.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?o.credentials="include":t.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function m(t){if(t.ep)return;t.ep=!0;const o=c(t);fetch(t.href,o)}})();const C="modulepreload",N=function(s,a){return new URL(s,a).href},P={},e=function(a,c,m){let t=Promise.resolve();if(c&&c.length>0){let b=function(i){return Promise.all(i.map(d=>Promise.resolve(d).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};const n=document.getElementsByTagName("link"),r=document.querySelector("meta[property=csp-nonce]"),u=r?.nonce||r?.getAttribute("nonce");t=b(c.map(i=>{if(i=N(i,m),i in P)return;P[i]=!0;const d=i.endsWith(".css"),p=d?'[rel="stylesheet"]':"";if(m)for(let f=n.length-1;f>=0;f--){const _=n[f];if(_.href===i&&(!d||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${p}`))return;const l=document.createElement("link");if(l.rel=d?"stylesheet":C,d||(l.as="script"),l.crossOrigin="",l.href=i,u&&l.setAttribute("nonce",u),document.head.appendChild(l),d)return new Promise((f,_)=>{l.addEventListener("load",f),l.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${i}`)))})}))}function o(n){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=n,window.dispatchEvent(r),!r.defaultPrevented)throw n}return t.then(n=>{for(const r of n||[])r.status==="rejected"&&o(r.reason);return a().catch(o)})},U=[{path:"/",component:()=>e(()=>import("./AppLayout-YdvJBMHH.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),children:[{path:"",redirect:"/dashboard"},{path:"dashboard",name:"Dashboard",component:()=>e(()=>import("./Dashboard-HPh9FcPt.js"),__vite__mapDeps([6,1,2,7,3,4,8]),import.meta.url)},{path:"chat",name:"Chat",component:()=>e(()=>import("./Chat-DiXJ3TuK.js"),__vite__mapDeps([9,1,10,4,7,2,3,11,12]),import.meta.url)},{path:"cowork",name:"Cowork",component:()=>e(()=>import("./Cowork-BnrHWwZw.js"),__vite__mapDeps([13,1,10,4,2,7,3,14,12]),import.meta.url)},{path:"services",name:"Services",component:()=>e(()=>import("./Services-D2EsLq-v.js"),__vite__mapDeps([15,2,1,3,4,16]),import.meta.url)},{path:"logs",name:"Logs",component:()=>e(()=>import("./Logs-4D9p6PRM.js"),__vite__mapDeps([17,2,1,3,4,18]),import.meta.url)},{path:"skills",name:"Skills",component:()=>e(()=>import("./Skills-C9v-f3vZ.js"),__vite__mapDeps([19,1,2,20,7,3,4,21]),import.meta.url)},{path:"providers",name:"Providers",component:()=>e(()=>import("./Providers-DAwgG5KV.js"),__vite__mapDeps([22,1,2,20,3,4,23]),import.meta.url)},{path:"mcp",name:"McpTools",component:()=>e(()=>import("./McpTools-CyAUjbbs.js"),__vite__mapDeps([24,2,1,3,4,25]),import.meta.url)},{path:"notes",name:"Notes",component:()=>e(()=>import("./Notes-Cmas8i4E.js"),__vite__mapDeps([26,2,1,3,4,27]),import.meta.url)},{path:"memory",name:"Memory",component:()=>e(()=>import("./Memory-BMqOR7S-.js"),__vite__mapDeps([28,2,1,3,4,29]),import.meta.url)},{path:"cron",name:"Cron",component:()=>e(()=>import("./Cron-DBt1ueXh.js"),__vite__mapDeps([30,2,1,4]),import.meta.url)},{path:"tasks",name:"Tasks",component:()=>e(()=>import("./Tasks-yMEcU0n7.js"),__vite__mapDeps([31,1,2,3,4,32]),import.meta.url)},{path:"security",name:"Security",component:()=>e(()=>import("./Security-Cz17qBny.js"),__vite__mapDeps([33,2,1,3,4,34]),import.meta.url)},{path:"permissions",name:"Permissions",component:()=>e(()=>import("./Permissions-Bq5Qn2s3.js"),__vite__mapDeps([35,2,1,3,4,36]),import.meta.url)},{path:"p2p",name:"P2P",component:()=>e(()=>import("./P2P-BxksIBWs.js"),__vite__mapDeps([37,2,1,3,4,38]),import.meta.url)},{path:"git",name:"Git",component:()=>e(()=>import("./Git-hwQ1oZHj.js"),__vite__mapDeps([39,2,1,3,4,40]),import.meta.url)},{path:"projects",name:"Projects",component:()=>e(()=>import("./Projects-B7EM0uPg.js"),__vite__mapDeps([41,2,1,3,4,42]),import.meta.url)},{path:"wallet",name:"Wallet",component:()=>e(()=>import("./Wallet-BHWhLWn9.js"),__vite__mapDeps([43,2,1,3,4,44]),import.meta.url)},{path:"organization",name:"Organization",component:()=>e(()=>import("./Organization-DnSa58Tl.js"),__vite__mapDeps([45,1,2,3,4,46]),import.meta.url)},{path:"analytics",name:"Analytics",component:()=>e(()=>import("./Analytics-C1AnPdMx.js"),__vite__mapDeps([47,2,1,3,4,48]),import.meta.url)},{path:"templates",name:"Templates",component:()=>e(()=>import("./Templates-l7SvlKuB.js"),__vite__mapDeps([49,1,2,3,4,50]),import.meta.url)},{path:"backup",name:"Backup",component:()=>e(()=>import("./Backup-D31iZX3l.js"),__vite__mapDeps([51,2,1,3,4,52]),import.meta.url)},{path:"rssfeed",name:"RssFeed",component:()=>e(()=>import("./RssFeed-HSZoRXvS.js"),__vite__mapDeps([53,1,2,3,4,54]),import.meta.url)},{path:"webauthn",name:"WebAuthn",component:()=>e(()=>import("./WebAuthn-kWhFYaUK.js"),__vite__mapDeps([55,2,1,3,4,56]),import.meta.url)}]}],F=B({history:L(),routes:U}),A="cc_theme",v={dark:{label:"暗黑",icon:"🌑",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#141414",colorBgContainer:"#1f1f1f",colorBgElevated:"#2a2a2a",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#1c1c1c",headerBg:"#1c1c1c",bodyBg:"#141414"},Menu:{darkItemBg:"#1c1c1c",darkSubMenuItemBg:"#171717"}}},vars:{"--bg-base":"#141414","--bg-sidebar":"#1c1c1c","--bg-header":"#1c1c1c","--bg-card":"#1f1f1f","--bg-card-hover":"#262626","--border-color":"#252525","--border-subtle":"#1e1e1e","--text-primary":"#e0e0e0","--text-secondary":"#888","--text-muted":"#444","--logo-text":"#ffffff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,0,0,.45)","--group-title":"#3a3a3a"}},light:{label:"亮白",icon:"☀️",antd:{algorithm:g.defaultAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#ffffff",colorBgContainer:"#ffffff",colorBgElevated:"#ffffff",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#ffffff",headerBg:"#ffffff",bodyBg:"#f4f6fb"},Menu:{itemBg:"#ffffff"}}},vars:{"--bg-base":"#f4f6fb","--bg-sidebar":"#ffffff","--bg-header":"#ffffff","--bg-card":"#ffffff","--bg-card-hover":"#f0f4ff","--border-color":"#e8edf5","--border-subtle":"#f0f0f0","--text-primary":"#1a1a2e","--text-secondary":"#5a6474","--text-muted":"#b0b8c8","--logo-text":"#1a1a2e","--menu-mode":"light","--shadow-card":"0 2px 12px rgba(0,0,0,.07)","--group-title":"#aab0bc"}},blue:{label:"深蓝",icon:"🌊",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#2f80ed",colorBgBase:"#0d1117",colorBgContainer:"#161b22",colorBgElevated:"#1c2230",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0f1923",headerBg:"#0f1923",bodyBg:"#0d1117"},Menu:{darkItemBg:"#0f1923",darkSubMenuItemBg:"#0b1520"}}},vars:{"--bg-base":"#0d1117","--bg-sidebar":"#0f1923","--bg-header":"#0f1923","--bg-card":"#161b22","--bg-card-hover":"#1c2230","--border-color":"#21303f","--border-subtle":"#182030","--text-primary":"#c9d8ef","--text-secondary":"#6e8caa","--text-muted":"#2d4060","--logo-text":"#e0eeff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,80,.5)","--group-title":"#2d4060"}},green:{label:"翠绿",icon:"🌿",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#29a270",colorBgBase:"#0a1a12",colorBgContainer:"#0f2318",colorBgElevated:"#152e20",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0c1e14",headerBg:"#0c1e14",bodyBg:"#0a1a12"},Menu:{darkItemBg:"#0c1e14",darkSubMenuItemBg:"#091810"}}},vars:{"--bg-base":"#0a1a12","--bg-sidebar":"#0c1e14","--bg-header":"#0c1e14","--bg-card":"#0f2318","--bg-card-hover":"#152e20","--border-color":"#1a3828","--border-subtle":"#122a1c","--text-primary":"#c0e8c8","--text-secondary":"#5a9a6a","--text-muted":"#1e4028","--logo-text":"#d8f0e0","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,20,.5)","--group-title":"#1e4028"}}},j=I("theme",()=>{const s=T(localStorage.getItem(A)||"light"),a=E(()=>v[s.value]||v.dark),c=E(()=>a.value.antd),m=E(()=>s.value!=="light");function t(){const r=a.value.vars,u=document.documentElement;for(const[b,i]of Object.entries(r))u.style.setProperty(b,i);u.setAttribute("data-theme",s.value)}function o(r){v[r]&&(s.value=r,localStorage.setItem(A,r),t())}function n(){t()}return{current:s,config:a,antdTheme:c,isDark:m,setTheme:o,init:n}}),W={__name:"App",setup(s){const a=j();return R(()=>a.init()),(c,m)=>{const t=y("router-view"),o=y("a-config-provider");return V(),O(o,{theme:k(a).antdTheme},{default:x(()=>[D(t)]),_:1},8,["theme"])}}},h=S(W);h.use(w());h.use(F);h.use(M);h.mount("#app");export{v as T,j as u};
|