zen-gitsync 2.17.24 → 2.17.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +6 -0
  2. package/package.json +6 -3
  3. package/scripts/run-tests.cjs +5 -0
  4. package/src/cli/ai/agent.js +20 -0
  5. package/src/cli/ai/termui.js +73 -1
  6. package/src/cli/ai/termui.test.js +51 -0
  7. package/src/cli/ai/tools.js +114 -0
  8. package/src/cli/ai/tools.test.js +65 -1
  9. package/src/cli/ai/turn.js +3 -0
  10. package/src/memory/library.js +273 -0
  11. package/src/memory/library.test.js +187 -0
  12. package/src/memory/store.js +199 -0
  13. package/src/memory/store.test.js +137 -0
  14. package/src/memory/templates.js +113 -0
  15. package/src/paths.js +18 -0
  16. package/src/ui/public/assets/{AgentEngineSelector-CvIoGCLD.js → AgentEngineSelector-BArUIELz.js} +1 -1
  17. package/src/ui/public/assets/{AgentView-DnN-vCMi.css → AgentView-B3LhhRsy.css} +1 -1
  18. package/src/ui/public/assets/{AgentView-BrqS78Rt.js → AgentView-LpT8A9Fo.js} +1 -1
  19. package/src/ui/public/assets/{AppVersionBadge-BHxZm7-h.js → AppVersionBadge-DNXQm_Si.js} +2 -2
  20. package/src/ui/public/assets/{BranchSelector-w5ybmWVv.js → BranchSelector-DZPTz5Ql.js} +1 -1
  21. package/src/ui/public/assets/{CommitForm-pRCnAfz6.js → CommitForm-6avyu1Kv.js} +1 -1
  22. package/src/ui/public/assets/{CommonDialog-qXAsFhNS.js → CommonDialog-CRXyMlp5.js} +1 -1
  23. package/src/ui/public/assets/EditorView-BIHL8I9g.js +1 -0
  24. package/src/ui/public/assets/{EditorView-C6HFYeEM.css → EditorView-DqxBkn6c.css} +1 -1
  25. package/src/ui/public/assets/{FileDiffViewer-Bc8j9cQn.js → FileDiffViewer-BEYcCYs5.js} +1 -1
  26. package/src/ui/public/assets/{FlowExecutionViewer-CF4HkGu6.js → FlowExecutionViewer-DKRHDqbG.js} +1 -1
  27. package/src/ui/public/assets/{FlowOrchestrationWorkspace-a3Zk4BMK.js → FlowOrchestrationWorkspace-BnCsF4z4.js} +1 -1
  28. package/src/ui/public/assets/{IconButton-BjIHmE4p.js → IconButton-D4df4t9A.js} +1 -1
  29. package/src/ui/public/assets/{LogList-CqpSAW5T.js → LogList-DXqB4JJv.js} +1 -1
  30. package/src/ui/public/assets/{MindmapView-CgptM54l.js → MindmapView-Ddc55wzp.js} +1 -1
  31. package/src/ui/public/assets/{MonitorView-qb0EPvQW.js → MonitorView-DeERavq-.js} +1 -1
  32. package/src/ui/public/assets/{ProjectStartupButton-CmankQtk.js → ProjectStartupButton-DaLU4iS4.js} +1 -1
  33. package/src/ui/public/assets/{RecentDirectoriesChat-CsHHckPP.js → RecentDirectoriesChat-DVtsf7lW.js} +1 -1
  34. package/src/ui/public/assets/RecentDirectoriesChat-o4xK1Koc.css +1 -0
  35. package/src/ui/public/assets/{RemoteManagerDialog-Cpg4g5KW.js → RemoteManagerDialog-C3cfDsZi.js} +1 -1
  36. package/src/ui/public/assets/{RemoteRepoCard-DCc-adLb.js → RemoteRepoCard-D1Hso5Fq.js} +1 -1
  37. package/src/ui/public/assets/{SourceMapView-I41XvvZr.js → SourceMapView-Dwn5wy1o.js} +1 -1
  38. package/src/ui/public/assets/{SvgIcon-BB80ERhO.js → SvgIcon-diKLLWK9.js} +1 -1
  39. package/src/ui/public/assets/{TemplateManager-BB_bEiBB.js → TemplateManager-D9gyZbHP.js} +1 -1
  40. package/src/ui/public/assets/{UserInputNode-y9gz0EKH.js → UserInputNode-JNtVWcbE.js} +1 -1
  41. package/src/ui/public/assets/{WorkbenchView-Bkzbu5Sp.css → WorkbenchView-CJCxYK-K.css} +1 -1
  42. package/src/ui/public/assets/WorkbenchView-DxaAjZAA.js +6 -0
  43. package/src/ui/public/assets/_plugin-vue_export-helper-C7IvbEC3.js +19 -0
  44. package/src/ui/public/assets/agentConversations-nN-yDz8q.js +5 -0
  45. package/src/ui/public/assets/{configStore-BR8vEJCp.js → configStore-C-htWfWm.js} +1 -1
  46. package/src/ui/public/assets/{gitStore-Bz77W-S0.js → gitStore-DYpd8vZK.js} +1 -1
  47. package/src/ui/public/assets/index-BZFKDSGv.css +1 -0
  48. package/src/ui/public/assets/index-eq1OUcdk.js +29 -0
  49. package/src/ui/public/assets/{previewSandbox-luPexzF4.js → previewSandbox-Z707CZD9.js} +1 -1
  50. package/src/ui/public/assets/{toolsStore-CeI7jM5o.js → toolsStore-DFu4Alwg.js} +1 -1
  51. package/src/ui/public/assets/vendor-BY5ZDlW1.css +1 -0
  52. package/src/ui/public/assets/{vendor-CyWsJd6S.js → vendor-BjomZKSS.js} +28 -120
  53. package/src/ui/public/index.html +14 -14
  54. package/src/ui/server/index.js +4 -0
  55. package/src/ui/server/routes/fileOpen.js +43 -7
  56. package/src/ui/server/routes/memory.js +125 -0
  57. package/src/ui/server/routes/workbench/agentChat.js +35 -3
  58. package/src/ui/server/routes/workbench/agentChatShared.test.js +49 -0
  59. package/src/ui/server/routes/workbench/index.js +19 -2
  60. package/src/ui/server/routes/workbench/memoryContext.js +125 -0
  61. package/src/ui/server/routes/workbench/memoryContext.test.js +79 -0
  62. package/src/ui/server/routes/workbench/runExternalTurn.js +6 -1
  63. package/src/ui/server/routes/workbench/taskRunner.js +48 -5
  64. package/src/ui/public/assets/EditorView-DnuGnX3k.js +0 -1
  65. package/src/ui/public/assets/RecentDirectoriesChat-vHT8jMxW.css +0 -1
  66. package/src/ui/public/assets/WorkbenchView-DKqriLBP.js +0 -6
  67. package/src/ui/public/assets/_plugin-vue_export-helper-Dd_YmKEO.js +0 -19
  68. package/src/ui/public/assets/agentConversations-CT9E8eQr.js +0 -5
  69. package/src/ui/public/assets/index-CsLyZsXy.js +0 -29
  70. package/src/ui/public/assets/index-D2rf9QKB.css +0 -1
  71. package/src/ui/public/assets/vendor-BzMymUBi.css +0 -1
