@agentdevjs/core 0.1.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 (79) hide show
  1. package/dist/BasicAgent-RPYJHYCM.js +12 -0
  2. package/dist/BasicAgent-RPYJHYCM.js.map +1 -0
  3. package/dist/ExplorerAgent-ITTSJRJI.js +12 -0
  4. package/dist/ExplorerAgent-ITTSJRJI.js.map +1 -0
  5. package/dist/chunk-574NG4UB.js +1259 -0
  6. package/dist/chunk-574NG4UB.js.map +1 -0
  7. package/dist/chunk-BVF7RUXV.js +136 -0
  8. package/dist/chunk-BVF7RUXV.js.map +1 -0
  9. package/dist/chunk-DGUM43GV.js +11 -0
  10. package/dist/chunk-DGUM43GV.js.map +1 -0
  11. package/dist/chunk-KO4DJKM6.js +99 -0
  12. package/dist/chunk-KO4DJKM6.js.map +1 -0
  13. package/dist/chunk-TIJV6GJW.js +51 -0
  14. package/dist/chunk-TIJV6GJW.js.map +1 -0
  15. package/dist/chunk-UCEIJEM5.js +61 -0
  16. package/dist/chunk-UCEIJEM5.js.map +1 -0
  17. package/dist/chunk-YFSM6IYU.js +6572 -0
  18. package/dist/chunk-YFSM6IYU.js.map +1 -0
  19. package/dist/features/example-feature/templates/example-tool.render.d.ts +3 -0
  20. package/dist/features/example-feature/templates/example-tool.render.js +20 -0
  21. package/dist/features/example-feature/templates/example-tool.render.js.map +1 -0
  22. package/dist/features/opencode-basic/templates/edit.render.d.ts +12 -0
  23. package/dist/features/opencode-basic/templates/edit.render.js +44 -0
  24. package/dist/features/opencode-basic/templates/edit.render.js.map +1 -0
  25. package/dist/features/opencode-basic/templates/glob.render.d.ts +13 -0
  26. package/dist/features/opencode-basic/templates/glob.render.js +44 -0
  27. package/dist/features/opencode-basic/templates/glob.render.js.map +1 -0
  28. package/dist/features/opencode-basic/templates/grep.render.d.ts +13 -0
  29. package/dist/features/opencode-basic/templates/grep.render.js +67 -0
  30. package/dist/features/opencode-basic/templates/grep.render.js.map +1 -0
  31. package/dist/features/opencode-basic/templates/ls.render.d.ts +12 -0
  32. package/dist/features/opencode-basic/templates/ls.render.js +35 -0
  33. package/dist/features/opencode-basic/templates/ls.render.js.map +1 -0
  34. package/dist/features/opencode-basic/templates/read.render.d.ts +13 -0
  35. package/dist/features/opencode-basic/templates/read.render.js +83 -0
  36. package/dist/features/opencode-basic/templates/read.render.js.map +1 -0
  37. package/dist/features/opencode-basic/templates/write.render.d.ts +13 -0
  38. package/dist/features/opencode-basic/templates/write.render.js +44 -0
  39. package/dist/features/opencode-basic/templates/write.render.js.map +1 -0
  40. package/dist/features/skill/templates/skill.render.d.ts +13 -0
  41. package/dist/features/skill/templates/skill.render.js +33 -0
  42. package/dist/features/skill/templates/skill.render.js.map +1 -0
  43. package/dist/features/subagent/templates/agent-close.render.d.ts +9 -0
  44. package/dist/features/subagent/templates/agent-close.render.js +29 -0
  45. package/dist/features/subagent/templates/agent-close.render.js.map +1 -0
  46. package/dist/features/subagent/templates/agent-list.render.d.ts +9 -0
  47. package/dist/features/subagent/templates/agent-list.render.js +23 -0
  48. package/dist/features/subagent/templates/agent-list.render.js.map +1 -0
  49. package/dist/features/subagent/templates/agent-send.render.d.ts +9 -0
  50. package/dist/features/subagent/templates/agent-send.render.js +37 -0
  51. package/dist/features/subagent/templates/agent-send.render.js.map +1 -0
  52. package/dist/features/subagent/templates/agent-spawn.render.d.ts +9 -0
  53. package/dist/features/subagent/templates/agent-spawn.render.js +38 -0
  54. package/dist/features/subagent/templates/agent-spawn.render.js.map +1 -0
  55. package/dist/features/subagent/templates/wait.render.d.ts +9 -0
  56. package/dist/features/subagent/templates/wait.render.js +29 -0
  57. package/dist/features/subagent/templates/wait.render.js.map +1 -0
  58. package/dist/features/todo/templates/task-clear.render.d.ts +12 -0
  59. package/dist/features/todo/templates/task-clear.render.js +32 -0
  60. package/dist/features/todo/templates/task-clear.render.js.map +1 -0
  61. package/dist/features/todo/templates/task-create.render.d.ts +12 -0
  62. package/dist/features/todo/templates/task-create.render.js +56 -0
  63. package/dist/features/todo/templates/task-create.render.js.map +1 -0
  64. package/dist/features/todo/templates/task-list.render.d.ts +12 -0
  65. package/dist/features/todo/templates/task-list.render.js +72 -0
  66. package/dist/features/todo/templates/task-list.render.js.map +1 -0
  67. package/dist/features/todo/templates/task-update.render.d.ts +12 -0
  68. package/dist/features/todo/templates/task-update.render.js +58 -0
  69. package/dist/features/todo/templates/task-update.render.js.map +1 -0
  70. package/dist/index.d.ts +6831 -0
  71. package/dist/index.js +8376 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/notification-5DFBYKKN.js +32 -0
  74. package/dist/notification-5DFBYKKN.js.map +1 -0
  75. package/dist/resolver-F5SM2RHQ.js +8 -0
  76. package/dist/resolver-F5SM2RHQ.js.map +1 -0
  77. package/dist/session-events-TETMQI45.js +18 -0
  78. package/dist/session-events-TETMQI45.js.map +1 -0
  79. package/package.json +55 -0
