@lsamien/yaovi 0.1.3 → 0.1.4

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 (59) hide show
  1. package/build-info.json +15 -4
  2. package/desktop/main.mjs +1 -1
  3. package/dist/assets/{AboutDialog-CnNkIRo8.js → AboutDialog-CDpS-zAu.js} +2 -2
  4. package/dist/assets/{AboutDialog-CnNkIRo8.js.map → AboutDialog-CDpS-zAu.js.map} +1 -1
  5. package/dist/assets/{BotAutomationsView-J9Y7Unoq.js → BotAutomationsView-RXBQzdfc.js} +2 -2
  6. package/dist/assets/{BotAutomationsView-J9Y7Unoq.js.map → BotAutomationsView-RXBQzdfc.js.map} +1 -1
  7. package/dist/assets/{BotControlSettingsPanel-CtXD24FZ.js → BotControlSettingsPanel-GQEVHXbw.js} +2 -2
  8. package/dist/assets/{BotControlSettingsPanel-CtXD24FZ.js.map → BotControlSettingsPanel-GQEVHXbw.js.map} +1 -1
  9. package/dist/assets/BotPluginsDialog-HIhXqyGn.js +2 -0
  10. package/dist/assets/{BotPluginsDialog-qRw8dCbX.js.map → BotPluginsDialog-HIhXqyGn.js.map} +1 -1
  11. package/dist/assets/{BotSettingsPanel-DbCMOfAW.js → BotSettingsPanel-Bkqal3lR.js} +3 -3
  12. package/dist/assets/{BotSettingsPanel-DbCMOfAW.js.map → BotSettingsPanel-Bkqal3lR.js.map} +1 -1
  13. package/dist/assets/{ComputerPanel-CI-jDmC3.js → ComputerPanel-Dt73pgTG.js} +2 -2
  14. package/dist/assets/{ComputerPanel-CI-jDmC3.js.map → ComputerPanel-Dt73pgTG.js.map} +1 -1
  15. package/dist/assets/{ComputerViewerView-B76D6Fln.js → ComputerViewerView-ChYgaS9q.js} +2 -2
  16. package/dist/assets/{ComputerViewerView-B76D6Fln.js.map → ComputerViewerView-ChYgaS9q.js.map} +1 -1
  17. package/dist/assets/{ConversationsView-DsuaLKva.js → ConversationsView-DzcDJZh3.js} +88 -88
  18. package/dist/assets/ConversationsView-DzcDJZh3.js.map +1 -0
  19. package/dist/assets/ConversationsView-EdF5AM1T.css +1 -0
  20. package/dist/assets/{LocalVmSettingsPanel-BfXFdMYF.js → LocalVmSettingsPanel-DLbDb5Tq.js} +4 -4
  21. package/dist/assets/{LocalVmSettingsPanel-BfXFdMYF.js.map → LocalVmSettingsPanel-DLbDb5Tq.js.map} +1 -1
  22. package/dist/assets/{ModelNetworkChoice-DB6cLOBw.js → ModelNetworkChoice-Cfyt4Unl.js} +2 -2
  23. package/dist/assets/{ModelNetworkChoice-DB6cLOBw.js.map → ModelNetworkChoice-Cfyt4Unl.js.map} +1 -1
  24. package/dist/assets/{StandaloneDialog-BWUp2Wxo.js → StandaloneDialog-Cte829Ai.js} +2 -2
  25. package/dist/assets/{StandaloneDialog-BWUp2Wxo.js.map → StandaloneDialog-Cte829Ai.js.map} +1 -1
  26. package/dist/assets/{UpdateCheckDialog-CpZSPlUI.js → UpdateCheckDialog-BaMo_M4n.js} +2 -2
  27. package/dist/assets/{UpdateCheckDialog-CpZSPlUI.js.map → UpdateCheckDialog-BaMo_M4n.js.map} +1 -1
  28. package/dist/assets/{UsageView-BhiRCw7p.js → UsageView-CklMPG4n.js} +3 -3
  29. package/dist/assets/{UsageView-BhiRCw7p.js.map → UsageView-CklMPG4n.js.map} +1 -1
  30. package/dist/assets/WorkspaceKnowledgePanel-BdbhD3rO.js +3 -0
  31. package/dist/assets/{WorkspaceKnowledgePanel-D34YxglF.js.map → WorkspaceKnowledgePanel-BdbhD3rO.js.map} +1 -1
  32. package/dist/assets/WorkspaceRoutinesPanel-VpRoMe1x.js +2 -0
  33. package/dist/assets/{WorkspaceRoutinesPanel-Bn-W52Im.js.map → WorkspaceRoutinesPanel-VpRoMe1x.js.map} +1 -1
  34. package/dist/assets/{WorkstreamsView-CH6qDPvj.js → WorkstreamsView-BwZpuuhs.js} +2 -2
  35. package/dist/assets/{WorkstreamsView-CH6qDPvj.js.map → WorkstreamsView-BwZpuuhs.js.map} +1 -1
  36. package/dist/assets/index-C-5Gq82f.css +1 -0
  37. package/dist/assets/{index-DjhQ-RMG.js → index-Cx1SdzRY.js} +18 -18
  38. package/dist/assets/index-Cx1SdzRY.js.map +1 -0
  39. package/dist/assets/{pdf-wqiF06Qz.js → pdf-CoNh_Rmj.js} +2 -2
  40. package/dist/assets/{pdf-wqiF06Qz.js.map → pdf-CoNh_Rmj.js.map} +1 -1
  41. package/dist/index.html +2 -2
  42. package/dist-server/server/remoteAccess/dispatcher.js +5 -1
  43. package/node_modules/@yaovi/remote-core/index.mjs +13 -10
  44. package/node_modules/@yaovi/remote-core/package.json +2 -2
  45. package/node_modules/@yaovi/remote-core/types/remote-core/src/control/recovery.d.ts +1 -1
  46. package/node_modules/@yaovi/remote-core/types/remote-core/src/control/remote.d.ts +2 -0
  47. package/node_modules/@yaovi/remote-core/types/remote-core/src/index.d.ts +1 -0
  48. package/node_modules/@yaovi/remote-core/types/remote-core/src/transport/lan.d.ts +10 -4
  49. package/node_modules/@yaovi/remote-core/types/remote-core/src/transport/packet.d.ts +2 -2
  50. package/package.json +2 -2
  51. package/release.json +3 -3
  52. package/vendor/yaovi-remote-core-0.2.0-remote.18.tgz +0 -0
  53. package/dist/assets/BotPluginsDialog-qRw8dCbX.js +0 -2
  54. package/dist/assets/ConversationsView-DoA0eNiz.css +0 -1
  55. package/dist/assets/ConversationsView-DsuaLKva.js.map +0 -1
  56. package/dist/assets/WorkspaceKnowledgePanel-D34YxglF.js +0 -3
  57. package/dist/assets/WorkspaceRoutinesPanel-Bn-W52Im.js +0 -2
  58. package/dist/assets/index-DjhQ-RMG.js.map +0 -1
  59. package/dist/assets/index-DrIgDgnN.css +0 -1
