@lsamien/yaovi 0.1.4 → 0.1.5

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 (46) hide show
  1. package/build-info.json +12 -4
  2. package/dist/assets/{AboutDialog-CDpS-zAu.js → AboutDialog-2Zq3b7ma.js} +2 -2
  3. package/dist/assets/{AboutDialog-CDpS-zAu.js.map → AboutDialog-2Zq3b7ma.js.map} +1 -1
  4. package/dist/assets/{BotAutomationsView-RXBQzdfc.js → BotAutomationsView-C4EwHtYy.js} +2 -2
  5. package/dist/assets/{BotAutomationsView-RXBQzdfc.js.map → BotAutomationsView-C4EwHtYy.js.map} +1 -1
  6. package/dist/assets/{BotControlSettingsPanel-GQEVHXbw.js → BotControlSettingsPanel-DJ71O3Kh.js} +2 -2
  7. package/dist/assets/{BotControlSettingsPanel-GQEVHXbw.js.map → BotControlSettingsPanel-DJ71O3Kh.js.map} +1 -1
  8. package/dist/assets/{BotPluginsDialog-HIhXqyGn.js → BotPluginsDialog-Cgqn4RlP.js} +2 -2
  9. package/dist/assets/{BotPluginsDialog-HIhXqyGn.js.map → BotPluginsDialog-Cgqn4RlP.js.map} +1 -1
  10. package/dist/assets/{BotSettingsPanel-Bkqal3lR.js → BotSettingsPanel-C_1zAGWJ.js} +3 -3
  11. package/dist/assets/{BotSettingsPanel-Bkqal3lR.js.map → BotSettingsPanel-C_1zAGWJ.js.map} +1 -1
  12. package/dist/assets/{ComputerPanel-Dt73pgTG.js → ComputerPanel-CuVl9oX7.js} +2 -2
  13. package/dist/assets/{ComputerPanel-Dt73pgTG.js.map → ComputerPanel-CuVl9oX7.js.map} +1 -1
  14. package/dist/assets/{ComputerViewerView-ChYgaS9q.js → ComputerViewerView-BoI_aqLr.js} +2 -2
  15. package/dist/assets/{ComputerViewerView-ChYgaS9q.js.map → ComputerViewerView-BoI_aqLr.js.map} +1 -1
  16. package/dist/assets/{ConversationsView-EdF5AM1T.css → ConversationsView-aPMgqa0O.css} +1 -1
  17. package/dist/assets/{ConversationsView-DzcDJZh3.js → ConversationsView-kztie5lF.js} +16 -16
  18. package/dist/assets/ConversationsView-kztie5lF.js.map +1 -0
  19. package/dist/assets/{LocalVmSettingsPanel-DLbDb5Tq.js → LocalVmSettingsPanel-BZ1Jeqqk.js} +2 -2
  20. package/dist/assets/{LocalVmSettingsPanel-DLbDb5Tq.js.map → LocalVmSettingsPanel-BZ1Jeqqk.js.map} +1 -1
  21. package/dist/assets/{ModelNetworkChoice-Cfyt4Unl.js → ModelNetworkChoice-BQ8m2N3V.js} +2 -2
  22. package/dist/assets/{ModelNetworkChoice-Cfyt4Unl.js.map → ModelNetworkChoice-BQ8m2N3V.js.map} +1 -1
  23. package/dist/assets/{StandaloneDialog-Cte829Ai.js → StandaloneDialog-hF3z7bfi.js} +2 -2
  24. package/dist/assets/{StandaloneDialog-Cte829Ai.js.map → StandaloneDialog-hF3z7bfi.js.map} +1 -1
  25. package/dist/assets/{UpdateCheckDialog-BaMo_M4n.js → UpdateCheckDialog-Bz8JhRh4.js} +2 -2
  26. package/dist/assets/{UpdateCheckDialog-BaMo_M4n.js.map → UpdateCheckDialog-Bz8JhRh4.js.map} +1 -1
  27. package/dist/assets/{UsageView-CklMPG4n.js → UsageView-ZsSbQzIY.js} +2 -2
  28. package/dist/assets/{UsageView-CklMPG4n.js.map → UsageView-ZsSbQzIY.js.map} +1 -1
  29. package/dist/assets/WorkspaceKnowledgePanel-E549Ct1E.js +3 -0
  30. package/dist/assets/{WorkspaceKnowledgePanel-BdbhD3rO.js.map → WorkspaceKnowledgePanel-E549Ct1E.js.map} +1 -1
  31. package/dist/assets/{WorkspaceRoutinesPanel-VpRoMe1x.js → WorkspaceRoutinesPanel-NFWzy1R-.js} +2 -2
  32. package/dist/assets/{WorkspaceRoutinesPanel-VpRoMe1x.js.map → WorkspaceRoutinesPanel-NFWzy1R-.js.map} +1 -1
  33. package/dist/assets/{WorkstreamsView-BwZpuuhs.js → WorkstreamsView-CxZ8YUvP.js} +2 -2
  34. package/dist/assets/{WorkstreamsView-BwZpuuhs.js.map → WorkstreamsView-CxZ8YUvP.js.map} +1 -1
  35. package/dist/assets/{index-Cx1SdzRY.js → index-P_kZCZ2-.js} +3 -3
  36. package/dist/assets/{index-Cx1SdzRY.js.map → index-P_kZCZ2-.js.map} +1 -1
  37. package/dist/assets/{pdf-CoNh_Rmj.js → pdf-CNS_Rszb.js} +2 -2
  38. package/dist/assets/{pdf-CoNh_Rmj.js.map → pdf-CNS_Rszb.js.map} +1 -1
  39. package/dist/index.html +1 -1
  40. package/dist-server/server/workspaceCollaboration.js +9 -12
  41. package/dist-server/server/workspaceStore.js +3 -1
  42. package/dist-server/shared/peerExchange.js +26 -0
  43. package/package.json +1 -1
  44. package/release.json +3 -3
  45. package/dist/assets/ConversationsView-DzcDJZh3.js.map +0 -1
  46. package/dist/assets/WorkspaceKnowledgePanel-BdbhD3rO.js +0 -3
