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.
Files changed (71) hide show
  1. package/README.md +10 -0
  2. package/bin/chainlesschain.js +0 -0
  3. package/package.json +1 -1
  4. package/src/assets/web-panel/.build-hash +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-C1AnPdMx.js → Analytics-DgypYeUB.js} +2 -2
  6. package/src/assets/web-panel/assets/AppLayout-Bzf3mSZI.js +1 -0
  7. package/src/assets/web-panel/assets/AppLayout-DQyDwGut.css +1 -0
  8. package/src/assets/web-panel/assets/{Backup-D31iZX3l.js → Backup-Ba9UybpT.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-DiXJ3TuK.js → Chat-BwXskT21.js} +1 -1
  10. package/src/assets/web-panel/assets/Cowork-CXuhlHew.css +1 -0
  11. package/src/assets/web-panel/assets/Cowork-UmOe7qvE.js +7 -0
  12. package/src/assets/web-panel/assets/{Cron-DBt1ueXh.js → Cron-JHS-rc-4.js} +2 -2
  13. package/src/assets/web-panel/assets/{Dashboard-HPh9FcPt.js → Dashboard-B95cMCO7.js} +2 -2
  14. package/src/assets/web-panel/assets/Dashboard-CKeMmCoT.css +1 -0
  15. package/src/assets/web-panel/assets/{Git-hwQ1oZHj.js → Git-CSYO0_zk.js} +2 -2
  16. package/src/assets/web-panel/assets/{Logs-4D9p6PRM.js → Logs-Hxw_K0km.js} +2 -2
  17. package/src/assets/web-panel/assets/{McpTools-CyAUjbbs.js → McpTools-DIE75TrB.js} +2 -2
  18. package/src/assets/web-panel/assets/{Memory-BMqOR7S-.js → Memory-C4KVnLlp.js} +2 -2
  19. package/src/assets/web-panel/assets/{Notes-Cmas8i4E.js → Notes-DuzrHMAk.js} +2 -2
  20. package/src/assets/web-panel/assets/{Organization-DnSa58Tl.js → Organization-DTq6uF82.js} +4 -4
  21. package/src/assets/web-panel/assets/{P2P-BxksIBWs.js → P2P-C0hjlhsR.js} +2 -2
  22. package/src/assets/web-panel/assets/{Permissions-Bq5Qn2s3.js → Permissions-Ec0NH-xC.js} +4 -4
  23. package/src/assets/web-panel/assets/{Projects-B7EM0uPg.js → Projects-U8D0asCS.js} +2 -2
  24. package/src/assets/web-panel/assets/{Providers-DAwgG5KV.js → Providers-BngtTLvJ.js} +2 -2
  25. package/src/assets/web-panel/assets/{RssFeed-HSZoRXvS.js → RssFeed-B9NbwCKM.js} +3 -3
  26. package/src/assets/web-panel/assets/{Security-Cz17qBny.js → Security-BL5Rkr1T.js} +3 -3
  27. package/src/assets/web-panel/assets/{Services-D2EsLq-v.js → Services-D4MJzLld.js} +2 -2
  28. package/src/assets/web-panel/assets/{Skills-C9v-f3vZ.js → Skills-CQTOMDwF.js} +1 -1
  29. package/src/assets/web-panel/assets/{Tasks-yMEcU0n7.js → Tasks-DepbJMnL.js} +1 -1
  30. package/src/assets/web-panel/assets/{Templates-l7SvlKuB.js → Templates-C24PVZPu.js} +1 -1
  31. package/src/assets/web-panel/assets/{Wallet-BHWhLWn9.js → Wallet-PQoSpN_P.js} +3 -3
  32. package/src/assets/web-panel/assets/{WebAuthn-kWhFYaUK.js → WebAuthn-BcuyQ4Lr.js} +4 -4
  33. package/src/assets/web-panel/assets/WorkflowEditor-C-SvXbHW.js +1 -0
  34. package/src/assets/web-panel/assets/WorkflowEditor-D5bX6woe.css +1 -0
  35. package/src/assets/web-panel/assets/{antd-D6h4fDFf.js → antd-DEjZPGMj.js} +82 -82
  36. package/src/assets/web-panel/assets/index-CwvzTTw_.js +2 -0
  37. package/src/assets/web-panel/assets/{markdown-BZsB-Dsv.js → markdown-CusdXFxb.js} +1 -1
  38. package/src/assets/web-panel/index.html +2 -2
  39. package/src/commands/cowork.js +867 -0
  40. package/src/gateways/ws/action-protocol.js +182 -2
  41. package/src/gateways/ws/message-dispatcher.js +5 -0
  42. package/src/gateways/ws/ws-server.js +21 -0
  43. package/src/lib/cowork-cron.js +474 -0
  44. package/src/lib/cowork-evomap-adapter.js +121 -0
  45. package/src/lib/cowork-learning.js +438 -0
  46. package/src/lib/cowork-mcp-tools.js +182 -0
  47. package/src/lib/cowork-observe-html.js +108 -0
  48. package/src/lib/cowork-observe.js +160 -0
  49. package/src/lib/cowork-share.js +322 -0
  50. package/src/lib/cowork-task-runner.js +317 -3
  51. package/src/lib/cowork-task-templates.js +101 -13
  52. package/src/lib/cowork-template-marketplace.js +205 -0
  53. package/src/lib/cowork-workflow.js +571 -0
  54. package/src/lib/provider-options.js +133 -0
  55. package/src/lib/skill-loader.js +65 -0
  56. package/src/lib/sub-agent-context.js +54 -2
  57. package/src/lib/sub-agent-profiles.js +164 -0
  58. package/src/lib/todo-manager.js +108 -0
  59. package/src/lib/turn-context.js +95 -0
  60. package/src/lib/web-fetch.js +224 -0
  61. package/src/lib/workflow-expr.js +318 -0
  62. package/src/repl/agent-repl.js +4 -0
  63. package/src/runtime/agent-core.js +135 -3
  64. package/src/runtime/coding-agent-contract-shared.cjs +131 -0
  65. package/src/runtime/coding-agent-policy.cjs +30 -0
  66. package/src/assets/web-panel/assets/AppLayout-YdvJBMHH.js +0 -1
  67. package/src/assets/web-panel/assets/AppLayout-cxfKLu-m.css +0 -1
  68. package/src/assets/web-panel/assets/Cowork-BnrHWwZw.js +0 -7
  69. package/src/assets/web-panel/assets/Cowork-CcSoS3eX.css +0 -1
  70. package/src/assets/web-panel/assets/Dashboard-BS-tzGNj.css +0 -1
  71. 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(args.command, shellPolicyOpts);
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 { role, task, context: inheritedContext, tools: allowedTools } = args;
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
- const result = await llmCall(messages, options);
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};