@@ -1,3 +0,0 @@
1
- import{A as e,B as t,D as n,Et as r,F as i,G as a,H as o,L as s,M as ee,Ot as c,W as te,_ as l,a as u,b as d,d as f,et as p,f as m,m as h,p as g,st as _,t as v,u as y,v as b}from"./_plugin-vue_export-helper-CD0r-vVb.js";import{$ as x,D as S,I as C,i as w,nt as T,o as ne,ot as E,rt as D}from"./index-DjhQ-RMG.js";var O={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},re=d({name:`ChevronForwardOutline`,render:function(e,t){return i(),h(`svg`,O,t[0]||=[f(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`M184 112l144 144l-144 144`},null,-1)])}}),k={class:`memory-files`,"aria-label":`Markdown 记忆文件`},ie={key:0,role:`alert`},ae={key:1,role:`status`},A={class:`file-list`},j=[`disabled`,`onClick`],M=[`disabled`],N=[`disabled`],P=[`disabled`],F={class:`actions`},I=[`disabled`],L=[`disabled`],R=[`disabled`],oe=[`disabled`,`onClick`],z=`/api/app/workspace`,se=v(d({__name:`MemoryFilesPanel`,props:{agentId:{},scope:{},projectId:{}},emits:[`dirty-change`,`changed`],setup(t,{emit:n}){let r=t,ee=n,te=p([]),d=p(),m=p(``),_=p(`memory/notes.md`),v=p(``),y=p(``),b=p(!1),x=p([]),C=0,T=()=>({scope:r.scope,agentId:r.agentId,...r.scope===`project`?{projectId:r.projectId}:{}}),ne=(e={})=>new URLSearchParams({...T(),...e});async function O(e){if(!b.value){b.value=!0,v.value=``,y.value=``;try{await e()}catch(e){v.value=e instanceof Error?e.message:`操作失败`}finally{b.value=!1}}}async function re(){let e=++C;if(!r.agentId||r.scope===`project`&&!r.projectId){te.value=[];return}try{let t=await S(`${z}/memory-files?${ne()}`);e===C&&(te.value=t.files)}catch(t){e===C&&(v.value=String(t))}}async function se(e){await O(async()=>{let t=C,n=await S(`${z}/memory-file?${ne({path:e})}`);t===C&&(d.value=n,m.value=n.content,x.value=[])})}async function B(){d.value&&await O(async()=>{d.value=await S(`/api/app/workspace/memory-file`,{method:`PUT`,body:{...T(),requestId:w(),path:d.value.path,content:m.value,expectedHash:d.value.hash}}),m.value=d.value.content,y.value=`文件已保存,下一轮对话生效。`,ee(`changed`),await re()})}async function V(){await O(async()=>{x.value=(await S(`${z}/memory-file-history?${ne()}`)).revisions.filter(e=>e.path===d.value?.path)})}async function H(e){await O(async()=>{d.value=await S(`/api/app/workspace/memory-file-revert`,{method:`POST`,body:{...T(),requestId:w(),id:e.id,expectedHash:d.value.hash}}),m.value=d.value.content,y.value=`已撤销该次修改。`,await re(),ee(`changed`)})}return o(()=>[r.scope,r.agentId,r.projectId],()=>{d.value=void 0,m.value=``,x.value=[],re()},{immediate:!0}),o(()=>!!d.value&&m.value!==d.value.content,e=>ee(`dirty-change`,e)),e(()=>{C++}),(e,n)=>(i(),h(`section`,k,[n[7]||=f(`h3`,null,`记忆文件`,-1),n[8]||=f(`p`,null,`MEMORY.md 自动加载;主题和日记按需读取。可以直接编辑 Markdown。`,-1),v.value?(i(),h(`p`,ie,c(v.value),1)):g(``,!0),y.value?(i(),h(`p`,ae,c(y.value),1)):g(``,!0),d.value?(i(),h(u,{key:3},[f(`label`,null,[l(c(d.value.path),1),a(f(`textarea`,{"onUpdate:modelValue":n[2]||=e=>m.value=e,disabled:b.value,rows:`16`,spellcheck:`false`,"aria-label":`记忆 Markdown 内容`},null,8,P),[[D,m.value]])]),f(`div`,F,[f(`button`,{disabled:b.value||m.value===d.value.content,onClick:B},` 保存`,8,I),f(`button`,{disabled:b.value,onClick:n[3]||=e=>{d.value=void 0,x.value=[]}},` 取消编辑`,8,L),f(`button`,{disabled:b.value,onClick:V},`修改历史`,8,R)]),(i(!0),h(u,null,s(x.value,e=>(i(),h(`details`,{key:e.id},[f(`summary`,null,c(new Date(e.at).toLocaleString()),1),n[5]||=f(`p`,null,`修改前`,-1),f(`pre`,null,c(e.before),1),n[6]||=f(`p`,null,`修改后`,-1),f(`pre`,null,c(e.after),1),f(`button`,{disabled:b.value||e.afterHash!==d.value.hash||m.value!==d.value.content,onClick:t=>H(e)},` 撤销此修改 `,8,oe)]))),128))],64)):(i(),h(u,{key:2},[f(`div`,A,[(i(!0),h(u,null,s(te.value,e=>(i(),h(`button`,{key:e.path,disabled:b.value,onClick:t=>se(e.path)},c(e.path)+` · `+c(e.bytes)+` B `,9,j))),128))]),f(`form`,{onSubmit:n[1]||=E(e=>se(_.value),[`prevent`])},[f(`label`,null,[n[4]||=l(`新文件路径`,-1),a(f(`input`,{"onUpdate:modelValue":n[0]||=e=>_.value=e,placeholder:`memory/主题.md`,disabled:b.value},null,8,M),[[D,_.value]])]),f(`button`,{disabled:b.value||!t.agentId},`创建或打开`,8,N)],32)],64))]))}}),[[`__scopeId`,`data-v-3820f19a`]]);function B(e){return e.status===`failed`?`投递或执行失败`:e.status===`stopped`?`协作已停止`:e.hasReply?`已收到回复`:e.replyTo?`回复已投递`:{queued:`已投递 · 排队中`,running:`正在处理`,waiting:`等待补充信息`,complete:`执行已结束 · 暂无回复`}[e.status??``]??`协作消息`}function V(e){return{queued:`排队中`,pending:`待执行`,failed:`执行失败`,interrupted:`已中断`,running:`进行中`,review:`待复核`,waiting:`需要补充信息`,blocked:`遇到阻碍`,complete:`已完成`,cancelling:`正在停止`,cancelled:`已停止`}[e]??`状态待确认`}var H={bot_created:`创建了 Bot`,helper_created:`创建了临时助手`,team_created:`组建了团队`,assignment_created:`派发了任务`};function U(e){let t=!!e.replyTo,n=e.status===`failed`?`没成功`:e.status===`stopped`?`已停止`:{queued:`排队中`,running:`处理中`,waiting:`在等补充信息`}[e.status??``]??(e.status===`complete`&&!t?e.hasReply?`已回复`:`处理完了,没有回复`:``),r=n?` · ${n}`:``;return e.direction===`incoming`?{before:``,after:`${t?`回复了`:`发来消息`}${r}`}:t?{before:`已回复`,after:r.slice(1)}:{before:`已请`,after:`帮忙${r}`}}function W(e){return e===`incoming`}function ce(e){let t=[],n=e.coordinatorId?e.name(e.coordinatorId):`负责人`;for(let n of e.activities??[]){let r=n.activity;!r||r.kind===`assignment_created`&&e.assignments.length||t.push({id:`activity:${n.id}`,title:`${r.actorName} ${H[r.kind]} ${r.targetName}`,status:`已记录`,content:r.description,at:n.createdAt})}for(let r of e.assignments){let i=e.name(r.agentId);t.push({id:`assignment:${r.id}:created`,title:`${n} → ${i} · 派发任务`,status:V(r.status),content:[r.title,r.brief].filter(Boolean).join(`
2
- `),at:r.createdAt??0}),r.result&&t.push({id:`assignment:${r.id}:result`,title:`${i} → ${n} · 回传结果`,status:`已回传`,content:`${r.title}\n${r.result}`,at:r.updatedAt??r.createdAt??0}),r.review&&t.push({id:`assignment:${r.id}:review`,title:`${n} → ${i} · 复核意见`,status:V(r.status),content:r.review,at:r.updatedAt??r.createdAt??0})}for(let n of e.peers)t.push({id:`peer:${n.id}`,title:`${n.fromName||e.name(n.fromAgentId)} → ${n.targetName||(n.toAgentId?e.name(n.toAgentId):`群聊`)}`,status:B(n),content:n.content,at:n.createdAt??0,error:n.error,peer:n});return[...new Map(t.map(e=>[e.id,e])).values()].sort((e,t)=>e.at-t.at)}var le={key:0},ue={key:1,"aria-label":`记忆与项目分类`},de=[`aria-pressed`,`onClick`],fe=[`aria-busy`],pe={key:0,class:`actions`},me={key:1,role:`alert`,class:`knowledge-error`},he={key:0,class:`project-heading`},ge=[`value`],_e=[`value`,`disabled`],ve={key:0,class:`check`},ye={class:`actions`},be=[`disabled`],xe={key:0,class:`project-list`,"aria-label":`项目列表`},Se=[`aria-pressed`,`onClick`],Ce={key:1,class:`project-details`,"aria-label":`当前项目详情`},we={key:0,class:`project-description`},Te={class:`project-detail-row`},Ee={class:`project-members`},De={key:0},Oe={class:`project-detail-row`},ke={class:`project-detail-row`},Ae={class:`project-detail-actions`},je={class:`actions`},Me=[`onClick`],Ne=[`onClick`],Pe={key:5,class:`empty`},Fe={class:`scope-note`},Ie={class:`pre-wrap`},Le={key:0},Re={key:1,class:`knowledge-error`},ze=[`disabled`,`onClick`],Be={key:0,class:`empty`},Ve={class:`filters`},He={key:0},Ue=[`disabled`],We=[`value`],Ge={key:1},Ke=[`disabled`],qe=[`value`],Je={class:`scope-note`},Ye={key:0,class:`check`},Xe=[`checked`,`disabled`],Ze={key:1,role:`status`},Qe={key:2,class:`actions`},$e=[`disabled`],et=[`href`],tt={key:0},nt=[`value`],rt={class:`actions`},it=[`disabled`],at={class:`pre-wrap`},ot={key:0,role:`status`},st={key:1},ct=[`href`],lt={key:0},ut={class:`actions`},dt=[`onClick`],ft=[`onClick`,`disabled`],pt=[`onClick`,`disabled`],mt={key:4,class:`actions`},ht={role:`status`},gt=[`disabled`],_t=[`disabled`],vt={key:5,class:`empty`},yt={key:6,class:`knowledge-editor`},bt={key:7},xt={key:0},St={key:1},Ct=[`disabled`,`onClick`],G=v(d({__name:`WorkspaceKnowledgePanel`,props:{agents:{},conversations:{},conversationId:{},taskId:{},assignments:{},goal:{},revision:{},embedded:{type:Boolean},initialTab:{},selectedAgentId:{},hideAgentControls:{type:Boolean}},emits:[`changed`,`dirty-change`],setup(d,{expose:v,emit:O}){let k=d,ie=O,ae=p(),A=p(!1),j=p(!1),M=p(``),N=p(`agent`),P=p(``),F=p(``),I=p(``),L=p([]),R=p([]),oe=p([]),z=p([]),B=p([]),V=p(),H=p(),U=p(0),W=p(),G=p(!1),K=p(!1),wt=p([]),q=0,Tt,J=y(()=>k.agents.filter(e=>!e.archived&&!e.temporaryGoalId)),Et=y(()=>k.agents.find(e=>e.id===P.value)),Y=y(()=>L.value.find(e=>e.id===F.value)),X=y(()=>[`agent`,`user`,`project`].includes(N.value)?N.value:`agent`),Z=e=>k.agents.find(t=>t.id===e)?.name??`原贡献者`,Dt=y(()=>ce({peers:oe.value,activities:wt.value,assignments:k.assignments??[],coordinatorId:k.goal?.coordinatorId,name:Z})),Ot=()=>new URLSearchParams({scope:X.value,...N.value===`agent`&&P.value?{agentId:P.value}:{},...N.value===`project`&&F.value?{projectId:F.value}:{},...I.value?{search:I.value}:{}}).toString(),kt={queued:`已排队`,pending:`待提炼`,running:`处理中`,waiting:`等待同伴`,complete:`已完成`,failed:`失败`,stopped:`已停止`,skipped:`已跳过`},At={source_missing:`找不到对应的来源消息`,quote_mismatch:`引用与原文不一致`,sensitive_content:`包含凭据等敏感内容`,project_unbound:`项目记忆缺少关联项目`,user_not_explicit:`缺少用户明确表达的长期信息`,forgotten:`已遗忘的内容或来源不再保存`,stale:`推理期间记忆已更新,本次旧提炼结果未应用`};function jt(e){if(e.status!==`complete`)return kt[e.status]??e.status;let t=e.result;return t?t.extractedCount?t.writtenCount?`已保存 ${t.writtenCount} 条记忆`:t.replayedCount?`重试已确认 ${t.replayedCount} 条记录`:t.duplicateCount?`未新增记忆,已有相同内容`:`候选记忆均未保存`:`本轮没有可记录内容`:`已结束(旧记录未统计保存结果)`}function Mt(e){return Object.entries(e.result?.skippedReasons??{}).filter(([,e])=>e>0).map(([e,t])=>`${At[e]??`其他原因`}:${t} 条`)}async function Q(e=!1){if(e&&G.value&&N.value!==`collaboration`)return;let t=++q;e||(M.value=``);try{let e=await S(`/api/app/workspace/projects`);if(t!==q||!A.value)return;if(L.value=e.projects,F.value||=L.value.find(e=>!e.archived)?.id??``,N.value===`collaboration`){let[e,n]=await Promise.all([S(`/api/app/workspace/collaboration?${new URLSearchParams({...k.conversationId?{conversationId:k.conversationId}:{},...k.taskId?{taskId:k.taskId}:{}})}`),k.conversationId?S(`/api/app/conversations/${encodeURIComponent(k.conversationId)}/activities${k.taskId?`?taskId=${encodeURIComponent(k.taskId)}`:``}`):Promise.resolve({messages:[]})]);t===q&&(oe.value=e.messages,wt.value=n.messages)}else if(N.value!==`projects`&&(N.value!==`project`||F.value)){let e=await S(`/api/app/workspace/memories?${Ot()}`);t===q&&(R.value=e.memories,U.value=e.total??e.memories.length,W.value=e.nextOffset,G.value=!1)}else R.value=[],U.value=0,W.value=void 0,G.value=!1;if(P.value){let e=await S(`/api/app/workspace/memory-jobs?agentId=${P.value}`);t===q&&(z.value=e.jobs)}}catch(e){t===q&&(M.value=String(e))}}async function Nt(){if(j.value||W.value===void 0)return;let e=q,t=Ot(),n=W.value;j.value=!0,M.value=``;try{let r=await S(`/api/app/workspace/memories?${t}&offset=${n}&limit=100`);if(e!==q||!A.value||t!==Ot())return;let i=new Set(R.value.map(e=>`${e.scope}:${e.agentId}:${e.id}`));R.value.push(...r.memories.filter(e=>!i.has(`${e.scope}:${e.agentId}:${e.id}`))),U.value=r.total,W.value=r.nextOffset,G.value=!0}catch(t){e===q&&(M.value=String(t))}finally{j.value=!1}}async function Pt(e=`agent`,t,r){N.value=e,P.value=t??J.value[0]?.id??``,F.value=r??``,A.value=!0,V.value=void 0,H.value=void 0,B.value=[],I.value=``,await n(),k.embedded||ae.value?.showModal(),await Q(),clearInterval(Tt),Tt=setInterval(()=>{!j.value&&!V.value&&!H.value&&Q(!0)},5e3)}function Ft(){if(K.value){M.value=`请先保存文件或取消编辑。`;return}A.value=!1,q++,clearInterval(Tt),k.embedded||ae.value?.close()}function It(e){K.value||(N.value=e,V.value=void 0,H.value=void 0,B.value=[],Q())}async function $(e){if(!j.value){j.value=!0,M.value=``;try{await e(),ie(`changed`),await Q()}catch(e){M.value=String(e)}finally{j.value=!1}}}function Lt(e){B.value=[],V.value=e?{id:e.id,expectedRevision:e.revision,agentId:e.agentId,content:e.content,tier:e.tier}:{agentId:P.value||J.value[0]?.id||``,content:``,tier:`log`}}async function Rt(){let e=V.value;if(!e?.content.trim()){M.value=`请输入需要记住的事实`;return}await $(async()=>{await S(`/api/app/workspace/memories`,{method:`POST`,body:{requestId:w(),scope:X.value,...X.value===`project`?{projectId:F.value}:{},...e}}),V.value=void 0})}async function zt(e){await $(async()=>{await S(`/api/app/workspace/memories/forget`,{method:`POST`,body:{requestId:w(),scope:e.scope,agentId:e.agentId,...e.projectId?{projectId:e.projectId}:{},id:e.id,expectedRevision:e.revision}})})}async function Bt(e){let t=new URLSearchParams({scope:e.scope,agentId:e.agentId,...e.projectId?{projectId:e.projectId}:{}});await $(async()=>{B.value=(await S(`/api/app/workspace/memories/${e.id}/revisions?${t}`)).revisions})}function Vt(e){H.value=e?{...e,memberIds:[...e.memberIds],groupIds:[...e.groupIds]}:{id:``,name:``,description:``,memberIds:[],groupIds:[],revision:0,archived:!1,createdAt:0,updatedAt:0}}async function Ht(){let e=H.value;if(!e?.name.trim()){M.value=`请输入项目名称`;return}await $(async()=>{let t=await S(`/api/app/workspace/projects`,{method:`POST`,body:{requestId:w(),...e.id?{id:e.id,expectedRevision:e.revision}:{},name:e.name,description:e.description,memberIds:e.memberIds,groupIds:e.groupIds,archived:e.archived}});F.value=t.project.id,H.value=void 0})}async function Ut(e,t){await $(async()=>{await S(`/api/app/agents/${P.value}`,{method:`PATCH`,body:{[e]:t}})})}return e(()=>{q++,clearInterval(Tt)}),ee(()=>{k.embedded&&Pt(k.initialTab??`projects`,k.selectedAgentId)}),o(()=>k.initialTab,e=>{k.embedded&&e&&It(e)}),o(()=>k.revision,()=>{A.value&&!j.value&&!V.value&&!H.value&&Q(!0)}),o(()=>[k.conversationId,k.taskId],()=>{q++,oe.value=[],wt.value=[],A.value&&N.value===`collaboration`&&Q()}),o(()=>K.value||!!V.value||!!H.value,e=>ie(`dirty-change`,e)),v({open:Pt,close:Ft}),(e,n)=>(i(),m(t(d.embedded?`section`:`dialog`),{ref_key:`dialog`,ref:ae,class:r([`knowledge-dialog`,{"knowledge-dialog--embedded":d.embedded}]),"aria-labelledby":d.embedded?void 0:`knowledge-title`,onCancel:E(Ft,[`prevent`]),onClose:n[27]||=e=>A.value=!1},{default:te(()=>[d.embedded?g(``,!0):(i(),h(`header`,le,[n[28]||=f(`div`,null,[f(`h2`,{id:`knowledge-title`},`Bot 记忆与协作`),f(`p`,null,`管理长期事实、项目和同伴请求`)],-1),f(`button`,{type:`button`,onClick:Ft,"aria-label":`关闭记忆与协作`},`关闭`)])),d.embedded?g(``,!0):(i(),h(`nav`,ue,[(i(),h(u,null,s([[`agent`,`Bot 记忆`],[`user`,`用户记忆`],[`projects`,`项目`],[`project`,`项目记忆`],[`collaboration`,`协作`]],e=>f(`button`,{key:e[0],"aria-pressed":N.value===e[0],onClick:t=>It(e[0])},c(e[1]),9,de)),64))])),f(`div`,{class:`knowledge-body`,"aria-busy":j.value},[d.embedded&&N.value===`project`?(i(),h(`div`,pe,[f(`button`,{type:`button`,onClick:n[0]||=e=>It(`projects`)},`返回项目`),n[29]||=f(`h3`,null,`项目记忆`,-1)])):g(``,!0),M.value?(i(),h(`p`,me,c(M.value),1)):g(``,!0),N.value===`projects`?(i(),h(u,{key:2},[d.embedded?(i(),h(`div`,he,[n[30]||=f(`div`,null,[f(`h3`,null,`项目`),f(`p`,null,`让同一项目的 Bot 共享决策与约定。`)],-1),H.value?g(``,!0):(i(),h(`button`,{key:0,type:`button`,class:`project-primary`,onClick:n[1]||=e=>Vt()},`新建项目`))])):H.value?g(``,!0):(i(),h(`button`,{key:1,onClick:n[2]||=e=>Vt()},`新建项目`)),H.value?(i(),h(`form`,{key:2,class:`knowledge-editor`,onSubmit:E(Ht,[`prevent`])},[f(`h3`,null,c(H.value.id?`编辑项目`:`新建项目`),1),f(`label`,null,[n[31]||=l(`名称`,-1),a(f(`input`,{"onUpdate:modelValue":n[3]||=e=>H.value.name=e,required:``,maxlength:`100`},null,512),[[D,H.value.name]])]),f(`label`,null,[n[32]||=l(`说明`,-1),a(f(`textarea`,{"onUpdate:modelValue":n[4]||=e=>H.value.description=e,rows:`3`,maxlength:`16000`},null,512),[[D,H.value.description]])]),f(`fieldset`,null,[n[33]||=f(`legend`,null,`项目成员`,-1),(i(!0),h(u,null,s(J.value,e=>(i(),h(`label`,{key:e.id,class:`check`},[a(f(`input`,{"onUpdate:modelValue":n[5]||=e=>H.value.memberIds=e,type:`checkbox`,value:e.id},null,8,ge),[[x,H.value.memberIds]]),l(c(e.name),1)]))),128))]),f(`fieldset`,null,[n[34]||=f(`legend`,null,`关联群聊`,-1),n[35]||=f(`p`,null,`群内所有 Bot 需要先加入此项目。`,-1),(i(!0),h(u,null,s(d.conversations.filter(e=>e.kind===`group`&&!e.archived),e=>(i(),h(`label`,{key:e.id,class:`check`},[a(f(`input`,{"onUpdate:modelValue":n[6]||=e=>H.value.groupIds=e,type:`checkbox`,value:e.id,disabled:e.memberIds.some(e=>!H.value.memberIds.includes(e))||!!e.projectId&&e.projectId!==H.value.id},null,8,_e),[[x,H.value.groupIds]]),l(c(e.name),1)]))),128))]),H.value.id?(i(),h(`label`,ve,[a(f(`input`,{"onUpdate:modelValue":n[7]||=e=>H.value.archived=e,type:`checkbox`},null,512),[[x,H.value.archived]]),n[36]||=l(`归档项目`,-1)])):g(``,!0),f(`div`,ye,[f(`button`,{type:`submit`,disabled:j.value},`保存项目`,8,be),f(`button`,{type:`button`,onClick:n[8]||=e=>H.value=void 0},`取消`)])],32)):g(``,!0),d.embedded&&!H.value?(i(),h(u,{key:3},[L.value.length?(i(),h(`div`,xe,[(i(!0),h(u,null,s(L.value,e=>(i(),h(`button`,{key:e.id,type:`button`,"aria-pressed":F.value===e.id,onClick:t=>F.value=e.id},[b(C,{name:`files`,size:21}),f(`span`,null,[f(`strong`,null,c(e.name)+c(e.archived?` · 已归档`:``),1),f(`small`,null,c(e.memberIds.length)+` 位 Bot · `+c(e.groupIds.length)+` 个群聊`,1)]),b(_(re),{class:`project-chevron`,"aria-hidden":`true`})],8,Se))),128))])):g(``,!0),Y.value?(i(),h(`section`,Ce,[f(`h3`,null,c(Y.value.name),1),Y.value.description?(i(),h(`p`,we,c(Y.value.description),1)):g(``,!0),f(`div`,Te,[n[37]||=f(`span`,null,`项目成员`,-1),f(`div`,Ee,[(i(!0),h(u,null,s(Y.value.memberIds,e=>(i(),h(`span`,{key:e},[b(ne,{name:Z(e),avatar:d.agents.find(t=>t.id===e)?.avatar||``,size:24},null,8,[`name`,`avatar`]),l(c(Z(e)),1)]))),128)),Y.value.memberIds.length?g(``,!0):(i(),h(`small`,De,`尚无成员`))])]),f(`div`,Oe,[n[38]||=f(`span`,null,`关联群聊`,-1),f(`div`,null,c(Y.value.groupIds.map(e=>d.conversations.find(t=>t.id===e)?.name??`原群聊`).join(`、`)||`尚未关联群聊`),1)]),f(`div`,ke,[n[39]||=f(`span`,null,`项目记忆`,-1),f(`div`,null,[f(`button`,{type:`button`,onClick:n[9]||=e=>It(`project`)},`查看记忆`)])]),f(`div`,Ae,[f(`button`,{type:`button`,class:`project-primary`,onClick:n[10]||=e=>Vt(Y.value)},`编辑项目`)])])):g(``,!0)],64)):d.embedded?g(``,!0):(i(!0),h(u,{key:4},s(L.value,e=>(i(),h(`article`,{key:e.id},[f(`h3`,null,c(e.name)+c(e.archived?` · 已归档`:``),1),f(`p`,null,c(e.description||`暂无说明`),1),f(`small`,null,c(e.memberIds.map(e=>Z(e)).join(`、`)||`尚无成员`)+` · `+c(e.groupIds.length)+` 个群`,1),f(`div`,je,[f(`button`,{onClick:t=>Vt(e)},`编辑`,8,Me),f(`button`,{onClick:t=>{F.value=e.id,It(`project`)}},`查看记忆`,8,Ne)])]))),128)),!L.value.length&&!H.value?(i(),h(`p`,Pe,`创建项目后,多个群可以共享该项目的决策和约定。`)):g(``,!0)],64)):N.value===`collaboration`?(i(),h(u,{key:3},[f(`p`,Fe,c(d.taskId?`当前话题`:`当前聊天`)+` · `+c(Dt.value.length)+` 条协作记录`,1),(i(!0),h(u,null,s(Dt.value,e=>(i(),h(`article`,{key:e.id},[f(`details`,null,[f(`summary`,null,c(e.title)+` · `+c(e.status),1),f(`p`,Ie,c(e.content),1),e.at?(i(),h(`small`,Le,c(new Date(e.at).toLocaleString()),1)):g(``,!0),e.error?(i(),h(`p`,Re,c(e.error),1)):g(``,!0)]),e.peer&&[`queued`,`running`,`waiting`].includes(e.peer.status)?(i(),h(`button`,{key:0,disabled:j.value,onClick:t=>$(async()=>{await _(S)(`/api/app/workspace/collaboration/${encodeURIComponent(e.peer.id)}/stop`,{method:`POST`})})},`停止此次协作`,8,ze)):g(``,!0)]))),128)),Dt.value.length?g(``,!0):(i(),h(`p`,Be,`暂无协作记录。你可以在聊天中让 Bot 联系同伴,或派发任务。`))],64)):(i(),h(u,{key:4},[P.value&&(X.value!==`project`||F.value)?(i(),m(se,{key:0,"agent-id":P.value,scope:X.value,"project-id":F.value,onDirtyChange:n[11]||=e=>K.value=e,onChanged:n[12]||=e=>{ie(`changed`),Q()}},null,8,[`agent-id`,`scope`,`project-id`])):g(``,!0),f(`div`,Ve,[[`agent`,`user`,`project`].includes(N.value)&&!d.selectedAgentId?(i(),h(`label`,He,[n[40]||=l(`记忆贡献 Bot`,-1),a(f(`select`,{disabled:K.value,"onUpdate:modelValue":n[13]||=e=>P.value=e,onChange:n[14]||=e=>{V.value=void 0,Q()}},[(i(!0),h(u,null,s(J.value,e=>(i(),h(`option`,{key:e.id,value:e.id},c(e.name),9,We))),128))],40,Ue),[[T,P.value]])])):g(``,!0),N.value===`project`?(i(),h(`label`,Ge,[n[41]||=l(`项目`,-1),a(f(`select`,{disabled:K.value,"onUpdate:modelValue":n[15]||=e=>F.value=e,onChange:n[16]||=e=>{V.value=void 0,Q()}},[(i(!0),h(u,null,s(L.value,e=>(i(),h(`option`,{key:e.id,value:e.id},c(e.name),9,qe))),128))],40,Ke),[[T,F.value]])])):g(``,!0),f(`form`,{onSubmit:n[18]||=E(e=>Q(),[`prevent`])},[f(`label`,null,[n[42]||=l(`搜索记忆`,-1),a(f(`input`,{"onUpdate:modelValue":n[17]||=e=>I.value=e,type:`search`,placeholder:`搜索事实、偏好或决策`},null,512),[[D,I.value]])]),n[43]||=f(`button`,{type:`submit`},`搜索`,-1)],32)]),f(`p`,Je,c(N.value===`agent`?`仅此 Bot 使用,可跨单聊和群聊延续。`:N.value===`user`?`同一账号的 Bot 共享,按贡献者保存。`:`仅「${Y.value?.name??`当前项目`}」成员读取。`),1),N.value===`agent`&&Et.value?(i(),h(u,{key:1},[d.hideAgentControls?g(``,!0):(i(),h(`label`,Ye,[f(`input`,{type:`checkbox`,checked:Et.value.memoryEnabled!==!1,disabled:j.value,onChange:n[19]||=e=>Ut(`memoryEnabled`,e.target.checked)},null,40,Xe),n[44]||=l(`自动记录长期事实`,-1)])),Et.value.memoryStatus===`upgrade_required`?(i(),h(`p`,Ze,`执行节点需要升级后才能启用隔离记忆;已保存的文件仍可管理。`)):g(``,!0)],64)):g(``,!0),N.value!==`project`||F.value?(i(),h(`div`,Qe,[f(`button`,{onClick:n[20]||=e=>Lt(),disabled:!J.value.length},`添加记忆`,8,$e),f(`a`,{href:`/api/app/workspace/memory-export?${Ot()}`,download:`bot-memory.md`},`导出 Markdown`,8,et)])):g(``,!0),V.value?(i(),h(`form`,{key:3,class:`knowledge-editor`,onSubmit:E(Rt,[`prevent`])},[f(`h3`,null,c(V.value.id?`编辑记忆`:`添加记忆`),1),!V.value.id&&N.value!==`agent`?(i(),h(`label`,tt,[n[45]||=l(`贡献 Bot`,-1),a(f(`select`,{"onUpdate:modelValue":n[21]||=e=>V.value.agentId=e},[(i(!0),h(u,null,s(J.value.filter(e=>N.value!==`project`||Y.value?.memberIds.includes(e.id)),e=>(i(),h(`option`,{key:e.id,value:e.id},c(e.name),9,nt))),128))],512),[[T,V.value.agentId]])])):g(``,!0),f(`label`,null,[n[46]||=l(`事实`,-1),a(f(`textarea`,{"onUpdate:modelValue":n[22]||=e=>V.value.content=e,required:``,rows:`4`,maxlength:`2000`},null,512),[[D,V.value.content]])]),f(`label`,null,[n[48]||=l(`类别`,-1),a(f(`select`,{"onUpdate:modelValue":n[23]||=e=>V.value.tier=e},[...n[47]||=[f(`option`,{value:`profile`},`长期事实`,-1),f(`option`,{value:`log`},`历史记录`,-1),f(`option`,{value:`note`},`补充笔记`,-1)]],512),[[T,V.value.tier]])]),f(`div`,rt,[f(`button`,{type:`submit`,disabled:j.value},`保存`,8,it),f(`button`,{type:`button`,onClick:n[24]||=e=>V.value=void 0},`取消`)])],32)):g(``,!0),(i(!0),h(u,null,s(R.value,e=>(i(),h(`article`,{key:`${e.scope}:${e.agentId}:${e.id}`},[f(`p`,at,c(e.content),1),e.conflict?(i(),h(`p`,ot,`同主题有不同贡献,请核对来源。`)):g(``,!0),f(`small`,null,c(Z(e.agentId))+` · `+c(e.origin===`manual`?`用户维护`:e.origin===`explicit`?`明确保存`:`自动提炼`)+` · `+c(new Date(e.updatedAt).toLocaleString())+` · 版本 `+c(e.revision),1),e.sources.length?(i(),h(`details`,st,[n[49]||=f(`summary`,null,`查看来源`,-1),(i(!0),h(u,null,s(e.sources,e=>(i(),h(`p`,{key:e.messageId},[f(`a`,{href:`/conversations/${e.conversationId}${e.taskId?`?taskId=${e.taskId}`:``}`},c(e.quote||`查看原话题`),9,ct),e.at?(i(),h(`small`,lt,` · 来源 `+c(new Date(e.at).toLocaleString()),1)):g(``,!0)]))),128))])):g(``,!0),f(`div`,ut,[f(`button`,{onClick:t=>Lt(e)},`编辑`,8,dt),f(`button`,{onClick:t=>Bt(e),disabled:j.value},`修订记录`,8,ft),f(`button`,{onClick:t=>zt(e),disabled:j.value},`遗忘`,8,pt)])]))),128)),R.value.length?(i(),h(`div`,mt,[f(`small`,ht,`已显示 `+c(R.value.length)+` / `+c(U.value)+` 条`,1),W.value===void 0?g(``,!0):(i(),h(`button`,{key:0,disabled:j.value,onClick:Nt},`加载更多记忆`,8,gt)),G.value?(i(),h(`button`,{key:1,disabled:j.value,onClick:n[25]||=e=>Q()},`刷新结果`,8,_t)):g(``,!0)])):g(``,!0),!R.value.length&&!V.value?(i(),h(`p`,vt,`暂无记忆。可手动添加,也可在对话中说明需要长期记住的事实。`)):g(``,!0),B.value.length?(i(),h(`section`,yt,[n[50]||=f(`h3`,null,`修订记录`,-1),(i(!0),h(u,null,s(B.value,e=>(i(),h(`article`,{key:e.id},[f(`small`,null,`版本 `+c(e.revision)+` · `+c(e.operation===`forget`?`遗忘`:`保存`)+` · `+c(new Date(e.at).toLocaleString()),1),f(`p`,null,c(e.after?.content??e.before?.content),1)]))),128)),f(`button`,{onClick:n[26]||=e=>B.value=[]},`收起`)])):g(``,!0),N.value===`agent`&&z.value.length?(i(),h(`details`,bt,[n[51]||=f(`summary`,null,`后台提炼记录`,-1),(i(!0),h(u,null,s(z.value,e=>(i(),h(`article`,{key:e.id},[f(`small`,null,c(new Date(e.createdAt).toLocaleString())+` · `+c(jt(e)),1),e.result?(i(),h(`p`,xt,`本次提炼 `+c(e.result.extractedCount)+` 条 · 新增保存 `+c(e.result.writtenCount)+` 条 · 重复 `+c(e.result.duplicateCount)+` 条 · 重试确认 `+c(e.result.replayedCount)+` 条`,1)):g(``,!0),(i(!0),h(u,null,s(Mt(e),e=>(i(),h(`p`,{key:e},c(e),1))),128)),e.error?(i(),h(`p`,St,c(e.error),1)):g(``,!0),e.status===`failed`?(i(),h(`button`,{key:2,disabled:j.value,onClick:t=>$(async()=>{await _(S)(`/api/app/workspace/memory-jobs/${e.id}/retry`,{method:`POST`})})},`重试`,8,Ct)):g(``,!0)]))),128))])):g(``,!0)],64))],8,fe)]),_:1},40,[`class`,`aria-labelledby`]))}}),[[`__scopeId`,`data-v-454b8349`]]);export{U as a,V as i,H as n,se as o,W as r,re as s,G as t};
3
- //# sourceMappingURL=WorkspaceKnowledgePanel-D34YxglF.js.map
@@ -1,2 +0,0 @@
1
- import{A as e,D as t,Et as n,F as r,G as i,H as a,L as o,Ot as s,Q as ee,W as te,_ as c,a as l,b as u,d,et as f,f as p,m,o as ne,p as h,st as g,t as _,u as v,v as y,z as re}from"./_plugin-vue_export-helper-CD0r-vVb.js";import{$ as ie,D as b,I as x,i as ae,it as oe,nt as S,ot as C,rt as w}from"./index-DjhQ-RMG.js";var se=[`telegram`,`feishu`,`dingtalk`,`wecom`,`slack`,`discord`,`email`,`signal`,`whatsapp`],ce={telegram:`Telegram`,feishu:`飞书`,dingtalk:`钉钉`,wecom:`企业微信`,slack:`Slack`,discord:`Discord`,email:`Email`,signal:`Signal`,whatsapp:`WhatsApp`},le={key:0,class:`home-routine-heading`},ue={key:1,class:`routine-overview`},de={class:`overview-title`},fe={class:`overview-actions`},pe={key:2,class:`error-box`,role:`alert`},me={key:3,class:`empty-state`},he=[`aria-label`],ge={class:`card-heading`},_e=[`onClick`],ve={key:0,class:`next-run`},ye={class:`latest-row`},be={key:0},xe={key:1,class:`muted`},Se=[`aria-label`,`onClick`],Ce={key:1,class:`result-preview failure`},we={class:`logs-heading`},Te={class:`log-filters`},Ee=[`value`],De={key:0,class:`scope-hint`},Oe={key:1,class:`error-box`,role:`alert`},ke={key:2,class:`empty-state`},Ae={key:0,class:`failure`},je={key:1},Me=[`open`,`aria-label`],Ne={class:`editor-body`},Pe={key:0,class:`error-box`,role:`alert`},Fe=[`value`],Ie=[`value`],Le=[`value`],Re={class:`schedule-grid`},ze={key:0},Be={key:1},Ve={key:2},He={key:1},Ue=[`value`],We={key:0,class:`secondary-actions`},Ge=[`disabled`],Ke=[`disabled`],qe=[`disabled`],Je={class:`save-actions`},Ye=[`disabled`],Xe=[`disabled`],T=_(u({__name:`WorkspaceRoutinesPanel`,props:{agentId:{},editorOnly:{type:Boolean},home:{type:Boolean},inline:{type:Boolean}},emits:[`changed`,`executed`,`editing-change`],setup(u,{expose:_,emit:T}){let E=u,D=T,O=f([]),k=f([]),A=f(null),j=f(!1),M=f(``),N=f(!1),P=f([]),F=ee({deliver:``,deviceHost:``,name:``,prompt:``,enabled:!0,kind:`daily`,time:`09:00`,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,everyMinutes:60,at:``,weekdays:[1,2,3,4,5]}),I={queued:`排队中`,running:`执行中`,waiting:`等待处理`,complete:`已完成`,failed:`失败`,interrupted:`已停止`,uncertain:`状态待确认`,skipped:`已跳过`},L=f(`list`),R=f(``),z=f(``),B=f(`all`),V=f(),Ze=v(()=>[...O.value].sort((e,t)=>Number(t.enabled)-Number(e.enabled)||(e.nextAt??1/0)-(t.nextAt??1/0)||e.name.localeCompare(t.name))),H=v(()=>O.value.find(e=>e.id===A.value)),U=v(()=>k.value.filter(e=>(!R.value||e.routineId===R.value)&&(B.value===`all`||e.status===B.value)&&(O.value.find(t=>t.id===e.routineId)?.name+` `+(e.error??``)).toLowerCase().includes(z.value.trim().toLowerCase()))),W=e=>e?new Date(e).toLocaleString(`zh-CN`,{hour12:!1}):``,G=e=>k.value.find(t=>t.routineId===e),Qe=e=>e.schedule.kind===`interval`?`每 ${e.schedule.everyMinutes} 分钟`:e.schedule.kind===`once`?W(e.schedule.at):`${e.schedule.kind===`weekly`?`每周 `+(e.schedule.weekdays??[]).map(e=>`日一二三四五六`[e]).join(`、`):`每天`} ${e.schedule.time}`,$e=e=>e.enabled?`已启用`:e.schedule.kind===`once`&&e.lastAt?`已结束`:`已暂停`;function K(e=``){R.value=e,L.value=`logs`,z.value=``,B.value=`all`}a(j,async e=>{D(`editing-change`,e),await t(),E.inline||(e?V.value?.showModal():V.value?.close())});async function et(e){await $(async()=>{await b(X()+`/`+e.id+`/run`,{method:`POST`,body:{requestId:ae()}}),j.value=!1,K(e.id),D(`executed`,e.id)})}let q,J=!1,Y=0,X=()=>`/api/app/agents/${E.agentId}/routines`;async function tt(){let e=Y;try{let t=await b(X());e===Y&&!J&&(O.value=t.routines,k.value=t.runs,M.value=``)}catch(t){e===Y&&!J&&(M.value=t instanceof Error?t.message:`无法读取定时任务`)}}async function nt(){let e=Y;!document.hidden&&!N.value&&await tt(),!J&&e===Y&&(q=setTimeout(nt,5e3))}let Z=0;async function Q(e){let t=++Z,n=E.agentId;A.value=e?.id??null,Object.assign(F,{deliver:e?.deliver?.platform??``,deviceHost:e?.deviceHost??``,name:e?.name??``,prompt:e?.prompt??``,enabled:e?.enabled??!0,kind:e?.schedule.kind??`daily`,time:e?.schedule.time??`09:00`,timezone:e?.schedule.timezone??Intl.DateTimeFormat().resolvedOptions().timeZone,everyMinutes:e?.schedule.everyMinutes??60,at:e?.schedule.at?new Date(e.schedule.at-new Date(e.schedule.at).getTimezoneOffset()*6e4).toISOString().slice(0,16):``,weekdays:e?.schedule.weekdays??[1,2,3,4,5]}),j.value=!0;try{let[r,i]=await Promise.all([b(`/api/app/agents/${n}/desktop-environment`),e?Promise.resolve(void 0):window.yaoviDesktop?.deviceHost?.()]);if(t!==Z||n!==E.agentId||J)return;P.value=r.hosts,!e&&!F.deviceHost&&(F.deviceHost=i?.deviceHost??``)}catch{t===Z&&(P.value=[])}}async function $(e){if(!N.value){N.value=!0,M.value=``;try{await e(),await tt(),D(`changed`)}catch(e){M.value=e instanceof Error?e.message:`定时任务操作失败`}finally{N.value=!1}}}function rt(e){return{name:e.name,prompt:e.prompt,enabled:!e.enabled,deviceHost:e.deviceHost??null,schedule:e.schedule}}async function it(){let e=H.value?.schedule.at,t=e?new Date(e-new Date(e).getTimezoneOffset()*6e4).toISOString().slice(0,16):void 0,n={kind:F.kind,timezone:F.timezone,...F.kind===`once`?{at:t===F.at?e:new Date(F.at).getTime()}:F.kind===`interval`?{everyMinutes:F.everyMinutes}:{time:F.time,...F.kind===`weekly`?{weekdays:F.weekdays}:{}}};await $(async()=>{await b(X()+(A.value?`/`+A.value:``),{method:A.value?`PUT`:`POST`,body:{name:F.name,prompt:F.prompt,enabled:F.enabled,deviceHost:F.deviceHost||null,deliver:F.deliver?{platform:F.deliver,...H.value?.deliver?.platform===F.deliver&&H.value.deliver.chatId?{chatId:H.value.deliver.chatId}:{}}:null,schedule:n}}),j.value=!1})}return a(()=>E.agentId,()=>{Y++,O.value=[],k.value=[],j.value=!1,L.value=`list`,R.value=``,clearTimeout(q),E.editorOnly||nt()},{immediate:!0}),_({edit:e=>{E.editorOnly&&(O.value=e?[e]:[]),Q(e)}}),e(()=>{J=!0,Y++,clearTimeout(q)}),(e,t)=>{let a=re(`RouterLink`);return i((r(),m(`section`,{class:n([`routines`,{home:u.home,inline:u.inline}]),"aria-label":`机器人定时任务`},[L.value===`list`&&!(u.inline&&j.value)?(r(),m(l,{key:0},[u.home?(r(),m(`div`,le,[t[24]||=d(`h2`,null,`定时任务`,-1),d(`button`,{"aria-label":`新建定时任务`,onClick:t[0]||=e=>Q()},[y(x,{name:`plus`,size:20})])])):(r(),m(`div`,ue,[d(`div`,de,[y(x,{name:`calendar`,size:16}),t[25]||=d(`h2`,null,`定时任务`,-1),d(`span`,null,s(O.value.length),1)]),d(`div`,fe,[d(`button`,{class:`primary`,onClick:t[1]||=e=>Q()},[y(x,{name:`plus`,size:14}),t[26]||=c(`新建定时任务`,-1)]),d(`button`,{onClick:t[2]||=e=>K()},[y(x,{name:`file`,size:13}),t[27]||=c(`运行日志`,-1)])])])),M.value?(r(),m(`p`,pe,s(M.value),1)):h(``,!0),O.value.length?h(``,!0):(r(),m(`div`,me,[y(x,{name:`calendar`,size:22}),t[28]||=d(`p`,null,`还没有定时任务`,-1),t[29]||=d(`small`,null,`为这个机器人安排定期执行的工作。`,-1)])),(r(!0),m(l,null,o(Ze.value,e=>(r(),m(`article`,{key:e.id,class:`routine-card`,"aria-label":e.name},[d(`div`,ge,[d(`button`,{class:`routine-title`,onClick:t=>Q(e)},[d(`h3`,null,s(e.name),1),d(`span`,null,s(Qe(e))+` · `+s(e.schedule.timezone),1)],8,_e),d(`span`,{class:n([`state-pill`,{enabled:e.enabled}])},s($e(e)),3)]),e.enabled&&e.nextAt?(r(),m(`p`,ve,`下次 `+s(W(e.nextAt)),1)):h(``,!0),d(`div`,ye,[G(e.id)?(r(),m(`div`,be,[d(`span`,{class:n({failure:G(e.id)?.status===`failed`})},`最近执行:`+s(I[G(e.id).status]),3),d(`small`,null,s(W(G(e.id).startedAt)),1)])):(r(),m(`span`,xe,`尚未执行`)),d(`button`,{"aria-label":`查看`+e.name+`的运行日志`,onClick:t=>K(e.id)},[y(x,{name:`file`,size:12}),t[30]||=c(`日志`,-1)],8,Se)]),G(e.id)?.error?(r(),m(`p`,Ce,s(G(e.id).error),1)):h(``,!0)],8,he))),128))],64)):h(``,!0),u.home&&L.value===`list`&&!(u.inline&&j.value)?(r(),m(`button`,{key:1,class:`home-routine-logs`,onClick:t[3]||=e=>K()},[y(x,{name:`file`,size:18}),t[31]||=c(`查看运行记录`,-1)])):h(``,!0),L.value===`logs`&&!(u.inline&&j.value)?(r(),m(l,{key:2},[d(`div`,we,[d(`button`,{class:`back`,"aria-label":`返回定时任务列表`,onClick:t[4]||=e=>L.value=`list`},[y(x,{name:`chevron-left`,size:16})]),t[32]||=d(`div`,null,[d(`h2`,null,`运行日志`),d(`p`,null,`查看每次执行的状态与结果。`)],-1)]),d(`div`,Te,[d(`label`,null,[y(x,{name:`search`,size:14}),i(d(`input`,{"onUpdate:modelValue":t[5]||=e=>z.value=e,"aria-label":`搜索运行日志`,placeholder:`搜索任务或错误`},null,512),[[w,z.value]])]),i(d(`select`,{"onUpdate:modelValue":t[6]||=e=>B.value=e,"aria-label":`筛选执行状态`},[t[33]||=d(`option`,{value:`all`},`全部状态`,-1),(r(),m(l,null,o(I,(e,t)=>d(`option`,{key:t,value:t},s(e),9,Ee)),64))],512),[[S,B.value]])]),R.value?(r(),m(`div`,De,[t[34]||=c(`当前任务的日志`,-1),d(`button`,{onClick:t[7]||=e=>R.value=``},`显示全部`)])):h(``,!0),M.value?(r(),m(`p`,Oe,s(M.value),1)):h(``,!0),U.value.length?h(``,!0):(r(),m(`div`,ke,[y(x,{name:`file`,size:24}),d(`p`,null,s(k.value.length?`没有匹配的执行记录`:`还没有执行记录`),1)])),(r(!0),m(l,null,o(U.value,e=>(r(),m(`details`,{key:e.id,class:`run-card`},[d(`summary`,null,[d(`div`,null,[d(`strong`,null,s(O.value.find(t=>t.id===e.routineId)?.name??`定时任务`),1),d(`small`,null,s(W(e.startedAt))+` · `+s(e.scheduledAt===0?`手动执行`:`定时执行`),1)]),d(`span`,{class:n([`run-state`,{failure:e.status===`failed`,success:e.status===`complete`}])},s(I[e.status]??e.status),3)]),e.error?(r(),m(`p`,Ae,s(e.error),1)):(r(),m(`p`,je,s(e.status===`complete`?`结果已发送到机器人的聊天。`:`执行进度会自动更新。`),1)),e.conversationId?(r(),p(a,{key:2,to:`/conversations/`+e.conversationId},{default:te(()=>[...t[35]||=[c(`查看聊天结果 ↗`,-1)]]),_:1},8,[`to`])):h(``,!0)]))),128))],64)):h(``,!0),(r(),p(ne,{to:`body`,disabled:u.inline},[j.value?(r(),m(`dialog`,{key:0,open:u.inline,ref_key:`dialog`,ref:V,class:`routine-editor`,"aria-label":A.value?`编辑定时任务`:`新建定时任务`,onCancel:t[23]||=C(e=>j.value=!1,[`prevent`])},[d(`form`,{onSubmit:C(it,[`prevent`])},[d(`header`,null,[d(`div`,null,[y(x,{name:`calendar`,size:18}),d(`h2`,null,s(A.value?`编辑定时任务`:`新建定时任务`),1)]),d(`button`,{type:`button`,class:`icon-button`,"aria-label":`关闭定时任务编辑器`,onClick:t[8]||=e=>j.value=!1},[y(x,{name:`close`})])]),d(`div`,Ne,[M.value?(r(),m(`p`,Pe,s(M.value),1)):h(``,!0),d(`label`,null,[t[37]||=c(`任务中的“本机”`,-1),i(d(`select`,{"onUpdate:modelValue":t[9]||=e=>F.deviceHost=e},[t[36]||=d(`option`,{value:``},`未指定,请在任务中点名目标电脑`,-1),(r(!0),m(l,null,o(P.value,e=>(r(),m(`option`,{key:e.id,value:e.id},s(e.id===`local`?`服务器 · `:``)+s(e.name),9,Fe))),128)),F.deviceHost&&!P.value.some(e=>e.id===F.deviceHost)?(r(),m(`option`,{key:0,value:F.deviceHost},`原设备(未连接)`,8,Ie)):h(``,!0)],512),[[S,F.deviceHost]]),t[38]||=d(`small`,null,`固定使用保存的目标,不随查看任务的客户端变化。`,-1)]),d(`label`,null,[t[40]||=c(`同时投递到渠道`,-1),i(d(`select`,{"onUpdate:modelValue":t[10]||=e=>F.deliver=e,"aria-label":`投递到渠道`},[t[39]||=d(`option`,{value:``},`不投递,仅在聊天中`,-1),(r(!0),m(l,null,o(g(se),e=>(r(),m(`option`,{key:e,value:e},s(g(ce)[e])+` 主频道`,9,Le))),128))],512),[[S,F.deliver]]),t[41]||=d(`small`,null,`使用本 Bot 自己的渠道账号;主频道在 Bot 设置 → 渠道中填写。`,-1)]),d(`label`,null,[t[42]||=c(`名称`,-1),i(d(`input`,{"onUpdate:modelValue":t[11]||=e=>F.name=e,required:``,maxlength:`100`,placeholder:`为这项工作命名`},null,512),[[w,F.name]])]),d(`label`,null,[t[43]||=c(`任务内容`,-1),i(d(`textarea`,{"onUpdate:modelValue":t[12]||=e=>F.prompt=e,required:``,maxlength:`24000`,rows:`5`,placeholder:`告诉机器人需要定期完成什么`},null,512),[[w,F.prompt]])]),d(`div`,Re,[d(`label`,null,[t[45]||=c(`重复`,-1),i(d(`select`,{"onUpdate:modelValue":t[13]||=e=>F.kind=e,"aria-label":`重复`},[...t[44]||=[d(`option`,{value:`once`},`仅一次`,-1),d(`option`,{value:`interval`},`固定间隔`,-1),d(`option`,{value:`daily`},`每天`,-1),d(`option`,{value:`weekly`},`每周`,-1)]],512),[[S,F.kind]])]),F.kind===`once`?(r(),m(`label`,ze,[t[46]||=c(`执行时间`,-1),i(d(`input`,{"onUpdate:modelValue":t[14]||=e=>F.at=e,type:`datetime-local`,required:``},null,512),[[w,F.at]])])):F.kind===`interval`?(r(),m(`label`,Be,[t[47]||=c(`间隔(分钟)`,-1),i(d(`input`,{"onUpdate:modelValue":t[15]||=e=>F.everyMinutes=e,type:`number`,min:`1`,max:`525600`,required:``},null,512),[[w,F.everyMinutes,void 0,{number:!0}]])])):(r(),m(`label`,Ve,[t[48]||=c(`执行时间`,-1),i(d(`input`,{"onUpdate:modelValue":t[16]||=e=>F.time=e,type:`time`,required:``},null,512),[[w,F.time]])]))]),F.kind===`weekly`?(r(),m(`fieldset`,He,[t[49]||=d(`legend`,null,`每周`,-1),(r(),m(l,null,o([`日`,`一`,`二`,`三`,`四`,`五`,`六`],(e,n)=>d(`label`,{key:e,class:`check`},[i(d(`input`,{"onUpdate:modelValue":t[17]||=e=>F.weekdays=e,type:`checkbox`,value:n},null,8,Ue),[[ie,F.weekdays]]),c(s(e),1)])),64))])):h(``,!0),d(`label`,null,[t[50]||=c(`时区`,-1),i(d(`input`,{"onUpdate:modelValue":t[18]||=e=>F.timezone=e,required:``,placeholder:`Asia/Shanghai`},null,512),[[w,F.timezone]])]),t[51]||=d(`p`,{class:`editor-note`},`服务端按计划执行,结果回到当前机器人的聊天。`,-1)]),d(`footer`,null,[H.value?(r(),m(`div`,We,[d(`button`,{type:`button`,disabled:N.value,onClick:t[19]||=e=>et(H.value)},`立即执行`,8,Ge),d(`button`,{type:`button`,disabled:N.value,onClick:t[20]||=e=>{$(async()=>{await g(b)(X()+`/`+H.value.id,{method:`PUT`,body:rt(H.value)}),j.value=!1})}},s(H.value.enabled?`暂停`:`启用`),9,Ke),d(`button`,{type:`button`,class:`danger-button`,disabled:N.value,onClick:t[21]||=e=>{$(async()=>{await g(b)(X()+`/`+H.value.id,{method:`DELETE`}),j.value=!1})}},`删除`,8,qe)])):h(``,!0),d(`div`,Je,[d(`button`,{type:`button`,disabled:N.value,onClick:t[22]||=e=>j.value=!1},`取消`,8,Ye),d(`button`,{class:`primary`,disabled:N.value},`保存`,8,Xe)])])],32)],40,Me)):h(``,!0)],8,[`disabled`]))],2)),[[oe,!u.editorOnly]])}}}),[[`__scopeId`,`data-v-a3240f3c`]]);export{T as t};
2
- //# sourceMappingURL=WorkspaceRoutinesPanel-Bn-W52Im.js.map