@@ -0,0 +1,3 @@
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{B as x,at as S,i as ne,j as C,lt as w,nt as T,o as re,ot as E}from"./index-P_kZCZ2-.js";var D={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},O=d({name:`ChevronForwardOutline`,render:function(e,t){return i(),h(`svg`,D,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([]),S=0,T=()=>({scope:r.scope,agentId:r.agentId,...r.scope===`project`?{projectId:r.projectId}:{}}),re=(e={})=>new URLSearchParams({...T(),...e});async function D(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 O(){let e=++S;if(!r.agentId||r.scope===`project`&&!r.projectId){te.value=[];return}try{let t=await C(`${z}/memory-files?${re()}`);e===S&&(te.value=t.files)}catch(t){e===S&&(v.value=String(t))}}async function se(e){await D(async()=>{let t=S,n=await C(`${z}/memory-file?${re({path:e})}`);t===S&&(d.value=n,m.value=n.content,x.value=[])})}async function B(){d.value&&await D(async()=>{d.value=await C(`/api/app/workspace/memory-file`,{method:`PUT`,body:{...T(),requestId:ne(),path:d.value.path,content:m.value,expectedHash:d.value.hash}}),m.value=d.value.content,y.value=`文件已保存,下一轮对话生效。`,ee(`changed`),await O()})}async function V(){await D(async()=>{x.value=(await C(`${z}/memory-file-history?${re()}`)).revisions.filter(e=>e.path===d.value?.path)})}async function H(e){await D(async()=>{d.value=await C(`/api/app/workspace/memory-file-revert`,{method:`POST`,body:{...T(),requestId:ne(),id:e.id,expectedHash:d.value.hash}}),m.value=d.value.content,y.value=`已撤销该次修改。`,await O(),ee(`changed`)})}return o(()=>[r.scope,r.agentId,r.projectId],()=>{d.value=void 0,m.value=``,x.value=[],O()},{immediate:!0}),o(()=>!!d.value&&m.value!==d.value.content,e=>ee(`dirty-change`,e)),e(()=>{S++}),(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),[[E,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]||=w(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),[[E,_.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){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`],W=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:D}){let k=d,ie=D,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 C(`/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([C(`/api/app/workspace/collaboration?${new URLSearchParams({...k.conversationId?{conversationId:k.conversationId}:{},...k.taskId?{taskId:k.taskId}:{}})}`),k.conversationId?C(`/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 C(`/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 C(`/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 C(`/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 C(`/api/app/workspace/memories`,{method:`POST`,body:{requestId:ne(),scope:X.value,...X.value===`project`?{projectId:F.value}:{},...e}}),V.value=void 0})}async function zt(e){await $(async()=>{await C(`/api/app/workspace/memories/forget`,{method:`POST`,body:{requestId:ne(),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 C(`/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 C(`/api/app/workspace/projects`,{method:`POST`,body:{requestId:ne(),...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 C(`/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:w(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:w(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),[[E,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),[[E,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),[[T,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),[[T,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),[[T,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(x,{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(_(O),{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(re,{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 _(C)(`/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),[[S,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),[[S,F.value]])])):g(``,!0),f(`form`,{onSubmit:n[18]||=w(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),[[E,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:w(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),[[S,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),[[E,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),[[S,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 _(C)(`/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{V as a,B as i,H as n,se as o,U as r,O as s,W as t};
3
+ //# sourceMappingURL=WorkspaceKnowledgePanel-E549Ct1E.js.map