@agentdevjs/core 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 (53) hide show
  1. package/dist/BasicAgent-UBGLABDV.js +12 -0
  2. package/dist/ExplorerAgent-C62LOUTX.js +12 -0
  3. package/dist/{chunk-BVF7RUXV.js → chunk-KCCLSQC4.js} +1 -1
  4. package/dist/chunk-KCCLSQC4.js.map +1 -0
  5. package/dist/{chunk-KO4DJKM6.js → chunk-OFBE43IS.js} +1 -1
  6. package/dist/{chunk-KO4DJKM6.js.map → chunk-OFBE43IS.js.map} +1 -1
  7. package/dist/{chunk-YFSM6IYU.js → chunk-TKVOWEJ2.js} +154 -49
  8. package/dist/chunk-TKVOWEJ2.js.map +1 -0
  9. package/dist/{chunk-574NG4UB.js → chunk-U3LWOJ3Q.js} +4 -4
  10. package/dist/chunk-U3LWOJ3Q.js.map +1 -0
  11. package/dist/{chunk-UCEIJEM5.js → chunk-V3WM6EII.js} +2 -2
  12. package/dist/chunk-V3WM6EII.js.map +1 -0
  13. package/dist/{chunk-TIJV6GJW.js → chunk-YYNP7MZC.js} +4 -3
  14. package/dist/chunk-YYNP7MZC.js.map +1 -0
  15. package/dist/features/example-feature/templates/example-tool.render.js.map +1 -1
  16. package/dist/features/opencode-basic/templates/edit.render.js +1 -1
  17. package/dist/features/opencode-basic/templates/edit.render.js.map +1 -1
  18. package/dist/features/opencode-basic/templates/glob.render.js.map +1 -1
  19. package/dist/features/opencode-basic/templates/grep.render.js.map +1 -1
  20. package/dist/features/opencode-basic/templates/ls.render.js.map +1 -1
  21. package/dist/features/opencode-basic/templates/read.render.js +1 -1
  22. package/dist/features/opencode-basic/templates/read.render.js.map +1 -1
  23. package/dist/features/opencode-basic/templates/write.render.js +1 -1
  24. package/dist/features/opencode-basic/templates/write.render.js.map +1 -1
  25. package/dist/features/skill/templates/skill.render.js.map +1 -1
  26. package/dist/features/subagent/templates/agent-close.render.js.map +1 -1
  27. package/dist/features/subagent/templates/agent-list.render.js.map +1 -1
  28. package/dist/features/subagent/templates/agent-send.render.js.map +1 -1
  29. package/dist/features/subagent/templates/agent-spawn.render.js.map +1 -1
  30. package/dist/features/subagent/templates/wait.render.js.map +1 -1
  31. package/dist/features/todo/templates/task-clear.render.js.map +1 -1
  32. package/dist/features/todo/templates/task-create.render.js.map +1 -1
  33. package/dist/features/todo/templates/task-list.render.js.map +1 -1
  34. package/dist/features/todo/templates/task-update.render.js.map +1 -1
  35. package/dist/index.d.ts +2276 -2024
  36. package/dist/index.js +519 -205
  37. package/dist/index.js.map +1 -1
  38. package/dist/{notification-5DFBYKKN.js → notification-CASV7QYT.js} +2 -2
  39. package/dist/{resolver-F5SM2RHQ.js → resolver-4JA7VPYP.js} +2 -2
  40. package/dist/{session-events-TETMQI45.js → session-events-S7LMJ6MM.js} +2 -2
  41. package/package.json +55 -55
  42. package/dist/BasicAgent-RPYJHYCM.js +0 -12
  43. package/dist/ExplorerAgent-ITTSJRJI.js +0 -12
  44. package/dist/chunk-574NG4UB.js.map +0 -1
  45. package/dist/chunk-BVF7RUXV.js.map +0 -1
  46. package/dist/chunk-TIJV6GJW.js.map +0 -1
  47. package/dist/chunk-UCEIJEM5.js.map +0 -1
  48. package/dist/chunk-YFSM6IYU.js.map +0 -1
  49. /package/dist/{BasicAgent-RPYJHYCM.js.map → BasicAgent-UBGLABDV.js.map} +0 -0
  50. /package/dist/{ExplorerAgent-ITTSJRJI.js.map → ExplorerAgent-C62LOUTX.js.map} +0 -0
  51. /package/dist/{notification-5DFBYKKN.js.map → notification-CASV7QYT.js.map} +0 -0
  52. /package/dist/{resolver-F5SM2RHQ.js.map → resolver-4JA7VPYP.js.map} +0 -0
  53. /package/dist/{session-events-TETMQI45.js.map → session-events-S7LMJ6MM.js.map} +0 -0