@@ -1,5 +0,0 @@
1
- import"./rolldown-runtime-C0FnF6B9.js";import{Cn as e,Rn as t,a as n,br as r,i,pr as a,vr as o}from"./element-plus-Bx3j6vzG.js";import{i as s,n as c}from"./vendor-CyWsJd6S.js";import{n as l}from"./_plugin-vue_export-helper-Dd_YmKEO.js";import{i as u,o as d,t as f}from"./configStore-BR8vEJCp.js";var p=`g ai`,m=`g-ai`,h=[{id:`gai`,name:p},...u.map(e=>({id:e.id,name:e.name}))],g=`zen-gitsync-agent-engine`;function _(e){return e===`gai`||d(e)}function v(e){return h.find(t=>t.id===e)?.name||`g ai`}function y(e){return d(e)}function b(){try{let e=localStorage.getItem(g);if(_(e))return e}catch{}return`gai`}function x(e){try{localStorage.setItem(g,e)}catch{}}t(),a();var S=[`image/*`,`.pdf`,`.txt`,`.md`,`.json`,`.csv`,`.log`,`.yml`,`.yaml`,`.xml`,`.toml`,`.ini`,`.html`,`.css`,`.js`,`.ts`,`.tsx`,`.vue`,`.py`,`.java`,`.go`,`.rs`,`.sql`,`.sh`].join(`,`),C=65536,w=`local-`;function T(e){if(!e||!Array.isArray(e.messages))return[];let t=[],n=e.messages.length;for(let r=0;r<n;r++){let i=e.messages[r];if(i.role!==`system`){if(i.role===`user`){let e=``,n;if(typeof i.content==`string`)e=i.content;else if(Array.isArray(i.content)){e=i.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(` `);let t=i.content.filter(e=>e?.type===`image_url`&&typeof e.image_url?.url==`string`).map((e,t)=>({id:`att-${r}-${t}`,name:`image`,size:0,type:O(e.image_url?.url||``)||`image/*`,preview:e.image_url?.url}));t.length>0&&(n=t)}(e||n)&&t.push({id:`msg-${r}`,role:`user`,content:e,attachments:n,status:`done`,createdAt:Date.now()})}else if(i.role===`assistant`){let i=`msg-${r}`,a=``,o=[],s=r;for(;s<n;){let t=e.messages[s];if(t.role!==`assistant`&&t.role!==`tool`)break;if(t.role===`assistant`){if(typeof t.content==`string`&&(a+=t.content),t.tool_calls&&t.tool_calls.length>0)for(let e of t.tool_calls)o.push({id:e.id||e.function?.name||c(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:E(e.function?.name||``,e.function?.arguments||``),status:`done`,result:``})}else{let e=t.tool_call_id||t.name||``,n=o.find(t=>t.id===e);if(n){let e=t.content;typeof e!=`string`&&(e=`(non-text result)`),e.length>C&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}s++}r=s-1,a.length>C&&(a=`…(前文已截断)\n${a.slice(-65536)}`);let l=!!a,u=o.length>0;(l||u)&&t.push({id:i,role:`assistant`,content:a,toolCalls:u?o:void 0,status:`done`,createdAt:Date.now()})}}}return t}function E(e,t){try{let n=JSON.parse(t);switch(e){case`run_command`:return String(n.command||``).slice(0,200);case`read_file`:case`write_file`:case`edit_file`:return String(n.path||``);case`list_files`:return String(n.path||`.`);case`search_text`:return String(n.pattern||``);default:return JSON.stringify(n).slice(0,200)}}catch{return t.slice(0,200)}}function D(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result||``)),r.onerror=()=>n(r.error||Error(`FileReader failed`)),r.readAsDataURL(e)})}function O(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function k(){let t=f(),a=r([]),u=r(!1),d=r(b());function p(e){_(e)&&(d.value=e,x(e))}let m=o(new Map),h=r(null),g=r(!1),v=0,y=0,S=new Set;function E(e){return{key:e,sessionId:e.startsWith(w)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1}}function O(e){let t=m.get(e);return t||=(m.set(e,E(e)),m.get(e)),t}let k=e(()=>h.value?m.get(h.value)??null:null),A=e(()=>k.value?.messages??[]),j=e(()=>k.value?.isStreaming??!1),M=e(()=>{let e=a.value.find(e=>e.sessionId===h.value);return _(e?.engine)?e.engine:d.value}),N=e(()=>a.value.some(e=>e.sessionId===h.value)),P=e(()=>k.value?.pendingQuestion??null),F=e(()=>k.value?.answeringQuestion??!1);function I(e){return!!m.get(e)?.isStreaming}function L(e){let n=[...e];for(let e of m.values()){if(!e.sessionId)continue;let r=n.findIndex(t=>t.sessionId===e.sessionId);if(r!==-1){S.delete(e.sessionId),e.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!e.isStreaming&&!S.has(e.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:e.sessionId,title:e.title||l(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:d.value,createdAt:i,updatedAt:i,messageCount:e.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:e.isStreaming})}return n}async function R(){let e=++v,r=t.currentDirectory||``;if(!r){a.value=[],u.value=!1;return}u.value=!0;try{let t=`/api/agent/sessions?cwd=${encodeURIComponent(r)}`,i=await fetch(t).then(e=>e.json());if(e!==v)return;if(!i.success){n.error(i.error||l(`@AGENT:加载会话列表失败`));return}let o=Array.isArray(i.sessions)?i.sessions:[];a.value=L(o)}catch(t){if(e!==v)return;n.error(l(`@AGENT:加载会话列表失败`)+`: `+(t?.message||t))}finally{e===v&&(u.value=!1)}}function z(e,n){let r=new Date().toISOString(),i=a.value.find(t=>t.sessionId===e);if(i){i.isGenerating=!0,i.updatedAt=r;return}a.value=[{sessionId:e,title:n||l(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:d.value,createdAt:r,updatedAt:r,messageCount:1,size:0,isGenerating:!0},...a.value]}function B(e){let t=a.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function V(e){if(m.get(e)?.isStreaming){h.value=e;return}g.value=!0,h.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){n.error(t.error||l(`@AGENT:加载会话失败`));return}let r=O(e);r.sessionId=e,r.messages=T(t.session),t.session?.title&&(r.title=t.session.title)}catch(e){n.error(l(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{g.value=!1}}async function H(e){try{await i.confirm(l(`@AGENT:确认删除该会话`),l(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=m.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}m.delete(e);try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){n.error(t.error||l(`@AGENT:删除失败`));return}a.value=a.value.filter(t=>t.sessionId!==e),h.value===e&&(h.value=null),n.success(l(`@AGENT:已删除`))}catch(e){n.error(l(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function U(e,t){try{let r=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})}).then(e=>e.json());if(!r.success){n.error(r.error||l(`@AGENT:重命名失败`));return}let i=a.value.find(t=>t.sessionId===e);i&&(i.title=t);let o=m.get(e);o&&(o.title=t),n.success(l(`@AGENT:已重命名`))}catch(e){n.error(l(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function W(){h.value=null}async function G(e,r=[],i={}){let a=r.filter(e=>e?.file?.type?.startsWith(`image/`)),u=r.filter(e=>!e?.file?.type?.startsWith(`image/`)),d=[],f=0;for(let e of u){let t=e.file.size||0;if(!(t>10485760)){if(d.length>=10||f+t>20971520)break;f+=t,d.push(e)}}let p=u.filter(e=>!d.includes(e));p.length>0&&n.warning(`${l(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${p.map(e=>e.file.name).join(`、`)}`);let g=O(h.value||`${w}${Date.now()}-${++y}`);if(!e.trim()&&a.length===0&&d.length===0||g.isStreaming)return;let _=(await Promise.allSettled(a.map(e=>D(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),v=(await Promise.allSettled(d.map(async e=>({name:e.file.name||`file`,dataUrl:await D(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));h.value=g.key,g.nonce+=1;let b=g.nonce;g.abortController=new AbortController;let x=g.abortController;g.pendingQuestion=null,g.answeringQuestion=!1;let T={id:c(),role:`user`,content:e,status:`done`,createdAt:Date.now()},E=[...a,...d];E.length>0&&(T.attachments=E.map(e=>({id:e.id,name:e.file.name||`image`,size:e.file.size||0,type:e.file.type||``,preview:e.preview}))),g.messages.push(T);let k=o({id:c(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});g.messages.push(k),g.isStreaming=!0;let A=[],j=g.sessionId,N=!1;try{let n=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({sessionId:g.sessionId||``,userMessage:e,cwd:t.currentDirectory||``,engine:i.engine??M.value,..._.length>0?{images:_}:{},...v.length>0?{attachments:v}:{},...i.openFilePath?{openFilePath:i.openFilePath}:{},...i.dirStatus?.length?{dirStatus:i.dirStatus}:{},...i.dirSummary?{dirSummary:i.dirSummary}:{},...i.allowDispatch?{allowDispatch:!0,dispatchExecutor:i.dispatchExecutor||``,dispatchUseDefaultPrompt:i.dispatchUseDefaultPrompt!==!1}:{}}),signal:x.signal});if(b!==g.nonce)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let r=n.body.getReader(),a=new TextDecoder(`utf-8`),u=``;for(;;){let{value:t,done:n}=await r.read();if(b!==g.nonce)return;if(n)break;u+=a.decode(t,{stream:!0});let i=u.split(`
2
- `);u=i.pop()??``;for(let t of i){let n=t.trim();if(!n.startsWith(`data:`))continue;let r=n.slice(5).trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch{continue}switch(i.type){case`meta`:if(i.sessionId){let t=String(i.sessionId);if(j=t,g.sessionId!==t){let e=g.key;g.sessionId=t,g.key=t,e!==t&&(m.delete(e),m.set(t,g),h.value===e&&(h.value=t))}let n=String(i.title||``).trim()||e.trim().split(`
3
- `)[0].trim().slice(0,40)||l(`@AGENT:无标题`);g.title||=n,z(t,n)}break;case`thinking`:k.reasoning||(k.reasoning=``,k.reasoningStatus=`streaming`),k.reasoning+=String(i.delta||``),k.status=`streaming`;break;case`content`:k.status===`pending`&&(k.status=`streaming`);{let e=String(i.delta||``);k.content+=e;let t=s(k.content);t.reasoning&&(k.reasoning||(k.reasoning=``,k.reasoningStatus=`streaming`),k.reasoning=t.reasoning,k.content=t.content)}break;case`tool_call_start`:{let e=o({id:i.toolCallId||c(),name:i.name||``,argsPreview:i.argsPreview||``,arguments:i.argsPreview||``,status:`running`,result:``});A.push(e),k.toolCalls||=[],k.toolCalls.push(e),k.status===`pending`&&(k.status=`streaming`);break}case`tool_output`:{let e=A.find(e=>e.id===i.toolCallId);if(e){let t=`${e.result||``}${String(i.chunk||``)}`;e.result=t.length>C?`…(前文已截断)\n${t.slice(-65536)}`:t}break}case`tool_result`:{let e=A.find(e=>e.id===i.toolCallId);e&&(e.result=String(i.result||``),e.status=`done`,e.name===`ask_user`&&(g.pendingQuestion=null));break}case`ask_user`:g.pendingQuestion={interactionId:String(i.interactionId||``),question:String(i.question||``),options:Array.isArray(i.options)?i.options.map(e=>String(e)):[],allowFreeText:i.allowFreeText!==!1,multiple:i.multiple===!0};break;case`done`:{let e=i.content||k.content,t=s(e);t.reasoning&&!k.reasoning&&(k.reasoning=t.reasoning),k.content=t.content,k.status=`done`,k.reasoningStatus===`streaming`&&(k.reasoningStatus=`done`);break}case`error`:k.status=`error`,k.error=String(i.error||l(`@AGENT:未知错误`)),k.reasoningStatus===`streaming`&&(k.reasoningStatus=`done`)}}}if(b!==g.nonce)return;k.status===`pending`&&(k.status=`done`)}catch(e){if(b!==g.nonce)return;e?.name===`AbortError`||x.signal.aborted?(N=!0,k.content=(k.content||``)+`
4
-
5
- [`+l(`@AGENT:已停止`)+`]`,k.status=`done`,k.reasoningStatus===`streaming`&&(k.reasoningStatus=`done`)):(k.status=`error`,k.error=e?.message||String(e),n.error(k.error||l(`@AGENT:对话失败`)))}finally{b===g.nonce&&(g.isStreaming=!1,g.pendingQuestion=null,g.answeringQuestion=!1,g.abortController=null),j&&(N&&S.add(j),B(j)),R().catch(()=>{})}}async function K(e){let t=k.value,r=t?.pendingQuestion,i=t?.sessionId,a=(Array.isArray(e)?e:[e]).map(e=>String(e??``).trim()).filter(Boolean);if(!t||!r||!i||!a.length||t.answeringQuestion)return!1;t.answeringQuestion=!0;try{let e=await fetch(`/api/agent/respond`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:i,interactionId:r.interactionId,answer:r.multiple?a:a[0]})}).then(e=>e.json());if(!e.success)throw Error(e.error||l(`@AGENT:回答提交失败`));return t.pendingQuestion=null,!0}catch(e){return n.error(e?.message||l(`@AGENT:回答提交失败`)),!1}finally{t.answeringQuestion=!1}}function q(){let e=k.value;e?.abortController&&(e.abortController.abort(),e.abortController=null)}return{sessions:a,sessionsLoading:u,currentSessionId:h,messages:A,isStreaming:j,sessionLoading:g,pendingQuestion:P,answeringQuestion:F,isSessionGenerating:I,currentEngine:M,pendingEngine:d,isEngineLocked:N,pickEngine:p,loadSessions:R,loadSession:V,deleteSession:H,renameSession:U,newSession:W,sendMessage:G,answerQuestion:K,stop:q}}var A=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%20fill='none'%3e%3crect%20x='2'%20y='6'%20width='27'%20height='23'%20rx='6'%20fill='%235364E8'/%3e%3cpath%20d='M9.419%2012.581a1.3%201.3%200%200%200-1.838%201.838L11.162%2018l-3.581%203.581a1.3%201.3%200%200%200%201.838%201.838l4.5-4.5a1.3%201.3%200%200%200%200-1.838Z'%20fill='%23FFFFFF'/%3e%3crect%20x='15.7'%20y='21.2'%20width='7.6'%20height='2.6'%20rx='1.3'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%20.4%2027.115%204.885%2031.6%207l-4.485%202.115L25%2013.6l-2.115-4.485L18.4%207l4.485-2.115Z'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%202.5%2026.22%205.78%2029.5%207l-3.28%201.22L25%2011.5l-1.22-3.28L20.5%207l3.28-1.22Z'%20fill='%2339D7B5'/%3e%3c/svg%3e`;function j(e){if(!e)return``;try{let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let n=new Date,r=n.getTime()-t.getTime(),i=e=>String(e).padStart(2,`0`);if(t.toDateString()===n.toDateString())return`${i(t.getHours())}:${i(t.getMinutes())}`;if(r<6048e5){let e=Math.floor(r/864e5);return e===0?l(`@AGENT:今天`):`${e}${l(`@AGENT:天前`)}`}return`${t.getFullYear()}-${i(t.getMonth()+1)}-${i(t.getDate())}`}catch{return e}}function M(e,t){return e.map(e=>({id:e.sessionId,title:e.title||l(`@AGENT:无标题`),meta:`${j(e.updatedAt)} · ${e.messageCount??0} ${l(`@AGENT:条`)}`,generatingText:e.isGenerating||t(e.sessionId)?l(`@AGENT:正在生成中...`):``,badge:e.source===`cli`?`CLI`:``,searchText:e.model}))}function N(){return{newConversation:l(`@AGENT:新建会话`),searchPlaceholder:l(`@AGENT:搜索会话...`),empty:l(`@AGENT:暂无会话`),emptyHint:l(`@AGENT:点击上方按钮开始对话`),noResult:l(`@AGENT:未找到匹配的会话`),loading:l(`@AGENT:加载会话中...`),rename:l(`@AGENT:重命名`),delete:l(`@AGENT:删除`),untitled:l(`@AGENT:无标题`)}}var P=`g ai`,F=A;function I(){return{title:l(`@AGENT:等待你的回答`),placeholder:l(`@AGENT:输入回答`),submit:l(`@AGENT:提交回答`)}}export{M as a,h as c,y as d,I as i,m as l,P as n,S as o,N as r,k as s,F as t,v as u};