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.
Files changed (92) hide show
  1. package/dist/BasicAgent-UDSHJE5H.js +2 -2
  2. package/dist/{ExplorerAgent-X6QECX65.js → ExplorerAgent-BITN4IBW.js} +3 -3
  3. package/dist/{chunk-N7J76R5P.js → chunk-4FBF65TC.js} +2 -2
  4. package/dist/{chunk-DI5EGMGG.js → chunk-XCJOXCJ4.js} +2 -2
  5. package/dist/{chunk-XAJ6L4GA.js → chunk-XE5IEUPW.js} +2 -2
  6. package/dist/features/example-feature/templates/example-tool.render.d.ts +3 -0
  7. package/dist/features/example-feature/templates/example-tool.render.js +20 -0
  8. package/dist/features/example-feature/templates/example-tool.render.js.map +1 -0
  9. package/dist/features/mcp/templates/mcp-tool.render.d.ts +12 -0
  10. package/dist/features/mcp/templates/mcp-tool.render.js +37 -0
  11. package/dist/features/mcp/templates/mcp-tool.render.js.map +1 -0
  12. package/dist/features/opencode-basic/templates/edit.render.d.ts +12 -0
  13. package/dist/features/opencode-basic/templates/edit.render.js +44 -0
  14. package/dist/features/opencode-basic/templates/edit.render.js.map +1 -0
  15. package/dist/features/opencode-basic/templates/glob.render.d.ts +13 -0
  16. package/dist/features/opencode-basic/templates/glob.render.js +44 -0
  17. package/dist/features/opencode-basic/templates/glob.render.js.map +1 -0
  18. package/dist/features/opencode-basic/templates/grep.render.d.ts +13 -0
  19. package/dist/features/opencode-basic/templates/grep.render.js +67 -0
  20. package/dist/features/opencode-basic/templates/grep.render.js.map +1 -0
  21. package/dist/features/opencode-basic/templates/ls.render.d.ts +12 -0
  22. package/dist/features/opencode-basic/templates/ls.render.js +35 -0
  23. package/dist/features/opencode-basic/templates/ls.render.js.map +1 -0
  24. package/dist/features/opencode-basic/templates/read.render.d.ts +13 -0
  25. package/dist/features/opencode-basic/templates/read.render.js +83 -0
  26. package/dist/features/opencode-basic/templates/read.render.js.map +1 -0
  27. package/dist/features/opencode-basic/templates/write.render.d.ts +13 -0
  28. package/dist/features/opencode-basic/templates/write.render.js +44 -0
  29. package/dist/features/opencode-basic/templates/write.render.js.map +1 -0
  30. package/dist/features/shell/templates/bash.render.d.ts +12 -0
  31. package/dist/features/shell/templates/bash.render.js +71 -0
  32. package/dist/features/shell/templates/bash.render.js.map +1 -0
  33. package/dist/features/shell/templates/trash-delete.render.d.ts +12 -0
  34. package/dist/features/shell/templates/trash-delete.render.js +61 -0
  35. package/dist/features/shell/templates/trash-delete.render.js.map +1 -0
  36. package/dist/features/shell/templates/trash-list.render.d.ts +12 -0
  37. package/dist/features/shell/templates/trash-list.render.js +84 -0
  38. package/dist/features/shell/templates/trash-list.render.js.map +1 -0
  39. package/dist/features/shell/templates/trash-restore.render.d.ts +12 -0
  40. package/dist/features/shell/templates/trash-restore.render.js +77 -0
  41. package/dist/features/shell/templates/trash-restore.render.js.map +1 -0
  42. package/dist/features/skill/templates/skill.render.d.ts +13 -0
  43. package/dist/features/skill/templates/skill.render.js +33 -0
  44. package/dist/features/skill/templates/skill.render.js.map +1 -0
  45. package/dist/features/subagent/templates/agent-close.render.d.ts +9 -0
  46. package/dist/features/subagent/templates/agent-close.render.js +29 -0
  47. package/dist/features/subagent/templates/agent-close.render.js.map +1 -0
  48. package/dist/features/subagent/templates/agent-list.render.d.ts +9 -0
  49. package/dist/features/subagent/templates/agent-list.render.js +23 -0
  50. package/dist/features/subagent/templates/agent-list.render.js.map +1 -0
  51. package/dist/features/subagent/templates/agent-send.render.d.ts +9 -0
  52. package/dist/features/subagent/templates/agent-send.render.js +37 -0
  53. package/dist/features/subagent/templates/agent-send.render.js.map +1 -0
  54. package/dist/features/subagent/templates/agent-spawn.render.d.ts +9 -0
  55. package/dist/features/subagent/templates/agent-spawn.render.js +38 -0
  56. package/dist/features/subagent/templates/agent-spawn.render.js.map +1 -0
  57. package/dist/features/subagent/templates/wait.render.d.ts +9 -0
  58. package/dist/features/subagent/templates/wait.render.js +29 -0
  59. package/dist/features/subagent/templates/wait.render.js.map +1 -0
  60. package/dist/features/todo/templates/task-clear.render.d.ts +9 -0
  61. package/dist/features/todo/templates/task-clear.render.js +32 -0
  62. package/dist/features/todo/templates/task-clear.render.js.map +1 -0
  63. package/dist/features/todo/templates/task-create.render.d.ts +9 -0
  64. package/dist/features/todo/templates/task-create.render.js +56 -0
  65. package/dist/features/todo/templates/task-create.render.js.map +1 -0
  66. package/dist/features/todo/templates/task-get.render.d.ts +9 -0
  67. package/dist/features/todo/templates/task-get.render.js +60 -0
  68. package/dist/features/todo/templates/task-get.render.js.map +1 -0
  69. package/dist/features/todo/templates/task-list.render.d.ts +9 -0
  70. package/dist/features/todo/templates/task-list.render.js +72 -0
  71. package/dist/features/todo/templates/task-list.render.js.map +1 -0
  72. package/dist/features/todo/templates/task-update.render.d.ts +9 -0
  73. package/dist/features/todo/templates/task-update.render.js +58 -0
  74. package/dist/features/todo/templates/task-update.render.js.map +1 -0
  75. package/dist/features/visual/templates/capture.render.d.ts +9 -0
  76. package/dist/features/visual/templates/capture.render.js +49 -0
  77. package/dist/features/visual/templates/capture.render.js.map +1 -0
  78. package/dist/features/websearch/templates/crawl4ai.render.d.ts +6 -0
  79. package/dist/features/websearch/templates/crawl4ai.render.js +30 -0
  80. package/dist/features/websearch/templates/crawl4ai.render.js.map +1 -0
  81. package/dist/features/websearch/templates/web-fetch.render.d.ts +12 -0
  82. package/dist/features/websearch/templates/web-fetch.render.js +40 -0
  83. package/dist/features/websearch/templates/web-fetch.render.js.map +1 -0
  84. package/dist/index.d.ts +3 -745
  85. package/dist/index.js +7 -7
  86. package/dist/types-DUKIIntb.d.ts +745 -0
  87. package/package.json +71 -74
  88. package/LICENSE +0 -21
  89. /package/dist/{ExplorerAgent-X6QECX65.js.map → ExplorerAgent-BITN4IBW.js.map} +0 -0
  90. /package/dist/{chunk-N7J76R5P.js.map → chunk-4FBF65TC.js.map} +0 -0
  91. /package/dist/{chunk-DI5EGMGG.js.map → chunk-XCJOXCJ4.js.map} +0 -0
  92. /package/dist/{chunk-XAJ6L4GA.js.map → chunk-XE5IEUPW.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  BasicAgent
3
- } from "./chunk-XAJ6L4GA.js";
4
- import "./chunk-N7J76R5P.js";
3
+ } from "./chunk-XE5IEUPW.js";
4
+ import "./chunk-4FBF65TC.js";
5
5
  import "./chunk-BVF7RUXV.js";