@@ -0,0 +1,3 @@
1
+ declare function renderExampleTool(data: Record<string, unknown>): string;
2
+
3
+ export { renderExampleTool as default };
@@ -0,0 +1,20 @@
1
+ import "../../../chunk-DGUM43GV.js";
2
+
3
+ // src/features/example-feature/templates/example-tool.render.ts
4
+ function renderExampleTool(data) {
5
+ const counter = typeof data.counter === "number" ? data.counter : 0;
6
+ const lastInput = typeof data.lastInput === "string" ? data.lastInput : "";
7
+ const enabled = Boolean(data.enabled);
8
+ const notes = Array.isArray(data.notes) ? data.notes : [];
9
+ return [
10
+ "# Example Feature Result",
11
+ `enabled: ${enabled}`,
12
+ `counter: ${counter}`,
13
+ `lastInput: ${lastInput || "(empty)"}`,
14
+ `notes: ${notes.length > 0 ? notes.join(", ") : "(none)"}`
15
+ ].join("\n");
16
+ }
17
+ export {
18
+ renderExampleTool as default
19
+ };
20
+ //# sourceMappingURL=example-tool.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/example-feature/templates/example-tool.render.ts"],"sourcesContent":["export default function renderExampleTool(data: Record<string, unknown>): string {\n const counter = typeof data.counter === 'number' ? data.counter : 0;\n const lastInput = typeof data.lastInput === 'string' ? data.lastInput : '';\n const enabled = Boolean(data.enabled);\n const notes = Array.isArray(data.notes) ? data.notes : [];\n\n return [\n '# Example Feature Result',\n `enabled: ${enabled}`,\n `counter: ${counter}`,\n `lastInput: ${lastInput || '(empty)'}`,\n `notes: ${notes.length > 0 ? notes.join(', ') : '(none)'}`,\n ].join('\\n');\n}\n"],"mappings":";;;AAAe,SAAR,kBAAmC,MAAuC;AAC/E,QAAM,UAAU,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAClE,QAAM,YAAY,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY;AACxE,QAAM,UAAU,QAAQ,KAAK,OAAO;AACpC,QAAM,QAAQ,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,CAAC;AAExD,SAAO;AAAA,IACL;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,YAAY,OAAO;AAAA,IACnB,cAAc,aAAa,SAAS;AAAA,IACpC,UAAU,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,QAAQ;AAAA,EAC1D,EAAE,KAAK,IAAI;AACb;","names":[]}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Edit 工具渲染模板
3
+ */
4
+ /**
5
+ * 文件编辑渲染模板
6
+ */
7
+ declare const _default: {
8
+ readonly call: (args: Record<string, any>) => string;
9
+ readonly result: (data: Record<string, any>, success: boolean | undefined) => any;
10
+ };
11
+
12
+ export { _default as default };
@@ -0,0 +1,44 @@
1
+ import "../../../chunk-DGUM43GV.js";
2
+
3
+ // src/features/opencode-basic/templates/edit.render.ts
4
+ function escapeHtml(text) {
5
+ const str = String(text);
6
+ const map = {
7
+ "&": "&amp;",
8
+ "<": "&lt;",
9
+ ">": "&gt;",
10
+ '"': "&quot;",
11
+ "'": "&#39;"
12
+ };
13
+ return str.replace(/[&<>"']/g, (m) => map[m]);
14
+ }
15
+ var edit_render_default = {
16
+ call: (args) => `<div class="bash-command">Edit <span class="file-path">${escapeHtml(args.filePath || "")}</span></div>`,
17
+ result: (data, success) => {
18
+ if (!success) {
19
+ const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
20
+ return `<div class="tool-error">
21
+ <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>
22
+ <span>${escapeHtml(text)}</span>
23
+ </div>`;
24
+ }
25
+ const diffContent = data.diff || "";
26
+ if (!diffContent) {
27
+ return `<div style="color:var(--success-color)">\u2713 No changes made</div>`;
28
+ }
29
+ try {
30
+ return Diff2Html.html(diffContent, {
31
+ drawFileList: false,
32
+ matching: "lines",
33
+ outputFormat: "side-by-side",
34
+ colorScheme: "dark"
35
+ });
36
+ } catch (e) {
37
+ return `<pre style="background:var(--hover-bg); padding:8px;">${escapeHtml(diffContent)}</pre>`;
38
+ }
39
+ }
40
+ };
41
+ export {
42
+ edit_render_default as default
43
+ };
44
+ //# sourceMappingURL=edit.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/opencode-basic/templates/edit.render.ts"],"sourcesContent":["/**\r\n * Edit 工具渲染模板\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 '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&quot;',\r\n \"'\": '&#39;'\r\n };\r\n return str.replace(/[&<>\"']/g, m => map[m]);\r\n}\r\n\r\n/**\r\n * 文件编辑渲染模板\r\n */\r\nexport default {\r\n call: (args) => `<div class=\"bash-command\">Edit <span class=\"file-path\">${escapeHtml(args.filePath || '')}</span></div>`,\r\n result: (data, success) => {\r\n if (!success) {\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 const diffContent = data.diff || '';\r\n if (!diffContent) {\r\n return `<div style=\"color:var(--success-color)\">✓ No changes made</div>`;\r\n }\r\n\r\n // 使用 Diff2Html 生成 Diff\r\n try {\r\n return Diff2Html.html(diffContent, {\r\n drawFileList: false,\r\n matching: 'lines',\r\n outputFormat: 'side-by-side',\r\n colorScheme: 'dark'\r\n });\r\n } catch(e) {\r\n return `<pre style=\"background:var(--hover-bg); padding:8px;\">${escapeHtml(diffContent)}</pre>`;\r\n }\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n\r\ndeclare const Diff2Html: any;\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,IAAO,sBAAQ;AAAA,EACb,MAAM,CAAC,SAAS,0DAA0D,WAAW,KAAK,YAAY,EAAE,CAAC;AAAA,EACzG,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,13 @@
1
+ /**
2
+ * Glob 工具渲染模板
3
+ * 使用 viewer-worker.ts HTML 中的版本(函数模板,更灵活)
4
+ */
5
+ /**
6
+ * Glob 搜索渲染模板
7
+ */
8
+ declare const _default: {
9
+ readonly call: (args: Record<string, any>) => string;
10
+ readonly result: (data: Record<string, any>, success: boolean | undefined) => string;
11
+ };
12
+
13
+ export { _default as default };
@@ -0,0 +1,44 @@
1
+ import "../../../chunk-DGUM43GV.js";
2
+
3
+ // src/features/opencode-basic/templates/glob.render.ts
4
+ function escapeHtml(text) {
5
+ const str = String(text);
6
+ const map = {
7
+ "&": "&amp;",
8
+ "<": "&lt;",
9
+ ">": "&gt;",
10
+ '"': "&quot;",
11
+ "'": "&#39;"
12
+ };
13
+ return str.replace(/[&<>"']/g, (m) => map[m]);
14
+ }
15
+ var glob_render_default = {
16
+ call: (args) => {
17
+ let output = `<div class="bash-command">Glob <span class="pattern">${escapeHtml(args.pattern || "")}</span></div>`;
18
+ if (args.searchPath) {
19
+ output += `<div style="font-size:11px; color:var(--text-secondary); margin-left:4px;">in ${escapeHtml(args.searchPath)}</div>`;
20
+ }
21
+ return output;
22
+ },
23
+ result: (data, success) => {
24
+ if (!success) {
25
+ const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
26
+ return `<div class="tool-error">
27
+ <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>
28
+ <span>${escapeHtml(text)}</span>
29
+ </div>`;
30
+ }
31
+ if (!data.files || data.files.length === 0) {
32
+ return '<div style="color:var(--warning-color)">No files found</div>';
33
+ }
34
+ return `<div style="font-family:&quot;Fira Code&quot;, &quot;Cascadia Code&quot;, &quot;Source Code Pro&quot;, &quot;JetBrains Mono&quot;, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:12px; max-height:300px; overflow:auto;">
35
+ ${data.files.map((f) => `<div style="color:var(--text-primary); padding:2px 0;">${escapeHtml(f)}</div>`).join("")}
36
+ ${data.truncated ? '<div style="color:var(--warning-color); padding:4px 0;">(Results truncated...)</div>' : ""}
37
+ <div style="color:var(--text-secondary); padding:4px 0;">Found ${data.count} file${data.count !== 1 ? "s" : ""}</div>
38
+ </div>`;
39
+ }
40
+ };
41
+ export {
42
+ glob_render_default as default
43
+ };
44
+ //# sourceMappingURL=glob.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/opencode-basic/templates/glob.render.ts"],"sourcesContent":["/**\n * Glob 工具渲染模板\n * 使用 viewer-worker.ts HTML 中的版本(函数模板,更灵活)\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 '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\n/**\n * Glob 搜索渲染模板\n */\nexport default {\n call: (args) => {\n let output = `<div class=\"bash-command\">Glob <span class=\"pattern\">${escapeHtml(args.pattern || '')}</span></div>`;\n if (args.searchPath) {\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px;\">in ${escapeHtml(args.searchPath)}</div>`;\n }\n return output;\n },\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 if (!data.files || data.files.length === 0) {\n return '<div style=\"color:var(--warning-color)\">No files found</div>';\n }\n return `<div style=\"font-family:&quot;Fira Code&quot;, &quot;Cascadia Code&quot;, &quot;Source Code Pro&quot;, &quot;JetBrains Mono&quot;, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:12px; max-height:300px; overflow:auto;\">\n ${data.files.map((f: string) => `<div style=\"color:var(--text-primary); padding:2px 0;\">${escapeHtml(f)}</div>`).join('')}\n ${data.truncated ? '<div style=\"color:var(--warning-color); padding:4px 0;\">(Results truncated...)</div>' : ''}\n <div style=\"color:var(--text-secondary); padding:4px 0;\">Found ${data.count} file${data.count !== 1 ? 's' : ''}</div>\n </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,IAAO,sBAAQ;AAAA,EACb,MAAM,CAAC,SAAS;AACd,QAAI,SAAS,wDAAwD,WAAW,KAAK,WAAW,EAAE,CAAC;AACnG,QAAI,KAAK,YAAY;AACnB,gBAAU,iFAAiF,WAAW,KAAK,UAAU,CAAC;AAAA,IACxH;AACA,WAAO;AAAA,EACT;AAAA,EACA,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;AACA,QAAI,CAAC,KAAK,SAAS,KAAK,MAAM,WAAW,GAAG;AAC1C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,QACH,KAAK,MAAM,IAAI,CAAC,MAAc,0DAA0D,WAAW,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;AAAA,QACvH,KAAK,YAAY,yFAAyF,EAAE;AAAA,uEAC7C,KAAK,KAAK,QAAQ,KAAK,UAAU,IAAI,MAAM,EAAE;AAAA;AAAA,EAElH;AACF;","names":[]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Grep 工具渲染模板
3
+ * 使用 viewer-worker.ts HTML 中的版本(函数模板,更灵活)
4
+ */
5
+ /**
6
+ * Grep 搜索渲染模板
7
+ */
8
+ declare const _default: {
9
+ readonly call: (args: Record<string, any>) => string;
10
+ readonly result: (data: Record<string, any>, success: boolean | undefined) => string;
11
+ };
12
+
13
+ export { _default as default };
@@ -0,0 +1,67 @@
1
+ import "../../../chunk-DGUM43GV.js";
2
+
3
+ // src/features/opencode-basic/templates/grep.render.ts
4
+ function escapeHtml(text) {
5
+ const str = String(text);
6
+ const map = {
7
+ "&": "&amp;",
8
+ "<": "&lt;",
9
+ ">": "&gt;",
10
+ '"': "&quot;",
11
+ "'": "&#39;"
12
+ };
13
+ return str.replace(/[&<>"']/g, (m) => map[m]);
14
+ }
15
+ var grep_render_default = {
16
+ call: (args) => {
17
+ let output = `<div class="bash-command">Grep <span class="pattern">${escapeHtml(args.pattern || "")}</span></div>`;
18
+ if (args.searchPath) {
19
+ output += `<div style="font-size:11px; color:var(--text-secondary); margin-left:4px;">in ${escapeHtml(args.searchPath)}</div>`;
20
+ }
21
+ if (args.include) {
22
+ output += `<div style="font-size:11px; color:var(--text-secondary); margin-left:4px;">(${escapeHtml(args.include)})</div>`;
23
+ }
24
+ return output;
25
+ },
26
+ result: (data, success) => {
27
+ if (!success) {
28
+ const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
29
+ return `<div class="tool-error">
30
+ <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>
31
+ <span>${escapeHtml(text)}</span>
32
+ </div>`;
33
+ }
34
+ if (!data.results || data.results.length === 0) {
35
+ return '<div style="color:var(--warning-color)">No matches found</div>';
36
+ }
37
+ let currentFile = "";
38
+ const output = [];
39
+ for (const match of data.results) {
40
+ if (currentFile !== match.path) {
41
+ if (currentFile !== "") {
42
+ output.push("</div>");
43
+ }
44
+ currentFile = match.path;
45
+ output.push(`<div style="margin-top:8px;">
46
+ <div style="color:var(--accent-color); font-weight:bold; font-size:11px;">${escapeHtml(match.path)}</div>
47
+ `);
48
+ }
49
+ output.push(`<div style="display:flex; gap:8px; font-family:&quot;Fira Code&quot;, &quot;Cascadia Code&quot;, &quot;Source Code Pro&quot;, &quot;JetBrains Mono&quot;, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:11px;">
50
+ <span style="color:var(--text-secondary); min-width:40px;">:${match.lineNum}</span>
51
+ <span style="color:var(--text-primary);">${escapeHtml(match.lineText)}</span>
52
+ </div>`);
53
+ }
54
+ if (currentFile !== "") {
55
+ output.push("</div>");
56
+ }
57
+ return `<div style="max-height:400px; overflow:auto;">
58
+ ${output.join("")}
59
+ ${data.truncated ? '<div style="color:var(--warning-color); padding:4px 0;">(Results truncated...)</div>' : ""}
60
+ <div style="color:var(--text-secondary); padding:4px 0;">Found ${data.matches} match${data.matches !== 1 ? "es" : ""}</div>
61
+ </div>`;
62
+ }
63
+ };
64
+ export {
65
+ grep_render_default as default
66
+ };
67
+ //# sourceMappingURL=grep.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/opencode-basic/templates/grep.render.ts"],"sourcesContent":["/**\n * Grep 工具渲染模板\n * 使用 viewer-worker.ts HTML 中的版本(函数模板,更灵活)\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 '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\n/**\n * Grep 搜索渲染模板\n */\nexport default {\n call: (args) => {\n let output = `<div class=\"bash-command\">Grep <span class=\"pattern\">${escapeHtml(args.pattern || '')}</span></div>`;\n if (args.searchPath) {\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px;\">in ${escapeHtml(args.searchPath)}</div>`;\n }\n if (args.include) {\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px;\">(${escapeHtml(args.include)})</div>`;\n }\n return output;\n },\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 if (!data.results || data.results.length === 0) {\n return '<div style=\"color:var(--warning-color)\">No matches found</div>';\n }\n let currentFile = '';\n const output = [];\n for (const match of data.results) {\n if (currentFile !== match.path) {\n if (currentFile !== '') {\n output.push('</div>');\n }\n currentFile = match.path;\n output.push(`<div style=\"margin-top:8px;\">\n <div style=\"color:var(--accent-color); font-weight:bold; font-size:11px;\">${escapeHtml(match.path)}</div>\n `);\n }\n output.push(`<div style=\"display:flex; gap:8px; font-family:&quot;Fira Code&quot;, &quot;Cascadia Code&quot;, &quot;Source Code Pro&quot;, &quot;JetBrains Mono&quot;, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:11px;\">\n <span style=\"color:var(--text-secondary); min-width:40px;\">:${match.lineNum}</span>\n <span style=\"color:var(--text-primary);\">${escapeHtml(match.lineText)}</span>\n </div>`);\n }\n if (currentFile !== '') {\n output.push('</div>');\n }\n return `<div style=\"max-height:400px; overflow:auto;\">\n ${output.join('')}\n ${data.truncated ? '<div style=\"color:var(--warning-color); padding:4px 0;\">(Results truncated...)</div>' : ''}\n <div style=\"color:var(--text-secondary); padding:4px 0;\">Found ${data.matches} match${data.matches !== 1 ? 'es' : ''}</div>\n </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,IAAO,sBAAQ;AAAA,EACb,MAAM,CAAC,SAAS;AACd,QAAI,SAAS,wDAAwD,WAAW,KAAK,WAAW,EAAE,CAAC;AACnG,QAAI,KAAK,YAAY;AACnB,gBAAU,iFAAiF,WAAW,KAAK,UAAU,CAAC;AAAA,IACxH;AACA,QAAI,KAAK,SAAS;AAChB,gBAAU,+EAA+E,WAAW,KAAK,OAAO,CAAC;AAAA,IACnH;AACA,WAAO;AAAA,EACT;AAAA,EACA,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;AACA,QAAI,CAAC,KAAK,WAAW,KAAK,QAAQ,WAAW,GAAG;AAC9C,aAAO;AAAA,IACT;AACA,QAAI,cAAc;AAClB,UAAM,SAAS,CAAC;AAChB,eAAW,SAAS,KAAK,SAAS;AAChC,UAAI,gBAAgB,MAAM,MAAM;AAC9B,YAAI,gBAAgB,IAAI;AACtB,iBAAO,KAAK,QAAQ;AAAA,QACtB;AACA,sBAAc,MAAM;AACpB,eAAO,KAAK;AAAA,sFACkE,WAAW,MAAM,IAAI,CAAC;AAAA,SACnG;AAAA,MACH;AACA,aAAO,KAAK;AAAA,sEACoD,MAAM,OAAO;AAAA,mDAChC,WAAW,MAAM,QAAQ,CAAC;AAAA,aAChE;AAAA,IACT;AACA,QAAI,gBAAgB,IAAI;AACtB,aAAO,KAAK,QAAQ;AAAA,IACtB;AACA,WAAO;AAAA,QACH,OAAO,KAAK,EAAE,CAAC;AAAA,QACf,KAAK,YAAY,yFAAyF,EAAE;AAAA,uEAC7C,KAAK,OAAO,SAAS,KAAK,YAAY,IAAI,OAAO,EAAE;AAAA;AAAA,EAExH;AACF;","names":[]}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * LS 工具渲染模板
3
+ */
4
+ /**
5
+ * LS 目录列表渲染模板
6
+ */
7
+ declare const _default: {
8
+ readonly call: (args: Record<string, any>) => string;
9
+ readonly result: (data: Record<string, any>, success: boolean | undefined) => string;
10
+ };
11
+
12
+ export { _default as default };
@@ -0,0 +1,35 @@
1
+ import "../../../chunk-DGUM43GV.js";
2
+
3
+ // src/features/opencode-basic/templates/ls.render.ts
4
+ function escapeHtml(text) {
5
+ const str = String(text);
6
+ const map = {
7
+ "&": "&amp;",
8
+ "<": "&lt;",
9
+ ">": "&gt;",
10
+ '"': "&quot;",
11
+ "'": "&#39;"
12
+ };
13
+ return str.replace(/[&<>"']/g, (m) => map[m]);
14
+ }
15
+ var ls_render_default = {
16
+ call: (args) => `<div class="bash-command">List <span class="path">${escapeHtml(args.dirPath || ".")}</span></div>`,
17
+ result: (data, success) => {
18
+ if (!success) {
19
+ const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
20
+ return `<div class="tool-error">
21
+ <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>
22
+ <span>${escapeHtml(text)}</span>
23
+ </div>`;
24
+ }
25
+ return `<div style="font-family:&quot;Fira Code&quot;, &quot;Cascadia Code&quot;, &quot;Source Code Pro&quot;, &quot;JetBrains Mono&quot;, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:11px; line-height:1.4; max-height:400px; overflow:auto; white-space:pre; color:var(--text-primary);">${escapeHtml(data.tree || "")}</div>
26
+ <div style="color:var(--text-secondary); padding:4px 0; font-size:11px;">
27
+ ${data.count} file${data.count !== 1 ? "s" : ""} found
28
+ ${data.truncated ? '<span style="color:var(--warning-color)"> (truncated)</span>' : ""}
29
+ </div>`;
30
+ }
31
+ };
32
+ export {
33
+ ls_render_default as default
34
+ };
35
+ //# sourceMappingURL=ls.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/opencode-basic/templates/ls.render.ts"],"sourcesContent":["/**\n * LS 工具渲染模板\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 '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\n/**\n * LS 目录列表渲染模板\n */\nexport default {\n call: (args) => `<div class=\"bash-command\">List <span class=\"path\">${escapeHtml(args.dirPath || '.')}</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 return `<div style=\"font-family:&quot;Fira Code&quot;, &quot;Cascadia Code&quot;, &quot;Source Code Pro&quot;, &quot;JetBrains Mono&quot;, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:11px; line-height:1.4; max-height:400px; overflow:auto; white-space:pre; color:var(--text-primary);\">${escapeHtml(data.tree || '')}</div>\n <div style=\"color:var(--text-secondary); padding:4px 0; font-size:11px;\">\n ${data.count} file${data.count !== 1 ? 's' : ''} found\n ${data.truncated ? '<span style=\"color:var(--warning-color)\"> (truncated)</span>' : ''}\n </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,IAAO,oBAAQ;AAAA,EACb,MAAM,CAAC,SAAS,qDAAqD,WAAW,KAAK,WAAW,GAAG,CAAC;AAAA,EACpG,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,WAAO,wTAAwT,WAAW,KAAK,QAAQ,EAAE,CAAC;AAAA;AAAA,UAEpV,KAAK,KAAK,QAAQ,KAAK,UAAU,IAAI,MAAM,EAAE;AAAA,UAC7C,KAAK,YAAY,iEAAiE,EAAE;AAAA;AAAA,EAE5F;AACF;","names":[]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Read 工具渲染模板
3
+ * 使用 viewer-worker.ts HTML 中的版本(带代码高亮、行号显示)
4
+ */
5
+ /**
6
+ * 文件读取渲染模板
7
+ */
8
+ declare const _default: {
9
+ readonly call: (args: Record<string, any>) => string;
10
+ readonly result: (data: Record<string, any>, success: boolean | undefined) => string;
11
+ };
12
+
13
+ export { _default as default };
@@ -0,0 +1,83 @@
1
+ import "../../../chunk-DGUM43GV.js";
2
+
3
+ // src/features/opencode-basic/templates/read.render.ts
4
+ function escapeHtml(text) {
5
+ const str = String(text);
6
+ const map = {
7
+ "&": "&amp;",
8
+ "<": "&lt;",
9
+ ">": "&gt;",
10
+ '"': "&quot;",
11
+ "'": "&#39;"
12
+ };
13
+ return str.replace(/[&<>"']/g, (m) => map[m]);
14
+ }
15
+ var read_render_default = {
16
+ call: (args) => {
17
+ let output = `<div class="bash-command">Read <span class="file-path">${escapeHtml(args.filePath || "")}</span></div>`;
18
+ if (args.offset !== void 0) {
19
+ output += `<div style="font-size:11px; color:var(--text-secondary); margin-left:4px;">lines ${args.offset}${args.limit ? "-" + (Number(args.offset) + Number(args.limit) - 1) : ""}</div>`;
20
+ }
21
+ return output;
22
+ },
23
+ result: (data, success) => {
24
+ if (!success) {
25
+ const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
26
+ return `<div class="tool-error">
27
+ <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>
28
+ <span>${escapeHtml(text)}</span>
29
+ </div>`;
30
+ }
31
+ if (data.type === "directory") {
32
+ return `<div style="font-family:monospace; font-size:12px; line-height:1.6;">
33
+ <div style="color:var(--accent-color); margin-bottom:8px;">\u{1F4C1} ${escapeHtml(data.path)}</div>
34
+ <div style="display:grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap:4px;">
35
+ ${data.entries.map((e) => {
36
+ const isDir = e.endsWith("/") || e.endsWith("\\");
37
+ return `<div style="color:${isDir ? "var(--accent-color)" : "var(--text-primary)"}; padding:2px 4px;">${escapeHtml(e)}</div>`;
38
+ }).join("")}
39
+ </div>
40
+ <div style="color:var(--text-secondary); margin-top:8px; font-size:11px;">
41
+ ${data.entries.length} of ${data.totalEntries} entries shown${data.truncated ? " (truncated)" : ""}
42
+ </div>
43
+ </div>`;
44
+ }
45
+ const rawContent = data.content || "";
46
+ const path = data.path || "";
47
+ const ext = path.split(".").pop().toLowerCase();
48
+ const lines = rawContent.split("\n");
49
+ const startLine = data.offset || 1;
50
+ const hasLinePrefix = lines.length > 0 && /^\d+: /.test(lines[0]);
51
+ let resultHtml = '<div class="code-read-container">';
52
+ lines.forEach((line, i) => {
53
+ let lineNum, codeLine;
54
+ if (hasLinePrefix) {
55
+ const match = line.match(/^(\d+): (.*)$/);
56
+ lineNum = match ? match[1] : " ";
57
+ codeLine = match ? match[2] : line;
58
+ } else {
59
+ lineNum = startLine + i;
60
+ codeLine = line;
61
+ }
62
+ const codeExts = ["js", "ts", "py", "java", "c", "cpp", "rs", "go", "json", "html", "css", "sh", "bash", "yaml", "yml", "xml", "sql", "md"];
63
+ let highlightedLine;
64
+ if (codeExts.includes(ext)) {
65
+ const lang = ext === "ts" ? "typescript" : ext === "js" ? "javascript" : ext === "py" ? "python" : ext;
66
+ try {
67
+ highlightedLine = hljs.highlight(codeLine, { language: lang }).value;
68
+ } catch (e) {
69
+ highlightedLine = hljs.highlightAuto(codeLine).value;
70
+ }
71
+ } else {
72
+ highlightedLine = escapeHtml(codeLine);
73
+ }
74
+ resultHtml += `<div class="code-read-line"><span class="code-read-line-num">${lineNum}</span><span class="code-read-content">${highlightedLine}</span></div>`;
75
+ });
76
+ resultHtml += "</div>";
77
+ return resultHtml;
78
+ }
79
+ };
80
+ export {
81
+ read_render_default as default
82
+ };
83
+ //# sourceMappingURL=read.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/opencode-basic/templates/read.render.ts"],"sourcesContent":["/**\r\n * Read 工具渲染模板\r\n * 使用 viewer-worker.ts HTML 中的版本(带代码高亮、行号显示)\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 '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&quot;',\r\n \"'\": '&#39;'\r\n };\r\n return str.replace(/[&<>\"']/g, m => map[m]);\r\n}\r\n\r\n/**\r\n * 文件读取渲染模板\r\n */\r\nexport default {\r\n call: (args) => {\r\n let output = `<div class=\"bash-command\">Read <span class=\"file-path\">${escapeHtml(args.filePath || '')}</span></div>`;\r\n if (args.offset !== undefined) {\r\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px;\">lines ${args.offset}${args.limit ? '-' + (Number(args.offset) + Number(args.limit) - 1) : ''}</div>`;\r\n }\r\n return output;\r\n },\r\n result: (data, success) => {\r\n if (!success) {\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 if (data.type === 'directory') {\r\n return `<div style=\"font-family:monospace; font-size:12px; line-height:1.6;\">\r\n <div style=\"color:var(--accent-color); margin-bottom:8px;\">📁 ${escapeHtml(data.path)}</div>\r\n <div style=\"display:grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap:4px;\">\r\n ${data.entries.map((e: string) => {\r\n const isDir = e.endsWith('/') || e.endsWith('\\\\');\r\n return `<div style=\"color:${isDir ? 'var(--accent-color)' : 'var(--text-primary)'}; padding:2px 4px;\">${escapeHtml(e)}</div>`;\r\n }).join('')}\r\n </div>\r\n <div style=\"color:var(--text-secondary); margin-top:8px; font-size:11px;\">\r\n ${data.entries.length} of ${data.totalEntries} entries shown${data.truncated ? ' (truncated)' : ''}\r\n </div>\r\n </div>`;\r\n }\r\n\r\n // 处理文件内容 - 简洁的行号+代码布局\r\n const rawContent = data.content || '';\r\n const path = data.path || '';\r\n const ext = path.split('.').pop().toLowerCase();\r\n\r\n const lines = rawContent.split('\\n');\r\n const startLine = data.offset || 1;\r\n const hasLinePrefix = lines.length > 0 && /^\\d+: /.test(lines[0]);\r\n\r\n let resultHtml = '<div class=\"code-read-container\">';\r\n\r\n lines.forEach((line: string, i: number) => {\r\n let lineNum, codeLine;\r\n if (hasLinePrefix) {\r\n const match = line.match(/^(\\d+): (.*)$/);\r\n lineNum = match ? match[1] : ' ';\r\n codeLine = match ? match[2] : line;\r\n } else {\r\n lineNum = startLine + i;\r\n codeLine = line;\r\n }\r\n\r\n const codeExts = ['js', 'ts', 'py', 'java', 'c', 'cpp', 'rs', 'go', 'json', 'html', 'css', 'sh', 'bash', 'yaml', 'yml', 'xml', 'sql', 'md'];\r\n let highlightedLine: string;\r\n if (codeExts.includes(ext)) {\r\n const lang = ext === 'ts' ? 'typescript' : (ext === 'js' ? 'javascript' : (ext === 'py' ? 'python' : ext));\r\n try {\r\n highlightedLine = hljs.highlight(codeLine, { language: lang }).value;\r\n } catch (e) {\r\n highlightedLine = hljs.highlightAuto(codeLine).value;\r\n }\r\n } else {\r\n highlightedLine = escapeHtml(codeLine);\r\n }\r\n\r\n resultHtml += `<div class=\"code-read-line\"><span class=\"code-read-line-num\">${lineNum}</span><span class=\"code-read-content\">${highlightedLine}</span></div>`;\r\n });\r\n\r\n resultHtml += '</div>';\r\n\r\n return resultHtml;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n\r\ndeclare const hljs: any;\r\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,sBAAQ;AAAA,EACb,MAAM,CAAC,SAAS;AACd,QAAI,SAAS,0DAA0D,WAAW,KAAK,YAAY,EAAE,CAAC;AACtG,QAAI,KAAK,WAAW,QAAW;AAC7B,gBAAU,oFAAoF,KAAK,MAAM,GAAG,KAAK,QAAQ,OAAO,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,IAAI,KAAK,EAAE;AAAA,IACpL;AACA,WAAO;AAAA,EACT;AAAA,EACA,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,QAAI,KAAK,SAAS,aAAa;AAC7B,aAAO;AAAA,+EAC2D,WAAW,KAAK,IAAI,CAAC;AAAA;AAAA,YAEjF,KAAK,QAAQ,IAAI,CAAC,MAAc;AAChC,cAAM,QAAQ,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI;AAChD,eAAO,qBAAqB,QAAQ,wBAAwB,qBAAqB,uBAAuB,WAAW,CAAC,CAAC;AAAA,MACvH,CAAC,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA,YAGT,KAAK,QAAQ,MAAM,OAAO,KAAK,YAAY,iBAAiB,KAAK,YAAY,iBAAiB,EAAE;AAAA;AAAA;AAAA,IAGxG;AAGA,UAAM,aAAa,KAAK,WAAW;AACnC,UAAM,OAAO,KAAK,QAAQ;AAC1B,UAAM,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY;AAE9C,UAAM,QAAQ,WAAW,MAAM,IAAI;AACnC,UAAM,YAAY,KAAK,UAAU;AACjC,UAAM,gBAAgB,MAAM,SAAS,KAAK,SAAS,KAAK,MAAM,CAAC,CAAC;AAEhE,QAAI,aAAa;AAEjB,UAAM,QAAQ,CAAC,MAAc,MAAc;AACzC,UAAI,SAAS;AACb,UAAI,eAAe;AACjB,cAAM,QAAQ,KAAK,MAAM,eAAe;AACxC,kBAAU,QAAQ,MAAM,CAAC,IAAI;AAC7B,mBAAW,QAAQ,MAAM,CAAC,IAAI;AAAA,MAChC,OAAO;AACL,kBAAU,YAAY;AACtB,mBAAW;AAAA,MACb;AAEA,YAAM,WAAW,CAAC,MAAM,MAAM,MAAM,QAAQ,KAAK,OAAO,MAAM,MAAM,QAAQ,QAAQ,OAAO,MAAM,QAAQ,QAAQ,OAAO,OAAO,OAAO,IAAI;AAC1I,UAAI;AACJ,UAAI,SAAS,SAAS,GAAG,GAAG;AAC1B,cAAM,OAAO,QAAQ,OAAO,eAAgB,QAAQ,OAAO,eAAgB,QAAQ,OAAO,WAAW;AACrG,YAAI;AACF,4BAAkB,KAAK,UAAU,UAAU,EAAE,UAAU,KAAK,CAAC,EAAE;AAAA,QACjE,SAAS,GAAG;AACV,4BAAkB,KAAK,cAAc,QAAQ,EAAE;AAAA,QACjD;AAAA,MACF,OAAO;AACL,0BAAkB,WAAW,QAAQ;AAAA,MACvC;AAEA,oBAAc,gEAAgE,OAAO,0CAA0C,eAAe;AAAA,IAChJ,CAAC;AAED,kBAAc;AAEd,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Write 工具渲染模板
3
+ * 使用 .render.ts 原版本(带 details 折叠 diff,更实用)
4
+ */
5
+ /**
6
+ * 文件写入渲染模板
7
+ */
8
+ declare const _default: {
9
+ readonly call: (args: Record<string, any>) => string;
10
+ readonly result: (data: Record<string, any>, success: boolean | undefined) => any;
11
+ };
12
+
13
+ export { _default as default };
@@ -0,0 +1,44 @@
1
+ import "../../../chunk-DGUM43GV.js";
2
+
3
+ // src/features/opencode-basic/templates/write.render.ts
4
+ function escapeHtml(text) {
5
+ const str = String(text);
6
+ const map = {
7
+ "&": "&amp;",
8
+ "<": "&lt;",
9
+ ">": "&gt;",
10
+ '"': "&quot;",
11
+ "'": "&#39;"
12
+ };
13
+ return str.replace(/[&<>"']/g, (m) => map[m]);
14
+ }
15
+ var write_render_default = {
16
+ call: (args) => `<div class="bash-command">Write <span class="file-path">${escapeHtml(args.filePath || "")}</span></div>`,
17
+ result: (data, success) => {
18
+ if (!success) {
19
+ const text = typeof data === "object" ? JSON.stringify(data, null, 2) : String(data);
20
+ return `<div class="tool-error">
21
+ <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>
22
+ <span>${escapeHtml(text)}</span>
23
+ </div>`;
24
+ }
25
+ const diffContent = data.diff || "";
26
+ if (!diffContent) {
27
+ return `<div style="color:var(--success-color)">\u2713 File written successfully (no diff available)</div>`;
28
+ }
29
+ try {
30
+ return Diff2Html.html(diffContent, {
31
+ drawFileList: false,
32
+ matching: "lines",
33
+ outputFormat: "side-by-side",
34
+ colorScheme: "dark"
35
+ });
36
+ } catch (e) {
37
+ return `<pre style="background:var(--hover-bg); padding:8px;">${escapeHtml(diffContent)}</pre>`;
38
+ }
39
+ }
40
+ };
41
+ export {
42
+ write_render_default as default
43
+ };
44
+ //# sourceMappingURL=write.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/opencode-basic/templates/write.render.ts"],"sourcesContent":["/**\r\n * Write 工具渲染模板\r\n * 使用 .render.ts 原版本(带 details 折叠 diff,更实用)\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 '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&quot;',\r\n \"'\": '&#39;'\r\n };\r\n return str.replace(/[&<>\"']/g, m => map[m]);\r\n}\r\n\r\n/**\r\n * 文件写入渲染模板\r\n */\r\nexport default {\r\n call: (args) => `<div class=\"bash-command\">Write <span class=\"file-path\">${escapeHtml(args.filePath || '')}</span></div>`,\r\n result: (data, success) => {\r\n if (!success) {\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 const diffContent = data.diff || '';\r\n if (!diffContent) {\r\n return `<div style=\"color:var(--success-color)\">✓ File written successfully (no diff available)</div>`;\r\n }\r\n\r\n // 使用 Diff2Html 生成 Diff\r\n try {\r\n return Diff2Html.html(diffContent, {\r\n drawFileList: false,\r\n matching: 'lines',\r\n outputFormat: 'side-by-side',\r\n colorScheme: 'dark'\r\n });\r\n } catch(e) {\r\n return `<pre style=\"background:var(--hover-bg); padding:8px;\">${escapeHtml(diffContent)}</pre>`;\r\n }\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n\r\ndeclare const Diff2Html: any;\r\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,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-DGUM43GV.js";
2
+
3
+ // src/features/skill/templates/skill.render.ts
4
+ function escapeHtml(text) {
5
+ const str = String(text);
6
+ const map = {
7
+ "&": "&amp;",
8
+ "<": "&lt;",
9
+ ">": "&gt;",
10
+ '"': "&quot;",
11
+ "'": "&#39;"
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 '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\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,9 @@
1
+ /**
2
+ * agent-close 工具渲染模板
3
+ */
4
+ declare const _default: {
5
+ readonly call: (args: any) => string;
6
+ readonly result: (data: any) => string;
7
+ };
8
+
9
+ export { _default as default };
@@ -0,0 +1,29 @@
1
+ import "../../../chunk-DGUM43GV.js";
2
+
3
+ // src/features/subagent/templates/agent-close.render.ts
4
+ function escapeHtml(text) {
5
+ const str = String(text);
6
+ const map = {
7
+ "&": "&amp;",
8
+ "<": "&lt;",
9
+ ">": "&gt;",
10
+ '"': "&quot;",
11
+ "'": "&#39;"
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 '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\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,9 @@
1
+ /**
2
+ * agent-list 工具渲染模板
3
+ */
4
+ declare const _default: {
5
+ readonly call: "<div class=\"bash-command\">List agents (filter: {{filter}})</div>";
6
+ readonly result: (data: any) => string;
7
+ };
8
+
9
+ export { _default as default };