@@ -1 +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":[]}
1
+ {"version":3,"sources":["../../../../src/features/skill/templates/skill.render.ts"],"sourcesContent":["/**\r\n * Skill 工具渲染模板\r\n * 使用 viewer-worker.ts HTML 中的版本(Markdown 渲染)\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\nfunction formatError(data: any): string {\r\n const text = typeof data === 'object' ? JSON.stringify(data, null, 2) : String(data);\r\n return `<div class=\"tool-error\">\r\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"/></svg>\r\n <span>${escapeHtml(text)}</span>\r\n </div>`;\r\n}\r\n\r\n/**\r\n * Skill 调用渲染模板(Markdown 渲染)\r\n */\r\nexport default {\r\n call: (args: any) => `<div class=\"bash-command\">Invoke Skill <span class=\"file-path\">${escapeHtml(args.skill || '')}</span></div>`,\r\n result: (data: any, success?: boolean) => {\r\n if (!success) return formatError(data);\r\n const str = String(data);\r\n // invoke_skill 返回的是 markdown 格式的技能文档,直接用 markdown 渲染\r\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>`;\r\n }\r\n} as const satisfies InlineRenderTemplate;\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,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":[]}
@@ -1 +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":[]}
1
+ {"version":3,"sources":["../../../../src/features/subagent/templates/agent-close.render.ts"],"sourcesContent":["/**\r\n * agent-close 工具渲染模板\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\nexport default {\r\n call: (args: any) => {\r\n return `<div class=\"bash-command\">Close <span class=\"pattern\">${escapeHtml(args.agentId || '')}</span> (reason: ${args.reason || 'manual'})</div>`;\r\n },\r\n result: (data: any) => {\r\n if (data.error) {\r\n return `<div style=\"color:var(--error-color)\">✗ ${escapeHtml(data.error)}</div>`;\r\n }\r\n return `<div style=\"color:var(--success-color)\">✓ ${data.message || 'Agent closed'}</div>`;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;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":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/subagent/templates/agent-list.render.ts"],"sourcesContent":["/**\n * agent-list 工具渲染模板\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\nexport default {\n call: '<div class=\"bash-command\">List agents (filter: {{filter}})</div>',\n result: (data: any) => {\n if (!data.agents || data.agents.length === 0) {\n return `<div style=\"color:var(--warning-color)\">No agents found</div>`;\n }\n return `<div style=\"font-size:12px;\">\n <div>Total: ${data.total} | Running: ${data.running}</div>\n ${data.agents.map((a: any) => `\n <div style=\"margin-top:4px; padding:4px; background:var(--code-bg); border-radius:4px;\">\n <strong>${a.agentId}</strong> (${a.type}) - <span style=\"color:${a.status === 'idle' || a.status === 'busy' ? 'var(--success-color)' : 'var(--warning-color)'}\">${a.status}</span>\n </div>\n `).join('')}\n </div>`;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AAqBA,IAAO,4BAAQ;AAAA,EACb,MAAM;AAAA,EACN,QAAQ,CAAC,SAAc;AACrB,QAAI,CAAC,KAAK,UAAU,KAAK,OAAO,WAAW,GAAG;AAC5C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,oBACS,KAAK,KAAK,eAAe,KAAK,OAAO;AAAA,QACjD,KAAK,OAAO,IAAI,CAAC,MAAW;AAAA;AAAA,oBAEhB,EAAE,OAAO,cAAc,EAAE,IAAI,0BAA0B,EAAE,WAAW,UAAU,EAAE,WAAW,SAAS,yBAAyB,sBAAsB,KAAK,EAAE,MAAM;AAAA;AAAA,OAE7K,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,EAEf;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/features/subagent/templates/agent-list.render.ts"],"sourcesContent":["/**\r\n * agent-list 工具渲染模板\r\n */\r\n\r\nimport type { InlineRenderTemplate } from '../../../core/types.js';\r\n\r\nexport default {\r\n call: '<div class=\"bash-command\">List agents (filter: {{filter}})</div>',\r\n result: (data: any) => {\r\n if (!data.agents || data.agents.length === 0) {\r\n return `<div style=\"color:var(--warning-color)\">No agents found</div>`;\r\n }\r\n return `<div style=\"font-size:12px;\">\r\n <div>Total: ${data.total} | Running: ${data.running}</div>\r\n ${data.agents.map((a: any) => `\r\n <div style=\"margin-top:4px; padding:4px; background:var(--code-bg); border-radius:4px;\">\r\n <strong>${a.agentId}</strong> (${a.type}) - <span style=\"color:${a.status === 'idle' || a.status === 'busy' ? 'var(--success-color)' : 'var(--warning-color)'}\">${a.status}</span>\r\n </div>\r\n `).join('')}\r\n </div>`;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AAMA,IAAO,4BAAQ;AAAA,EACb,MAAM;AAAA,EACN,QAAQ,CAAC,SAAc;AACrB,QAAI,CAAC,KAAK,UAAU,KAAK,OAAO,WAAW,GAAG;AAC5C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,oBACS,KAAK,KAAK,eAAe,KAAK,OAAO;AAAA,QACjD,KAAK,OAAO,IAAI,CAAC,MAAW;AAAA;AAAA,oBAEhB,EAAE,OAAO,cAAc,EAAE,IAAI,0BAA0B,EAAE,WAAW,UAAU,EAAE,WAAW,SAAS,yBAAyB,sBAAsB,KAAK,EAAE,MAAM;AAAA;AAAA,OAE7K,EAAE,KAAK,EAAE,CAAC;AAAA;AAAA,EAEf;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/subagent/templates/agent-send.render.ts"],"sourcesContent":["/**\n * agent-send 工具渲染模板\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\n/**\n * HTML 转义辅助函数\n */\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&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\">发送指令到 <span class=\"pattern\">${escapeHtml(args.agentId || '')}</span></div>`;\n },\n result: (data: any) => {\n if (data.error) {\n return `<div style=\"color:var(--error-color)\">✗ ${escapeHtml(data.error)}</div>`;\n }\n let output = `<div style=\"color:var(--success-color)\">✓ 指令已发送</div>`;\n\n // 显示所有 agent 列表\n if (data.allAgents && data.allAgents.length > 0) {\n const agentsList = data.allAgents.map((a: any) => {\n const statusText = a.status === 'busy' ? '[运行中]' : a.status === 'idle' ? '[空闲]' : '[已完成]';\n return `${statusText} ${escapeHtml(a.agentId)}`;\n }).join(' · ');\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px; margin-top:4px;\">${agentsList}</div>`;\n }\n return output;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,IAAO,4BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO,kFAAyD,WAAW,KAAK,WAAW,EAAE,CAAC;AAAA,EAChG;AAAA,EACA,QAAQ,CAAC,SAAc;AACrB,QAAI,KAAK,OAAO;AACd,aAAO,gDAA2C,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1E;AACA,QAAI,SAAS;AAGb,QAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;AAC/C,YAAM,aAAa,KAAK,UAAU,IAAI,CAAC,MAAW;AAChD,cAAM,aAAa,EAAE,WAAW,SAAS,yBAAU,EAAE,WAAW,SAAS,mBAAS;AAClF,eAAO,GAAG,UAAU,IAAI,WAAW,EAAE,OAAO,CAAC;AAAA,MAC/C,CAAC,EAAE,KAAK,QAAK;AACb,gBAAU,8FAA8F,UAAU;AAAA,IACpH;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/features/subagent/templates/agent-send.render.ts"],"sourcesContent":["/**\r\n * agent-send 工具渲染模板\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\nexport default {\r\n call: (args: any) => {\r\n return `<div class=\"bash-command\">发送指令到 <span class=\"pattern\">${escapeHtml(args.agentId || '')}</span></div>`;\r\n },\r\n result: (data: any) => {\r\n if (data.error) {\r\n return `<div style=\"color:var(--error-color)\">✗ ${escapeHtml(data.error)}</div>`;\r\n }\r\n let output = `<div style=\"color:var(--success-color)\">✓ 指令已发送</div>`;\r\n\r\n // 显示所有 agent 列表\r\n if (data.allAgents && data.allAgents.length > 0) {\r\n const agentsList = data.allAgents.map((a: any) => {\r\n const statusText = a.status === 'busy' ? '[运行中]' : a.status === 'idle' ? '[空闲]' : '[已完成]';\r\n return `${statusText} ${escapeHtml(a.agentId)}`;\r\n }).join(' · ');\r\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px; margin-top:4px;\">${agentsList}</div>`;\r\n }\r\n return output;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,IAAO,4BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO,kFAAyD,WAAW,KAAK,WAAW,EAAE,CAAC;AAAA,EAChG;AAAA,EACA,QAAQ,CAAC,SAAc;AACrB,QAAI,KAAK,OAAO;AACd,aAAO,gDAA2C,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1E;AACA,QAAI,SAAS;AAGb,QAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;AAC/C,YAAM,aAAa,KAAK,UAAU,IAAI,CAAC,MAAW;AAChD,cAAM,aAAa,EAAE,WAAW,SAAS,yBAAU,EAAE,WAAW,SAAS,mBAAS;AAClF,eAAO,GAAG,UAAU,IAAI,WAAW,EAAE,OAAO,CAAC;AAAA,MAC/C,CAAC,EAAE,KAAK,QAAK;AACb,gBAAU,8FAA8F,UAAU;AAAA,IACpH;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/subagent/templates/agent-spawn.render.ts"],"sourcesContent":["/**\n * agent-spawn 工具渲染模板\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\">启动 <span class=\"pattern\">${escapeHtml(args.type || '')}</span> 子代理</div>`;\n },\n result: (data: any) => {\n if (data.error) {\n return `<div style=\"color:var(--error-color)\">✗ ${escapeHtml(data.error)}</div>`;\n }\n let output = `<div class=\"bash-command\">已创建 <span class=\"pattern\">${escapeHtml(data.agentId || '')}</span></div>`;\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px;\">类型: ${escapeHtml(data.type || '')} · 状态: ${escapeHtml(data.status || '')}</div>`;\n\n // 显示所有 agent 列表\n if (data.allAgents && data.allAgents.length > 0) {\n const agentsList = data.allAgents.map((a: any) => {\n const statusText = a.status === 'busy' ? '[运行中]' : a.status === 'idle' ? '[空闲]' : '[已完成]';\n return `${statusText} ${escapeHtml(a.agentId)}`;\n }).join(' · ');\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px; margin-top:4px;\">${agentsList}</div>`;\n }\n return output;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,IAAO,6BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO,gEAAsD,WAAW,KAAK,QAAQ,EAAE,CAAC;AAAA,EAC1F;AAAA,EACA,QAAQ,CAAC,SAAc;AACrB,QAAI,KAAK,OAAO;AACd,aAAO,gDAA2C,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1E;AACA,QAAI,SAAS,sEAAuD,WAAW,KAAK,WAAW,EAAE,CAAC;AAClG,cAAU,4FAAkF,WAAW,KAAK,QAAQ,EAAE,CAAC,uBAAU,WAAW,KAAK,UAAU,EAAE,CAAC;AAG9J,QAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;AAC/C,YAAM,aAAa,KAAK,UAAU,IAAI,CAAC,MAAW;AAChD,cAAM,aAAa,EAAE,WAAW,SAAS,yBAAU,EAAE,WAAW,SAAS,mBAAS;AAClF,eAAO,GAAG,UAAU,IAAI,WAAW,EAAE,OAAO,CAAC;AAAA,MAC/C,CAAC,EAAE,KAAK,QAAK;AACb,gBAAU,8FAA8F,UAAU;AAAA,IACpH;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/features/subagent/templates/agent-spawn.render.ts"],"sourcesContent":["/**\r\n * agent-spawn 工具渲染模板\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\nexport default {\r\n call: (args: any) => {\r\n return `<div class=\"bash-command\">启动 <span class=\"pattern\">${escapeHtml(args.type || '')}</span> 子代理</div>`;\r\n },\r\n result: (data: any) => {\r\n if (data.error) {\r\n return `<div style=\"color:var(--error-color)\">✗ ${escapeHtml(data.error)}</div>`;\r\n }\r\n let output = `<div class=\"bash-command\">已创建 <span class=\"pattern\">${escapeHtml(data.agentId || '')}</span></div>`;\r\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px;\">类型: ${escapeHtml(data.type || '')} · 状态: ${escapeHtml(data.status || '')}</div>`;\r\n\r\n // 显示所有 agent 列表\r\n if (data.allAgents && data.allAgents.length > 0) {\r\n const agentsList = data.allAgents.map((a: any) => {\r\n const statusText = a.status === 'busy' ? '[运行中]' : a.status === 'idle' ? '[空闲]' : '[已完成]';\r\n return `${statusText} ${escapeHtml(a.agentId)}`;\r\n }).join(' · ');\r\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-left:4px; margin-top:4px;\">${agentsList}</div>`;\r\n }\r\n return output;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,IAAO,6BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO,gEAAsD,WAAW,KAAK,QAAQ,EAAE,CAAC;AAAA,EAC1F;AAAA,EACA,QAAQ,CAAC,SAAc;AACrB,QAAI,KAAK,OAAO;AACd,aAAO,gDAA2C,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1E;AACA,QAAI,SAAS,sEAAuD,WAAW,KAAK,WAAW,EAAE,CAAC;AAClG,cAAU,4FAAkF,WAAW,KAAK,QAAQ,EAAE,CAAC,uBAAU,WAAW,KAAK,UAAU,EAAE,CAAC;AAG9J,QAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;AAC/C,YAAM,aAAa,KAAK,UAAU,IAAI,CAAC,MAAW;AAChD,cAAM,aAAa,EAAE,WAAW,SAAS,yBAAU,EAAE,WAAW,SAAS,mBAAS;AAClF,eAAO,GAAG,UAAU,IAAI,WAAW,EAAE,OAAO,CAAC;AAAA,MAC/C,CAAC,EAAE,KAAK,QAAK;AACb,gBAAU,8FAA8F,UAAU;AAAA,IACpH;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/subagent/templates/wait.render.ts"],"sourcesContent":["/**\n * wait 工具渲染模板\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: () => {\n return `<div class=\"bash-command\">等待子代理运行完成......</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(--info-color)\">${escapeHtml(data.message || '等待子代理运行结果...')}</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,sBAAQ;AAAA,EACb,MAAM,MAAM;AACV,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,CAAC,SAAc;AACrB,QAAI,KAAK,OAAO;AACd,aAAO,gDAA2C,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1E;AACA,WAAO,wCAAwC,WAAW,KAAK,WAAW,2DAAc,CAAC;AAAA,EAC3F;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/features/subagent/templates/wait.render.ts"],"sourcesContent":["/**\r\n * wait 工具渲染模板\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\nexport default {\r\n call: () => {\r\n return `<div class=\"bash-command\">等待子代理运行完成......</div>`;\r\n },\r\n result: (data: any) => {\r\n if (data.error) {\r\n return `<div style=\"color:var(--error-color)\">✗ ${escapeHtml(data.error)}</div>`;\r\n }\r\n return `<div style=\"color:var(--info-color)\">${escapeHtml(data.message || '等待子代理运行结果...')}</div>`;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,IAAO,sBAAQ;AAAA,EACb,MAAM,MAAM;AACV,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,CAAC,SAAc;AACrB,QAAI,KAAK,OAAO;AACd,aAAO,gDAA2C,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1E;AACA,WAAO,wCAAwC,WAAW,KAAK,WAAW,2DAAc,CAAC;AAAA,EAC3F;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/todo/templates/task-clear.render.ts"],"sourcesContent":["/**\n * task_clear 工具渲染模板\n *\n * 注意:execute 返回 withDisplay,模型只看 { ok, cancelledCount },\n * 前端通过 display 数据渲染完整卡片(message)。\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\nexport default {\n call: () => {\n return `<div class=\"bash-command\">取消未完成任务并保留历史</div>`;\n },\n result: (data: any, success?: boolean) => {\n if (!success || data?.error || data?.ok === false) {\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(data?.error || '取消任务失败')}</span>\n </div>`;\n }\n return `<div style=\"color:var(--success-color)\">✓ ${escapeHtml(data.message || '未完成任务已取消')}</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,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAU,KAAK;AAAA,EAC9D;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,IAAO,4BAAQ;AAAA,EACb,MAAM,MAAM;AACV,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,WAAW,MAAM,SAAS,MAAM,OAAO,OAAO;AACjD,aAAO;AAAA;AAAA,gBAEG,WAAW,MAAM,SAAS,sCAAQ,CAAC;AAAA;AAAA,IAE/C;AACA,WAAO,kDAA6C,WAAW,KAAK,WAAW,kDAAU,CAAC;AAAA,EAC5F;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/features/todo/templates/task-clear.render.ts"],"sourcesContent":["/**\r\n * task_clear 工具渲染模板\r\n *\r\n * 注意:execute 返回 withDisplay,模型只看 { ok, cancelledCount },\r\n * 前端通过 display 数据渲染完整卡片(message)。\r\n */\r\n\r\nimport type { InlineRenderTemplate } from '../../../core/types.js';\r\n\r\nfunction escapeHtml(text: any): string {\r\n const str = String(text);\r\n const map: Record<string, string> = {\r\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\r\n };\r\n return str.replace(/[&<>\"']/g, m => map[m]);\r\n}\r\n\r\nexport default {\r\n call: () => {\r\n return `<div class=\"bash-command\">取消未完成任务并保留历史</div>`;\r\n },\r\n result: (data: any, success?: boolean) => {\r\n if (!success || data?.error || data?.ok === false) {\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(data?.error || '取消任务失败')}</span>\r\n </div>`;\r\n }\r\n return `<div style=\"color:var(--success-color)\">✓ ${escapeHtml(data.message || '未完成任务已取消')}</div>`;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAU,KAAK;AAAA,EAC9D;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,IAAO,4BAAQ;AAAA,EACb,MAAM,MAAM;AACV,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,WAAW,MAAM,SAAS,MAAM,OAAO,OAAO;AACjD,aAAO;AAAA;AAAA,gBAEG,WAAW,MAAM,SAAS,sCAAQ,CAAC;AAAA;AAAA,IAE/C;AACA,WAAO,kDAA6C,WAAW,KAAK,WAAW,kDAAU,CAAC;AAAA,EAC5F;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/todo/templates/task-create.render.ts"],"sourcesContent":["/**\n * task_create 工具渲染模板\n *\n * 注意:execute 返回 withDisplay,模型只看极简 JSON,\n * 前端通过 display 数据渲染完整卡片(allTasks + message)。\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\nfunction getStatusColor(status: string): string {\n const colors: Record<string, string> = {\n pending: 'var(--warning-color)',\n in_progress: 'var(--info-color)',\n completed: 'var(--success-color)',\n deleted: 'var(--text-secondary)',\n };\n return colors[status] || 'var(--text-secondary)';\n}\n\nfunction renderTaskList(tasks: Array<{ id: string; subject: string; status: string }>): string {\n return `<div style=\"font-family:\"Fira Code\", \"Cascadia Code\", \"Source Code Pro\", \"JetBrains Mono\", ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:12px; max-height:300px; overflow:auto;\">\n ${tasks.map(t => `\n <div style=\"display:flex; align-items:center; gap:8px; padding:4px 0; border-bottom:1px solid var(--border-color);\">\n <span style=\"color:var(--text-secondary); min-width:24px;\">#${t.id}</span>\n <span style=\"color:var(--text-primary); flex:1;\">${escapeHtml(t.subject)}</span>\n <span style=\"color:${getStatusColor(t.status)}; font-size:11px;\">${t.status}</span>\n </div>\n `).join('')}\n </div>`;\n}\n\nexport default {\n call: (args: any) => {\n return `<div class=\"bash-command\">创建任务 <span class=\"pattern\">${escapeHtml(args.subject || '')}</span></div>`;\n },\n result: (data: any, success?: boolean) => {\n if (!success || data?.error || data?.ok === false) {\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(data?.error || '创建任务失败')}</span>\n </div>`;\n }\n let output = `<div style=\"color:var(--success-color)\">✓ ${escapeHtml(data.message || '任务已创建')}</div>`;\n if (data.allTasks && data.allTasks.length > 0) {\n output += renderTaskList(data.allTasks);\n }\n return output;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAU,KAAK;AAAA,EAC9D;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,SAAS,eAAe,QAAwB;AAC9C,QAAM,SAAiC;AAAA,IACrC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AACA,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEA,SAAS,eAAe,OAAuE;AAC7F,SAAO;AAAA,MACH,MAAM,IAAI,OAAK;AAAA;AAAA,sEAEiD,EAAE,EAAE;AAAA,2DACf,WAAW,EAAE,OAAO,CAAC;AAAA,6BACnD,eAAe,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM;AAAA;AAAA,KAE9E,EAAE,KAAK,EAAE,CAAC;AAAA;AAEf;AAEA,IAAO,6BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO,4EAAwD,WAAW,KAAK,WAAW,EAAE,CAAC;AAAA,EAC/F;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,WAAW,MAAM,SAAS,MAAM,OAAO,OAAO;AACjD,aAAO;AAAA;AAAA,gBAEG,WAAW,MAAM,SAAS,sCAAQ,CAAC;AAAA;AAAA,IAE/C;AACA,QAAI,SAAS,kDAA6C,WAAW,KAAK,WAAW,gCAAO,CAAC;AAC7F,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,gBAAU,eAAe,KAAK,QAAQ;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/features/todo/templates/task-create.render.ts"],"sourcesContent":["/**\r\n * task_create 工具渲染模板\r\n *\r\n * 注意:execute 返回 withDisplay,模型只看极简 JSON,\r\n * 前端通过 display 数据渲染完整卡片(allTasks + message)。\r\n */\r\n\r\nimport type { InlineRenderTemplate } from '../../../core/types.js';\r\n\r\nfunction escapeHtml(text: any): string {\r\n const str = String(text);\r\n const map: Record<string, string> = {\r\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\r\n };\r\n return str.replace(/[&<>\"']/g, m => map[m]);\r\n}\r\n\r\nfunction getStatusColor(status: string): string {\r\n const colors: Record<string, string> = {\r\n pending: 'var(--warning-color)',\r\n in_progress: 'var(--info-color)',\r\n completed: 'var(--success-color)',\r\n deleted: 'var(--text-secondary)',\r\n };\r\n return colors[status] || 'var(--text-secondary)';\r\n}\r\n\r\nfunction renderTaskList(tasks: Array<{ id: string; subject: string; status: string }>): string {\r\n return `<div style=\"font-family:\"Fira Code\", \"Cascadia Code\", \"Source Code Pro\", \"JetBrains Mono\", ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:12px; max-height:300px; overflow:auto;\">\r\n ${tasks.map(t => `\r\n <div style=\"display:flex; align-items:center; gap:8px; padding:4px 0; border-bottom:1px solid var(--border-color);\">\r\n <span style=\"color:var(--text-secondary); min-width:24px;\">#${t.id}</span>\r\n <span style=\"color:var(--text-primary); flex:1;\">${escapeHtml(t.subject)}</span>\r\n <span style=\"color:${getStatusColor(t.status)}; font-size:11px;\">${t.status}</span>\r\n </div>\r\n `).join('')}\r\n </div>`;\r\n}\r\n\r\nexport default {\r\n call: (args: any) => {\r\n return `<div class=\"bash-command\">创建任务 <span class=\"pattern\">${escapeHtml(args.subject || '')}</span></div>`;\r\n },\r\n result: (data: any, success?: boolean) => {\r\n if (!success || data?.error || data?.ok === false) {\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(data?.error || '创建任务失败')}</span>\r\n </div>`;\r\n }\r\n let output = `<div style=\"color:var(--success-color)\">✓ ${escapeHtml(data.message || '任务已创建')}</div>`;\r\n if (data.allTasks && data.allTasks.length > 0) {\r\n output += renderTaskList(data.allTasks);\r\n }\r\n return output;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAU,KAAK;AAAA,EAC9D;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,SAAS,eAAe,QAAwB;AAC9C,QAAM,SAAiC;AAAA,IACrC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AACA,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEA,SAAS,eAAe,OAAuE;AAC7F,SAAO;AAAA,MACH,MAAM,IAAI,OAAK;AAAA;AAAA,sEAEiD,EAAE,EAAE;AAAA,2DACf,WAAW,EAAE,OAAO,CAAC;AAAA,6BACnD,eAAe,EAAE,MAAM,CAAC,sBAAsB,EAAE,MAAM;AAAA;AAAA,KAE9E,EAAE,KAAK,EAAE,CAAC;AAAA;AAEf;AAEA,IAAO,6BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,WAAO,4EAAwD,WAAW,KAAK,WAAW,EAAE,CAAC;AAAA,EAC/F;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,WAAW,MAAM,SAAS,MAAM,OAAO,OAAO;AACjD,aAAO;AAAA;AAAA,gBAEG,WAAW,MAAM,SAAS,sCAAQ,CAAC;AAAA;AAAA,IAE/C;AACA,QAAI,SAAS,kDAA6C,WAAW,KAAK,WAAW,gCAAO,CAAC;AAC7F,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,gBAAU,eAAe,KAAK,QAAQ;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/todo/templates/task-list.render.ts"],"sourcesContent":["/**\n * task_list 工具渲染模板\n *\n * 注意:execute 返回 withDisplay,模型只看 { tasks },\n * 前端通过 display 数据渲染完整卡片(含 summary)。\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\nfunction getStatusColor(status: string): string {\n const colors: Record<string, string> = {\n pending: 'var(--warning-color)',\n in_progress: 'var(--info-color)',\n completed: 'var(--success-color)',\n deleted: 'var(--text-secondary)',\n };\n return colors[status] || 'var(--text-secondary)';\n}\n\nfunction getStatusText(status: string): string {\n const texts: Record<string, string> = {\n pending: '待执行', in_progress: '进行中', completed: '已完成', deleted: '已删除',\n };\n return texts[status] || status;\n}\n\nfunction renderTaskList(tasks: Array<{ id: string; subject: string; status: string }>): string {\n return `<div style=\"font-family:\"Fira Code\", \"Cascadia Code\", \"Source Code Pro\", \"JetBrains Mono\", ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:12px; max-height:300px; overflow:auto;\">\n ${tasks.map(t => `\n <div style=\"display:flex; align-items:center; gap:8px; padding:4px 0; border-bottom:1px solid var(--border-color);\">\n <span style=\"color:var(--text-secondary); min-width:24px;\">#${t.id}</span>\n <span style=\"color:var(--text-primary); flex:1;\">${escapeHtml(t.subject)}</span>\n <span style=\"color:${getStatusColor(t.status)}; font-size:11px;\">${getStatusText(t.status)}</span>\n </div>\n `).join('')}\n </div>`;\n}\n\nexport default {\n call: (args: any) => {\n const filter = args.status === 'all' ? '' : ` (筛选: ${escapeHtml(args.status || '')})`;\n return `<div class=\"bash-command\">列出任务${filter}</div>`;\n },\n result: (data: any, success?: boolean) => {\n if (!success || data?.error) {\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(data?.error || '获取任务列表失败')}</span>\n </div>`;\n }\n if (!data.tasks || data.tasks.length === 0) {\n return '<div style=\"color:var(--text-secondary)\">暂无任务</div>';\n }\n let output = '';\n if (data.summary) {\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-bottom:4px;\">`;\n output += `总计: ${data.summary.total} | 待执行: ${data.summary.pending} | 进行中: ${data.summary.inProgress} | 已完成: ${data.summary.completed}`;\n output += `</div>`;\n }\n output += renderTaskList(data.tasks);\n return output;\n }\n} as const satisfies InlineRenderTemplate;\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAU,KAAK;AAAA,EAC9D;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,SAAS,eAAe,QAAwB;AAC9C,QAAM,SAAiC;AAAA,IACrC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AACA,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEA,SAAS,cAAc,QAAwB;AAC7C,QAAM,QAAgC;AAAA,IACpC,SAAS;AAAA,IAAO,aAAa;AAAA,IAAO,WAAW;AAAA,IAAO,SAAS;AAAA,EACjE;AACA,SAAO,MAAM,MAAM,KAAK;AAC1B;AAEA,SAAS,eAAe,OAAuE;AAC7F,SAAO;AAAA,MACH,MAAM,IAAI,OAAK;AAAA;AAAA,sEAEiD,EAAE,EAAE;AAAA,2DACf,WAAW,EAAE,OAAO,CAAC;AAAA,6BACnD,eAAe,EAAE,MAAM,CAAC,sBAAsB,cAAc,EAAE,MAAM,CAAC;AAAA;AAAA,KAE7F,EAAE,KAAK,EAAE,CAAC;AAAA;AAEf;AAEA,IAAO,2BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,UAAM,SAAS,KAAK,WAAW,QAAQ,KAAK,mBAAS,WAAW,KAAK,UAAU,EAAE,CAAC;AAClF,WAAO,qDAAiC,MAAM;AAAA,EAChD;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,WAAW,MAAM,OAAO;AAC3B,aAAO;AAAA;AAAA,gBAEG,WAAW,MAAM,SAAS,kDAAU,CAAC;AAAA;AAAA,IAEjD;AACA,QAAI,CAAC,KAAK,SAAS,KAAK,MAAM,WAAW,GAAG;AAC1C,aAAO;AAAA,IACT;AACA,QAAI,SAAS;AACb,QAAI,KAAK,SAAS;AAChB,gBAAU;AACV,gBAAU,iBAAO,KAAK,QAAQ,KAAK,0BAAW,KAAK,QAAQ,OAAO,0BAAW,KAAK,QAAQ,UAAU,0BAAW,KAAK,QAAQ,SAAS;AACrI,gBAAU;AAAA,IACZ;AACA,cAAU,eAAe,KAAK,KAAK;AACnC,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/features/todo/templates/task-list.render.ts"],"sourcesContent":["/**\r\n * task_list 工具渲染模板\r\n *\r\n * 注意:execute 返回 withDisplay,模型只看 { tasks },\r\n * 前端通过 display 数据渲染完整卡片(含 summary)。\r\n */\r\n\r\nimport type { InlineRenderTemplate } from '../../../core/types.js';\r\n\r\nfunction escapeHtml(text: any): string {\r\n const str = String(text);\r\n const map: Record<string, string> = {\r\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\r\n };\r\n return str.replace(/[&<>\"']/g, m => map[m]);\r\n}\r\n\r\nfunction getStatusColor(status: string): string {\r\n const colors: Record<string, string> = {\r\n pending: 'var(--warning-color)',\r\n in_progress: 'var(--info-color)',\r\n completed: 'var(--success-color)',\r\n deleted: 'var(--text-secondary)',\r\n };\r\n return colors[status] || 'var(--text-secondary)';\r\n}\r\n\r\nfunction getStatusText(status: string): string {\r\n const texts: Record<string, string> = {\r\n pending: '待执行', in_progress: '进行中', completed: '已完成', deleted: '已删除',\r\n };\r\n return texts[status] || status;\r\n}\r\n\r\nfunction renderTaskList(tasks: Array<{ id: string; subject: string; status: string }>): string {\r\n return `<div style=\"font-family:\"Fira Code\", \"Cascadia Code\", \"Source Code Pro\", \"JetBrains Mono\", ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace; font-size:12px; max-height:300px; overflow:auto;\">\r\n ${tasks.map(t => `\r\n <div style=\"display:flex; align-items:center; gap:8px; padding:4px 0; border-bottom:1px solid var(--border-color);\">\r\n <span style=\"color:var(--text-secondary); min-width:24px;\">#${t.id}</span>\r\n <span style=\"color:var(--text-primary); flex:1;\">${escapeHtml(t.subject)}</span>\r\n <span style=\"color:${getStatusColor(t.status)}; font-size:11px;\">${getStatusText(t.status)}</span>\r\n </div>\r\n `).join('')}\r\n </div>`;\r\n}\r\n\r\nexport default {\r\n call: (args: any) => {\r\n const filter = args.status === 'all' ? '' : ` (筛选: ${escapeHtml(args.status || '')})`;\r\n return `<div class=\"bash-command\">列出任务${filter}</div>`;\r\n },\r\n result: (data: any, success?: boolean) => {\r\n if (!success || data?.error) {\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(data?.error || '获取任务列表失败')}</span>\r\n </div>`;\r\n }\r\n if (!data.tasks || data.tasks.length === 0) {\r\n return '<div style=\"color:var(--text-secondary)\">暂无任务</div>';\r\n }\r\n let output = '';\r\n if (data.summary) {\r\n output += `<div style=\"font-size:11px; color:var(--text-secondary); margin-bottom:4px;\">`;\r\n output += `总计: ${data.summary.total} | 待执行: ${data.summary.pending} | 进行中: ${data.summary.inProgress} | 已完成: ${data.summary.completed}`;\r\n output += `</div>`;\r\n }\r\n output += renderTaskList(data.tasks);\r\n return output;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAU,KAAK;AAAA,EAC9D;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,SAAS,eAAe,QAAwB;AAC9C,QAAM,SAAiC;AAAA,IACrC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AACA,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEA,SAAS,cAAc,QAAwB;AAC7C,QAAM,QAAgC;AAAA,IACpC,SAAS;AAAA,IAAO,aAAa;AAAA,IAAO,WAAW;AAAA,IAAO,SAAS;AAAA,EACjE;AACA,SAAO,MAAM,MAAM,KAAK;AAC1B;AAEA,SAAS,eAAe,OAAuE;AAC7F,SAAO;AAAA,MACH,MAAM,IAAI,OAAK;AAAA;AAAA,sEAEiD,EAAE,EAAE;AAAA,2DACf,WAAW,EAAE,OAAO,CAAC;AAAA,6BACnD,eAAe,EAAE,MAAM,CAAC,sBAAsB,cAAc,EAAE,MAAM,CAAC;AAAA;AAAA,KAE7F,EAAE,KAAK,EAAE,CAAC;AAAA;AAEf;AAEA,IAAO,2BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,UAAM,SAAS,KAAK,WAAW,QAAQ,KAAK,mBAAS,WAAW,KAAK,UAAU,EAAE,CAAC;AAClF,WAAO,qDAAiC,MAAM;AAAA,EAChD;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,WAAW,MAAM,OAAO;AAC3B,aAAO;AAAA;AAAA,gBAEG,WAAW,MAAM,SAAS,kDAAU,CAAC;AAAA;AAAA,IAEjD;AACA,QAAI,CAAC,KAAK,SAAS,KAAK,MAAM,WAAW,GAAG;AAC1C,aAAO;AAAA,IACT;AACA,QAAI,SAAS;AACb,QAAI,KAAK,SAAS;AAChB,gBAAU;AACV,gBAAU,iBAAO,KAAK,QAAQ,KAAK,0BAAW,KAAK,QAAQ,OAAO,0BAAW,KAAK,QAAQ,UAAU,0BAAW,KAAK,QAAQ,SAAS;AACrI,gBAAU;AAAA,IACZ;AACA,cAAU,eAAe,KAAK,KAAK;AACnC,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/todo/templates/task-update.render.ts"],"sourcesContent":["/**\n * task_update 工具渲染模板\n *\n * 注意:execute 返回 withDisplay,模型只看 { ok, taskId, status },\n * 前端通过 display 数据渲染完整卡片(message + subject + status)。\n */\n\nimport type { InlineRenderTemplate } from '../../../core/types.js';\n\nfunction escapeHtml(text: any): string {\n const str = String(text);\n const map: Record<string, string> = {\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\n };\n return str.replace(/[&<>\"']/g, m => map[m]);\n}\n\nfunction getStatusColor(status: string): string {\n const colors: Record<string, string> = {\n pending: 'var(--warning-color)',\n in_progress: 'var(--info-color)',\n completed: 'var(--success-color)',\n deleted: 'var(--text-secondary)',\n };\n return colors[status] || 'var(--text-secondary)';\n}\n\nfunction getStatusText(status: string): string {\n const texts: Record<string, string> = {\n pending: '待执行', in_progress: '进行中', completed: '已完成', deleted: '已删除',\n };\n return texts[status] || status;\n}\n\nexport default {\n call: (args: any) => {\n let output = `<div class=\"bash-command\">更新任务 <span class=\"pattern\">#${escapeHtml(args.taskId || '')}</span>`;\n if (args.status) {\n output += ` → <span style=\"color:${getStatusColor(args.status)}\">${getStatusText(args.status)}</span>`;\n }\n output += `</div>`;\n return output;\n },\n result: (data: any, success?: boolean) => {\n if (!success || data?.error || data?.ok === false) {\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(data?.error || '更新任务失败')}</span>\n </div>`;\n }\n if (data.status === 'deleted') {\n return `<div style=\"color:var(--success-color)\">✓ ${escapeHtml(data.message || '任务已取消并保留记录')}</div>`;\n }\n return `<div style=\"color:var(--success-color)\">✓ ${escapeHtml(data.message || '任务已更新')}</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,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAU,KAAK;AAAA,EAC9D;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,SAAS,eAAe,QAAwB;AAC9C,QAAM,SAAiC;AAAA,IACrC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AACA,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEA,SAAS,cAAc,QAAwB;AAC7C,QAAM,QAAgC;AAAA,IACpC,SAAS;AAAA,IAAO,aAAa;AAAA,IAAO,WAAW;AAAA,IAAO,SAAS;AAAA,EACjE;AACA,SAAO,MAAM,MAAM,KAAK;AAC1B;AAEA,IAAO,6BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,QAAI,SAAS,6EAAyD,WAAW,KAAK,UAAU,EAAE,CAAC;AACnG,QAAI,KAAK,QAAQ;AACf,gBAAU,8BAAyB,eAAe,KAAK,MAAM,CAAC,KAAK,cAAc,KAAK,MAAM,CAAC;AAAA,IAC/F;AACA,cAAU;AACV,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,WAAW,MAAM,SAAS,MAAM,OAAO,OAAO;AACjD,aAAO;AAAA;AAAA,gBAEG,WAAW,MAAM,SAAS,sCAAQ,CAAC;AAAA;AAAA,IAE/C;AACA,QAAI,KAAK,WAAW,WAAW;AAC7B,aAAO,kDAA6C,WAAW,KAAK,WAAW,8DAAY,CAAC;AAAA,IAC9F;AACA,WAAO,kDAA6C,WAAW,KAAK,WAAW,gCAAO,CAAC;AAAA,EACzF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/features/todo/templates/task-update.render.ts"],"sourcesContent":["/**\r\n * task_update 工具渲染模板\r\n *\r\n * 注意:execute 返回 withDisplay,模型只看 { ok, taskId, status },\r\n * 前端通过 display 数据渲染完整卡片(message + subject + status)。\r\n */\r\n\r\nimport type { InlineRenderTemplate } from '../../../core/types.js';\r\n\r\nfunction escapeHtml(text: any): string {\r\n const str = String(text);\r\n const map: Record<string, string> = {\r\n '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;'\r\n };\r\n return str.replace(/[&<>\"']/g, m => map[m]);\r\n}\r\n\r\nfunction getStatusColor(status: string): string {\r\n const colors: Record<string, string> = {\r\n pending: 'var(--warning-color)',\r\n in_progress: 'var(--info-color)',\r\n completed: 'var(--success-color)',\r\n deleted: 'var(--text-secondary)',\r\n };\r\n return colors[status] || 'var(--text-secondary)';\r\n}\r\n\r\nfunction getStatusText(status: string): string {\r\n const texts: Record<string, string> = {\r\n pending: '待执行', in_progress: '进行中', completed: '已完成', deleted: '已删除',\r\n };\r\n return texts[status] || status;\r\n}\r\n\r\nexport default {\r\n call: (args: any) => {\r\n let output = `<div class=\"bash-command\">更新任务 <span class=\"pattern\">#${escapeHtml(args.taskId || '')}</span>`;\r\n if (args.status) {\r\n output += ` → <span style=\"color:${getStatusColor(args.status)}\">${getStatusText(args.status)}</span>`;\r\n }\r\n output += `</div>`;\r\n return output;\r\n },\r\n result: (data: any, success?: boolean) => {\r\n if (!success || data?.error || data?.ok === false) {\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(data?.error || '更新任务失败')}</span>\r\n </div>`;\r\n }\r\n if (data.status === 'deleted') {\r\n return `<div style=\"color:var(--success-color)\">✓ ${escapeHtml(data.message || '任务已取消并保留记录')}</div>`;\r\n }\r\n return `<div style=\"color:var(--success-color)\">✓ ${escapeHtml(data.message || '任务已更新')}</div>`;\r\n }\r\n} as const satisfies InlineRenderTemplate;\r\n"],"mappings":";;;AASA,SAAS,WAAW,MAAmB;AACrC,QAAM,MAAM,OAAO,IAAI;AACvB,QAAM,MAA8B;AAAA,IAClC,KAAK;AAAA,IAAS,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAQ,KAAK;AAAA,IAAU,KAAK;AAAA,EAC9D;AACA,SAAO,IAAI,QAAQ,YAAY,OAAK,IAAI,CAAC,CAAC;AAC5C;AAEA,SAAS,eAAe,QAAwB;AAC9C,QAAM,SAAiC;AAAA,IACrC,SAAS;AAAA,IACT,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AACA,SAAO,OAAO,MAAM,KAAK;AAC3B;AAEA,SAAS,cAAc,QAAwB;AAC7C,QAAM,QAAgC;AAAA,IACpC,SAAS;AAAA,IAAO,aAAa;AAAA,IAAO,WAAW;AAAA,IAAO,SAAS;AAAA,EACjE;AACA,SAAO,MAAM,MAAM,KAAK;AAC1B;AAEA,IAAO,6BAAQ;AAAA,EACb,MAAM,CAAC,SAAc;AACnB,QAAI,SAAS,6EAAyD,WAAW,KAAK,UAAU,EAAE,CAAC;AACnG,QAAI,KAAK,QAAQ;AACf,gBAAU,8BAAyB,eAAe,KAAK,MAAM,CAAC,KAAK,cAAc,KAAK,MAAM,CAAC;AAAA,IAC/F;AACA,cAAU;AACV,WAAO;AAAA,EACT;AAAA,EACA,QAAQ,CAAC,MAAW,YAAsB;AACxC,QAAI,CAAC,WAAW,MAAM,SAAS,MAAM,OAAO,OAAO;AACjD,aAAO;AAAA;AAAA,gBAEG,WAAW,MAAM,SAAS,sCAAQ,CAAC;AAAA;AAAA,IAE/C;AACA,QAAI,KAAK,WAAW,WAAW;AAC7B,aAAO,kDAA6C,WAAW,KAAK,WAAW,8DAAY,CAAC;AAAA,IAC9F;AACA,WAAO,kDAA6C,WAAW,KAAK,WAAW,gCAAO,CAAC;AAAA,EACzF;AACF;","names":[]}