6
6
  import "./chunk-3BPSNNK3.js";
7
7
  import "./chunk-TSASFMRF.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ExplorerAgent
3
- } from "./chunk-DI5EGMGG.js";
4
- import "./chunk-N7J76R5P.js";
3
+ } from "./chunk-XCJOXCJ4.js";
4
+ import "./chunk-4FBF65TC.js";
5
5
  import "./chunk-BVF7RUXV.js";
6
6
  import "./chunk-3BPSNNK3.js";
7
7
  import "./chunk-TSASFMRF.js";
@@ -9,4 +9,4 @@ import "./chunk-BDS2QGZ5.js";
9
9
  export {
10
10
  ExplorerAgent
11
11
  };
12
- //# sourceMappingURL=ExplorerAgent-X6QECX65.js.map
12
+ //# sourceMappingURL=ExplorerAgent-BITN4IBW.js.map
@@ -7156,7 +7156,7 @@ var AgentBase = class {
7156
7156
  async createAgentByType(type) {
7157
7157
  switch (type) {
7158
7158
  case "ExplorerAgent": {
7159
- const { ExplorerAgent } = await import("./ExplorerAgent-X6QECX65.js");
7159
+ const { ExplorerAgent } = await import("./ExplorerAgent-BITN4IBW.js");
7160
7160
  return new ExplorerAgent({
7161
7161
  llm: this.llm
7162
7162
  });
@@ -7656,4 +7656,4 @@ export {
7656
7656
  createLLM,
7657
7657
  AgentBase
7658
7658
  };
7659
- //# sourceMappingURL=chunk-N7J76R5P.js.map
7659
+ //# sourceMappingURL=chunk-4FBF65TC.js.map
@@ -6,7 +6,7 @@ import {
6
6
  TemplateComposer,
7
7
  createLLM,
8
8
  loadConfigSync
9
- } from "./chunk-N7J76R5P.js";
9
+ } from "./chunk-4FBF65TC.js";
10
10
 
11
11
  // src/agents/system/ExplorerAgent.ts
12
12
  import { existsSync } from "fs";
@@ -84,4 +84,4 @@ var ExplorerAgent = class extends AgentBase {
84
84
  export {
85
85
  ExplorerAgent
86
86
  };
87
- //# sourceMappingURL=chunk-DI5EGMGG.js.map
87
+ //# sourceMappingURL=chunk-XCJOXCJ4.js.map
@@ -7,7 +7,7 @@ import {
7
7
  createLLM,
8
8
  getDefaultMCPConfigDir,
9
9
  loadConfigSync
10
- } from "./chunk-N7J76R5P.js";
10
+ } from "./chunk-4FBF65TC.js";
11
11
 
12
12
  // src/agents/system/BasicAgent.ts
13
13
  import { existsSync } from "fs";
@@ -95,4 +95,4 @@ var BasicAgent = class extends AgentBase {
95
95
  export {
96
96
  BasicAgent
97
97
  };
98
- //# sourceMappingURL=chunk-XAJ6L4GA.js.map
98
+ //# sourceMappingURL=chunk-XE5IEUPW.js.map
@@ -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-BDS2QGZ5.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
+ * MCP 工具渲染模板
3
+ */
4
+ /**
5
+ * MCP 工具调用渲染模板
6
+ */
7
+ declare const _default: {
8
+ readonly call: (args: any) => string;
9
+ readonly result: (data: any, success?: boolean) => string;
10
+ };
11
+
12
+ export { _default as default };
@@ -0,0 +1,37 @@
1
+ import "../../../chunk-BDS2QGZ5.js";
2
+
3
+ // src/features/mcp/templates/mcp-tool.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 mcp_tool_render_default = {
23
+ call: (args) => {
24
+ return `<div class="bash-command">MCP Tool Call</div>`;
25
+ },
26
+ result: (data, success) => {
27
+ if (!success) return formatError(data);
28
+ if (typeof data === "object") {
29
+ return `<pre class="bash-output">${escapeHtml(JSON.stringify(data, null, 2))}</pre>`;
30
+ }
31
+ return `<pre class="bash-output">${escapeHtml(String(data))}</pre>`;
32
+ }
33
+ };
34
+ export {
35
+ mcp_tool_render_default as default
36
+ };
37
+ //# sourceMappingURL=mcp-tool.render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/mcp/templates/mcp-tool.render.ts"],"sourcesContent":["/**\n * MCP 工具渲染模板\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 * MCP 工具调用渲染模板\n */\nexport default {\n call: (args: any) => {\n return `<div class=\"bash-command\">MCP Tool Call</div>`;\n },\n result: (data: any, success?: boolean) => {\n if (!success) return formatError(data);\n if (typeof data === 'object') {\n return `<pre class=\"bash-output\">${escapeHtml(JSON.stringify(data, null, 2))}</pre>`;\n }\n return `<pre class=\"bash-output\">${escapeHtml(String(data))}</pre>`;\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,0BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,QAAS,QAAO,YAAY,IAAI;AACrC,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,4BAA4B,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC,CAAC;AAAA,IAC9E;AACA,WAAO,4BAA4B,WAAW,OAAO,IAAI,CAAC,CAAC;AAAA,EAC7D;AACF;","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) => string;
10
+ };
11
+
12
+ export { _default as default };
@@ -0,0 +1,44 @@
1
+ import "../../../chunk-BDS2QGZ5.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":["/**\n * Edit 工具渲染模板\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 */\nexport default {\n call: (args) => `<div class=\"bash-command\">Edit <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)\">✓ No changes made</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":";;;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-BDS2QGZ5.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-BDS2QGZ5.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-BDS2QGZ5.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-BDS2QGZ5.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
+ let 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 = codeLine;
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":["/**\n * Read 工具渲染模板\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 * 文件读取渲染模板\n */\nexport default {\n call: (args) => {\n let output = `<div class=\"bash-command\">Read <span class=\"file-path\">${escapeHtml(args.filePath || '')}</span></div>`;\n if (args.offset !== undefined) {\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>`;\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\n if (data.type === 'directory') {\n return `<div style=\"font-family:monospace; font-size:12px; line-height:1.6;\">\n <div style=\"color:var(--accent-color); margin-bottom:8px;\">📁 ${escapeHtml(data.path)}</div>\n <div style=\"display:grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap:4px;\">\n ${data.entries.map((e: string) => {\n const isDir = e.endsWith('/') || e.endsWith('\\\\');\n return `<div style=\"color:${isDir ? 'var(--accent-color)' : 'var(--text-primary)'}; padding:2px 4px;\">${escapeHtml(e)}</div>`;\n }).join('')}\n </div>\n <div style=\"color:var(--text-secondary); margin-top:8px; font-size:11px;\">\n ${data.entries.length} of ${data.totalEntries} entries shown${data.truncated ? ' (truncated)' : ''}\n </div>\n </div>`;\n }\n\n // 处理文件内容 - 简洁的行号+代码布局\n const rawContent = data.content || '';\n const path = data.path || '';\n const ext = path.split('.').pop().toLowerCase();\n\n const lines = rawContent.split('\\n');\n let startLine = data.offset || 1;\n const hasLinePrefix = lines.length > 0 && /^\\d+: /.test(lines[0]);\n\n let resultHtml = '<div class=\"code-read-container\">';\n\n lines.forEach((line: string, i: number) => {\n let lineNum, codeLine;\n if (hasLinePrefix) {\n const match = line.match(/^(\\d+): (.*)$/);\n lineNum = match ? match[1] : ' ';\n codeLine = match ? match[2] : line;\n } else {\n lineNum = startLine + i;\n codeLine = line;\n }\n\n const codeExts = ['js', 'ts', 'py', 'java', 'c', 'cpp', 'rs', 'go', 'json', 'html', 'css', 'sh', 'bash', 'yaml', 'yml', 'xml', 'sql', 'md'];\n let highlightedLine = codeLine;\n if (codeExts.includes(ext)) {\n const lang = ext === 'ts' ? 'typescript' : (ext === 'js' ? 'javascript' : (ext === 'py' ? 'python' : ext));\n try {\n highlightedLine = hljs.highlight(codeLine, { language: lang }).value;\n } catch (e) {\n highlightedLine = hljs.highlightAuto(codeLine).value;\n }\n } else {\n highlightedLine = escapeHtml(codeLine);\n }\n\n resultHtml += `<div class=\"code-read-line\"><span class=\"code-read-line-num\">${lineNum}</span><span class=\"code-read-content\">${highlightedLine}</span></div>`;\n });\n\n resultHtml += '</div>';\n\n return resultHtml;\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,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,QAAI,YAAY,KAAK,UAAU;AAC/B,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,kBAAkB;AACtB,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) => string;
11
+ };
12
+
13
+ export { _default as default };
@@ -0,0 +1,44 @@
1
+ import "../../../chunk-BDS2QGZ5.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