agentdev 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BasicAgent-UDSHJE5H.js +2 -2
- package/dist/{ExplorerAgent-X6QECX65.js → ExplorerAgent-BITN4IBW.js} +3 -3
- package/dist/{chunk-N7J76R5P.js → chunk-4FBF65TC.js} +2 -2
- package/dist/{chunk-DI5EGMGG.js → chunk-XCJOXCJ4.js} +2 -2
- package/dist/{chunk-XAJ6L4GA.js → chunk-XE5IEUPW.js} +2 -2
- package/dist/features/example-feature/templates/example-tool.render.d.ts +3 -0
- package/dist/features/example-feature/templates/example-tool.render.js +20 -0
- package/dist/features/example-feature/templates/example-tool.render.js.map +1 -0
- package/dist/features/mcp/templates/mcp-tool.render.d.ts +12 -0
- package/dist/features/mcp/templates/mcp-tool.render.js +37 -0
- package/dist/features/mcp/templates/mcp-tool.render.js.map +1 -0
- package/dist/features/opencode-basic/templates/edit.render.d.ts +12 -0
- package/dist/features/opencode-basic/templates/edit.render.js +44 -0
- package/dist/features/opencode-basic/templates/edit.render.js.map +1 -0
- package/dist/features/opencode-basic/templates/glob.render.d.ts +13 -0
- package/dist/features/opencode-basic/templates/glob.render.js +44 -0
- package/dist/features/opencode-basic/templates/glob.render.js.map +1 -0
- package/dist/features/opencode-basic/templates/grep.render.d.ts +13 -0
- package/dist/features/opencode-basic/templates/grep.render.js +67 -0
- package/dist/features/opencode-basic/templates/grep.render.js.map +1 -0
- package/dist/features/opencode-basic/templates/ls.render.d.ts +12 -0
- package/dist/features/opencode-basic/templates/ls.render.js +35 -0
- package/dist/features/opencode-basic/templates/ls.render.js.map +1 -0
- package/dist/features/opencode-basic/templates/read.render.d.ts +13 -0
- package/dist/features/opencode-basic/templates/read.render.js +83 -0
- package/dist/features/opencode-basic/templates/read.render.js.map +1 -0
- package/dist/features/opencode-basic/templates/write.render.d.ts +13 -0
- package/dist/features/opencode-basic/templates/write.render.js +44 -0
- package/dist/features/opencode-basic/templates/write.render.js.map +1 -0
- package/dist/features/shell/templates/bash.render.d.ts +12 -0
- package/dist/features/shell/templates/bash.render.js +71 -0
- package/dist/features/shell/templates/bash.render.js.map +1 -0
- package/dist/features/shell/templates/trash-delete.render.d.ts +12 -0
- package/dist/features/shell/templates/trash-delete.render.js +61 -0
- package/dist/features/shell/templates/trash-delete.render.js.map +1 -0
- package/dist/features/shell/templates/trash-list.render.d.ts +12 -0
- package/dist/features/shell/templates/trash-list.render.js +84 -0
- package/dist/features/shell/templates/trash-list.render.js.map +1 -0
- package/dist/features/shell/templates/trash-restore.render.d.ts +12 -0
- package/dist/features/shell/templates/trash-restore.render.js +77 -0
- package/dist/features/shell/templates/trash-restore.render.js.map +1 -0
- package/dist/features/skill/templates/skill.render.d.ts +13 -0
- package/dist/features/skill/templates/skill.render.js +33 -0
- package/dist/features/skill/templates/skill.render.js.map +1 -0
- package/dist/features/subagent/templates/agent-close.render.d.ts +9 -0
- package/dist/features/subagent/templates/agent-close.render.js +29 -0
- package/dist/features/subagent/templates/agent-close.render.js.map +1 -0
- package/dist/features/subagent/templates/agent-list.render.d.ts +9 -0
- package/dist/features/subagent/templates/agent-list.render.js +23 -0
- package/dist/features/subagent/templates/agent-list.render.js.map +1 -0
- package/dist/features/subagent/templates/agent-send.render.d.ts +9 -0
- package/dist/features/subagent/templates/agent-send.render.js +37 -0
- package/dist/features/subagent/templates/agent-send.render.js.map +1 -0
- package/dist/features/subagent/templates/agent-spawn.render.d.ts +9 -0
- package/dist/features/subagent/templates/agent-spawn.render.js +38 -0
- package/dist/features/subagent/templates/agent-spawn.render.js.map +1 -0
- package/dist/features/subagent/templates/wait.render.d.ts +9 -0
- package/dist/features/subagent/templates/wait.render.js +29 -0
- package/dist/features/subagent/templates/wait.render.js.map +1 -0
- package/dist/features/todo/templates/task-clear.render.d.ts +9 -0
- package/dist/features/todo/templates/task-clear.render.js +32 -0
- package/dist/features/todo/templates/task-clear.render.js.map +1 -0
- package/dist/features/todo/templates/task-create.render.d.ts +9 -0
- package/dist/features/todo/templates/task-create.render.js +56 -0
- package/dist/features/todo/templates/task-create.render.js.map +1 -0
- package/dist/features/todo/templates/task-get.render.d.ts +9 -0
- package/dist/features/todo/templates/task-get.render.js +60 -0
- package/dist/features/todo/templates/task-get.render.js.map +1 -0
- package/dist/features/todo/templates/task-list.render.d.ts +9 -0
- package/dist/features/todo/templates/task-list.render.js +72 -0
- package/dist/features/todo/templates/task-list.render.js.map +1 -0
- package/dist/features/todo/templates/task-update.render.d.ts +9 -0
- package/dist/features/todo/templates/task-update.render.js +58 -0
- package/dist/features/todo/templates/task-update.render.js.map +1 -0
- package/dist/features/visual/templates/capture.render.d.ts +9 -0
- package/dist/features/visual/templates/capture.render.js +49 -0
- package/dist/features/visual/templates/capture.render.js.map +1 -0
- package/dist/features/websearch/templates/crawl4ai.render.d.ts +6 -0
- package/dist/features/websearch/templates/crawl4ai.render.js +30 -0
- package/dist/features/websearch/templates/crawl4ai.render.js.map +1 -0
- package/dist/features/websearch/templates/web-fetch.render.d.ts +12 -0
- package/dist/features/websearch/templates/web-fetch.render.js +40 -0
- package/dist/features/websearch/templates/web-fetch.render.js.map +1 -0
- package/dist/index.d.ts +3 -745
- package/dist/index.js +7 -7
- package/dist/types-DUKIIntb.d.ts +745 -0
- package/package.json +71 -74
- package/LICENSE +0 -21
- /package/dist/{ExplorerAgent-X6QECX65.js.map → ExplorerAgent-BITN4IBW.js.map} +0 -0
- /package/dist/{chunk-N7J76R5P.js.map → chunk-4FBF65TC.js.map} +0 -0
- /package/dist/{chunk-DI5EGMGG.js.map → chunk-XCJOXCJ4.js.map} +0 -0
- /package/dist/{chunk-XAJ6L4GA.js.map → chunk-XE5IEUPW.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/opencode-basic/templates/write.render.ts"],"sourcesContent":["/**\n * Write 工具渲染模板\n * 使用 .render.ts 原版本(带 details 折叠 diff,更实用)\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\n/**\n * 文件写入渲染模板\n */\nexport default {\n call: (args) => `<div class=\"bash-command\">Write <span class=\"file-path\">${escapeHtml(args.filePath || '')}</span></div>`,\n result: (data, success) => {\n if (!success) {\n const text = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data);\n return `<div class=\"tool-error\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>\n <span>${escapeHtml(text)}</span>\n </div>`;\n }\n\n const diffContent = data.diff || '';\n if (!diffContent) {\n return `<div style=\"color:var(--success-color)\">✓ File written successfully (no diff available)</div>`;\n }\n\n // 使用 Diff2Html 生成 Diff\n try {\n return Diff2Html.html(diffContent, {\n drawFileList: false,\n matching: 'lines',\n outputFormat: 'side-by-side',\n colorScheme: 'dark'\n });\n } catch(e) {\n return `<pre style=\"background:var(--hover-bg); padding:8px;\">${escapeHtml(diffContent)}</pre>`;\n }\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AAUA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAKA,IAAO,uBAAQ;AAAA,EACb,MAAM,CAAC,SAAS,2DAA2D,WAAW,KAAK,YAAY,EAAE,CAAC;AAAA,EAC1G,QAAQ,CAAC,MAAM,YAAY;AACzB,QAAI,CAAC,SAAS;AACZ,YAAM,OAAO,OAAO,SAAS,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,OAAO,IAAI;AACnF,aAAO;AAAA;AAAA,gBAEG,WAAW,IAAI,CAAC;AAAA;AAAA,IAE5B;AAEA,UAAM,cAAc,KAAK,QAAQ;AACjC,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AAGA,QAAI;AACF,aAAO,UAAU,KAAK,aAAa;AAAA,QACjC,cAAc;AAAA,QACd,UAAU;AAAA,QACV,cAAc;AAAA,QACd,aAAa;AAAA,MACf,CAAC;AAAA,IACH,SAAQ,GAAG;AACT,aAAO,yDAAyD,WAAW,WAAW,CAAC;AAAA,IACzF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import "../../../chunk-BDS2QGZ5.js";
|
|
2
|
+
|
|
3
|
+
// src/features/shell/templates/bash.render.ts
|
|
4
|
+
function escapeHtml(text) {
|
|
5
|
+
const str = String(text);
|
|
6
|
+
const map = {
|
|
7
|
+
"&": "&",
|
|
8
|
+
"<": "<",
|
|
9
|
+
">": ">",
|
|
10
|
+
'"': """,
|
|
11
|
+
"'": "'"
|
|
12
|
+
};
|
|
13
|
+
return str.replace(/[&<>"']/g, (m) => map[m]);
|
|
14
|
+
}
|
|
15
|
+
function formatOutput(data) {
|
|
16
|
+
console.log("[bash.render] formatOutput:", { type: typeof data, data });
|
|
17
|
+
if (data === null || data === void 0) {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
if (typeof data === "string") {
|
|
21
|
+
return data;
|
|
22
|
+
}
|
|
23
|
+
if (typeof data === "object") {
|
|
24
|
+
if (data instanceof Error) {
|
|
25
|
+
return data.message;
|
|
26
|
+
}
|
|
27
|
+
const obj = data;
|
|
28
|
+
if ("stdout" in obj || "stderr" in obj) {
|
|
29
|
+
return String(obj.stdout || "") + String(obj.stderr || "");
|
|
30
|
+
}
|
|
31
|
+
if ("error" in obj) {
|
|
32
|
+
const errorValue = obj.error;
|
|
33
|
+
if (typeof errorValue === "string") {
|
|
34
|
+
return errorValue;
|
|
35
|
+
}
|
|
36
|
+
if (errorValue instanceof Error) {
|
|
37
|
+
return errorValue.message;
|
|
38
|
+
}
|
|
39
|
+
return JSON.stringify(data, null, 2);
|
|
40
|
+
}
|
|
41
|
+
return JSON.stringify(data, null, 2);
|
|
42
|
+
}
|
|
43
|
+
return String(data);
|
|
44
|
+
}
|
|
45
|
+
function formatError(data) {
|
|
46
|
+
const text = formatOutput(data);
|
|
47
|
+
return `<div class="tool-error">
|
|
48
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
|
|
49
|
+
<span>${escapeHtml(text)}</span>
|
|
50
|
+
</div>`;
|
|
51
|
+
}
|
|
52
|
+
var bashRender = {
|
|
53
|
+
call: (args) => {
|
|
54
|
+
const command = args.command || "";
|
|
55
|
+
console.log("[bash.render] call:", command);
|
|
56
|
+
return `<div class="bash-command">> ${escapeHtml(command)}</div>`;
|
|
57
|
+
},
|
|
58
|
+
result: (data, success) => {
|
|
59
|
+
console.log("[bash.render] result:", { success, data });
|
|
60
|
+
if (!success) {
|
|
61
|
+
return formatError(data);
|
|
62
|
+
}
|
|
63
|
+
const output = formatOutput(data);
|
|
64
|
+
return `<pre class="bash-output">${escapeHtml(output)}</pre>`;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
var bash_render_default = bashRender;
|
|
68
|
+
export {
|
|
69
|
+
bash_render_default as default
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=bash.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/shell/templates/bash.render.ts"],"sourcesContent":["/**\n * Bash 工具渲染模板(Shell Feature 内部模板)\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: unknown): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return str.replace(/[&<>\"']/g, m => map[m]!);\n}\n\n/**\n * 格式化输出数据\n */\nfunction formatOutput(data: unknown): string {\n console.log('[bash.render] formatOutput:', { type: typeof data, data });\n\n if (data === null || data === undefined) {\n return '';\n }\n if (typeof data === 'string') {\n return data;\n }\n if (typeof data === 'object') {\n if (data instanceof Error) {\n return data.message;\n }\n const obj = data as Record<string, unknown>;\n if ('stdout' in obj || 'stderr' in obj) {\n return String(obj.stdout || '') + String(obj.stderr || '');\n }\n if ('error' in obj) {\n const errorValue = obj.error;\n if (typeof errorValue === 'string') {\n return errorValue;\n }\n if (errorValue instanceof Error) {\n return errorValue.message;\n }\n return JSON.stringify(data, null, 2);\n }\n return JSON.stringify(data, null, 2);\n }\n return String(data);\n}\n\n/**\n * 格式化错误\n */\nfunction formatError(data: unknown): string {\n const text = formatOutput(data);\n return `<div class=\"tool-error\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>\n <span>${escapeHtml(text)}</span>\n </div>`;\n}\n\n/**\n * Bash 渲染模板\n */\nconst bashRender: InlineRenderTemplate = {\n call: (args: { command?: string }) => {\n const command = args.command || '';\n console.log('[bash.render] call:', command);\n return `<div class=\"bash-command\">> ${escapeHtml(command)}</div>`;\n },\n result: (data: unknown, success?: boolean) => {\n console.log('[bash.render] result:', { success, data });\n if (!success) {\n return formatError(data);\n }\n const output = formatOutput(data);\n return `<pre class=\"bash-output\">${escapeHtml(output)}</pre>`;\n }\n};\n\nexport default bashRender;\n"],"mappings":";;;AASA,SAAS,WAAW,MAAuB;AACzC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAE;AAC7C;AAKA,SAAS,aAAa,MAAuB;AAC3C,UAAQ,IAAI,+BAA+B,EAAE,MAAM,OAAO,MAAM,KAAK,CAAC;AAEtE,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,EACT;AACA,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAI,gBAAgB,OAAO;AACzB,aAAO,KAAK;AAAA,IACd;AACA,UAAM,MAAM;AACZ,QAAI,YAAY,OAAO,YAAY,KAAK;AACtC,aAAO,OAAO,IAAI,UAAU,EAAE,IAAI,OAAO,IAAI,UAAU,EAAE;AAAA,IAC3D;AACA,QAAI,WAAW,KAAK;AAClB,YAAM,aAAa,IAAI;AACvB,UAAI,OAAO,eAAe,UAAU;AAClC,eAAO;AAAA,MACT;AACA,UAAI,sBAAsB,OAAO;AAC/B,eAAO,WAAW;AAAA,MACpB;AACA,aAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,IACrC;AACA,WAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,EACrC;AACA,SAAO,OAAO,IAAI;AACpB;AAKA,SAAS,YAAY,MAAuB;AAC1C,QAAM,OAAO,aAAa,IAAI;AAC9B,SAAO;AAAA;AAAA,YAEG,WAAW,IAAI,CAAC;AAAA;AAE5B;AAKA,IAAM,aAAmC;AAAA,EACvC,MAAM,CAAC,SAA+B;AACpC,UAAM,UAAU,KAAK,WAAW;AAChC,YAAQ,IAAI,uBAAuB,OAAO;AAC1C,WAAO,+BAA+B,WAAW,OAAO,CAAC;AAAA,EAC3D;AAAA,EACA,QAAQ,CAAC,MAAe,YAAsB;AAC5C,YAAQ,IAAI,yBAAyB,EAAE,SAAS,KAAK,CAAC;AACtD,QAAI,CAAC,SAAS;AACZ,aAAO,YAAY,IAAI;AAAA,IACzB;AACA,UAAM,SAAS,aAAa,IAAI;AAChC,WAAO,4BAA4B,WAAW,MAAM,CAAC;AAAA,EACvD;AACF;AAEA,IAAO,sBAAQ;","names":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import "../../../chunk-BDS2QGZ5.js";
|
|
2
|
+
|
|
3
|
+
// src/features/shell/templates/trash-delete.render.ts
|
|
4
|
+
function escapeHtml(text) {
|
|
5
|
+
const str = String(text);
|
|
6
|
+
const map = {
|
|
7
|
+
"&": "&",
|
|
8
|
+
"<": "<",
|
|
9
|
+
">": ">",
|
|
10
|
+
'"': """,
|
|
11
|
+
"'": "'"
|
|
12
|
+
};
|
|
13
|
+
return str.replace(/[&<>"']/g, (m) => map[m]);
|
|
14
|
+
}
|
|
15
|
+
function formatError(data) {
|
|
16
|
+
const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
|
|
17
|
+
return `<div class="tool-error">
|
|
18
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
|
|
19
|
+
<span>${escapeHtml(text)}</span>
|
|
20
|
+
</div>`;
|
|
21
|
+
}
|
|
22
|
+
var trash_delete_render_default = {
|
|
23
|
+
call: (args) => {
|
|
24
|
+
const paths = args.paths || [];
|
|
25
|
+
const pathList = Array.isArray(paths) ? paths : [paths];
|
|
26
|
+
const displayPaths = pathList.slice(0, 3).map((p) => escapeHtml(p)).join(", ");
|
|
27
|
+
const more = pathList.length > 3 ? ` +${pathList.length - 3} more` : "";
|
|
28
|
+
return `<div class="bash-command">Safe delete <span class="file-path">${displayPaths}${more}</span></div>`;
|
|
29
|
+
},
|
|
30
|
+
result: (data, success) => {
|
|
31
|
+
if (!success) return formatError(data);
|
|
32
|
+
const movedCount = data.moved_count || 0;
|
|
33
|
+
const failed = data.failed || [];
|
|
34
|
+
const failedCount = failed.length;
|
|
35
|
+
if (movedCount > 0 && failedCount === 0) {
|
|
36
|
+
return `<div style="color:var(--success-color)">
|
|
37
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" style="vertical-align:middle; margin-right:4px;">
|
|
38
|
+
<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>
|
|
39
|
+
</svg>
|
|
40
|
+
Moved ${movedCount} item(s) to trash
|
|
41
|
+
</div>`;
|
|
42
|
+
}
|
|
43
|
+
if (movedCount > 0) {
|
|
44
|
+
let html = `<div style="color:var(--warning-color)">
|
|
45
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" style="vertical-align:middle; margin-right:4px;">
|
|
46
|
+
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
|
|
47
|
+
</svg>
|
|
48
|
+
Moved ${movedCount}, ${failedCount} failed
|
|
49
|
+
</div>`;
|
|
50
|
+
if (failed.length > 0) {
|
|
51
|
+
html += `<div style="font-size:11px; color:var(--error-color); margin-top:4px;">Failed: ${escapeHtml(failed.join(", "))}</div>`;
|
|
52
|
+
}
|
|
53
|
+
return html;
|
|
54
|
+
}
|
|
55
|
+
return `<div style="color:var(--text-secondary)">No files moved</div>`;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
export {
|
|
59
|
+
trash_delete_render_default as default
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=trash-delete.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/shell/templates/trash-delete.render.ts"],"sourcesContent":["/**\n * Safe Trash Delete 渲染模板\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\n/**\n * 格式化错误\n */\nfunction formatError(data: any): string {\n const text = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data);\n return `<div class=\"tool-error\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>\n <span>${escapeHtml(text)}</span>\n </div>`;\n}\n\n/**\n * Trash Delete 渲染模板\n */\nexport default {\n call: (args: any) => {\n const paths = args.paths || [];\n const pathList = Array.isArray(paths) ? paths : [paths];\n const displayPaths = pathList.slice(0, 3).map((p: string) => escapeHtml(p)).join(', ');\n const more = pathList.length > 3 ? ` +${pathList.length - 3} more` : '';\n return `<div class=\"bash-command\">Safe delete <span class=\"file-path\">${displayPaths}${more}</span></div>`;\n },\n result: (data: any, success?: boolean) => {\n if (!success) return formatError(data);\n\n const movedCount = data.moved_count || 0;\n const failed = data.failed || [];\n const failedCount = failed.length;\n\n if (movedCount > 0 && failedCount === 0) {\n return `<div style=\"color:var(--success-color)\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\" style=\"vertical-align:middle; margin-right:4px;\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n Moved ${movedCount} item(s) to trash\n </div>`;\n }\n\n if (movedCount > 0) {\n let html = `<div style=\"color:var(--warning-color)\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\" style=\"vertical-align:middle; margin-right:4px;\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/>\n </svg>\n Moved ${movedCount}, ${failedCount} failed\n </div>`;\n if (failed.length > 0) {\n html += `<div style=\"font-size:11px; color:var(--error-color); margin-top:4px;\">Failed: ${escapeHtml(failed.join(', '))}</div>`;\n }\n return html;\n }\n\n return `<div style=\"color:var(--text-secondary)\">No files moved</div>`;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAKA,SAAS,YAAY,MAAmB;AACtC,QAAM,OAAO,OAAO,SAAS,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,OAAO,IAAI;AACnF,SAAO;AAAA;AAAA,YAEG,WAAW,IAAI,CAAC;AAAA;AAE5B;AAKA,IAAO,8BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,UAAM,QAAQ,KAAK,SAAS,CAAC;AAC7B,UAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACtD,UAAM,eAAe,SAAS,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAc,WAAW,CAAC,CAAC,EAAE,KAAK,IAAI;AACrF,UAAM,OAAO,SAAS,SAAS,IAAI,KAAK,SAAS,SAAS,CAAC,UAAU;AACrE,WAAO,iEAAiE,YAAY,GAAG,IAAI;AAAA,EAC7F;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,QAAS,QAAO,YAAY,IAAI;AAErC,UAAM,aAAa,KAAK,eAAe;AACvC,UAAM,SAAS,KAAK,UAAU,CAAC;AAC/B,UAAM,cAAc,OAAO;AAE3B,QAAI,aAAa,KAAK,gBAAgB,GAAG;AACvC,aAAO;AAAA;AAAA;AAAA;AAAA,gBAIG,UAAU;AAAA;AAAA,IAEtB;AAEA,QAAI,aAAa,GAAG;AAClB,UAAI,OAAO;AAAA;AAAA;AAAA;AAAA,gBAID,UAAU,KAAK,WAAW;AAAA;AAEpC,UAAI,OAAO,SAAS,GAAG;AACrB,gBAAQ,kFAAkF,WAAW,OAAO,KAAK,IAAI,CAAC,CAAC;AAAA,MACzH;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import "../../../chunk-BDS2QGZ5.js";
|
|
2
|
+
|
|
3
|
+
// src/features/shell/templates/trash-list.render.ts
|
|
4
|
+
function escapeHtml(text) {
|
|
5
|
+
const str = String(text);
|
|
6
|
+
const map = {
|
|
7
|
+
"&": "&",
|
|
8
|
+
"<": "<",
|
|
9
|
+
">": ">",
|
|
10
|
+
'"': """,
|
|
11
|
+
"'": "'"
|
|
12
|
+
};
|
|
13
|
+
return str.replace(/[&<>"']/g, (m) => map[m]);
|
|
14
|
+
}
|
|
15
|
+
function formatError(data) {
|
|
16
|
+
const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
|
|
17
|
+
return `<div class="tool-error">
|
|
18
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
|
|
19
|
+
<span>${escapeHtml(text)}</span>
|
|
20
|
+
</div>`;
|
|
21
|
+
}
|
|
22
|
+
function formatDateTime(dateStr) {
|
|
23
|
+
try {
|
|
24
|
+
const date = new Date(dateStr);
|
|
25
|
+
const now = /* @__PURE__ */ new Date();
|
|
26
|
+
const diffMs = now.getTime() - date.getTime();
|
|
27
|
+
const diffMins = Math.floor(diffMs / 6e4);
|
|
28
|
+
const diffHours = Math.floor(diffMs / 36e5);
|
|
29
|
+
const diffDays = Math.floor(diffMs / 864e5);
|
|
30
|
+
if (diffMins < 1) return "just now";
|
|
31
|
+
if (diffMins < 60) return `${diffMins}m ago`;
|
|
32
|
+
if (diffHours < 24) return `${diffHours}h ago`;
|
|
33
|
+
if (diffDays < 7) return `${diffDays}d ago`;
|
|
34
|
+
return date.toLocaleDateString();
|
|
35
|
+
} catch {
|
|
36
|
+
return dateStr;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
var trash_list_render_default = {
|
|
40
|
+
call: (args) => {
|
|
41
|
+
const trashDir = args.trashDir || ".trash";
|
|
42
|
+
return `<div class="bash-command">List trash <span style="color:var(--text-secondary); font-size:11px;">(${escapeHtml(trashDir)})</span></div>`;
|
|
43
|
+
},
|
|
44
|
+
result: (data, success) => {
|
|
45
|
+
if (!success) return formatError(data);
|
|
46
|
+
const total = data.total || 0;
|
|
47
|
+
const files = data.files || [];
|
|
48
|
+
if (total === 0) {
|
|
49
|
+
return `<div style="color:var(--text-secondary); font-style:italic; padding:12px;">
|
|
50
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" style="vertical-align:middle; margin-right:4px; opacity:0.5;">
|
|
51
|
+
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
|
|
52
|
+
</svg>
|
|
53
|
+
Trash is empty
|
|
54
|
+
</div>`;
|
|
55
|
+
}
|
|
56
|
+
return `<div style="font-family:monospace; font-size:12px;">
|
|
57
|
+
<div style="color:var(--text-secondary); margin-bottom:8px;">${total} item(s) in trash</div>
|
|
58
|
+
<table style="border-collapse:collapse; width:100%;">
|
|
59
|
+
<thead>
|
|
60
|
+
<tr style="color:var(--text-secondary); font-size:11px;">
|
|
61
|
+
<th style="text-align:left; padding:4px 8px; border-bottom:1px solid var(--border-color);">#</th>
|
|
62
|
+
<th style="text-align:left; padding:4px 8px; border-bottom:1px solid var(--border-color);">Path</th>
|
|
63
|
+
<th style="text-align:left; padding:4px 8px; border-bottom:1px solid var(--border-color);">Date</th>
|
|
64
|
+
<th style="text-align:right; padding:4px 8px; border-bottom:1px solid var(--border-color);">Size</th>
|
|
65
|
+
</tr>
|
|
66
|
+
</thead>
|
|
67
|
+
<tbody>
|
|
68
|
+
${files.map((f) => `
|
|
69
|
+
<tr style="border-bottom:1px solid var(--border-color); ${f.index % 2 === 0 ? "" : "background:rgba(255,255,255,0.02);"}">
|
|
70
|
+
<td style="padding:4px 8px; color:var(--accent-color);">${escapeHtml(String(f.index))}</td>
|
|
71
|
+
<td style="padding:4px 8px; max-width:400px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;" title="${escapeHtml(f.original_path)}">${escapeHtml(f.original_path)}</td>
|
|
72
|
+
<td style="padding:4px 8px; color:var(--text-secondary);">${escapeHtml(formatDateTime(f.deletion_date))}</td>
|
|
73
|
+
<td style="padding:4px 8px; text-align:right; color:var(--text-secondary);">${escapeHtml(f.size_formatted || "0 B")}</td>
|
|
74
|
+
</tr>
|
|
75
|
+
`).join("")}
|
|
76
|
+
</tbody>
|
|
77
|
+
</table>
|
|
78
|
+
</div>`;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
export {
|
|
82
|
+
trash_list_render_default as default
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=trash-list.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/shell/templates/trash-list.render.ts"],"sourcesContent":["/**\r\n * Safe Trash List 渲染模板\r\n */\r\n\r\nimport type { InlineRenderTemplate } from '../../../core/types.js';\r\n\r\n/**\r\n * HTML 转义辅助函数\r\n */\r\nfunction escapeHtml(text: any): string {\r\n const str = String(text);\r\n const map: Record<string, string> = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": '''\r\n };\r\n return str.replace(/[&<>\"']/g, m => map[m]);\r\n}\r\n\r\n/**\r\n * 格式化错误\r\n */\r\nfunction formatError(data: any): string {\r\n const text = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data);\r\n return `<div class=\"tool-error\">\r\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>\r\n <span>${escapeHtml(text)}</span>\r\n </div>`;\r\n}\r\n\r\n/**\r\n * 格式化日期时间\r\n */\r\nfunction formatDateTime(dateStr: string): string {\r\n try {\r\n const date = new Date(dateStr);\r\n const now = new Date();\r\n const diffMs = now.getTime() - date.getTime();\r\n const diffMins = Math.floor(diffMs / 60000);\r\n const diffHours = Math.floor(diffMs / 3600000);\r\n const diffDays = Math.floor(diffMs / 86400000);\r\n\r\n if (diffMins < 1) return 'just now';\r\n if (diffMins < 60) return `${diffMins}m ago`;\r\n if (diffHours < 24) return `${diffHours}h ago`;\r\n if (diffDays < 7) return `${diffDays}d ago`;\r\n\r\n return date.toLocaleDateString();\r\n } catch {\r\n return dateStr;\r\n }\r\n}\r\n\r\n/**\r\n * Trash List 渲染模板\r\n */\r\nexport default {\r\n call: (args: any) => {\r\n const trashDir = args.trashDir || '.trash';\r\n return `<div class=\"bash-command\">List trash <span style=\"color:var(--text-secondary); font-size:11px;\">(${escapeHtml(trashDir)})</span></div>`;\r\n },\r\n result: (data: any, success?: boolean) => {\r\n if (!success) return formatError(data);\r\n\r\n const total = data.total || 0;\r\n const files = data.files || [];\r\n\r\n if (total === 0) {\r\n return `<div style=\"color:var(--text-secondary); font-style:italic; padding:12px;\">\r\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\" style=\"vertical-align:middle; margin-right:4px; opacity:0.5;\">\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/>\r\n </svg>\r\n Trash is empty\r\n </div>`;\r\n }\r\n\r\n return `<div style=\"font-family:monospace; font-size:12px;\">\r\n <div style=\"color:var(--text-secondary); margin-bottom:8px;\">${total} item(s) in trash</div>\r\n <table style=\"border-collapse:collapse; width:100%;\">\r\n <thead>\r\n <tr style=\"color:var(--text-secondary); font-size:11px;\">\r\n <th style=\"text-align:left; padding:4px 8px; border-bottom:1px solid var(--border-color);\">#</th>\r\n <th style=\"text-align:left; padding:4px 8px; border-bottom:1px solid var(--border-color);\">Path</th>\r\n <th style=\"text-align:left; padding:4px 8px; border-bottom:1px solid var(--border-color);\">Date</th>\r\n <th style=\"text-align:right; padding:4px 8px; border-bottom:1px solid var(--border-color);\">Size</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${files.map((f: any) => `\r\n <tr style=\"border-bottom:1px solid var(--border-color); ${f.index % 2 === 0 ? '' : 'background:rgba(255,255,255,0.02);'}\">\r\n <td style=\"padding:4px 8px; color:var(--accent-color);\">${escapeHtml(String(f.index))}</td>\r\n <td style=\"padding:4px 8px; max-width:400px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;\" title=\"${escapeHtml(f.original_path)}\">${escapeHtml(f.original_path)}</td>\r\n <td style=\"padding:4px 8px; color:var(--text-secondary);\">${escapeHtml(formatDateTime(f.deletion_date))}</td>\r\n <td style=\"padding:4px 8px; text-align:right; color:var(--text-secondary);\">${escapeHtml(f.size_formatted || '0 B')}</td>\r\n </tr>\r\n `).join('')}\r\n </tbody>\r\n </table>\r\n </div>`;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAKA,SAAS,YAAY,MAAmB;AACtC,QAAM,OAAO,OAAO,SAAS,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,OAAO,IAAI;AACnF,SAAO;AAAA;AAAA,YAEG,WAAW,IAAI,CAAC;AAAA;AAE5B;AAKA,SAAS,eAAe,SAAyB;AAC/C,MAAI;AACF,UAAM,OAAO,IAAI,KAAK,OAAO;AAC7B,UAAM,MAAM,oBAAI,KAAK;AACrB,UAAM,SAAS,IAAI,QAAQ,IAAI,KAAK,QAAQ;AAC5C,UAAM,WAAW,KAAK,MAAM,SAAS,GAAK;AAC1C,UAAM,YAAY,KAAK,MAAM,SAAS,IAAO;AAC7C,UAAM,WAAW,KAAK,MAAM,SAAS,KAAQ;AAE7C,QAAI,WAAW,EAAG,QAAO;AACzB,QAAI,WAAW,GAAI,QAAO,GAAG,QAAQ;AACrC,QAAI,YAAY,GAAI,QAAO,GAAG,SAAS;AACvC,QAAI,WAAW,EAAG,QAAO,GAAG,QAAQ;AAEpC,WAAO,KAAK,mBAAmB;AAAA,EACjC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,IAAO,4BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,UAAM,WAAW,KAAK,YAAY;AAClC,WAAO,oGAAoG,WAAW,QAAQ,CAAC;AAAA,EACjI;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,QAAS,QAAO,YAAY,IAAI;AAErC,UAAM,QAAQ,KAAK,SAAS;AAC5B,UAAM,QAAQ,KAAK,SAAS,CAAC;AAE7B,QAAI,UAAU,GAAG;AACf,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMT;AAEA,WAAO;AAAA,qEAC0D,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAW9D,MAAM,IAAI,CAAC,MAAW;AAAA,sEACoC,EAAE,QAAQ,MAAM,IAAI,KAAK,oCAAoC;AAAA,wEAC3D,WAAW,OAAO,EAAE,KAAK,CAAC,CAAC;AAAA,kIAC+B,WAAW,EAAE,aAAa,CAAC,KAAK,WAAW,EAAE,aAAa,CAAC;AAAA,0EACnH,WAAW,eAAe,EAAE,aAAa,CAAC,CAAC;AAAA,4FACzB,WAAW,EAAE,kBAAkB,KAAK,CAAC;AAAA;AAAA,WAEtH,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA,EAInB;AACF;","names":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import "../../../chunk-BDS2QGZ5.js";
|
|
2
|
+
|
|
3
|
+
// src/features/shell/templates/trash-restore.render.ts
|
|
4
|
+
function escapeHtml(text) {
|
|
5
|
+
const str = String(text);
|
|
6
|
+
const map = {
|
|
7
|
+
"&": "&",
|
|
8
|
+
"<": "<",
|
|
9
|
+
">": ">",
|
|
10
|
+
'"': """,
|
|
11
|
+
"'": "'"
|
|
12
|
+
};
|
|
13
|
+
return str.replace(/[&<>"']/g, (m) => map[m]);
|
|
14
|
+
}
|
|
15
|
+
function formatError(data) {
|
|
16
|
+
const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
|
|
17
|
+
return `<div class="tool-error">
|
|
18
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
|
|
19
|
+
<span>${escapeHtml(text)}</span>
|
|
20
|
+
</div>`;
|
|
21
|
+
}
|
|
22
|
+
var trash_restore_render_default = {
|
|
23
|
+
call: (args) => {
|
|
24
|
+
const target = args.target !== void 0 ? escapeHtml(String(args.target)) : "";
|
|
25
|
+
return `<div class="bash-command">Restore <span class="pattern">${target}</span></div>`;
|
|
26
|
+
},
|
|
27
|
+
result: (data, success) => {
|
|
28
|
+
if (!success) return formatError(data);
|
|
29
|
+
const restored = data.restored || [];
|
|
30
|
+
const failed = data.failed || [];
|
|
31
|
+
const restoredCount = restored.length;
|
|
32
|
+
const failedCount = failed.length;
|
|
33
|
+
if (restoredCount > 0 && failedCount === 0) {
|
|
34
|
+
let html = `<div style="color:var(--success-color)">
|
|
35
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" style="vertical-align:middle; margin-right:4px;">
|
|
36
|
+
<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>
|
|
37
|
+
</svg>
|
|
38
|
+
Restored ${restoredCount} item(s)
|
|
39
|
+
</div>`;
|
|
40
|
+
if (restoredCount > 0 && restoredCount <= 5) {
|
|
41
|
+
html += `<div style="font-size:11px; color:var(--text-secondary); margin-top:4px;">${restored.map((p) => escapeHtml(p)).join(", ")}</div>`;
|
|
42
|
+
}
|
|
43
|
+
return html;
|
|
44
|
+
}
|
|
45
|
+
if (restoredCount > 0 || failedCount > 0) {
|
|
46
|
+
let html = "";
|
|
47
|
+
if (restoredCount > 0) {
|
|
48
|
+
html += `<div style="color:var(--success-color); margin-bottom:4px;">
|
|
49
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" style="vertical-align:middle; margin-right:4px;">
|
|
50
|
+
<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>
|
|
51
|
+
</svg>
|
|
52
|
+
Restored ${restoredCount}
|
|
53
|
+
</div>`;
|
|
54
|
+
}
|
|
55
|
+
if (failedCount > 0) {
|
|
56
|
+
html += `<div style="color:var(--error-color); margin-bottom:4px;">
|
|
57
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" style="vertical-align:middle; margin-right:4px;">
|
|
58
|
+
<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>
|
|
59
|
+
</svg>
|
|
60
|
+
${failedCount} failed
|
|
61
|
+
</div>`;
|
|
62
|
+
const errorMessages = failed.map((f) => {
|
|
63
|
+
const path = f.path || "unknown";
|
|
64
|
+
const error = f.error || "unknown error";
|
|
65
|
+
return `${escapeHtml(path)}: ${escapeHtml(error)}`;
|
|
66
|
+
}).join("; ");
|
|
67
|
+
html += `<div style="font-size:11px; color:var(--error-color); margin-top:4px;">${errorMessages}</div>`;
|
|
68
|
+
}
|
|
69
|
+
return html || `<div style="color:var(--text-secondary)">Nothing restored</div>`;
|
|
70
|
+
}
|
|
71
|
+
return `<div style="color:var(--text-secondary)">Nothing restored</div>`;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
export {
|
|
75
|
+
trash_restore_render_default as default
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=trash-restore.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/shell/templates/trash-restore.render.ts"],"sourcesContent":["/**\n * Safe Trash Restore 渲染模板\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\n/**\n * 格式化错误\n */\nfunction formatError(data: any): string {\n const text = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data);\n return `<div class=\"tool-error\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>\n <span>${escapeHtml(text)}</span>\n </div>`;\n}\n\n/**\n * Trash Restore 渲染模板\n */\nexport default {\n call: (args: any) => {\n const target = args.target !== undefined ? escapeHtml(String(args.target)) : '';\n return `<div class=\"bash-command\">Restore <span class=\"pattern\">${target}</span></div>`;\n },\n result: (data: any, success?: boolean) => {\n if (!success) return formatError(data);\n\n const restored = data.restored || [];\n const failed = data.failed || [];\n const restoredCount = restored.length;\n const failedCount = failed.length;\n\n if (restoredCount > 0 && failedCount === 0) {\n let html = `<div style=\"color:var(--success-color)\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\" style=\"vertical-align:middle; margin-right:4px;\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n Restored ${restoredCount} item(s)\n </div>`;\n\n if (restoredCount > 0 && restoredCount <= 5) {\n html += `<div style=\"font-size:11px; color:var(--text-secondary); margin-top:4px;\">${restored.map((p: string) => escapeHtml(p)).join(', ')}</div>`;\n }\n\n return html;\n }\n\n if (restoredCount > 0 || failedCount > 0) {\n let html = '';\n\n if (restoredCount > 0) {\n html += `<div style=\"color:var(--success-color); margin-bottom:4px;\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\" style=\"vertical-align:middle; margin-right:4px;\">\n <path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/>\n </svg>\n Restored ${restoredCount}\n </div>`;\n }\n\n if (failedCount > 0) {\n html += `<div style=\"color:var(--error-color); margin-bottom:4px;\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\" style=\"vertical-align:middle; margin-right:4px;\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/>\n </svg>\n ${failedCount} failed\n </div>`;\n\n const errorMessages = failed.map((f: any) => {\n const path = f.path || 'unknown';\n const error = f.error || 'unknown error';\n return `${escapeHtml(path)}: ${escapeHtml(error)}`;\n }).join('; ');\n\n html += `<div style=\"font-size:11px; color:var(--error-color); margin-top:4px;\">${errorMessages}</div>`;\n }\n\n return html || `<div style=\"color:var(--text-secondary)\">Nothing restored</div>`;\n }\n\n return `<div style=\"color:var(--text-secondary)\">Nothing restored</div>`;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAKA,SAAS,YAAY,MAAmB;AACtC,QAAM,OAAO,OAAO,SAAS,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,OAAO,IAAI;AACnF,SAAO;AAAA;AAAA,YAEG,WAAW,IAAI,CAAC;AAAA;AAE5B;AAKA,IAAO,+BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,UAAM,SAAS,KAAK,WAAW,SAAY,WAAW,OAAO,KAAK,MAAM,CAAC,IAAI;AAC7E,WAAO,2DAA2D,MAAM;AAAA,EAC1E;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,QAAS,QAAO,YAAY,IAAI;AAErC,UAAM,WAAW,KAAK,YAAY,CAAC;AACnC,UAAM,SAAS,KAAK,UAAU,CAAC;AAC/B,UAAM,gBAAgB,SAAS;AAC/B,UAAM,cAAc,OAAO;AAE3B,QAAI,gBAAgB,KAAK,gBAAgB,GAAG;AAC1C,UAAI,OAAO;AAAA;AAAA;AAAA;AAAA,mBAIE,aAAa;AAAA;AAG1B,UAAI,gBAAgB,KAAK,iBAAiB,GAAG;AAC3C,gBAAQ,6EAA6E,SAAS,IAAI,CAAC,MAAc,WAAW,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MAC5I;AAEA,aAAO;AAAA,IACT;AAEA,QAAI,gBAAgB,KAAK,cAAc,GAAG;AACxC,UAAI,OAAO;AAEX,UAAI,gBAAgB,GAAG;AACrB,gBAAQ;AAAA;AAAA;AAAA;AAAA,qBAIK,aAAa;AAAA;AAAA,MAE5B;AAEA,UAAI,cAAc,GAAG;AACnB,gBAAQ;AAAA;AAAA;AAAA;AAAA,YAIJ,WAAW;AAAA;AAGf,cAAM,gBAAgB,OAAO,IAAI,CAAC,MAAW;AAC3C,gBAAM,OAAO,EAAE,QAAQ;AACvB,gBAAM,QAAQ,EAAE,SAAS;AACzB,iBAAO,GAAG,WAAW,IAAI,CAAC,KAAK,WAAW,KAAK,CAAC;AAAA,QAClD,CAAC,EAAE,KAAK,IAAI;AAEZ,gBAAQ,0EAA0E,aAAa;AAAA,MACjG;AAEA,aAAO,QAAQ;AAAA,IACjB;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill 工具渲染模板
|
|
3
|
+
* 使用 viewer-worker.ts HTML 中的版本(Markdown 渲染)
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Skill 调用渲染模板(Markdown 渲染)
|
|
7
|
+
*/
|
|
8
|
+
declare const _default: {
|
|
9
|
+
readonly call: (args: any) => string;
|
|
10
|
+
readonly result: (data: any, success?: boolean) => string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export { _default as default };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import "../../../chunk-BDS2QGZ5.js";
|
|
2
|
+
|
|
3
|
+
// src/features/skill/templates/skill.render.ts
|
|
4
|
+
function escapeHtml(text) {
|
|
5
|
+
const str = String(text);
|
|
6
|
+
const map = {
|
|
7
|
+
"&": "&",
|
|
8
|
+
"<": "<",
|
|
9
|
+
">": ">",
|
|
10
|
+
'"': """,
|
|
11
|
+
"'": "'"
|
|
12
|
+
};
|
|
13
|
+
return str.replace(/[&<>"']/g, (m) => map[m]);
|
|
14
|
+
}
|
|
15
|
+
function formatError(data) {
|
|
16
|
+
const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
|
|
17
|
+
return `<div class="tool-error">
|
|
18
|
+
<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
|
|
19
|
+
<span>${escapeHtml(text)}</span>
|
|
20
|
+
</div>`;
|
|
21
|
+
}
|
|
22
|
+
var skill_render_default = {
|
|
23
|
+
call: (args) => `<div class="bash-command">Invoke Skill <span class="file-path">${escapeHtml(args.skill || "")}</span></div>`,
|
|
24
|
+
result: (data, success) => {
|
|
25
|
+
if (!success) return formatError(data);
|
|
26
|
+
const str = String(data);
|
|
27
|
+
return `<div class="file-content markdown-body" style="padding:12px; background:#0d1117; border-radius:6px; font-size:13px; max-height:600px; overflow-y:auto;">${globalThis.marked?.parse(str) || str}</div>`;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
export {
|
|
31
|
+
skill_render_default as default
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=skill.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/skill/templates/skill.render.ts"],"sourcesContent":["/**\n * Skill 工具渲染模板\n * 使用 viewer-worker.ts HTML 中的版本(Markdown 渲染)\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\n/**\n * 格式化错误\n */\nfunction formatError(data: any): string {\n const text = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data);\n return `<div class=\"tool-error\">\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>\n <span>${escapeHtml(text)}</span>\n </div>`;\n}\n\n/**\n * Skill 调用渲染模板(Markdown 渲染)\n */\nexport default {\n call: (args: any) => `<div class=\"bash-command\">Invoke Skill <span class=\"file-path\">${escapeHtml(args.skill || '')}</span></div>`,\n result: (data: any, success?: boolean) => {\n if (!success) return formatError(data);\n const str = String(data);\n // invoke_skill 返回的是 markdown 格式的技能文档,直接用 markdown 渲染\n return `<div class=\"file-content markdown-body\" style=\"padding:12px; background:#0d1117; border-radius:6px; font-size:13px; max-height:600px; overflow-y:auto;\">${(globalThis as any).marked?.parse(str) || str}</div>`;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AAUA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAKA,SAAS,YAAY,MAAmB;AACtC,QAAM,OAAO,OAAO,SAAS,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,OAAO,IAAI;AACnF,SAAO;AAAA;AAAA,YAEG,WAAW,IAAI,CAAC;AAAA;AAE5B;AAKA,IAAO,uBAAQ;AAAA,EACb,MAAM,CAAC,SAAc,kEAAkE,WAAW,KAAK,SAAS,EAAE,CAAC;AAAA,EACnH,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,QAAS,QAAO,YAAY,IAAI;AACrC,UAAM,MAAM,OAAO,IAAI;AAEvB,WAAO,2JAA4J,WAAmB,QAAQ,MAAM,GAAG,KAAK,GAAG;AAAA,EACjN;AACF;","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import "../../../chunk-BDS2QGZ5.js";
|
|
2
|
+
|
|
3
|
+
// src/features/subagent/templates/agent-close.render.ts
|
|
4
|
+
function escapeHtml(text) {
|
|
5
|
+
const str = String(text);
|
|
6
|
+
const map = {
|
|
7
|
+
"&": "&",
|
|
8
|
+
"<": "<",
|
|
9
|
+
">": ">",
|
|
10
|
+
'"': """,
|
|
11
|
+
"'": "'"
|
|
12
|
+
};
|
|
13
|
+
return str.replace(/[&<>"']/g, (m) => map[m]);
|
|
14
|
+
}
|
|
15
|
+
var agent_close_render_default = {
|
|
16
|
+
call: (args) => {
|
|
17
|
+
return `<div class="bash-command">Close <span class="pattern">${escapeHtml(args.agentId || "")}</span> (reason: ${args.reason || "manual"})</div>`;
|
|
18
|
+
},
|
|
19
|
+
result: (data) => {
|
|
20
|
+
if (data.error) {
|
|
21
|
+
return `<div style="color:var(--error-color)">\u2717 ${escapeHtml(data.error)}</div>`;
|
|
22
|
+
}
|
|
23
|
+
return `<div style="color:var(--success-color)">\u2713 ${data.message || "Agent closed"}</div>`;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
export {
|
|
27
|
+
agent_close_render_default as default
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=agent-close.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/subagent/templates/agent-close.render.ts"],"sourcesContent":["/**\n * agent-close 工具渲染模板\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\nexport default {\n call: (args: any) => {\n return `<div class=\"bash-command\">Close <span class=\"pattern\">${escapeHtml(args.agentId || '')}</span> (reason: ${args.reason || 'manual'})</div>`;\n },\n result: (data: any) => {\n if (data.error) {\n return `<div style=\"color:var(--error-color)\">✗ ${escapeHtml(data.error)}</div>`;\n }\n return `<div style=\"color:var(--success-color)\">✓ ${data.message || 'Agent closed'}</div>`;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,IAAO,6BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO,yDAAyD,WAAW,KAAK,WAAW,EAAE,CAAC,oBAAoB,KAAK,UAAU,QAAQ;AAAA,EAC3I;AAAA,EACA,QAAQ,CAAC,SAAc;AACrB,QAAI,KAAK,OAAO;AACd,aAAO,gDAA2C,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1E;AACA,WAAO,kDAA6C,KAAK,WAAW,cAAc;AAAA,EACpF;AACF;","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import "../../../chunk-BDS2QGZ5.js";
|
|
2
|
+
|
|
3
|
+
// src/features/subagent/templates/agent-list.render.ts
|
|
4
|
+
var agent_list_render_default = {
|
|
5
|
+
call: '<div class="bash-command">List agents (filter: {{filter}})</div>',
|
|
6
|
+
result: (data) => {
|
|
7
|
+
if (!data.agents || data.agents.length === 0) {
|
|
8
|
+
return `<div style="color:var(--warning-color)">No agents found</div>`;
|
|
9
|
+
}
|
|
10
|
+
return `<div style="font-size:12px;">
|
|
11
|
+
<div>Total: ${data.total} | Running: ${data.running}</div>
|
|
12
|
+
${data.agents.map((a) => `
|
|
13
|
+
<div style="margin-top:4px; padding:4px; background:var(--code-bg); border-radius:4px;">
|
|
14
|
+
<strong>${a.agentId}</strong> (${a.type}) - <span style="color:${a.status === "idle" || a.status === "busy" ? "var(--success-color)" : "var(--warning-color)"}">${a.status}</span>
|
|
15
|
+
</div>
|
|
16
|
+
`).join("")}
|
|
17
|
+
</div>`;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
agent_list_render_default as default
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=agent-list.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/subagent/templates/agent-list.render.ts"],"sourcesContent":["/**\n * agent-list 工具渲染模板\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\nexport default {\n call: '<div class=\"bash-command\">List agents (filter: {{filter}})</div>',\n result: (data: any) => {\n if (!data.agents || data.agents.length === 0) {\n return `<div style=\"color:var(--warning-color)\">No agents found</div>`;\n }\n return `<div style=\"font-size:12px;\">\n <div>Total: ${data.total} | Running: ${data.running}</div>\n ${data.agents.map((a: any) => `\n <div style=\"margin-top:4px; padding:4px; background:var(--code-bg); border-radius:4px;\">\n <strong>${a.agentId}</strong> (${a.type}) - <span style=\"color:${a.status === 'idle' || a.status === 'busy' ? 'var(--success-color)' : 'var(--warning-color)'}\">${a.status}</span>\n </div>\n `).join('')}\n </div>`;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AAqBA,IAAO,4BAAQ;AAAA,EACb,MAAM;AAAA,EACN,QAAQ,CAAC,SAAc;AACrB,QAAI,CAAC,KAAK,UAAU,KAAK,OAAO,WAAW,GAAG;AAC5C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,oBACS,KAAK,KAAK,eAAe,KAAK,OAAO;AAAA,QACjD,KAAK,OAAO,IAAI,CAAC,MAAW;AAAA;AAAA,oBAEhB,EAAE,OAAO,cAAc,EAAE,IAAI,0BAA0B,EAAE,WAAW,UAAU,EAAE,WAAW,SAAS,yBAAyB,sBAAsB,KAAK,EAAE,MAAM;AAAA;AAAA,OAE7K,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,EAEf;AACF;","names":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import "../../../chunk-BDS2QGZ5.js";
|
|
2
|
+
|
|
3
|
+
// src/features/subagent/templates/agent-send.render.ts
|
|
4
|
+
function escapeHtml(text) {
|
|
5
|
+
const str = String(text);
|
|
6
|
+
const map = {
|
|
7
|
+
"&": "&",
|
|
8
|
+
"<": "<",
|
|
9
|
+
">": ">",
|
|
10
|
+
'"': """,
|
|
11
|
+
"'": "'"
|
|
12
|
+
};
|
|
13
|
+
return str.replace(/[&<>"']/g, (m) => map[m]);
|
|
14
|
+
}
|
|
15
|
+
var agent_send_render_default = {
|
|
16
|
+
call: (args) => {
|
|
17
|
+
return `<div class="bash-command">\u53D1\u9001\u6307\u4EE4\u5230 <span class="pattern">${escapeHtml(args.agentId || "")}</span></div>`;
|
|
18
|
+
},
|
|
19
|
+
result: (data) => {
|
|
20
|
+
if (data.error) {
|
|
21
|
+
return `<div style="color:var(--error-color)">\u2717 ${escapeHtml(data.error)}</div>`;
|
|
22
|
+
}
|
|
23
|
+
let output = `<div style="color:var(--success-color)">\u2713 \u6307\u4EE4\u5DF2\u53D1\u9001</div>`;
|
|
24
|
+
if (data.allAgents && data.allAgents.length > 0) {
|
|
25
|
+
const agentsList = data.allAgents.map((a) => {
|
|
26
|
+
const statusText = a.status === "busy" ? "[\u8FD0\u884C\u4E2D]" : a.status === "idle" ? "[\u7A7A\u95F2]" : "[\u5DF2\u5B8C\u6210]";
|
|
27
|
+
return `${statusText} ${escapeHtml(a.agentId)}`;
|
|
28
|
+
}).join(" \xB7 ");
|
|
29
|
+
output += `<div style="font-size:11px; color:var(--text-secondary); margin-left:4px; margin-top:4px;">${agentsList}</div>`;
|
|
30
|
+
}
|
|
31
|
+
return output;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
agent_send_render_default as default
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=agent-send.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/features/subagent/templates/agent-send.render.ts"],"sourcesContent":["/**\n * agent-send 工具渲染模板\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\nexport default {\n call: (args: any) => {\n return `<div class=\"bash-command\">发送指令到 <span class=\"pattern\">${escapeHtml(args.agentId || '')}</span></div>`;\n },\n result: (data: any) => {\n if (data.error) {\n return `<div style=\"color:var(--error-color)\">✗ ${escapeHtml(data.error)}</div>`;\n }\n let output = `<div style=\"color:var(--success-color)\">✓ 指令已发送</div>`;\n\n // 显示所有 agent 列表\n if (data.allAgents && data.allAgents.length > 0) {\n const agentsList = data.allAgents.map((a: any) => {\n const statusText = a.status === 'busy' ? '[运行中]' : a.status === 'idle' ? '[空闲]' : '[已完成]';\n return `${statusText} ${escapeHtml(a.agentId)}`;\n }).join(' · ');\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px; margin-top:4px;\">${agentsList}</div>`;\n }\n return output;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,IAAO,4BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO,kFAAyD,WAAW,KAAK,WAAW,EAAE,CAAC;AAAA,EAChG;AAAA,EACA,QAAQ,CAAC,SAAc;AACrB,QAAI,KAAK,OAAO;AACd,aAAO,gDAA2C,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1E;AACA,QAAI,SAAS;AAGb,QAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;AAC/C,YAAM,aAAa,KAAK,UAAU,IAAI,CAAC,MAAW;AAChD,cAAM,aAAa,EAAE,WAAW,SAAS,yBAAU,EAAE,WAAW,SAAS,mBAAS;AAClF,eAAO,GAAG,UAAU,IAAI,WAAW,EAAE,OAAO,CAAC;AAAA,MAC/C,CAAC,EAAE,KAAK,QAAK;AACb,gBAAU,8FAA8F,UAAU;AAAA,IACpH;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
|