fuli-context 0.9.0 → 0.11.0
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.
- package/README.md +29 -58
- package/README.zh-CN.md +24 -54
- package/dist/web/assets/AboutPage-CKq4IRHd.js +1 -0
- package/dist/web/assets/AgentConversations-DfXiFvBN.js +2 -0
- package/dist/web/assets/AgentConversations-XqNEBY_2.css +1 -0
- package/dist/web/assets/AgentHand-BBM-sKh2.js +1 -0
- package/dist/web/assets/AgentName-C_6R80nP.js +1 -0
- package/dist/web/assets/AgentProfilePage-Cz-i1fRD.js +1 -0
- package/dist/web/assets/AgentsDirectoryPage-BI0EFz6y.js +1 -0
- package/dist/web/assets/AgentsDirectoryPage-yRWktiin.css +1 -0
- package/dist/web/assets/ConnectionsPage-BoC6kXgs.js +1 -0
- package/dist/web/assets/ConnectionsPage-CM9C-zEI.css +1 -0
- package/dist/web/assets/EmployeeRecruitDialog-BVyclQAJ.js +1 -0
- package/dist/web/assets/EmployeeRecruitDialog-CVbqCzHb.css +1 -0
- package/dist/web/assets/EmployeeWorkbenchPage-D-c_Jm2z.css +1 -0
- package/dist/web/assets/EmployeeWorkbenchPage-D2GvYraI.js +3 -0
- package/dist/web/assets/KnowledgeEditDialog-a0AKWics.js +1 -0
- package/dist/web/assets/KnowledgeEditDialog-hT9znkoe.css +1 -0
- package/dist/web/assets/KnowledgeInspector-DMg9yJZ2.js +1 -0
- package/dist/web/assets/KnowledgeOrganizerPage-BgsHM3Qw.js +1 -0
- package/dist/web/assets/KnowledgeOrganizerPage-DeL7Jp34.css +1 -0
- package/dist/web/assets/KnowledgePage-kn8MqUCO.js +1 -0
- package/dist/web/assets/KnowledgeWorkspace-BtRq9fvC.js +4 -0
- package/dist/web/assets/KnowledgeWorkspace-D4a7FcAb.css +1 -0
- package/dist/web/assets/NotFoundPage-D-7jLz3o.js +1 -0
- package/dist/web/assets/OverviewPage-BHPc-XxY.js +1 -0
- package/dist/web/assets/OverviewPage-By-fUzSG.css +1 -0
- package/dist/web/assets/PersonalProfilePage-C00iV0Kx.js +1 -0
- package/dist/web/assets/PersonalProfilePage-DrMDAAdy.css +1 -0
- package/dist/web/assets/PersonalProjectsPage-CFNkdHSo.js +1 -0
- package/dist/web/assets/ProjectAgentFirstTask-Bi1ZsTC1.css +1 -0
- package/dist/web/assets/ProjectAgentFirstTask-CrCWEYgn.js +1 -0
- package/dist/web/assets/ProjectAgentsPage-BzztLMH-.js +12 -0
- package/dist/web/assets/ProjectAgentsPage-DNLNjYp-.css +1 -0
- package/dist/web/assets/ProjectScopePicker-CMxn3txv.js +1 -0
- package/dist/web/assets/PublicProjectsPage-DKamXDV9.css +1 -0
- package/dist/web/assets/PublicProjectsPage-DQVtvhOS.js +1 -0
- package/dist/web/assets/ReviewPage-BZhvyDWc.js +1 -0
- package/dist/web/assets/RoundtablesPage-CVebTXQa.js +1 -0
- package/dist/web/assets/RoundtablesPage-Cb0R4GaM.css +1 -0
- package/dist/web/assets/SettingsPage-1knvfOW6.js +1 -0
- package/dist/web/assets/SettingsPage-BmYkLul4.css +1 -0
- package/dist/web/assets/SharedJefaReportPage-BCVq8u0P.js +1 -0
- package/dist/web/assets/UiDialog-Da1P10f4.js +1 -0
- package/dist/web/assets/UiDisclosure-8wE8YuE4.js +1 -0
- package/dist/web/assets/UiSegmented-BKZXc8QF.js +1 -0
- package/dist/web/assets/UiSelect-Bv6R0yr1.css +1 -0
- package/dist/web/assets/UiSelect-D5Xj5Ec4.js +1 -0
- package/dist/web/assets/WritingTastePage-B8-etOBn.js +1 -0
- package/dist/web/assets/WritingTastePage-B_zYD1df.css +1 -0
- package/dist/web/assets/agent-profile-BZj3ezWe.css +1 -0
- package/dist/web/assets/{attention-store-Dk-_P4Oi.js → attention-store-BfxtL9EV.js} +1 -1
- package/dist/web/assets/{catalog-DN72452f.js → catalog-6SN9i3WR.js} +1 -1
- package/dist/web/assets/client-CUTkF3t4.js +1 -0
- package/dist/web/assets/{console-BtPqo79j.js → console-CG8tdtSs.js} +1 -1
- package/dist/web/assets/{conversation-launcher-settings-jkHRmWai.js → conversation-launcher-settings-CyZkLJg7.js} +1 -1
- package/dist/web/assets/{i18n-D2CJkEYK.js → i18n-CCMR4gDS.js} +3 -3
- package/dist/web/assets/{identity-B3zEw-1u.js → identity-C1eN-FSB.js} +1 -1
- package/dist/web/assets/index-kPB0Cf8Q.css +1 -0
- package/dist/web/assets/index-sLDKI6R-.js +5 -0
- package/dist/web/assets/{model-S7ehAjky.js → model-l-sAqtW_.js} +1 -1
- package/dist/web/assets/{personal-profile-graph--GG3Mizo.js → personal-profile-graph-BD1Y6TDS.js} +1 -1
- package/dist/web/assets/shared-report-B46dxlCR.js +1 -0
- package/dist/web/assets/{useAgentRoster-BAPKWZ9y.js → useAgentRoster-DdxoKDEE.js} +1 -1
- package/dist/web/assets/{useApi-CROJJdhE-BtFMXFjw.js → useApi-CROJJdhE-DlOiu8lP.js} +1 -1
- package/dist/web/assets/{vue-router-DkaTtPn0.js → vue-router-DjqEU4W2.js} +1 -1
- package/dist/web/index.html +14 -16
- package/docs/agent-conversations-and-collaboration.md +9 -9
- package/docs/agent-roundtable.md +61 -0
- package/docs/employee-agents.md +2 -2
- package/docs/project-agent-memory.md +1 -1
- package/graph-provider/fuli_graph/agent_conversation_models.py +11 -2
- package/graph-provider/fuli_graph/conversation_context.py +40 -9
- package/graph-provider/fuli_graph/default_project_lead.py +88 -0
- package/graph-provider/fuli_graph/project_agent_memory_routes.py +7 -0
- package/graph-provider/fuli_graph/project_agent_task_models.py +3 -0
- package/graph-provider/fuli_graph/runtime.py +3 -76
- package/graph-provider/fuli_graph/store.py +2 -0
- package/graph-provider/fuli_graph/store_agent_conversations.py +60 -8
- package/graph-provider/fuli_graph/store_project_agent_task_recruitment.py +3 -1
- package/graph-provider/fuli_graph/store_project_agent_tasks.py +12 -8
- package/graph-provider/fuli_graph/store_project_agents.py +25 -124
- package/graph-provider/fuli_graph/store_task_contexts.py +26 -0
- package/graph-provider/fuli_graph/system_agents.py +128 -0
- package/graph-provider/fuli_graph/system_hr_identity.py +1 -1
- package/graph-provider/fuli_graph/task_context_routes.py +10 -0
- package/graph-provider/pyproject.toml +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -4
- package/skills/capturing-session-knowledge/SKILL.md +1 -1
- package/src/agent-roundtable/http.js +14 -0
- package/src/agent-roundtable/service.js +218 -0
- package/src/agent-roundtable/store.js +86 -0
- package/src/agent-roundtable/tools.js +61 -0
- package/src/agent-roundtable/wake.js +99 -0
- package/src/agent-tools/agent-conversation-definitions.js +3 -3
- package/src/agent-tools/graph-definitions.js +3 -2
- package/src/agent-tools/interface-catalog.js +0 -5
- package/src/agent-tools.js +2 -2
- package/src/agents/claude-code/lifecycle-hook.js +6 -19
- package/src/agents/claude-code/wake.js +37 -0
- package/src/agents/codex/lifecycle-hook.js +51 -27
- package/src/agents/codex/token-usage.js +235 -0
- package/src/agents/codex/wake.js +47 -0
- package/src/agents/cursor/lifecycle-hook.js +3 -9
- package/src/agents/identity-receipt.js +16 -6
- package/src/agents/session-log.js +34 -0
- package/src/agents/token-usage-resolver.js +147 -0
- package/src/agents/wake-registry.js +14 -0
- package/src/cli/command-registry.js +0 -2
- package/src/cli/setup-command.js +2 -5
- package/src/cli/update-command.js +13 -2
- package/src/cli.js +0 -5
- package/src/employees/management-policy.js +4 -2
- package/src/employees/manifest.js +3 -0
- package/src/employees/recruitment.js +3 -2
- package/src/graphiti/agent-conversations.js +11 -9
- package/src/graphiti/agent-knowledge-workflows.js +34 -7
- package/src/graphiti/federated-application.js +18 -6
- package/src/graphiti/project-agent-mapping.js +1 -1
- package/src/graphiti/project-agent-task-entry.js +19 -7
- package/src/graphiti/project-agent-workflows.js +6 -1
- package/src/graphiti/project-path-context.js +7 -2
- package/src/graphiti/provider-client.js +8 -0
- package/src/graphiti/repository-project-registration.js +17 -0
- package/src/graphiti/task-entry-preferences.js +5 -0
- package/src/http/api-router.js +5 -3
- package/src/http/error-mapping.js +0 -2
- package/src/mcp/instructions.js +5 -5
- package/src/mcp/session-id.js +1 -1
- package/src/mcp/tool-annotations.js +3 -2
- package/src/setup/agents.js +1 -41
- package/src/setup/graph-runtime.js +15 -2
- package/src/setup/session-skill.js +22 -2
- package/dist/web/assets/AboutPage-D-GyJNv1.js +0 -1
- package/dist/web/assets/AgentConversations-DOuZgUeA.js +0 -2
- package/dist/web/assets/AgentConversations-DS8h3yKn.css +0 -1
- package/dist/web/assets/AgentHand-eGsXoGSq.js +0 -1
- package/dist/web/assets/AgentName-Dtmu9Ff5.js +0 -1
- package/dist/web/assets/AgentProfilePage-D8Tvayn7.js +0 -1
- package/dist/web/assets/AgentsDirectoryPage-BTEfKZjF.js +0 -1
- package/dist/web/assets/ConnectionsPage-C1w99yN3.css +0 -1
- package/dist/web/assets/ConnectionsPage-DwOIcvl9.js +0 -1
- package/dist/web/assets/EmployeeRecruitDialog-BrIMRblq.css +0 -1
- package/dist/web/assets/EmployeeRecruitDialog-D11blfwU.js +0 -1
- package/dist/web/assets/EmployeeWorkbenchPage-BcEzYt65.css +0 -1
- package/dist/web/assets/EmployeeWorkbenchPage-CK2BAoGt.js +0 -3
- package/dist/web/assets/GrowthLoading-KTjE2e50.js +0 -1
- package/dist/web/assets/KnowledgeEditDialog-B3x8vs3c.css +0 -1
- package/dist/web/assets/KnowledgeEditDialog-n9trHQ5d.js +0 -1
- package/dist/web/assets/KnowledgeInspector-BcNjgw9H.js +0 -1
- package/dist/web/assets/KnowledgeOrganizerPage-BzgxP-nG.css +0 -1
- package/dist/web/assets/KnowledgeOrganizerPage-DMBpGxLr.js +0 -1
- package/dist/web/assets/KnowledgePage-POkCMW8f.js +0 -1
- package/dist/web/assets/KnowledgeWorkspace-2FvQadhB.js +0 -4
- package/dist/web/assets/KnowledgeWorkspace-sb8OJ97I.css +0 -1
- package/dist/web/assets/NotFoundPage-BCMZbeB8.js +0 -1
- package/dist/web/assets/OverviewPage-0CFWCG9-.css +0 -1
- package/dist/web/assets/OverviewPage-0mYifpjp.js +0 -1
- package/dist/web/assets/PersonalProfilePage-Chv2a2pi.css +0 -1
- package/dist/web/assets/PersonalProfilePage-JW6Muix6.js +0 -1
- package/dist/web/assets/PersonalProjectsPage-CRbi64JP.js +0 -1
- package/dist/web/assets/ProjectAgentFirstTask-6afJ8HUe.css +0 -1
- package/dist/web/assets/ProjectAgentFirstTask-DJ0wTbh8.js +0 -1
- package/dist/web/assets/ProjectAgentsPage-BgQLIpxg.css +0 -1
- package/dist/web/assets/ProjectAgentsPage-CQemHFxy.js +0 -12
- package/dist/web/assets/ProjectScopePicker-BwB7gK-7.js +0 -1
- package/dist/web/assets/PublicProjectsPage-CB272Sq-.js +0 -1
- package/dist/web/assets/ReviewPage-CelTZU4C.js +0 -1
- package/dist/web/assets/RoundtablesPage-ByVeZlgC.js +0 -2
- package/dist/web/assets/RoundtablesPage-DCbIBnBq.css +0 -1
- package/dist/web/assets/SearchableSelect-f7EHbyDL.js +0 -1
- package/dist/web/assets/SettingsPage-5g7mRN2F.css +0 -1
- package/dist/web/assets/SettingsPage-nAijmm5f.js +0 -1
- package/dist/web/assets/SharedJefaReportPage-CjpJ9bkk.js +0 -1
- package/dist/web/assets/UiDisclosure-CWlC91Zt.js +0 -1
- package/dist/web/assets/WritingTastePage-DaHWY61P.js +0 -1
- package/dist/web/assets/WritingTastePage-SMGF39mf.css +0 -1
- package/dist/web/assets/agent-profile-CBvJHGjt.css +0 -1
- package/dist/web/assets/client-B2cRl-7c.js +0 -1
- package/dist/web/assets/copy-D2LqwtPZ.js +0 -1
- package/dist/web/assets/index-CNp0tRNp.css +0 -1
- package/dist/web/assets/index-UygXwZDZ.js +0 -5
- package/dist/web/assets/shared-report-DEK9wvhl.js +0 -1
- package/dist/web/assets/useModalDialog-D8tiJfbc.js +0 -1
- package/docs/roundtable-beta-testing.md +0 -102
- package/docs/roundtable-beta-validation.md +0 -133
- package/docs/roundtable-research.md +0 -142
- package/src/agents/a2a/roundtable-participant.js +0 -374
- package/src/agents/claude-code/roundtable-participant.js +0 -24
- package/src/agents/codex/roundtable-config.js +0 -32
- package/src/agents/codex/roundtable-participant.js +0 -34
- package/src/agents/grok/roundtable-participant.js +0 -185
- package/src/agents/pi/roundtable-participant.js +0 -193
- package/src/agents/pi/roundtable-result-format.js +0 -183
- package/src/cli/roundtable-command.js +0 -79
- package/src/roundtables/application.js +0 -69
- package/src/roundtables/domain.js +0 -181
- package/src/roundtables/http-router.js +0 -56
- package/src/roundtables/mcp-server.js +0 -48
- package/src/roundtables/participant-registry.js +0 -12
- package/src/roundtables/process.js +0 -70
- package/src/roundtables/result-contract.js +0 -47
- package/src/roundtables/server.js +0 -52
- package/src/roundtables/service.js +0 -396
- package/src/roundtables/store.js +0 -59
- package/src/roundtables/tool-contract.js +0 -41
- package/src/roundtables/turn-prompt.js +0 -24
- package/src/roundtables/worker.js +0 -85
- /package/dist/web/assets/{GrowthLoading-CIuQ1icy.css → client-CIuQ1icy.css} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{A as e,B as t,C as n,M as r,P as i,R as a,S as o,V as s,X as c,_ as l,b as u,c as d,d as f,h as p,it as m,m as h,nt as g,tt as _,u as v,v as y,w as b,x,y as S}from"./i18n-D2CJkEYK.js";import{t as C}from"./GrowthLoading-KTjE2e50.js";import{h as w,m as T}from"./useApi-CROJJdhE-BtFMXFjw.js";import{t as E}from"./vue-router-DkaTtPn0.js";import{a as D,i as O,n as k,r as A,t as j}from"./copy-D2LqwtPZ.js";async function M(e,t){let n=await fetch(`/api/roundtables${e}`,{method:t===void 0?`GET`:`POST`,credentials:`same-origin`,headers:t===void 0?{Accept:`application/json`}:{Accept:`application/json`,"Content-Type":`application/json`},...t===void 0?{}:{body:JSON.stringify(t)}}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(typeof r?.error?.message==`string`?r.error.message:typeof r?.error==`string`?r.error:`HTTP ${n.status}`);if(r===null)throw Error(`Invalid roundtable response`);return r}var N={list:()=>M(``),read:(e,t=0)=>M(`/${encodeURIComponent(e)}?after=${t}&limit=100`),create:async e=>{let t=await M(``,e);return`room`in t?t.room:t},control:(e,t,n,r,i)=>M(`/${encodeURIComponent(e)}/control`,{action:t,expectedRevision:n,...r?{reason:r}:{},...i?{limits:i}:{}}),message:(e,t)=>M(`/${encodeURIComponent(e)}/messages`,{body:t}),invite:(e,t)=>M(`/${encodeURIComponent(e)}/invites`,{seatId:t}),revoke:(e,t)=>M(`/${encodeURIComponent(e)}/revoke`,{seatId:t})},P={class:`rt-panel rt-create`,"aria-labelledby":`rt-create-title`},F={class:`rt-section-heading`},I={id:`rt-create-title`},L=[`disabled`],R={class:`rt-field`},z=[`placeholder`],B={class:`rt-field`},V={value:`discussion`},H={value:`collaboration`},U={class:`rt-section-heading`},W={class:`rt-muted`},G={class:`rt-field`},K=[`onUpdate:modelValue`,`aria-label`],ee={class:`rt-field`},te=[`onUpdate:modelValue`,`aria-label`],ne=[`value`],re={class:`rt-field`},ie=[`onUpdate:modelValue`,`aria-label`],ae=[`value`],oe=[`disabled`,`aria-label`,`onClick`],se={key:0,class:`rt-seat-permission`},ce=[`onUpdate:modelValue`],le={key:0,class:`rt-field`},ue=[`onUpdate:modelValue`],de=[`disabled`],fe={key:0,class:`rt-warning`},pe={class:`rt-advanced`},me={class:`rt-field`},he=[`placeholder`],ge={class:`rt-muted`},_e={class:`rt-field`},ve={key:0,class:`rt-field`},ye={class:`rt-muted`},be={class:`rt-limit-form`},xe={class:`rt-field`},Se={class:`rt-field`},Ce={class:`rt-field`},we={class:`rt-field`},Te={key:1,class:`rt-muted`},Ee={key:2,role:`alert`,class:`rt-error`},De=[`disabled`],Oe={key:1},q=b({__name:`RoundtableCreate`,emits:[`created`,`cancel`],setup(e,{emit:t}){let n=t,a=c(``),g=c(`discussion`),b=c([{id:`seat-1`,name:`Codex`,role:`moderator`,runtime:`codex`},{id:`seat-2`,name:`Claude`,role:`reviewer`,runtime:`claude-code`}]),w=[`moderator`,`specialist`,`implementer`,`reviewer`],T=[`codex`,`claude-code`,`pi`,`mcp`,`grok`,`a2a`],E=c(``),D=c(``),O=c(),j=c(3),M=c(30),q=c(30),J=c(5),Y=c(!1),X=c(``),Z=c({}),Q=c({}),ke=3,$=l(()=>a.value.trim()&&b.value.length>=2&&b.value.length<=6&&b.value.every(e=>e.name.trim())&&b.value.filter(e=>e.role===`moderator`).length===1&&b.value.every(e=>g.value!==`collaboration`||e.role!==`implementer`||!Z.value[e.id]||Q.value[e.id]?.trim())&&(g.value===`discussion`||b.value.some(e=>e.role===`implementer`)&&b.value.some(e=>e.role===`reviewer`)));function Ae(){b.value.push({id:`seat-${ke++}`,name:``,role:`specialist`,runtime:`mcp`})}async function je(){if(!(!$.value||Y.value)){Y.value=!0,X.value=``;try{let e=await N.create({goal:a.value.trim(),mode:g.value,seats:b.value.map(e=>({...e,name:e.name.trim(),...e.role===`implementer`&&g.value===`collaboration`&&Z.value[e.id]?{execution:{permission:`workspace-write`,workspace:Q.value[e.id].trim()}}:{}})),limits:{maxRounds:j.value,maxMessages:M.value,maxDurationMs:q.value*6e4,turnTimeoutMs:J.value*6e4},...E.value.trim()?{projectPath:E.value.trim()}:{},...E.value.trim()&&D.value.trim()?{binding:{taskId:D.value.trim(),...Number.isSafeInteger(O.value)?{artifactRevision:O.value}:{}}}:{}});n(`created`,e.id)}catch(e){X.value=e instanceof Error?e.message:k(`创建失败`,`Creation failed`)}finally{Y.value=!1}}}return(e,t)=>(r(),x(`section`,P,[y(`div`,F,[y(`h2`,I,m(_(k)(`创建圆桌`,`Create a roundtable`)),1),y(`button`,{type:`button`,onClick:t[0]||=e=>n(`cancel`),disabled:Y.value},m(_(k)(`关闭`,`Close`)),9,L)]),y(`form`,{onSubmit:h(je,[`prevent`])},[y(`label`,R,[o(m(_(k)(`共同目标`,`Shared goal`)),1),s(y(`textarea`,{"onUpdate:modelValue":t[1]||=e=>a.value=e,required:``,maxlength:`12000`,rows:`3`,placeholder:_(k)(`描述要一起解决的问题和期望的交付`,`Describe the problem and expected deliverable`)},null,8,z),[[f,a.value]])]),y(`label`,B,[o(m(_(k)(`方式`,`Mode`)),1),s(y(`select`,{"onUpdate:modelValue":t[2]||=e=>g.value=e},[y(`option`,V,m(_(A)(`discussion`)),1),y(`option`,H,m(_(A)(`collaboration`)),1)],512),[[v,g.value]])]),y(`div`,U,[y(`h3`,null,m(_(k)(`参与席位`,`Seats`)),1),y(`span`,null,m(b.value.length)+` / 6`,1)]),y(`p`,W,m(_(k)(`每位参与者有独立席位。选择入口后,还需要在参与者的电脑上启动工作端,或从 MCP 客户端主动加入。`,`Each participant has its own seat. After choosing an adapter, start a worker on the participant’s computer or actively join from an MCP client.`)),1),(r(!0),x(p,null,i(b.value,(e,t)=>(r(),x(`div`,{key:e.id,class:`rt-seat-form`},[y(`label`,G,[o(m(_(k)(`姓名`,`Name`)),1),s(y(`input`,{"onUpdate:modelValue":t=>e.name=t,required:``,maxlength:`120`,"aria-label":`${_(k)(`姓名`,`Name`)} ${t+1}`},null,8,K),[[f,e.name]])]),y(`label`,ee,[o(m(_(k)(`职责`,`Role`)),1),s(y(`select`,{"onUpdate:modelValue":t=>e.role=t,"aria-label":`${_(k)(`职责`,`Role`)} ${t+1}`},[(r(),x(p,null,i(w,e=>y(`option`,{key:e,value:e},m(_(A)(e)),9,ne)),64))],8,te),[[v,e.role]])]),y(`label`,re,[o(m(_(k)(`参与方式`,`Adapter`)),1),s(y(`select`,{"onUpdate:modelValue":t=>e.runtime=t,"aria-label":`${_(k)(`参与方式`,`Adapter`)} ${t+1}`},[(r(),x(p,null,i(T,e=>y(`option`,{key:e,value:e},m(_(A)(e)),9,ae)),64))],8,ie),[[v,e.runtime]])]),y(`button`,{type:`button`,disabled:b.value.length<=2||Y.value,"aria-label":`${_(k)(`移除`,`Remove`)} ${e.name||t+1}`,onClick:e=>b.value.splice(t,1)},`×`,8,oe),e.role===`implementer`&&g.value===`collaboration`?(r(),x(`div`,se,[y(`label`,null,[s(y(`input`,{"onUpdate:modelValue":t=>Z.value[e.id]=t,type:`checkbox`},null,8,ce),[[d,Z.value[e.id]]]),o(` `+m(_(k)(`允许此实施席位写入指定工作区`,`Allow this implementer to write to the specified workspace`)),1)]),Z.value[e.id]?(r(),x(`label`,le,[o(m(_(k)(`获授权工作区路径`,`Authorized workspace path`)),1),s(y(`input`,{"onUpdate:modelValue":t=>Q.value[e.id]=t,required:``},null,8,ue),[[f,Q.value[e.id]]])])):u(``,!0)])):u(``,!0)]))),128)),y(`button`,{type:`button`,disabled:b.value.length>=6||Y.value,onClick:Ae},m(_(k)(`添加席位`,`Add seat`)),9,de),!$.value&&a.value.trim()?(r(),x(`p`,fe,m(_(k)(`需要 2–6 个有姓名的席位和一位主持人;协作任务还需要实施者和审查者。`,`Use 2–6 named seats and exactly one moderator. Collaborative tasks also require an implementer and a reviewer.`)),1)):u(``,!0),y(`details`,pe,[y(`summary`,null,m(_(k)(`停止条件与项目`,`Limits and project`)),1),y(`label`,me,[o(m(_(k)(`已登记项目的本机路径(可选)`,`Registered local project path (optional)`)),1),s(y(`input`,{"onUpdate:modelValue":t[3]||=e=>E.value=e,placeholder:_(k)(`留空建立独立临时圆桌`,`Leave blank for an independent temporary room`)},null,8,he),[[f,E.value]])]),y(`p`,ge,m(_(k)(`项目绑定由服务端验证。跨电脑工作端的本地路径单独设置;加入席位不会授权读取他人的私有记忆。`,`The server validates project binding. Each worker sets its own local path; joining does not authorize access to another participant’s private memory.`)),1),E.value.trim()?(r(),x(p,{key:0},[y(`label`,_e,[o(m(_(k)(`关联已有 Fuli 任务 ID(可选)`,`Existing Fuli task ID (optional)`)),1),s(y(`input`,{"onUpdate:modelValue":t[4]||=e=>D.value=e},null,512),[[f,D.value]])]),D.value.trim()?(r(),x(`label`,ve,[o(m(_(k)(`产物版本(用于任务验证)`,`Artifact revision (for task verification)`)),1),s(y(`input`,{"onUpdate:modelValue":t[5]||=e=>O.value=e,type:`number`,min:`0`,step:`1`},null,512),[[f,O.value,void 0,{number:!0}]])])):u(``,!0),y(`p`,ye,m(_(k)(`关联项目本身不会完成 Fuli 任务。关联已有任务时,交付还要通过该任务的验证门槛;独立圆桌的人工验收只结束圆桌。`,`A project link alone does not complete a Fuli task. Linking an existing task adds its verification gate; human acceptance of an independent room concludes only the room.`)),1)],64)):u(``,!0),y(`div`,be,[y(`label`,xe,[o(m(_(k)(`讨论轮数`,`Discussion rounds`)),1),s(y(`input`,{"onUpdate:modelValue":t[6]||=e=>j.value=e,type:`number`,min:`1`,max:`3`,required:``},null,512),[[f,j.value,void 0,{number:!0}]])]),y(`label`,Se,[o(m(_(k)(`Agent 发言上限`,`Agent message limit`)),1),s(y(`input`,{"onUpdate:modelValue":t[7]||=e=>M.value=e,type:`number`,min:`1`,max:`30`,required:``},null,512),[[f,M.value,void 0,{number:!0}]])]),y(`label`,Ce,[o(m(_(k)(`总时限(分钟)`,`Total minutes`)),1),s(y(`input`,{"onUpdate:modelValue":t[8]||=e=>q.value=e,type:`number`,min:`1`,max:`30`,required:``},null,512),[[f,q.value,void 0,{number:!0}]])]),y(`label`,we,[o(m(_(k)(`单回合(分钟)`,`Minutes per turn`)),1),s(y(`input`,{"onUpdate:modelValue":t[9]||=e=>J.value=e,type:`number`,min:`1`,max:`5`,required:``},null,512),[[f,J.value,void 0,{number:!0}]])])])]),g.value===`collaboration`?(r(),x(`p`,Te,m(_(k)(`实施席位仍需要在工作端明确授权工作区写入;审查默认只读。执行结果等待你的验收。`,`Implementation still requires explicit workspace write permission on the worker. Reviews default to read only. Results await your acceptance.`)),1)):u(``,!0),X.value?(r(),x(`p`,Ee,m(X.value),1)):u(``,!0),y(`button`,{type:`submit`,class:`rt-primary`,disabled:!$.value||Y.value},[Y.value?(r(),S(C,{key:0,variant:`inline`,label:`创建圆桌 · Creating roundtable`})):(r(),x(`span`,Oe,m(_(k)(`创建草案`,`Create draft`)),1))],8,De)],32)]))}}),J={class:`rt-panel`,"aria-labelledby":`rt-seats-title`},Y={class:`rt-section-heading`},X={id:`rt-seats-title`},Z={class:`rt-muted`},Q={class:`rt-seats`},ke={class:`rt-section-heading`},$={class:`rt-tag`},Ae={class:`rt-muted`},je={class:`rt-muted`},Me={key:0,class:`rt-muted`},Ne={class:`rt-actions`},Pe=[`disabled`,`onClick`],Fe={key:1},Ie=[`disabled`,`onClick`],Le={key:1},Re={key:0,class:`rt-error`,role:`alert`},ze={key:1,class:`rt-invite`,"aria-labelledby":`rt-invite-title`},Be={class:`rt-section-heading`},Ve={id:`rt-invite-title`},He={class:`rt-field`},Ue=[`value`],We={class:`rt-muted`},Ge={class:`rt-field`},Ke={class:`rt-muted`},qe={class:`rt-field`},Je=[`placeholder`],Ye={key:0},Xe={key:1,class:`rt-field`},Ze={key:2,class:`rt-field`},Qe={class:`rt-muted`},$e={class:`rt-muted`},et={class:`rt-muted`},tt={class:`rt-muted`},nt=b({__name:`RoundtableSeats`,props:{room:{},activeSeatId:{}},emits:[`changed`],setup(t,{emit:n}){let l=t,h=n,v=c(null),b=c(``),w=c(``),T=c(``),E=c(``),D=c(typeof window>`u`?``:window.location.origin),j=c(!1),M=c(``),P=c(``),F=!1;a(()=>l.room.id,()=>{v.value=null,w.value=``,T.value=``}),e(()=>{F=!0,v.value=null});async function I(e){if(b.value)return;b.value=`invite:${e}`,w.value=``,v.value=null,T.value=``;let t=l.room.id;try{let n=await N.invite(t,e);!F&&l.room.id===t&&(v.value=n)}catch(e){w.value=e instanceof Error?e.message:k(`创建邀请失败`,`Invitation failed`)}finally{b.value=``}}async function L(e){if(!b.value){b.value=`revoke:${e}`,w.value=``;try{await N.revoke(l.room.id,e),v.value?.seatId===e&&(v.value=null),h(`changed`)}catch(e){w.value=e instanceof Error?e.message:k(`撤销失败`,`Revocation failed`)}finally{b.value=``}}}async function R(e,t){try{await navigator.clipboard.writeText(e),T.value=t}catch{w.value=k(`剪贴板不可用,请手动选择并复制。`,`Clipboard unavailable. Select and copy manually.`)}}function z(){let e=l.room.seats.find(e=>e.id===v.value?.seatId);if(!e||e.runtime===`mcp`)return``;let t=e=>`'${e.replaceAll(`'`,`''`)}'`;return`fl roundtable worker --url ${t(D.value)} --room ${t(l.room.id)} --runtime ${e.runtime} --workspace ${t(E.value||k(`参与端本地工作区`,`LOCAL_WORKSPACE`))}${j.value&&e.role===`implementer`&&e.execution?.permission===`workspace-write`?` --allow-write`:``}${e.runtime===`a2a`?` --a2a-url ${t(M.value||`https://A2A_ENDPOINT`)}`:``}${e.runtime===`pi`?` --model ${t(P.value||`LOCAL_MODEL`)}`:``}`}function B(){return`${D.value.replace(/\/$/,``)}/roundtable-peer/v1/rooms/${encodeURIComponent(l.room.id)}/mcp`}return(e,n)=>(r(),x(`section`,J,[y(`div`,Y,[y(`h2`,X,m(_(k)(`圆桌席位`,`Seats`)),1),y(`span`,null,m(t.room.seats.length),1)]),y(`p`,Z,m(_(k)(`邀请仅授予一个席位的权限。加入记录是历史证据,当前在线状态由工作端轮询和回合回执确定。`,`An invitation grants access to one seat. Join records are historical evidence; worker polling and turn receipts determine current activity.`)),1),y(`div`,Q,[(r(!0),x(p,null,i(t.room.seats,e=>(r(),x(`article`,{key:e.id,class:g([`rt-seat`,{"rt-seat-current":e.id===t.activeSeatId}])},[y(`div`,ke,[y(`strong`,null,m(e.name),1),y(`span`,$,m(_(A)(e.role)),1)]),y(`p`,null,m(_(A)(e.runtime)),1),y(`p`,Ae,m(e.identityKind===`fuli`?_(k)(`已绑定 Fuli 身份`,`Bound Fuli identity`):_(k)(`独立任务席位`,`Independent task seat`)),1),y(`p`,je,m(e.joinedAt?`${_(k)(`加入于`,`Joined`)} ${_(O)(e.joinedAt)}`:_(k)(`尚无加入记录`,`No join recorded`)),1),e.execution?(r(),x(`p`,Me,m(_(A)(e.execution.permission))+` · `+m(e.execution.workspace),1)):u(``,!0),y(`div`,Ne,[y(`button`,{type:`button`,disabled:!!b.value,onClick:t=>I(e.id)},[b.value===`invite:${e.id}`?(r(),S(C,{key:0,variant:`inline`,label:`创建席位邀请 · Creating seat invitation`})):(r(),x(`span`,Fe,m(_(k)(`邀请参与`,`Invite participant`)),1))],8,Pe),y(`button`,{type:`button`,disabled:!!b.value,onClick:t=>L(e.id)},[b.value===`revoke:${e.id}`?(r(),S(C,{key:0,variant:`inline`,label:`撤销席位凭据 · Revoking seat credentials`})):(r(),x(`span`,Le,m(_(k)(`撤销凭据`,`Revoke credentials`)),1))],8,Ie)])],2))),128))]),w.value?(r(),x(`p`,Re,m(w.value),1)):u(``,!0),v.value?(r(),x(`section`,ze,[y(`div`,Be,[y(`h3`,Ve,m(_(k)(`席位邀请 · 仅此次显示`,`Seat invitation · shown once`)),1),y(`button`,{type:`button`,onClick:n[0]||=e=>{v.value=null,T.value=``}},m(_(k)(`隐藏凭据`,`Hide credential`)),1)]),y(`p`,null,m(t.room.seats.find(e=>e.id===v.value?.seatId)?.name)+` · `+m(_(k)(`有效期至`,`Expires`))+` `+m(_(O)(v.value.expiresAt)),1),y(`label`,He,[o(m(_(k)(`席位访问凭据`,`Seat credential`)),1),y(`input`,{value:v.value.seatToken,readonly:``,autocomplete:`off`,spellcheck:`false`,type:`password`,"data-testid":`seat-token`,onFocus:n[1]||=e=>e.target.select()},null,40,Ue)]),y(`button`,{type:`button`,onClick:n[2]||=e=>R(v.value.seatToken,`token`)},m(T.value===`token`?_(k)(`凭据已复制`,`Credential copied`):_(k)(`复制凭据`,`Copy credential`)),1),y(`p`,We,m(_(k)(`只发给这一席位的参与者。凭据仅保留在当前页面内存;关闭后重新创建邀请,或撤销此前凭据。`,`Share only with this seat’s participant. This page keeps the credential only in memory. After closing, create a new invite or revoke previous credentials.`)),1),y(`label`,Ge,[o(m(_(k)(`参与者可访问的协调端地址`,`Coordinator URL reachable by participant`)),1),s(y(`input`,{"onUpdate:modelValue":n[3]||=e=>D.value=e,type:`url`},null,512),[[f,D.value]])]),y(`p`,Ke,m(_(k)(`另一台电脑需要可访问的 HTTPS 地址,并在协调端设置 public-url;本机测试可使用回环地址。`,`Another computer needs a reachable HTTPS URL configured as public-url on the coordinator. Loopback works for local testing.`)),1),t.room.seats.find(e=>e.id===v.value?.seatId)?.runtime===`mcp`?(r(),x(p,{key:1},[y(`p`,$e,m(_(k)(`在 MCP 客户端配置下面的远程地址,将席位凭据作为 Bearer 认证秘密保存。Grok Team Bot 可在官方自定义 MCP 设置中配置此地址。`,`Configure this remote URL in the MCP client and save the seat credential as a Bearer authentication secret. Grok Team Bots can configure it through their official custom MCP settings.`)),1),y(`pre`,null,[y(`code`,null,m(B()),1)]),y(`button`,{type:`button`,onClick:n[9]||=e=>R(B(),`mcp`)},m(T.value===`mcp`?_(k)(`地址已复制`,`URL copied`):_(k)(`复制 MCP 地址`,`Copy MCP URL`)),1),y(`p`,et,m(_(k)(`主动调用 join_roundtable,再通过 read_roundtable、claim_roundtable_turn、submit_roundtable_turn 参与自己的回合;参数 roomId 为下面的圆桌 ID。MCP 不会后台唤醒现有聊天。`,`Actively call join_roundtable, then use read_roundtable, claim_roundtable_turn and submit_roundtable_turn for your own turns, passing the room ID below as roomId. MCP does not wake existing chats in the background.`)),1)],64)):(r(),x(p,{key:0},[y(`label`,qe,[o(m(_(k)(`参与端本地工作区`,`Worker local workspace`)),1),s(y(`input`,{"onUpdate:modelValue":n[4]||=e=>E.value=e,placeholder:_(k)(`填写参与者电脑上的路径`,`Path on the participant’s computer`)},null,8,Je),[[f,E.value]])]),t.room.seats.find(e=>e.id===v.value?.seatId)?.execution?.permission===`workspace-write`?(r(),x(`label`,Ye,[s(y(`input`,{"onUpdate:modelValue":n[5]||=e=>j.value=e,type:`checkbox`},null,512),[[d,j.value]]),o(` `+m(_(k)(`工作端用户明确允许写入此工作区`,`The worker’s user explicitly permits writing to this workspace`)),1)])):u(``,!0),t.room.seats.find(e=>e.id===v.value?.seatId)?.runtime===`a2a`?(r(),x(`label`,Xe,[o(m(_(k)(`A2A 端点`,`A2A endpoint`)),1),s(y(`input`,{"onUpdate:modelValue":n[6]||=e=>M.value=e,type:`url`,placeholder:`https://…`},null,512),[[f,M.value]])])):u(``,!0),t.room.seats.find(e=>e.id===v.value?.seatId)?.runtime===`pi`?(r(),x(`label`,Ze,[o(m(_(k)(`参与电脑上的 Ollama 模型`,`Ollama model on participant computer`)),1),s(y(`input`,{"onUpdate:modelValue":n[7]||=e=>P.value=e,placeholder:`fuli-roundtable-qwen3-32k:latest`},null,512),[[f,P.value]])])):u(``,!0),y(`p`,null,m(_(k)(`在参与端 PowerShell 中,先设置环境变量,再启动工作端:`,`In the worker’s PowerShell, set the environment variable and start the worker:`)),1),y(`pre`,null,[y(`code`,null,`$env:FULI_ROUNDTABLE_TOKEN = '<`+m(_(k)(`粘贴席位凭据`,`PASTE_SEAT_CREDENTIAL`))+`>'
|
|
2
|
-
`+m(z()),1)]),y(`button`,{type:`button`,onClick:n[8]||=e=>R(z(),`command`)},m(T.value===`command`?_(k)(`命令已复制`,`Command copied`):_(k)(`复制工作端命令`,`Copy worker command`)),1),y(`p`,Qe,m(_(k)(`默认只读。实施写入还需工作端用户明确授权。Grok 需要工作端配置 XAI_API_KEY;A2A 需要配置可验证的端点。`,`Workers default to read only. Writing also requires explicit permission from the worker’s user. Grok requires XAI_API_KEY on the worker; A2A requires a verified endpoint.`)),1)],64)),y(`p`,tt,m(_(k)(`协调端地址`,`Coordinator URL`))+`: `+m(D.value)+` · `+m(_(k)(`圆桌`,`Room`))+`: `+m(t.room.id)+` · `+m(_(k)(`席位`,`Seat`))+`: `+m(v.value.seatId),1)])):u(``,!0)]))}}),rt={class:`rt-panel`,"aria-labelledby":`rt-results-title`},it={class:`rt-section-heading`},at={id:`rt-results-title`},ot={key:0,class:`rt-tag`},st={class:`rt-message-body`},ct={class:`rt-muted`},lt={key:0,class:`rt-advanced`},ut={class:`rt-message-body`},dt={class:`rt-muted`},ft={key:1,class:`rt-empty`},pt={key:2,class:`rt-table-scroll`},mt={key:3,class:`rt-muted`},ht={class:`rt-advanced`},gt={class:`rt-message-body`},_t={class:`rt-message-body`},vt={key:4,class:`rt-muted`},yt={key:5,class:`rt-artifacts`},bt={key:6,class:`rt-muted`},xt={class:`rt-muted`},St={key:7,class:`rt-table-scroll`},Ct={"data-testid":`runtime-receipts`},wt={key:8,class:`rt-empty`,"data-testid":`no-runtime-receipts`},Tt=b({__name:`RoundtableResults`,props:{snapshot:{}},setup(e){let t=e,n=l(()=>t.snapshot.messages.filter(e=>e.actual)),a=l(()=>t.snapshot.messages.filter(e=>e.kind===`dissent`)),s=l(()=>[...t.snapshot.outcome?.artifacts??[],...t.snapshot.tasks.flatMap(e=>e.artifacts??[])]),c=e=>t.snapshot.room.seats.find(t=>t.id===e)?.name??e??k(`系统`,`System`);function d(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`){let t=e;if(typeof t.body==`string`)return t.body;if(typeof t.reason==`string`)return t.reason}return j(e)}function f(e){return e==null?k(`未报告`,`Not reported`):typeof e==`string`?e:JSON.stringify(e,null,2)}function h(e){return!e||!Object.keys(e).length?k(`未知`,`Unknown`):Object.entries(e).filter(([,e])=>typeof e==`number`).map(([e,t])=>`${e}: ${t}`).join(` · `)||k(`未知`,`Unknown`)}return(t,l)=>(r(),x(`section`,rt,[y(`div`,it,[y(`h2`,at,m(_(k)(`结果与证据`,`Results and evidence`)),1),e.snapshot.outcome?(r(),x(`span`,ot,m(_(A)(e.snapshot.outcome.acceptance)),1)):u(``,!0)]),e.snapshot.outcome?(r(),x(p,{key:0},[y(`p`,st,m(e.snapshot.outcome.body),1),y(`p`,ct,m(_(k)(`Agent 报告的结论保留为报告;人工验收和任务验证分别记录。`,`Agent conclusions remain reports. Human acceptance and task verification are recorded separately.`)),1),e.snapshot.outcome.verification?.reported==null?u(``,!0):(r(),x(`details`,lt,[y(`summary`,null,m(_(k)(`汇总验证报告`,`Outcome verification report`)),1),y(`p`,ut,m(f(e.snapshot.outcome.verification.reported)),1),y(`p`,dt,m(e.snapshot.outcome.verification.confirmed?_(k)(`服务端记录为已确认`,`Recorded as confirmed by server`):_(k)(`参与端报告,尚未确认`,`Participant report, not confirmed`)),1)]))],64)):(r(),x(`p`,ft,m(_(k)(`尚未提交最终结论。讨论、任务报告与实际执行记录会持续保留。`,`No final outcome has been submitted. Discussion, task reports and execution records are preserved.`)),1)),y(`h3`,null,m(_(k)(`任务`,`Tasks`)),1),e.snapshot.tasks.length?(r(),x(`div`,pt,[y(`table`,null,[y(`thead`,null,[y(`tr`,null,[y(`th`,null,m(_(k)(`任务 / 阶段`,`Task / phase`)),1),y(`th`,null,m(_(k)(`负责人`,`Assignee`)),1),y(`th`,null,m(_(k)(`权限`,`Permission`)),1),y(`th`,null,m(_(k)(`状态`,`Status`)),1),y(`th`,null,m(_(k)(`依赖`,`Dependencies`)),1)])]),y(`tbody`,null,[(r(!0),x(p,null,i(e.snapshot.tasks,e=>(r(),x(`tr`,{key:e.id},[y(`td`,null,[o(m(e.title||e.id),1),y(`small`,null,m(_(A)(e.phase)),1)]),y(`td`,null,m(c(e.seatId)),1),y(`td`,null,m(_(A)(e.permission)),1),y(`td`,null,m(_(A)(e.status)),1),y(`td`,null,m(e.dependencies?.join(`, `)||`—`),1)]))),128))])])])):(r(),x(`p`,mt,m(_(k)(`本圆桌尚无执行任务。讨论消息不算工作进程执行。`,`No execution tasks in this room. Discussion messages are not worker execution.`)),1)),(r(!0),x(p,null,i(e.snapshot.tasks.filter(e=>e.verification!=null),e=>(r(),x(`div`,{key:e.id},[y(`details`,ht,[y(`summary`,null,m(_(k)(`任务验证报告`,`Task verification report`))+` · `+m(e.title||e.id),1),y(`p`,gt,m(f(e.verification)),1)])]))),128)),y(`h3`,null,m(_(k)(`保留的分歧`,`Retained dissent`)),1),(r(!0),x(p,null,i(a.value,e=>(r(),x(`article`,{key:e.id,class:`rt-dissent`},[y(`strong`,null,m(c(e.seatId))+` · #`+m(e.seq),1),y(`p`,_t,m(e.body),1)]))),128)),(r(!0),x(p,null,i(e.snapshot.outcome?.dissent??[],(e,t)=>(r(),x(`p`,{key:t,class:`rt-message-body`},m(d(e)),1))),128)),!a.value.length&&!e.snapshot.outcome?.dissent?.length?(r(),x(`p`,vt,m(_(k)(`尚未记录分歧。`,`No dissent recorded.`)),1)):u(``,!0),y(`h3`,null,m(_(k)(`产物引用`,`Artifact references`)),1),s.value.length?(r(),x(`ul`,yt,[(r(!0),x(p,null,i(s.value,(e,t)=>(r(),x(`li`,{key:t},m(_(j)(e)),1))),128))])):(r(),x(`p`,bt,m(_(k)(`尚无产物引用。`,`No artifact references reported.`)),1)),y(`h3`,null,m(_(k)(`实际运行回执`,`Actual runtime receipts`)),1),y(`p`,xt,m(_(k)(`只展示提交了运行来源的回执;来源由参与端报告,未独立验证运行时身份。加入、选择平台或配置席位不产生执行行;用量缺失时显示未知。`,`Only submitted runtime source receipts appear here. Sources are participant reports; runtime identity is not independently verified. Joining or configuring a seat does not create an execution row; missing usage stays unknown.`)),1),n.value.length?(r(),x(`div`,St,[y(`table`,Ct,[y(`thead`,null,[y(`tr`,null,[y(`th`,null,m(_(k)(`席位 / 消息`,`Seat / message`)),1),y(`th`,null,m(_(k)(`报告的应用`,`Reported application`)),1),y(`th`,null,m(_(k)(`报告的模型`,`Reported model`)),1),y(`th`,null,m(_(k)(`会话`,`Session`)),1),y(`th`,null,m(_(k)(`用量`,`Usage`)),1),y(`th`,null,m(_(k)(`证据来源`,`Provenance`)),1),y(`th`,null,m(_(k)(`时间`,`Time`)),1)])]),y(`tbody`,null,[(r(!0),x(p,null,i(n.value,e=>(r(),x(`tr`,{key:e.id},[y(`td`,null,[o(m(c(e.seatId)),1),y(`small`,null,`#`+m(e.seq)+` · `+m(_(A)(e.kind)),1)]),y(`td`,null,m(e.actual?.applicationLabel||e.actual?.reportedApplication||e.actual?.sourceApplication||_(k)(`未知`,`Unknown`)),1),y(`td`,null,m(e.actual?.model||_(k)(`未知`,`Unknown`)),1),y(`td`,null,m(e.actual?.sessionId||_(k)(`未知`,`Unknown`)),1),y(`td`,null,m(h(e.actual?.usage)),1),y(`td`,null,[o(m(_(k)(`参与端报告`,`Participant reported`)),1),y(`small`,null,m(_(k)(`身份未独立验证`,`Identity not independently verified`)),1)]),y(`td`,null,m(_(O)(e.createdAt)),1)]))),128))])])])):(r(),x(`p`,wt,m(_(k)(`尚无实际运行回执。`,`No actual runtime receipts yet.`)),1))]))}}),Et={class:`rt-panel rt-event-details`},Dt={class:`rt-muted`},Ot={key:0,class:`rt-table-scroll`},kt={"data-testid":`turn-attempts`},At={key:1,class:`rt-muted`},jt={class:`rt-muted`},Mt={class:`rt-message-body`},Nt={key:2,class:`rt-muted`},Pt={class:`rt-events`},Ft={key:0},It=b({__name:`RoundtableEvents`,props:{snapshot:{}},setup(e){let t=e,n=e=>t.snapshot.room.seats.find(t=>t.id===e)?.name??e;return(t,a)=>(r(),x(`details`,Et,[y(`summary`,null,m(_(k)(`回合尝试、恢复与历史事件`,`Turn attempts, recovery and history`)),1),y(`p`,Dt,m(_(k)(`领取回合代表运行租约。下表保留失败、受阻、中断与取消请求,领取本身不证明已调用模型。`,`Claiming a turn creates a lease. This history retains failed, blocked and interrupted attempts and cancellation requests. A claim alone does not prove model execution.`)),1),e.snapshot.attempts?.length?(r(),x(`div`,Ot,[y(`table`,kt,[y(`thead`,null,[y(`tr`,null,[y(`th`,null,m(_(k)(`参与者`,`Participant`)),1),y(`th`,null,m(_(k)(`尝试`,`Attempt`)),1),y(`th`,null,m(_(k)(`状态`,`Status`)),1),y(`th`,null,m(_(k)(`领取时间`,`Claimed at`)),1),y(`th`,null,m(_(k)(`结束时间`,`Finished at`)),1)])]),y(`tbody`,null,[(r(!0),x(p,null,i(e.snapshot.attempts,e=>(r(),x(`tr`,{key:`${e.turnId}:${e.id}`},[y(`td`,null,m(n(e.seatId)),1),y(`td`,null,m(e.id),1),y(`td`,null,m(_(A)(e.status)),1),y(`td`,null,m(_(O)(e.startedAt)),1),y(`td`,null,m(e.finishedAt?_(O)(e.finishedAt):`—`),1)]))),128))])])])):(r(),x(`p`,At,m(_(k)(`尚无回合尝试。`,`No turn attempts yet.`)),1)),y(`h3`,null,m(_(k)(`过期结果存档`,`Stale result archive`)),1),y(`p`,jt,m(_(k)(`晚到结果保留在历史中,不替代当前讨论或交付结论。`,`Late results remain in history and do not replace current discussion or delivery outcomes.`)),1),(r(!0),x(p,null,i(e.snapshot.lateResults??[],e=>(r(),x(`article`,{key:`${e.turnId}:${e.attemptId}`,class:`rt-message`},[y(`strong`,null,m(n(e.seatId))+` · `+m(_(O)(e.receivedAt)),1),y(`p`,Mt,m(e.body),1),y(`small`,null,m(e.turnId)+` / `+m(e.attemptId),1)]))),128)),e.snapshot.lateResults?.length?u(``,!0):(r(),x(`p`,Nt,m(_(k)(`没有过期结果。`,`No stale results.`)),1)),y(`h3`,null,m(_(k)(`状态事件`,`Status events`)),1),y(`ol`,Pt,[(r(!0),x(p,null,i(e.snapshot.events??[],e=>(r(),x(`li`,{key:e.id},[y(`span`,null,m(_(A)(e.kind)),1),o(` · `+m(_(O)(e.createdAt)),1),e.kind===`cancellation_requested`&&e.confirmed!==!0?(r(),x(`small`,Ft,` · `+m(_(k)(`取消尚未确认`,`Cancellation not confirmed`)),1)):u(``,!0)]))),128))])]))}}),Lt={class:`rt-detail`},Rt={class:`rt-panel rt-room-heading`},zt={class:`rt-section-heading`},Bt={class:`rt-eyebrow`},Vt=[`data-status`],Ht={class:`rt-meta`},Ut={key:0,class:`rt-warning`},Wt={class:`rt-actions`},Gt=[`disabled`],Kt=[`disabled`],qt=[`disabled`],Jt=[`disabled`],Yt=[`disabled`],Xt={key:1,class:`rt-muted`},Zt={key:3,class:`rt-confirm`},Qt={class:`rt-field`},$t=[`disabled`],en={key:4,class:`rt-error`,role:`alert`},tn={key:5,class:`rt-advanced`},nn={class:`rt-muted`},rn={class:`rt-limit-form`},an={class:`rt-field`},on={class:`rt-field`},sn={class:`rt-field`},cn={class:`rt-field`},ln=[`disabled`],un={class:`rt-panel`,"aria-labelledby":`rt-messages-title`},dn={class:`rt-section-heading`},fn={id:`rt-messages-title`},pn={key:0,class:`rt-current-turn`},mn={key:0},hn={class:`rt-messages`,"aria-live":`polite`,"aria-relevant":`additions`},gn={class:`rt-section-heading`},_n={class:`rt-message-body`},vn={key:0,class:`rt-empty`},yn=[`disabled`],bn={class:`rt-field`},xn=[`placeholder`],Sn=[`disabled`],Cn={key:1},wn={key:3,class:`rt-advanced`},Tn={class:`rt-muted`},En={class:`rt-field`},Dn={class:`rt-actions`},On=[`disabled`],kn=[`disabled`],An=[`disabled`],jn={key:0,class:`rt-panel`},Mn=[`disabled`],Nn={key:0,class:`rt-confirm`},Pn=[`disabled`],Fn=b({__name:`RoundtableDetail`,props:{snapshot:{},refreshing:{type:Boolean}},emits:[`refresh`],setup(e,{emit:t}){let d=e,v=t,b=c(``),w=c(``),T=c(``),E=c(``),D=c(!1),j=c(!1),M=c(3),P=c(30),F=c(30),I=c(5),L=l(()=>d.snapshot.room),R=l(()=>[`concluded`,`failed`,`cancelled`].includes(L.value.status)),z=l(()=>L.value.seats.every(e=>e.joinedAt)),B=l(()=>L.value.status===`active`&&L.value.phase===`discussion`&&(L.value.round??1)>1&&d.snapshot.currentTurn?.status===`pending`&&L.value.phaseIndex===0),V=l(()=>[`paused`,`waiting_input`].includes(L.value.status)&&d.snapshot.currentTurn&&![`pending`,`claimed`].includes(d.snapshot.currentTurn.status)),H=l(()=>d.snapshot.currentTurn&&d.snapshot.currentTurn.status!==`claimed`&&[`discussion`,`planning`].includes(L.value.phase)),U=l(()=>!d.snapshot.currentTurn||[`pending`,`claimed`].includes(d.snapshot.currentTurn.status)),W=e=>L.value.seats.find(t=>t.id===e)?.name??e??k(`系统`,`System`);a(()=>L.value.id,()=>{b.value=``,w.value=``,D.value=!1,j.value=!1}),a(()=>`${L.value.id}:${JSON.stringify(L.value.limits)}`,()=>{let e=L.value.limits;M.value=e.maxRounds,P.value=e.maxMessages,F.value=e.maxDurationMs/6e4,I.value=e.turnTimeoutMs/6e4},{immediate:!0});async function G(){if(!T.value){T.value=`update_limits`,w.value=``;try{await N.control(L.value.id,`update_limits`,L.value.revision,``,{maxRounds:M.value,maxMessages:P.value,maxDurationMs:Math.round(F.value*6e4),turnTimeoutMs:Math.round(I.value*6e4)}),v(`refresh`)}catch(e){w.value=e instanceof Error?e.message:k(`更新停止条件失败`,`Could not update limits`),v(`refresh`)}finally{T.value=``}}}async function K(e){if(!T.value){T.value=e,w.value=``;try{await N.control(L.value.id,e,L.value.revision,E.value.trim()),D.value=!1,j.value=!1,E.value=``,v(`refresh`)}catch(e){w.value=e instanceof Error?e.message:k(`操作失败`,`Action failed`),v(`refresh`)}finally{T.value=``}}}async function ee(){if(!(!b.value.trim()||T.value)){T.value=`message`,w.value=``;try{await N.message(L.value.id,b.value.trim()),b.value=``,v(`refresh`)}catch(e){w.value=e instanceof Error?e.message:k(`发送失败`,`Could not send`)}finally{T.value=``}}}let te={start:`开始圆桌 · Starting roundtable`,pause:`暂停圆桌 · Pausing roundtable`,resume:`恢复圆桌 · Resuming roundtable`,stop:`停止圆桌 · Stopping roundtable`,advance_phase:`推进圆桌阶段 · Advancing roundtable phase`,next_round:`开启下一轮讨论 · Starting next discussion round`,retry_turn:`重试当前回合 · Retrying current turn`,skip_turn:`记录跳过回合 · Recording skipped turn`,complete:`记录人工验收 · Recording human acceptance`,update_limits:`更新圆桌停止条件 · Updating roundtable limits`};return(t,a)=>(r(),x(`div`,Lt,[y(`section`,Rt,[y(`div`,zt,[y(`span`,Bt,m(_(A)(L.value.mode))+` · `+m(L.value.binding?.projectId||_(k)(`独立临时任务`,`Independent temporary task`)),1),y(`span`,{class:`rt-tag`,"data-status":L.value.status},m(_(A)(L.value.status)),9,Vt)]),y(`h1`,null,m(L.value.goal),1),y(`div`,Ht,[y(`span`,null,m(_(k)(`阶段`,`Phase`))+`: `+m(_(A)(L.value.phase)),1),y(`span`,null,m(_(k)(`讨论轮数`,`Discussion rounds`))+`: `+m(L.value.round??0)+` / `+m(L.value.limits.maxRounds),1),y(`span`,null,m(_(k)(`Agent 发言`,`Agent messages`))+`: `+m(L.value.agentMessageCount??0)+` / `+m(L.value.limits.maxMessages),1),y(`span`,null,m(_(k)(`总时限`,`Time limit`))+`: `+m(Math.round(L.value.limits.maxDurationMs/6e4))+` `+m(_(k)(`分钟`,`min`)),1)]),L.value.stopReason?(r(),x(`p`,Ut,m(_(k)(`当前原因`,`Current reason`))+`: `+m(L.value.stopReason),1)):u(``,!0),y(`div`,Wt,[L.value.status===`draft`?(r(),x(`button`,{key:0,class:`rt-primary`,type:`button`,disabled:!!T.value||!z.value,onClick:a[0]||=e=>K(`start`)},m(_(k)(`开始圆桌`,`Start roundtable`)),9,Gt)):u(``,!0),L.value.status===`active`?(r(),x(`button`,{key:1,type:`button`,disabled:!!T.value,onClick:a[1]||=e=>K(`pause`)},m(_(k)(`暂停`,`Pause`)),9,Kt)):u(``,!0),[`paused`,`waiting_auth`,`waiting_input`].includes(L.value.status)&&!(L.value.phase===`synthesis`&&e.snapshot.outcome&&!e.snapshot.currentTurn)?(r(),x(`button`,{key:2,type:`button`,disabled:!!T.value||!U.value,onClick:a[2]||=e=>K(`resume`)},m(_(k)(`恢复`,`Resume`)),9,qt)):u(``,!0),R.value?u(``,!0):(r(),x(`button`,{key:3,type:`button`,disabled:!!T.value,onClick:a[3]||=e=>D.value=!D.value},m(_(k)(`停止`,`Stop`)),9,Jt)),y(`button`,{type:`button`,disabled:e.refreshing||!!T.value,onClick:a[4]||=e=>v(`refresh`)},m(_(k)(`刷新`,`Refresh`)),9,Yt)]),L.value.status===`draft`&&!z.value?(r(),x(`p`,Xt,m(_(k)(`先邀请所有席位,在各参与端完成预检并加入后开始。选择平台不会自动启动工作端。`,`Invite every seat and complete preflight and joining on each worker before starting. Choosing an adapter does not start a worker.`)),1)):u(``,!0),T.value&&T.value!==`message`?(r(),S(C,{key:2,variant:`inline`,label:te[T.value]||`更新圆桌 · Updating roundtable`},null,8,[`label`])):u(``,!0),D.value?(r(),x(`div`,Zt,[y(`p`,null,m(_(k)(`停止将拒绝新回合并请求取消当前运行。外部进程是否已取消,以工作端回执为准。`,`Stopping blocks new turns and requests cancellation of the current run. Worker receipts confirm whether external execution stopped.`)),1),y(`label`,Qt,[o(m(_(k)(`停止原因(可选)`,`Stop reason (optional)`)),1),s(y(`input`,{"onUpdate:modelValue":a[5]||=e=>E.value=e,maxlength:`2000`},null,512),[[f,E.value]])]),y(`button`,{type:`button`,disabled:!!T.value,onClick:a[6]||=e=>K(`stop`)},m(_(k)(`确认停止`,`Confirm stop`)),9,$t)])):u(``,!0),w.value?(r(),x(`p`,en,m(w.value),1)):u(``,!0),R.value?u(``,!0):(r(),x(`details`,tn,[y(`summary`,null,m(_(k)(`由你修改停止条件`,`Change limits explicitly`)),1),y(`p`,nn,m(_(k)(`修改后仍需明确恢复;总时限从最初开始时间计算。服务端限制可设置的最大预算,Agent 不会自动扩展。`,`After updating, resume explicitly. Total duration is measured from the original start. The server caps the allowed budget; agents do not increase it automatically.`)),1),y(`form`,{class:`rt-budget-form`,onSubmit:h(G,[`prevent`])},[y(`div`,rn,[y(`label`,an,[o(m(_(k)(`讨论轮数`,`Discussion rounds`)),1),s(y(`input`,{"onUpdate:modelValue":a[7]||=e=>M.value=e,type:`number`,min:`1`,max:`3`,required:``},null,512),[[f,M.value,void 0,{number:!0}]])]),y(`label`,on,[o(m(_(k)(`Agent 发言上限`,`Agent message limit`)),1),s(y(`input`,{"onUpdate:modelValue":a[8]||=e=>P.value=e,type:`number`,min:`1`,max:`30`,required:``},null,512),[[f,P.value,void 0,{number:!0}]])]),y(`label`,sn,[o(m(_(k)(`总时限(分钟)`,`Total minutes`)),1),s(y(`input`,{"onUpdate:modelValue":a[9]||=e=>F.value=e,type:`number`,min:`0.1`,step:`0.1`,max:`30`,required:``},null,512),[[f,F.value,void 0,{number:!0}]])]),y(`label`,cn,[o(m(_(k)(`单回合(分钟)`,`Minutes per turn`)),1),s(y(`input`,{"onUpdate:modelValue":a[10]||=e=>I.value=e,type:`number`,min:`0.1`,step:`0.1`,max:`5`,required:``},null,512),[[f,I.value,void 0,{number:!0}]])])]),y(`button`,{type:`submit`,disabled:!!T.value},m(_(k)(`确认修改停止条件`,`Confirm limit changes`)),9,ln)],32)]))]),n(nt,{room:L.value,"active-seat-id":e.snapshot.currentTurn?.seatId,onChanged:a[11]||=e=>v(`refresh`)},null,8,[`room`,`active-seat-id`]),y(`section`,un,[y(`div`,dn,[y(`h2`,fn,m(_(k)(`公开讨论`,`Shared discussion`)),1),y(`span`,null,m(e.snapshot.messages.length)+` `+m(_(k)(`条记录`,`records`)),1)]),e.snapshot.currentTurn?(r(),x(`div`,pn,[y(`strong`,null,m(_(k)(`当前回合`,`Current turn`))+` · `+m(W(e.snapshot.currentTurn.seatId)),1),y(`span`,null,m(_(A)(e.snapshot.currentTurn.status))+` · `+m(_(A)(e.snapshot.currentTurn.phase)),1),e.snapshot.currentTurn.deadline?(r(),x(`small`,mn,m(_(k)(`期限`,`Deadline`))+`: `+m(_(O)(e.snapshot.currentTurn.deadline)),1)):u(``,!0)])):u(``,!0),y(`div`,hn,[(r(!0),x(p,null,i(e.snapshot.messages,e=>(r(),x(`article`,{key:e.id,class:g([`rt-message`,{"rt-message-user":[`user`,`human`].includes(e.kind),"rt-message-system":e.kind===`system`}])},[y(`div`,gn,[y(`strong`,null,m(e.kind===`human`?_(k)(`你`,`You`):W(e.seatId)),1),y(`span`,null,m(_(A)(e.kind))+` · #`+m(e.seq),1)]),y(`p`,_n,m(e.body),1),y(`small`,null,m(_(O)(e.createdAt)),1)],2))),128)),e.snapshot.messages.length?u(``,!0):(r(),x(`p`,vn,m(_(k)(`这里会保存按顺序发布的提案、审查、交接和补充要求。`,`Ordered proposals, reviews, handoffs and your additions will appear here.`)),1))]),e.snapshot.hasMore?(r(),x(`button`,{key:1,type:`button`,disabled:e.refreshing,onClick:a[12]||=e=>v(`refresh`)},m(_(k)(`读取后续消息`,`Load remaining messages`)),9,yn)):u(``,!0),R.value?u(``,!0):(r(),x(`form`,{key:2,class:`rt-input-form`,onSubmit:h(ee,[`prevent`])},[y(`label`,bn,[o(m(_(k)(`补充要求`,`Add a requirement`)),1),s(y(`textarea`,{"onUpdate:modelValue":a[13]||=e=>b.value=e,maxlength:`16000`,rows:`3`,placeholder:_(k)(`所有获授权席位可见。不要填写凭据或他人的私有记忆。`,`Visible to all authorized seats. Keep credentials and others’ private memory out.`)},null,8,xn),[[f,b.value]])]),y(`button`,{type:`submit`,disabled:!b.value.trim()||!!T.value},[T.value===`message`?(r(),S(C,{key:0,variant:`inline`,label:`发送补充要求 · Sending requirement`})):(r(),x(`span`,Cn,m(_(k)(`发送`,`Send`)),1))],8,Sn)],32)),R.value?u(``,!0):(r(),x(`details`,wn,[y(`summary`,null,m(_(k)(`主持与恢复操作`,`Moderation and recovery`)),1),y(`p`,Tn,m(_(k)(`每位参与者完成回合后自动安排下一位和下一轮。完整一轮之后,可在下一轮开始前提前推进阶段。服务端检查阶段、预算与任务依赖,必需实施和审查不能跳过。`,`Turns and rounds advance automatically as participants finish. After a complete round, you may advance the phase before the next round starts. The server checks phases, limits and dependencies; required implementation and review cannot be skipped.`)),1),y(`label`,En,[o(m(_(k)(`操作原因(跳过回合时必填)`,`Reason (required when skipping a turn)`)),1),s(y(`input`,{"onUpdate:modelValue":a[14]||=e=>E.value=e,maxlength:`2000`},null,512),[[f,E.value]])]),y(`div`,Dn,[y(`button`,{type:`button`,disabled:!!T.value||!B.value,onClick:a[15]||=e=>K(`advance_phase`)},m(_(k)(`提前推进阶段`,`Advance phase early`)),9,On),y(`button`,{type:`button`,disabled:!!T.value||!V.value,onClick:a[16]||=e=>K(`retry_turn`)},m(_(k)(`重试回合`,`Retry turn`)),9,kn),y(`button`,{type:`button`,disabled:!!T.value||!H.value||!E.value.trim(),onClick:a[17]||=e=>K(`skip_turn`)},m(_(k)(`记录并跳过回合`,`Record and skip turn`)),9,An)])]))]),n(Tt,{snapshot:e.snapshot},null,8,[`snapshot`]),n(It,{snapshot:e.snapshot},null,8,[`snapshot`]),L.value.status===`waiting_input`&&L.value.phase===`synthesis`&&e.snapshot.outcome?(r(),x(`section`,jn,[y(`h2`,null,m(_(k)(`由你验收`,`Your acceptance`)),1),y(`p`,null,m(_(k)(`检查结论、保留分歧、产物和验证报告后,明确记录是否接受交付。人工接受不会制造模型用量或工作进程证据。`,`Review the conclusion, dissent, artifacts and verification reports before accepting delivery. Acceptance does not create model usage or worker evidence.`)),1),y(`button`,{type:`button`,disabled:!!T.value,onClick:a[18]||=e=>j.value=!j.value},m(_(k)(`检查并接受交付`,`Review and accept delivery`)),9,Mn),j.value?(r(),x(`div`,Nn,[y(`p`,null,m(_(k)(`此操作记录你的人工验收,并结束本圆桌。`,`This records your acceptance and concludes this room.`)),1),y(`button`,{class:`rt-primary`,type:`button`,disabled:!!T.value,onClick:a[19]||=e=>K(`complete`)},m(_(k)(`确认接受交付`,`Confirm acceptance`)),9,Pn),y(`button`,{type:`button`,onClick:a[20]||=e=>j.value=!1},m(_(k)(`继续检查`,`Keep reviewing`)),1)])):u(``,!0)])):u(``,!0)]))}});function In(t){let n=c([]),r=c(null),i=c(!1),o=c(``),s=c(!1),l=0,u=!1,d;async function f(){if(i.value||u)return;let e=l,a=t.value;i.value=!0;try{let t=r.value?.messages.at(-1)?.seq??0,i=a?await N.read(a,t):await N.list();if(u||e!==l)return;if(`room`in i){let e=new Map([...r.value?.messages??[],...i.messages].map(e=>[e.id,e]));r.value={...i,messages:[...e.values()].sort((e,t)=>e.seq-t.seq)}}else n.value=i.rooms;s.value=!0,o.value=``}catch(t){!u&&e===l&&(o.value=t instanceof Error?t.message:k(`读取圆桌失败`,`Could not read roundtable`))}finally{e===l&&(i.value=!1)}}function p(){u||(d=setTimeout(async()=>{await f(),p()},4e3))}return a(t,async()=>{l++,i.value=!1,r.value=null,o.value=``,s.value=!1;let e=l;d&&clearTimeout(d),await f(),e===l&&p()},{immediate:!0}),e(()=>{u=!0,l++,d&&clearTimeout(d)}),{rooms:n,snapshot:r,loading:i,loaded:s,error:o,refresh:f}}var Ln={class:`rt-workspace`},Rn={class:`rt-page-header`},zn={class:`rt-breadcrumb`},Bn={class:`rt-actions`},Vn={class:`rt-page-content`},Hn={key:0,class:`rt-error rt-panel`,role:`alert`},Un=[`disabled`],Wn={key:2,class:`rt-refresh-status`},Gn={class:`rt-intro`},Kn={class:`rt-eyebrow`},qn={class:`rt-panel`,"aria-labelledby":`rt-list-title`},Jn={class:`rt-section-heading`},Yn={id:`rt-list-title`},Xn=[`disabled`],Zn={key:0,class:`rt-room-list`},Qn={class:`rt-section-heading`},$n={class:`rt-tag`},er={key:1,class:`rt-empty`},tr={class:`rt-panel rt-capability-map`,"aria-labelledby":`rt-map-title`},nr={class:`rt-eyebrow`},rr={id:`rt-map-title`},ir={class:`rt-tag`},ar={class:`rt-muted`},or=b({__name:`RoundtablesPage`,setup(e){let a=T(),s=w(),d=l(()=>typeof a.params.roomId==`string`?a.params.roomId:``),{rooms:f,snapshot:h,loading:g,loaded:v,error:b,refresh:j}=In(d),M=c(!1),N=l(()=>d.value?!!h.value:v.value||M.value);async function P(e){M.value=!1,await s.push(`/roundtables/${encodeURIComponent(e)}`)}return(e,a)=>(r(),x(`main`,Ln,[y(`header`,Rn,[y(`div`,null,[n(_(E),{class:`rt-brand`,to:`/`},{default:t(()=>[a[4]||=o(`Fuli `,-1),y(`span`,null,m(_(k)(`复利`,``)),1)]),_:1}),y(`div`,zn,[n(_(E),{to:`/roundtables`},{default:t(()=>[o(m(_(k)(`Agent 圆桌`,`Agent Roundtable`)),1)]),_:1}),a[5]||=y(`span`,{class:`rt-tag`},`Beta`,-1)])]),y(`div`,Bn,[d.value?(r(),S(_(E),{key:0,to:`/roundtables`},{default:t(()=>[o(m(_(k)(`全部圆桌`,`All roundtables`)),1)]),_:1})):u(``,!0),n(_(E),{to:`/project-agents`},{default:t(()=>[o(m(_(k)(`Agent 目录`,`Agent directory`)),1)]),_:1}),n(D)])]),y(`div`,Vn,[_(b)?(r(),x(`div`,Hn,[y(`strong`,null,m(_(k)(`读取失败,保留已加载内容`,`Could not refresh; loaded content is preserved`)),1),y(`p`,null,m(_(b)),1),y(`button`,{type:`button`,disabled:_(g),onClick:a[0]||=(...e)=>_(j)&&_(j)(...e)},m(_(k)(`重试`,`Retry`)),9,Un)])):u(``,!0),_(g)&&!N.value?(r(),S(C,{key:1,label:d.value?`读取圆桌与公开消息 · Loading roundtable and shared messages`:`读取圆桌列表 · Loading roundtable list`},null,8,[`label`])):u(``,!0),_(g)&&N.value?(r(),x(`div`,Wn,[n(C,{variant:`inline`,label:d.value?`刷新圆桌与公开消息 · Refreshing roundtable and shared messages`:`刷新圆桌列表 · Refreshing roundtable list`},null,8,[`label`])])):u(``,!0),_(h)?(r(),S(Fn,{key:_(h).room.id,snapshot:_(h),refreshing:_(g),onRefresh:_(j)},null,8,[`snapshot`,`refreshing`,`onRefresh`])):d.value?u(``,!0):(r(),x(p,{key:4},[y(`section`,Gn,[y(`div`,null,[y(`p`,Kn,m(_(k)(`一起讨论,分别执行,共同交付`,`Discuss together. Execute independently. Deliver with evidence.`)),1),y(`h1`,null,m(_(k)(`让不同 Agent 围绕同一个目标工作。`,`Bring different agents around one shared goal.`)),1),y(`p`,null,m(_(k)(`身份和长期知识由 Fuli 管理。本次讨论、分工、回合与结果留在圆桌里,执行由获授权的参与端完成。`,`Fuli manages identity and lasting knowledge. This roundtable keeps discussion, tasks, turns and outcomes; authorized participant workers perform execution.`)),1)]),y(`button`,{class:`rt-primary`,type:`button`,onClick:a[1]||=e=>M.value=!M.value},m(_(k)(`创建圆桌`,`Create roundtable`)),1)]),M.value?(r(),S(q,{key:0,onCreated:P,onCancel:a[2]||=e=>M.value=!1})):u(``,!0),y(`section`,qn,[y(`div`,Jn,[y(`h2`,Yn,m(_(k)(`你的圆桌`,`Your roundtables`)),1),y(`button`,{type:`button`,disabled:_(g),onClick:a[3]||=(...e)=>_(j)&&_(j)(...e)},m(_(k)(`刷新`,`Refresh`)),9,Xn)]),_(f).length?(r(),x(`div`,Zn,[(r(!0),x(p,null,i(_(f),e=>(r(),S(_(E),{key:e.id,class:`rt-room-card`,to:`/roundtables/${encodeURIComponent(e.id)}`},{default:t(()=>[y(`div`,Qn,[y(`span`,$n,m(_(A)(e.status)),1),y(`small`,null,m(_(A)(e.mode)),1)]),y(`h3`,null,m(e.goal),1),y(`p`,null,m(_(A)(e.phase))+` · `+m(e.seats.length)+` `+m(_(k)(`位参与者`,`participants`)),1),y(`small`,null,m(_(O)(e.updatedAt||e.createdAt)),1)]),_:2},1032,[`to`]))),128))])):!_(g)&&!_(b)?(r(),x(`p`,er,m(_(k)(`还没有圆桌。创建一个目标明确的讨论或协作任务,邀请独立参与者加入。`,`No roundtables yet. Create a focused discussion or collaborative task and invite independent participants.`)),1)):u(``,!0)]),y(`section`,tr,[y(`p`,nr,m(_(k)(`完整产品版图`,`Product capability map`)),1),y(`h2`,rr,m(_(k)(`同一个协作层,连接长期知识与实际工作。`,`One collaboration layer connects lasting knowledge to real work.`)),1),y(`ol`,null,[y(`li`,null,[y(`span`,ir,m(_(k)(`已提供`,`Available`)),1),y(`strong`,null,m(_(k)(`身份与知识`,`Identity and knowledge`)),1),y(`p`,null,m(_(k)(`Agent 职责、项目范围、确认状态与时间历史。按需读取,不因同桌共享私有记忆。`,`Agent roles, project scope, confirmation and temporal history. Retrieved on demand; shared rooms do not expose private memory.`)),1)]),y(`li`,null,[a[6]||=y(`span`,{class:`rt-tag`},`Beta`,-1),y(`strong`,null,m(_(k)(`圆桌协作`,`Roundtable coordination`)),1),y(`p`,null,m(_(k)(`共同目标 → 讨论 → 分工 → 实施 → 审查 → 汇总与人工验收。`,`Shared goal → discussion → planning → implementation → review → synthesis and human acceptance.`)),1)]),y(`li`,null,[a[7]||=y(`span`,{class:`rt-tag`},`Beta`,-1),y(`strong`,null,m(_(k)(`开放接入`,`Open adapters`)),1),y(`p`,null,m(_(k)(`CLI、MCP、xAI API;A2A 按已验证的协议能力试验接入。需要可调用接口、凭据和运行端。`,`CLI, MCP and xAI API. A2A is experimental within verified protocol capabilities. Requires a callable interface, credentials and a worker.`)),1)]),y(`li`,null,[a[8]||=y(`span`,{class:`rt-tag`},`Beta`,-1),y(`strong`,null,m(_(k)(`跨电脑交付`,`Delivery across computers`)),1),y(`p`,null,m(_(k)(`一台协调端,各参与端主动领取授权回合;公开消息、分歧、产物和实际来源一起保留。`,`One coordinator; workers pull authorized turns. Shared messages, dissent, artifacts and actual sources stay together.`)),1)])]),y(`p`,ar,m(_(k)(`Grok API 席位与现有 Grok Bot 分开:前者由工作端调用 xAI,后者需要在官方自定义 HTTPS MCP 设置中主动配置。没有开放接口的平台、云端常驻和完整 A2A 兼容仍待支持。Beta 能力不等于已通过每种模型、客户端和电脑的真实验收。`,`Grok API seats and existing Grok Bots are distinct: workers call xAI for the former; the latter require explicit setup through official HTTPS MCP settings. Closed platforms, always-on cloud hosting and full A2A compatibility remain future work. Beta availability does not imply live verification of every model, client and computer.`)),1)])],64))])]))}});export{or as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.rt-workspace{color:#233b2c;background:#f5f7f5;min-height:100dvh}.rt-workspace *{box-sizing:border-box}.rt-page-header{background:#fff;border-bottom:1px solid #dde6df;justify-content:space-between;align-items:center;gap:20px;padding:22px max(24px,50% - 610px);display:flex}.rt-page-header>div:first-child{align-items:center;gap:24px;display:flex}.rt-brand{color:#315c43;font-size:23px;font-weight:750;text-decoration:none}.rt-brand span{font-size:14px}.rt-breadcrumb{align-items:center;gap:10px;display:flex}.rt-breadcrumb a,.rt-actions>a{color:#315c43;text-decoration:none}.rt-page-content{max-width:1220px;margin:0 auto;padding:28px 24px 64px}.rt-detail{gap:20px;display:grid}.rt-panel{background:#fff;border:1px solid #dce5de;border-radius:14px;min-width:0;margin-bottom:20px;padding:24px}.rt-detail .rt-panel{margin-bottom:0}.rt-section-heading{justify-content:space-between;align-items:center;gap:14px;display:flex}.rt-section-heading h2,.rt-section-heading h3{margin:0}.rt-panel h2{font-size:20px}.rt-panel h3{margin-top:26px;font-size:16px}.rt-panel p{line-height:1.7}.rt-muted,.rt-meta,.rt-panel small{color:#5e7165;font-size:13px}.rt-muted{overflow-wrap:anywhere}.rt-eyebrow{color:#53775e;letter-spacing:.02em;font-size:12px;font-weight:650}.rt-tag{color:#385b44;background:#f1f7f2;border:1px solid #d5e2d9;border-radius:20px;flex-shrink:0;padding:3px 9px;font-size:12px;display:inline-block}.rt-intro{justify-content:space-between;align-items:center;gap:30px;padding:15px 0 35px;display:flex}.rt-intro h1{letter-spacing:-.03em;max-width:24ch;margin:12px 0;font-size:clamp(26px,3vw,37px);line-height:1.35}.rt-intro p:last-child{color:#5e7165;max-width:75ch;font-size:14px;line-height:1.7}.rt-intro button{flex-shrink:0}.rt-workspace button{color:#315c43;min-height:38px;font:inherit;cursor:pointer;background:#fff;border:1px solid #bdcdbf;border-radius:7px;padding:8px 13px;font-size:13px}.rt-workspace button:hover:not(:disabled){background:#edf5ee}.rt-workspace button:disabled{opacity:.48;cursor:not-allowed}.rt-workspace button.rt-primary{color:#fff;background:#315c43;border-color:#315c43}.rt-workspace button.rt-primary:hover:not(:disabled){background:#244933}.rt-workspace :focus-visible{outline-offset:3px;outline:3px solid #a8c9b0}.rt-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.rt-actions a{font-size:13px}.rt-field{gap:7px;min-width:0;margin:16px 0;font-size:13px;display:grid}.rt-field input,.rt-field textarea,.rt-field select{color:#233b2c;width:100%;min-width:0;font:inherit;background:#fff;border:1px solid #cbd9ce;border-radius:7px;padding:10px 11px;font-size:14px}.rt-field textarea{resize:vertical;line-height:1.6}.rt-seat-form{grid-template-columns:1fr 1fr 1.2fr auto;align-items:end;gap:12px;padding:4px 0;display:grid}.rt-seat-form .rt-field{margin:6px 0}.rt-seat-form>button{margin-bottom:6px}.rt-seat-permission{background:#f5f7f5;border-radius:7px;grid-column:1/-1;padding:10px 14px;font-size:13px}.rt-seat-permission label:not(.rt-field){align-items:center;gap:8px;display:flex}.rt-limit-form{grid-template-columns:repeat(4,1fr);gap:16px;display:grid}.rt-advanced{border:1px solid #dce5de;border-radius:8px;margin:22px 0;padding:16px}.rt-advanced summary{cursor:pointer;font-size:13px;font-weight:600}.rt-warning{color:#875b23;background:#fff8ed;border-radius:6px;padding:10px 14px;font-size:13px}.rt-error{color:#993e32;overflow-wrap:anywhere;background:#fff5f1}.rt-error:not(.rt-panel){border-radius:7px;padding:12px}.rt-empty{color:#617366;padding:20px 0;font-size:14px}.rt-room-list{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:20px;display:grid}.rt-room-card{color:inherit;border:1px solid #dce5de;border-radius:10px;padding:18px;text-decoration:none;transition:border-color .15s}.rt-room-card:hover{border-color:#72947d}.rt-room-card h3{overflow-wrap:anywhere;margin-top:16px;font-size:16px}.rt-room-card p{font-size:13px}.rt-room-heading h1{overflow-wrap:anywhere;margin:20px 0;font-size:clamp(22px,3vw,30px);line-height:1.45}.rt-meta{flex-wrap:wrap;gap:12px 22px;margin:20px 0;display:flex}.rt-seats{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.rt-seat{background:#fafcfb;border:1px solid #dce5de;border-radius:9px;min-width:0;padding:16px}.rt-seat-current{background:#f0f7f2;border-color:#71937b}.rt-seat p{margin:9px 0;font-size:13px}.rt-seat strong{overflow-wrap:anywhere}.rt-seat .rt-actions{gap:8px;margin-top:14px}.rt-seat button{padding:6px 9px;font-size:12px}.rt-invite,.rt-confirm{background:#f6faf7;border:1px solid #bfd1c3;border-radius:9px;margin-top:18px;padding:20px}.rt-invite h3{margin:0}.rt-invite pre{color:#eff7f0;white-space:pre-wrap;overflow-wrap:anywhere;background:#233b2c;border-radius:8px;padding:16px;font-size:12px;line-height:1.7}.rt-invite>label:not(.rt-field){font-size:13px;display:block}.rt-confirm button{margin-right:8px}.rt-current-turn{background:#f0f7f2;border-radius:8px;flex-wrap:wrap;gap:10px 16px;margin:18px 0;padding:14px;font-size:13px;display:flex}.rt-current-turn small{flex-basis:100%}.rt-messages{scrollbar-gutter:stable;max-height:680px;margin:20px 0;overflow:auto}.rt-message{border-bottom:1px solid #e6ede8;padding:18px 0}.rt-message .rt-section-heading span{color:#617366;font-size:12px}.rt-message-system{background:#fafcfb;border-radius:8px;padding:12px}.rt-message-user{border-left:3px solid #71937b;padding-left:14px}.rt-message-body{white-space:pre-wrap;overflow-wrap:anywhere;font-size:14px}.rt-table-scroll{max-width:100%;overflow-x:auto}.rt-table-scroll table{text-align:left;border-collapse:collapse;width:100%;font-size:12px}.rt-table-scroll th{white-space:nowrap;color:#5e7165;font-weight:600}.rt-table-scroll th,.rt-table-scroll td{overflow-wrap:anywhere;vertical-align:top;border-bottom:1px solid #e6ede8;max-width:250px;padding:13px 12px}.rt-table-scroll small{margin-top:5px;font-size:11px;display:block}.rt-dissent{border-left:3px solid #cea967;padding-left:16px;font-size:13px}.rt-artifacts{overflow-wrap:anywhere;padding-left:20px;font-size:13px;line-height:1.8}.rt-refresh-status{color:#5e7165;margin:0 0 16px;font-size:12px}.rt-capability-map ol{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin:26px 0;padding:0;list-style:none;display:grid}.rt-capability-map li{border-left:2px solid #c4d7ca;padding-left:16px}.rt-capability-map li strong{margin-top:12px;font-size:16px;display:block}.rt-capability-map li p{color:#5e7165;font-size:13px}.rt-event-details>summary{cursor:pointer;font-size:15px;font-weight:650}.rt-events{color:#5e7165;padding-left:20px;font-size:12px;line-height:1.9}@media (width<=850px){.rt-seats,.rt-room-list,.rt-capability-map ol{grid-template-columns:repeat(2,minmax(0,1fr))}.rt-page-header{flex-wrap:wrap;padding:18px 20px}.rt-intro{flex-direction:column;align-items:flex-start;gap:10px}.rt-limit-form{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=520px){.rt-page-content{padding:20px 14px 40px}.rt-panel{border-radius:10px;padding:18px 14px}.rt-seats,.rt-room-list,.rt-capability-map ol{grid-template-columns:1fr}.rt-page-header{gap:15px;padding:16px 14px}.rt-page-header>div:first-child,.rt-page-header .rt-actions{gap:14px}.rt-seat-form{grid-template-columns:1fr 1fr auto;gap:9px}.rt-seat-form>.rt-field:first-child,.rt-seat-permission{grid-column:1/-1}.rt-section-heading{align-items:flex-start}.rt-message .rt-section-heading{flex-wrap:wrap;gap:5px}.rt-invite{padding:14px}.rt-workspace button{min-height:42px}.rt-breadcrumb{font-size:14px}.rt-meta{gap:8px 14px}.rt-intro h1{font-size:27px}}@media (prefers-reduced-motion:reduce){.rt-room-card{transition:none}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,L as t,M as n,P as r,R as i,V as a,X as o,_ as s,a as c,b as l,d as u,h as d,it as f,j as p,k as m,m as h,n as ee,nt as g,tt as _,v,w as y,x as b}from"./i18n-D2CJkEYK.js";var x=[`data-select-id`],S=[`value`,`name`,`required`,`disabled`],C=[`value`,`disabled`],w=[`aria-expanded`,`aria-controls`,`aria-label`,`disabled`],T={class:`searchable-select-current`},E={class:`searchable-select-current-label`},D={key:0,class:`searchable-select-current-meta`},O=[`hidden`],te={key:0,class:`searchable-select-search`},ne=[`placeholder`,`aria-label`],re=[`id`],ie=[`aria-selected`,`disabled`,`onClick`,`onKeydown`],ae={class:`searchable-select-option-copy`},oe={key:0},se={key:1,class:`searchable-select-empty`},k=y({__name:`SearchableSelect`,props:{modelValue:{},options:{},label:{},controlId:{default:void 0},placeholder:{default:void 0},searchPlaceholder:{default:void 0},searchable:{type:Boolean,default:void 0},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},name:{default:void 0}},emits:[`update:modelValue`,`change`],setup(y,{emit:k}){let A=y,j=k,M=o(null),N=o(null),P=o(null),F=o(null),I=o(!1),L=o(!1),R=o(``),z=t().replace(/[^A-Za-z0-9_-]/g,``),B=s(()=>A.label),V=s(()=>A.placeholder??c(`common.searchableSelect.placeholder`)),H=s(()=>A.searchPlaceholder??c(`common.searchableSelect.searchPlaceholder`)),U=s(()=>`${A.controlId||`searchable-select-${z}`}-options`),W=s(()=>A.options.find(({value:e})=>e===A.modelValue)??null),G=s(()=>A.searchable??A.options.length>5),K=s(()=>{let e=ee(),t=R.value.trim().toLocaleLowerCase(e);return t?A.options.filter(n=>[n.label,n.value,n.meta,n.search].filter(Boolean).join(` `).toLocaleLowerCase(e).includes(t)):A.options});i(()=>A.disabled,e=>{e&&J()}),p(()=>{document.addEventListener(`pointerdown`,X)}),e(()=>{document.removeEventListener(`pointerdown`,X)});async function ce(){I.value?J():await q()}async function q(){A.disabled||(R.value=``,pe(),I.value=!0,await m(),G.value?P.value?.focus():fe()?.focus())}function J({restoreFocus:e=!1}={}){I.value=!1,L.value=!1,R.value=``,e&&m(()=>N.value?.focus())}function Y(e){A.disabled||e.disabled||(j(`update:modelValue`,e.value),j(`change`,e.value),J({restoreFocus:!0}))}function le(e){[`ArrowDown`,`Enter`,` `].includes(e.key)&&(e.preventDefault(),q())}function ue(e){if(e.key===`Escape`){e.preventDefault(),J({restoreFocus:!0});return}if(e.key===`ArrowDown`){e.preventDefault(),$()?.focus();return}e.key===`Enter`&&(e.preventDefault(),$()?.click())}function de(e,t){if(e.key===`Enter`||e.key===` `){e.preventDefault(),Y(t);return}if(e.key===`Escape`){e.preventDefault(),J({restoreFocus:!0});return}if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key))return;e.preventDefault();let n=Q(),r=n.indexOf(e.currentTarget);n[e.key===`Home`?0:e.key===`End`?n.length-1:e.key===`ArrowDown`?Math.min(n.length-1,r+1):Math.max(0,r-1)]?.focus()}function X(e){I.value&&!M.value?.contains(e.target)&&J()}function Z(e){let t=e.relatedTarget;t&&M.value?.contains(t)||queueMicrotask(()=>{I.value&&!M.value?.contains(document.activeElement)&&J()})}function Q(){return[...F.value?.querySelectorAll(`.searchable-select-option:not(:disabled)`)??[]]}function $(){return Q()[0]??null}function fe(){return Q().find(e=>e.getAttribute(`aria-selected`)===`true`)??$()}function pe(){let e=N.value?.getBoundingClientRect();L.value=!!(e&&window.innerHeight-e.bottom<270&&e.top>270)}return(e,t)=>(n(),b(`div`,{ref_key:`root`,ref:M,class:g([`searchable-select`,{open:I.value,"open-up":L.value,disabled:y.disabled}]),"data-select-id":y.controlId,onFocusout:Z},[v(`select`,{class:`searchable-select-native`,value:y.modelValue,name:y.name,required:y.required,disabled:y.disabled,tabindex:`-1`,"aria-hidden":`true`},[(n(!0),b(d,null,r(y.options,e=>(n(),b(`option`,{key:e.value,value:e.value,disabled:e.disabled},f(e.label),9,C))),128))],8,S),v(`button`,{ref_key:`trigger`,ref:N,type:`button`,class:`searchable-select-trigger`,role:`combobox`,"aria-haspopup":`listbox`,"aria-expanded":I.value,"aria-controls":U.value,"aria-label":B.value,disabled:y.disabled,onPointerdown:t[0]||=h(()=>{},[`stop`]),onClick:h(ce,[`stop`]),onKeydown:le},[v(`span`,T,[v(`span`,E,f(W.value?.label||V.value),1),W.value?.meta?(n(),b(`small`,D,f(W.value.meta),1)):l(``,!0)]),t[3]||=v(`i`,{class:`searchable-select-arrow`,"aria-hidden":`true`},null,-1)],40,w),v(`div`,{class:`searchable-select-panel`,hidden:!I.value},[G.value?(n(),b(`div`,te,[a(v(`input`,{ref_key:`searchInput`,ref:P,"onUpdate:modelValue":t[1]||=e=>R.value=e,type:`search`,autocomplete:`off`,placeholder:H.value,"aria-label":_(c)(`common.searchableSelect.searchAria`,{label:B.value}),onKeydown:ue},null,40,ne),[[u,R.value]])])):l(``,!0),v(`div`,{id:U.value,ref_key:`optionsList`,ref:F,class:`searchable-select-options`,role:`listbox`},[(n(!0),b(d,null,r(K.value,e=>(n(),b(`button`,{key:e.value,type:`button`,class:`searchable-select-option`,role:`option`,"aria-selected":e.value===y.modelValue,disabled:e.disabled,onMousedown:t[2]||=h(()=>{},[`prevent`]),onClick:t=>Y(e),onKeydown:t=>de(t,e)},[v(`span`,ae,[v(`strong`,null,f(e.label),1),e.meta?(n(),b(`small`,oe,f(e.meta),1)):l(``,!0)]),t[4]||=v(`i`,{class:`searchable-select-check`,"aria-hidden":`true`},null,-1)],40,ie))),128))],8,re),K.value.length===0?(n(),b(`p`,se,f(_(c)(`common.searchableSelect.noMatches`)),1)):l(``,!0)],8,O)],42,x))}});export{k as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.settings-fields[data-v-a4c2b855]{border:0;min-width:0;margin:0;padding:0;display:contents}.settings-view[data-v-a4c2b855]{background:var(--color-bg);padding-top:24px}.settings-content[data-v-a4c2b855]{gap:18px;width:min(1120px,100%);margin:0 auto;display:grid}.settings-form[data-v-a4c2b855]{gap:18px;display:grid}.settings-card[data-v-a4c2b855]{border:1px solid var(--color-border);border-radius:var(--radius-card);background:var(--color-surface);padding:26px}.section-heading[data-v-a4c2b855]{justify-content:space-between;align-items:center;gap:18px;margin-bottom:22px;display:flex}.settings-card h3[data-v-a4c2b855]{color:var(--color-ink);font-size:16px}.section-heading p[data-v-a4c2b855]{color:var(--color-muted);margin-top:5px;font-size:12px}.resource-totals[data-v-a4c2b855]{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.resource-totals article[data-v-a4c2b855]{border:1px solid var(--color-border);background:var(--color-surface);border-radius:10px;align-content:center;gap:7px;min-height:126px;padding:20px 22px;display:grid}.resource-totals span[data-v-a4c2b855]{color:var(--color-muted);font-size:12px}.resource-totals strong[data-v-a4c2b855]{color:var(--color-ink);letter-spacing:-.04em;font-size:clamp(25px,3vw,34px)}.resource-totals small[data-v-a4c2b855]{color:var(--color-muted);font-size:12px}.resource-breakdowns[data-v-a4c2b855]{grid-template-columns:repeat(2,minmax(0,1fr));gap:28px;margin-top:26px;display:grid}.resource-group[data-v-a4c2b855]{gap:13px;display:grid}.resource-group h4[data-v-a4c2b855],.port-section h4[data-v-a4c2b855]{color:var(--color-ink);font-size:12px}.resource-row[data-v-a4c2b855]{gap:6px;display:grid}.resource-row>div[data-v-a4c2b855]{color:var(--color-muted);justify-content:space-between;gap:12px;font-size:12px;display:flex}.resource-row strong[data-v-a4c2b855]{color:var(--color-ink);font-weight:650}.resource-row i[data-v-a4c2b855]{background:var(--color-surface-subtle);border-radius:999px;height:5px;overflow:hidden}.resource-row b[data-v-a4c2b855]{border-radius:inherit;background:var(--color-muted);height:100%;display:block}.resource-group:last-child .resource-row b[data-v-a4c2b855]{background:var(--color-muted)}.resource-notes[data-v-a4c2b855]{color:var(--color-muted);flex-wrap:wrap;gap:8px 18px;margin-top:22px;font-size:12px;display:flex}.restart-chip[data-v-a4c2b855]{border:1px solid var(--color-warning);color:var(--color-warning);background:var(--color-warning-soft);border-radius:999px;padding:5px 9px;font-size:12px;font-weight:700}.port-section[data-v-a4c2b855]{gap:13px;display:grid}.port-section+.port-section[data-v-a4c2b855]{border-top:1px solid var(--color-border);margin-top:25px;padding-top:22px}.development-section>div[data-v-a4c2b855]{align-items:center;gap:9px;display:flex}.development-section>div>span[data-v-a4c2b855]{color:var(--color-warning);background:var(--color-warning-soft);border-radius:999px;padding:4px 8px;font-size:12px;font-weight:700}.development-section>p[data-v-a4c2b855]{color:var(--color-muted);font-size:12px}.port-grid[data-v-a4c2b855]{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.port-grid label[data-v-a4c2b855]{color:var(--color-muted);gap:7px;font-size:12px;display:grid}.port-grid input[data-v-a4c2b855]{width:100%}.port-grid small[data-v-a4c2b855]{color:var(--color-muted);font-size:12px}.behavior-card>h3[data-v-a4c2b855],.conversation-launcher-card>h3[data-v-a4c2b855]{margin-bottom:14px}.conversation-launcher-list[data-v-a4c2b855]{display:grid}.conversation-launcher-row[data-v-a4c2b855]{border-top:1px solid var(--color-border);padding:16px 0}.conversation-launcher-row[data-v-a4c2b855]:first-child{border-top:0}.conversation-launcher-heading[data-v-a4c2b855]{justify-content:space-between;align-items:center;gap:20px;min-height:34px;display:flex}.conversation-launcher-heading>span[data-v-a4c2b855]{gap:4px;display:grid}.conversation-launcher-heading strong[data-v-a4c2b855]{color:var(--color-ink);font-size:12px}.conversation-launcher-heading small[data-v-a4c2b855]{color:var(--color-muted);font-size:12px}.conversation-launcher-switch[data-v-a4c2b855]{color:var(--color-muted);align-items:center;gap:9px;font-size:12px;display:flex}.conversation-launcher-switch input[role=switch][data-v-a4c2b855]{margin:0}.conversation-launcher-note[data-v-a4c2b855]{max-width:760px;color:var(--color-muted);margin-top:9px;font-size:12px;line-height:1.45;display:block}.conversation-launcher-fields[data-v-a4c2b855]{grid-template-columns:minmax(150px,.7fr) minmax(160px,.8fr) minmax(280px,1.5fr);align-items:start;gap:12px;margin-top:14px;display:grid}.conversation-launcher-fields>label[data-v-a4c2b855]{min-width:0;color:var(--color-muted);grid-template-rows:18px 40px;align-content:start;gap:7px;font-size:12px;display:grid}.conversation-launcher-fields>label>span[data-v-a4c2b855]{text-overflow:ellipsis;white-space:nowrap;min-width:0;line-height:18px;display:block;overflow:hidden}.conversation-launcher-fields code[data-v-a4c2b855]{color:var(--color-muted);font-size:12px}.conversation-launcher-fields[data-v-a4c2b855] .launcher-select{width:100%;min-width:0;height:40px}.conversation-launcher-fields input[data-v-a4c2b855]{width:100%}.conversation-launcher-fields[data-v-a4c2b855] .launcher-select .searchable-select-current{align-items:center}.conversation-launcher-fields[data-v-a4c2b855] .launcher-select .searchable-select-current-label{font-weight:500}.conversation-launcher-fields[data-v-a4c2b855] .launcher-select .searchable-select-panel{width:100%;min-width:0}.setting-list[data-v-a4c2b855]{display:grid}.setting-row[data-v-a4c2b855]{border-top:1px solid var(--color-border);cursor:pointer;justify-content:space-between;align-items:center;gap:24px;min-height:64px;display:flex}.setting-row[data-v-a4c2b855]:first-child{border-top:0}.setting-row>span[data-v-a4c2b855]{gap:4px;display:grid}.setting-row strong[data-v-a4c2b855]{color:var(--color-ink);font-size:14px}.setting-row small[data-v-a4c2b855]{color:var(--color-muted);font-size:12px}.setting-row input[role=switch][data-v-a4c2b855],.conversation-launcher-switch input[role=switch][data-v-a4c2b855]{appearance:none;background:var(--color-muted);cursor:pointer;border-radius:999px;width:38px;height:21px;transition:background .18s;position:relative}.setting-row input[role=switch][data-v-a4c2b855]:after,.conversation-launcher-switch input[role=switch][data-v-a4c2b855]:after{content:"";background:var(--color-surface);border-radius:50%;width:17px;height:17px;transition:transform .18s;position:absolute;top:50%;left:2px;transform:translateY(-50%);box-shadow:0 0 4px #0000002e}.setting-row input[role=switch][data-v-a4c2b855]:checked,.conversation-launcher-switch input[role=switch][data-v-a4c2b855]:checked{background:var(--color-accent)}.setting-row input[role=switch][data-v-a4c2b855]:checked:after,.conversation-launcher-switch input[role=switch][data-v-a4c2b855]:checked:after{transform:translate(17px,-50%)}.select-row .settings-select[data-v-a4c2b855]{width:180px;min-width:0}.select-row[data-v-a4c2b855] .settings-select .searchable-select-current{align-items:center}.select-row[data-v-a4c2b855] .settings-select .searchable-select-current-label{font-weight:500}.select-row[data-v-a4c2b855] .settings-select .searchable-select-arrow{border-width:1.5px;width:8px;height:8px;margin-right:1px}.select-row[data-v-a4c2b855] .settings-select .searchable-select-panel{width:100%;min-width:0}.settings-top-status[data-v-a4c2b855]{color:var(--color-muted);flex-wrap:wrap;align-items:center;gap:6px 16px;padding:0 4px 2px;font-size:12px;display:flex}.settings-top-status strong[data-v-a4c2b855]{color:var(--color-muted);font-weight:700}.settings-error[data-v-a4c2b855]{border-radius:var(--radius-control);color:var(--color-danger);background:var(--color-surface);padding:11px 13px;font-size:12px}@media (width<=900px){.port-grid[data-v-a4c2b855],.conversation-launcher-fields[data-v-a4c2b855]{grid-template-columns:repeat(2,minmax(0,1fr))}.conversation-launcher-template[data-v-a4c2b855]{grid-column:1/-1}}@media (width<=680px){.settings-card[data-v-a4c2b855]{padding:20px}.resource-totals[data-v-a4c2b855],.resource-breakdowns[data-v-a4c2b855],.port-grid[data-v-a4c2b855],.conversation-launcher-fields[data-v-a4c2b855]{grid-template-columns:1fr}.conversation-launcher-template[data-v-a4c2b855]{grid-column:auto}.select-row[data-v-a4c2b855]{flex-direction:column;align-items:flex-start;padding:14px 0}.select-row .settings-select[data-v-a4c2b855]{width:100%}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,B as t,C as n,M as r,P as i,R as a,S as ee,V as o,X as s,_ as c,a as l,b as u,c as d,d as f,h as p,i as m,it as h,j as te,m as ne,n as re,r as ie,rt as g,tt as _,v,w as ae,x as y,y as b}from"./i18n-D2CJkEYK.js";import{t as oe}from"./console-BtPqo79j.js";import{t as x}from"./GrowthLoading-KTjE2e50.js";import{t as S}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{a as se,n as C}from"./client-B2cRl-7c.js";import{t as w}from"./UiDisclosure-CWlC91Zt.js";import{t as T}from"./SearchableSelect-f7EHbyDL.js";import{i as ce,n as E,s as le,t as D}from"./conversation-launcher-settings-jkHRmWai.js";var ue=[`aria-label`],de={class:`settings-content`},fe={key:1,class:`settings-top-status`,role:`status`},pe={key:0},me={key:1},he=[`aria-busy`],ge=[`disabled`],_e={class:`settings-card behavior-card`},ve={class:`setting-list`},ye={class:`setting-row`},O=[`checked`],k={class:`setting-row`},A=[`checked`],j={class:`setting-row`},M={class:`setting-row select-row`},N={class:`setting-row select-row`},P={class:`setting-row select-row`},be={key:0,class:`restart-chip`},xe={class:`port-section`},Se={class:`port-grid`},Ce=[`onUpdate:modelValue`],we={class:`port-section development-section`},Te={class:`conversation-launcher-list`},Ee={class:`conversation-launcher-heading`},De={class:`conversation-launcher-switch`},Oe=[`onUpdate:modelValue`],ke={key:0,class:`conversation-launcher-note`},Ae={key:1,class:`conversation-launcher-fields`},je=[`onUpdate:modelValue`],Me={class:`conversation-launcher-template`},Ne=[`onUpdate:modelValue`],Pe={key:0,class:`settings-error`,role:`alert`},Fe={class:`settings-card resource-card`},Ie={class:`section-heading`},Le={key:0},Re=[`disabled`],ze={key:1,class:`settings-error`,role:`alert`},Be={class:`resource-totals`},Ve={class:`resource-breakdowns`},He={class:`resource-group`},Ue={class:`resource-group`},We={class:`resource-notes`},Ge={key:0},Ke={key:1},qe={key:4,class:`settings-error`,role:`alert`},F=S(ae({__name:`SettingsPage`,setup(ae){let S=oe(),F=s(null),I=s(null),L=s(null),R=s(!0),z=c({get:()=>S.settingsSaving,set:e=>{S.settingsSaving=e}}),B=s(!1),V=s(``),H=s(``),U=s(!1),W=null,Je=[`console`,`personalProvider`,`personalNeo4jHttp`,`personalNeo4jBolt`],G=c({get:()=>re(),set:e=>m(e)}),K=[5,10,30,60],Ye=ce,Xe=c(()=>[{value:`zh-CN`,label:l(`settings.behavior.zh`)},{value:`en-US`,label:l(`settings.behavior.en`)}]),Ze=c(()=>K.map(e=>({value:String(e),label:l(`settings.resources.refreshUnit`,{seconds:e})}))),Qe=c(()=>[{value:`native`,label:l(`settings.behavior.runtimeModes.native`)},{value:`container`,label:l(`settings.behavior.runtimeModes.container`)}]),$e=c(()=>[{value:`any`,label:l(`settings.conversationLaunchers.idFormats.any`)},{value:`uuid`,label:l(`settings.conversationLaunchers.idFormats.uuid`)}]),et=c(()=>S.state?.capturePolicy?.enabled!==!1),tt=c(()=>S.state?.agentAccessPolicy?.enabled!==!1),nt=c(()=>Math.max(1,...L.value?.memory.components.map(({bytes:e})=>e)??[1])),rt=c(()=>Math.max(1,...L.value?.disk.components.map(({bytes:e})=>e)??[1])),it=c(()=>I.value?.graphRuntimeMode===`container`&&Number.isFinite(L.value?.memory.hostTotalBytes)&&Number(L.value?.memory.hostTotalBytes)<=16*1024**3);te(async()=>{S.runtimeStatus===`idle`&&S.refresh(),await Promise.all([at(),q()]),R.value=!1}),e(Y),a(()=>I.value?.resourceRefreshSeconds,()=>J());async function at(){try{let e=await C(`/api/system/settings`);F.value=e,I.value={...structuredClone(e.configured),conversationLaunchers:D(e.configured.conversationLaunchers)},E(e.configured.conversationLaunchers),V.value=``}catch(e){V.value=e instanceof Error?e.message:l(`settings.loadError`)}}async function q(){if(!(B.value||document.visibilityState===`hidden`)){B.value=!0;try{L.value=await C(`/api/system/resources`),H.value=``}catch(e){H.value=e instanceof Error?e.message:l(`settings.resources.unavailable`)}finally{B.value=!1}}}async function ot(){if(!(!I.value||z.value)){z.value=!0,U.value=!1;try{let e=await se(`/api/system/settings`,I.value);F.value=e,I.value={...structuredClone(e.configured),conversationLaunchers:D(e.configured.conversationLaunchers)},E(e.configured.conversationLaunchers),U.value=!0,V.value=``,window.setTimeout(()=>{U.value=!1},2400)}catch(e){V.value=e instanceof Error?e.message:l(`settings.saveError`)}finally{z.value=!1}}}function J(){Y();let e=I.value?.resourceRefreshSeconds;e&&(W=setInterval(()=>void q(),e*1e3))}function Y(){W&&clearInterval(W),W=null}function st(e){S.updateCapturePolicy(e.currentTarget.checked)}function ct(e){S.updateAgentAccessPolicy(e.currentTarget.checked)}function lt(e){(e===`zh-CN`||e===`en-US`)&&m(e)}function ut(e){let t=K.find(t=>String(t)===e);t===void 0||!I.value||(I.value.resourceRefreshSeconds=t)}function dt(e){!I.value||e!==`native`&&e!==`container`||(I.value.graphRuntimeMode=e)}function ft(e){let t=l(`settings.conversationLaunchers.applications.${e}`);return t===`settings.conversationLaunchers.applications.${e}`?le(e):t}function pt(e){return F.value?.active.ports[e]??`—`}function X(e){let t=`settings.resources.components.${e.id.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}`;return ie.global.te(t)?l(t):e.label}function Z(e){if(!Number.isFinite(e))return`—`;let t=Number(e),n=[`B`,`KiB`,`MiB`,`GiB`,`TiB`],r=t,i=0;for(;r>=1024&&i<n.length-1;)r/=1024,i+=1;let a=i===0||r>=100?0:r>=10?1:2;return`${r.toFixed(a)} ${n[i]}`}function Q(e,t){return`${Math.max(3,Math.round(e/t*100))}%`}function $(e){return e?new Intl.DateTimeFormat(G.value,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`}).format(new Date(e)):`—`}function mt(e){let t=e.target.closest(`details`);for(;t;)t.open=!0,t=t.parentElement?.closest(`details`)??null}return(e,a)=>(r(),y(`section`,{class:`view settings-view`,"aria-label":_(l)(`settings.aria`)},[v(`div`,de,[z.value?(r(),b(x,{key:0,variant:`inline`,label:_(l)(`settings.saving`)},null,8,[`label`])):u(``,!0),U.value||F.value?.restartRequired?(r(),y(`div`,fe,[U.value?(r(),y(`strong`,pe,h(_(l)(`settings.saved`)),1)):u(``,!0),F.value?.restartRequired?(r(),y(`span`,me,h(_(l)(`settings.restartCopy`)),1)):u(``,!0)])):u(``,!0),R.value&&!I.value?(r(),b(x,{key:2,variant:`compact`,label:_(l)(`settings.loading`)},null,8,[`label`])):u(``,!0),I.value?(r(),y(`form`,{key:3,id:`settings-form`,class:`settings-form`,"aria-busy":z.value,onSubmit:ne(ot,[`prevent`]),onInvalidCapture:mt},[v(`fieldset`,{class:`settings-fields`,disabled:z.value},[v(`section`,_e,[v(`h3`,null,h(_(l)(`settings.behavior.title`)),1),v(`div`,ve,[v(`label`,ye,[v(`span`,null,[v(`strong`,null,h(_(l)(`settings.behavior.capture`)),1),v(`small`,null,h(_(l)(`settings.behavior.captureMeta`)),1)]),v(`input`,{type:`checkbox`,role:`switch`,checked:et.value,onChange:st},null,40,O)]),v(`label`,k,[v(`span`,null,[v(`strong`,null,h(_(l)(`settings.behavior.agentAccess`)),1),v(`small`,null,h(_(l)(`settings.behavior.agentAccessMeta`)),1)]),v(`input`,{type:`checkbox`,role:`switch`,checked:tt.value,onChange:ct},null,40,A)]),v(`label`,j,[v(`span`,null,[v(`strong`,null,h(_(l)(`settings.behavior.lanAccess`)),1),v(`small`,null,h(_(l)(`settings.behavior.lanAccessMeta`)),1)]),o(v(`input`,{"onUpdate:modelValue":a[0]||=e=>I.value.lanAccess=e,type:`checkbox`,role:`switch`},null,512),[[d,I.value.lanAccess]])]),v(`div`,M,[v(`span`,null,[v(`strong`,null,h(_(l)(`settings.behavior.runtimeMode`)),1),v(`small`,null,h(it.value?_(l)(`settings.behavior.runtimeRecommendation`):_(l)(`settings.behavior.runtimeModeMeta`,{mode:_(l)(`settings.behavior.runtimeModes.${F.value?.active.graphRuntimeMode??I.value.graphRuntimeMode}`)})),1)]),n(T,{class:`settings-select`,"control-id":`settings-runtime-mode`,"model-value":I.value.graphRuntimeMode,options:Qe.value,label:_(l)(`settings.behavior.runtimeMode`),"onUpdate:modelValue":dt},null,8,[`model-value`,`options`,`label`])]),v(`div`,N,[v(`span`,null,[v(`strong`,null,h(_(l)(`settings.behavior.language`)),1)]),n(T,{class:`settings-select`,"control-id":`settings-language`,"model-value":G.value,options:Xe.value,label:_(l)(`settings.behavior.language`),"onUpdate:modelValue":lt},null,8,[`model-value`,`options`,`label`])]),v(`div`,P,[v(`span`,null,[v(`strong`,null,h(_(l)(`settings.resources.refresh`)),1)]),n(T,{class:`settings-select`,"control-id":`settings-refresh-interval`,"model-value":String(I.value.resourceRefreshSeconds),options:Ze.value,label:_(l)(`settings.resources.refresh`),"onUpdate:modelValue":ut},null,8,[`model-value`,`options`,`label`])])])]),n(w,{class:`settings-card ports-card`,title:_(l)(`settings.ports.title`)},{default:t(()=>[F.value?.restartRequired?(r(),y(`span`,be,h(_(l)(`settings.restartRequired`)),1)):u(``,!0),v(`div`,xe,[v(`h4`,null,h(_(l)(`settings.ports.personal`)),1),v(`div`,Se,[(r(),y(p,null,i(Je,e=>v(`label`,{key:e},[v(`span`,null,h(_(l)(`settings.ports.${e}`)),1),o(v(`input`,{"onUpdate:modelValue":t=>I.value.ports[e]=t,type:`number`,min:`1`,max:`65535`,required:``},null,8,Ce),[[f,I.value.ports[e],void 0,{number:!0}]]),v(`small`,null,h(_(l)(`settings.ports.active`,{port:pt(e)})),1)])),64))])]),v(`div`,we,[v(`div`,null,[v(`h4`,null,h(_(l)(`settings.ports.development`)),1),v(`span`,null,h(_(l)(`settings.ports.developing`)),1)]),v(`p`,null,h(_(l)(`settings.ports.developmentMeta`)),1)])]),_:1},8,[`title`]),n(w,{id:`conversation-launchers`,class:`settings-card conversation-launcher-card`,title:_(l)(`settings.conversationLaunchers.title`)},{default:t(()=>[v(`div`,Te,[(r(!0),y(p,null,i(_(Ye),e=>(r(),y(`article`,{key:e,class:`conversation-launcher-row`},[v(`div`,Ee,[v(`span`,null,[v(`strong`,null,h(ft(e)),1),v(`small`,null,h(_(l)(`settings.conversationLaunchers.sourceId`,{id:e})),1)]),v(`label`,De,[v(`span`,null,h(_(l)(`settings.conversationLaunchers.enabled`)),1),o(v(`input`,{"onUpdate:modelValue":t=>I.value.conversationLaunchers[e].enabled=t,type:`checkbox`,role:`switch`},null,8,Oe),[[d,I.value.conversationLaunchers[e].enabled]])])]),I.value.conversationLaunchers[e].enabled&&e===`codex`?(r(),y(`small`,ke,h(_(l)(`settings.conversationLaunchers.idFormatMeta`)),1)):u(``,!0),I.value.conversationLaunchers[e].enabled?(r(),y(`div`,Ae,[v(`label`,null,[v(`span`,null,h(_(l)(`settings.conversationLaunchers.idFormat`)),1),n(T,{modelValue:I.value.conversationLaunchers[e].idFormat,"onUpdate:modelValue":t=>I.value.conversationLaunchers[e].idFormat=t,class:`launcher-select`,"control-id":`settings-conversation-${e}-id-format`,options:$e.value,label:_(l)(`settings.conversationLaunchers.idFormat`)},null,8,[`modelValue`,`onUpdate:modelValue`,`control-id`,`options`,`label`])]),v(`label`,null,[v(`span`,null,h(_(l)(`settings.conversationLaunchers.appName`)),1),o(v(`input`,{"onUpdate:modelValue":t=>I.value.conversationLaunchers[e].appName=t,type:`text`,maxlength:`64`,required:``},null,8,je),[[f,I.value.conversationLaunchers[e].appName,void 0,{trim:!0}]])]),v(`label`,Me,[v(`span`,null,[ee(h(_(l)(`settings.conversationLaunchers.urlTemplate`))+` `,1),a[1]||=v(`small`,null,[v(`code`,null,`{id}`)],-1)]),o(v(`input`,{"onUpdate:modelValue":t=>I.value.conversationLaunchers[e].urlTemplate=t,type:`text`,maxlength:`1024`,spellcheck:`false`,required:``},null,8,Ne),[[f,I.value.conversationLaunchers[e].urlTemplate,void 0,{trim:!0}]])])])):u(``,!0)]))),128))])]),_:1},8,[`title`])],8,ge),V.value?(r(),y(`p`,Pe,h(V.value),1)):u(``,!0)],40,he)):u(``,!0),v(`section`,Fe,[v(`header`,Ie,[v(`div`,null,[v(`h3`,null,h(_(l)(`settings.resources.title`)),1),L.value?(r(),y(`p`,Le,h(_(l)(`settings.resources.measuredAt`,{time:$(L.value.sampledAt)})),1)):u(``,!0)]),v(`button`,{class:`quiet-button`,type:`button`,disabled:B.value,onClick:q},h(_(l)(`common.actions.refresh`)),9,Re)]),B.value?(r(),b(x,{key:0,variant:L.value?`inline`:`compact`,label:_(l)(`settings.resources.loading`)},null,8,[`variant`,`label`])):u(``,!0),H.value?(r(),y(`p`,ze,h(H.value),1)):L.value?(r(),y(p,{key:2},[v(`div`,Be,[v(`article`,null,[v(`span`,null,h(_(l)(`settings.resources.memory`)),1),v(`strong`,null,h(Z(L.value.memory.usedBytes)),1),v(`small`,null,h(_(l)(`settings.resources.available`,{value:Z(L.value.memory.hostFreeBytes)})),1)]),v(`article`,null,[v(`span`,null,h(_(l)(`settings.resources.disk`)),1),v(`strong`,null,h(Z(L.value.disk.usedBytes)),1),v(`small`,null,h(_(l)(`settings.resources.available`,{value:Z(L.value.disk.hostFreeBytes)})),1)])]),n(w,{title:_(l)(`ui.usageDetails`)},{default:t(()=>[v(`div`,Ve,[v(`div`,He,[v(`h4`,null,h(_(l)(`settings.resources.memory`)),1),(r(!0),y(p,null,i(L.value.memory.components,e=>(r(),y(`div`,{key:e.id,class:`resource-row`},[v(`div`,null,[v(`span`,null,h(X(e)),1),v(`strong`,null,h(Z(e.bytes)),1)]),v(`i`,null,[v(`b`,{style:g({width:Q(e.bytes,nt.value)})},null,4)])]))),128))]),v(`div`,Ue,[v(`h4`,null,h(_(l)(`settings.resources.disk`)),1),(r(!0),y(p,null,i(L.value.disk.components,e=>(r(),y(`div`,{key:e.id,class:`resource-row`},[v(`div`,null,[v(`span`,null,h(X(e)),1),v(`strong`,null,h(Z(e.bytes)),1)]),v(`i`,null,[v(`b`,{style:g({width:Q(e.bytes,rt.value)})},null,4)])]))),128))])]),v(`div`,We,[v(`span`,null,h(_(l)(`settings.resources.diskMeasuredAt`,{time:$(L.value.disk.measuredAt)})),1),L.value.status===`partial`?(r(),y(`span`,Ge,h(_(l)(`settings.resources.partial`)),1)):u(``,!0),L.value.disk.temporaryBytes?(r(),y(`span`,Ke,h(_(l)(`settings.resources.temporary`,{value:Z(L.value.disk.temporaryBytes)})),1)):u(``,!0),v(`span`,null,h(_(l)(L.value.exclusions.includes(`shared-container-vm-overhead`)?`settings.resources.exclusionsContainer`:`settings.resources.exclusionsNative`)),1)])]),_:1},8,[`title`])],64)):u(``,!0)]),!R.value&&!I.value?(r(),y(`p`,qe,h(V.value||_(l)(`settings.loadError`)),1)):u(``,!0)])],8,ue))}}),[[`__scopeId`,`data-v-a4c2b855`]]);export{F as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{M as e,R as t,X as n,_ as r,a as i,b as a,h as o,it as s,tt as c,v as l,w as u,x as d,y as f}from"./i18n-D2CJkEYK.js";import{t as p}from"./GrowthLoading-KTjE2e50.js";import{t as m}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{m as h}from"./useApi-CROJJdhE-BtFMXFjw.js";import{i as g,n as _,t as v}from"./shared-report-DEK9wvhl.js";var y={class:`shared-jefa-report`},b={key:1,class:`report-state`,role:`alert`},x={key:0,class:`report-warning`},S={key:1,class:`report-state`,role:`status`},C=m(u({__name:`SharedJefaReportPage`,setup(u){let m=h(),C=n([]),w=n([]),T=n(!1),E=n(0),D=n(``),O=r(()=>C.value.reduce((e,t)=>e+t.items.length,0)),k=r(()=>m.fullPath.includes(`#`)?m.fullPath.slice(m.fullPath.indexOf(`#`)):m.hash),A=0;t(k,()=>{j()},{immediate:!0});async function j(){let e=++A;C.value=[],D.value=``,E.value=0,T.value=!0;try{let t=_(k.value),n=await Promise.allSettled(t.map(v));if(e!==A)return;C.value=n.flatMap(e=>e.status===`fulfilled`?[e.value]:[]),w.value=C.value.map(e=>e.project.id),E.value=n.filter(e=>e.status===`rejected`).length,C.value.length||(D.value=i(`employees.share.unavailable`))}catch{e===A&&(D.value=i(`employees.share.unavailable`))}finally{e===A&&(T.value=!1)}}return(t,n)=>(e(),d(`main`,y,[l(`header`,null,[n[1]||=l(`strong`,null,`Jefa`,-1),l(`h1`,null,s(c(i)(`employees.share.title`)),1),l(`span`,null,s(c(i)(`employees.share.readOnly`)),1)]),T.value?(e(),f(p,{key:0,label:c(i)(`employees.loadingReport`)},null,8,[`label`])):D.value?(e(),d(`div`,b,[l(`p`,null,s(D.value),1),l(`button`,{type:`button`,onClick:j},s(c(i)(`employees.retry`)),1)])):(e(),d(o,{key:2},[E.value?(e(),d(`p`,x,s(c(i)(`employees.share.unavailableCount`,{count:E.value})),1)):a(``,!0),O.value?(e(),f(g,{key:2,"visible-project-ids":w.value,"onUpdate:visibleProjectIds":n[0]||=e=>w.value=e,boards:C.value.filter(e=>w.value.includes(e.project.id)),projects:C.value.map(e=>e.project),"failed-projects":0,"can-move-tasks":!1,"read-only":``,onRetry:j},null,8,[`visible-project-ids`,`boards`,`projects`])):(e(),d(`div`,S,[l(`h2`,null,s(c(i)(`employees.shareContent.emptyTitle`)),1),l(`p`,null,s(c(i)(`employees.shareContent.emptyReport`,{count:C.value.length})),1),l(`button`,{type:`button`,onClick:j},s(c(i)(`common.actions.refresh`)),1)]))],64))]))}}),[[`__scopeId`,`data-v-79d38b0c`]]);export{C as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{F as e,M as t,S as n,it as r,v as i,w as a,x as o}from"./i18n-D2CJkEYK.js";var s=[`open`],c=a({__name:`UiDisclosure`,props:{title:{},open:{type:Boolean,default:!1}},setup(a){return(c,l)=>(t(),o(`details`,{class:`ui-disclosure`,open:a.open},[i(`summary`,null,[n(r(a.title),1),e(c.$slots,`summary`)]),e(c.$slots,`default`)],8,s))}});export{c as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,B as t,C as n,M as r,P as i,R as a,S as o,X as s,_ as c,a as l,b as u,h as d,it as f,nt as p,tt as m,v as h,w as g,x as _,y as v}from"./i18n-D2CJkEYK.js";import{t as ee}from"./console-BtPqo79j.js";import{t as y}from"./GrowthLoading-KTjE2e50.js";import{t as b}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as te}from"./vue-router-DkaTtPn0.js";import{n as ne}from"./client-B2cRl-7c.js";import{t as re}from"./UiDisclosure-CWlC91Zt.js";import{i as ie,n as ae,t as oe}from"./KnowledgeEditDialog-n9trHQ5d.js";import{u as se,x as ce}from"./model-S7ehAjky.js";import{t as le}from"./personal-profile-graph--GG3Mizo.js";var x={class:`view writing-taste-view`},ue={key:2,class:`view-loading`,"aria-busy":`true`},de={key:3,class:`writing-taste-unavailable`},fe=[`role`],pe={class:`writing-taste-hero__copy`},me={class:`writing-taste-status`},S={class:`writing-taste-hero__score`,"aria-hidden":`true`},C=[`aria-label`],w={"aria-hidden":`true`},T={class:`writing-taste-rules`},E={key:0,class:`writing-taste-rule-list`},D={class:`writing-taste-rule__status`},O={key:0,class:`conflict`},k={class:`writing-taste-rule__body`},A={key:0},j={key:1},M={key:0},N={key:0,class:`writing-taste-rule__actions`},P=[`onClick`],F=[`onClick`],I={key:1,class:`writing-taste-empty`},L={key:0,class:`writing-taste-agent-preview`},R={key:0},z=b(g({__name:`WritingTastePage`,setup(g){let b=ee(),z=s(null),B=s(null),V=s(!1),H=s(!1),U=s(null),W=s(null),G=s(!1),K=0,q=null,J=c(()=>V.value&&!z.value),Y=ie(J),X=c(()=>ce(B.value)),Z=c(()=>new Map(X.value.map(e=>[`${e.itemKind}:${e.id}`,e]))),he=c(()=>z.value?.status===`active`?l(`writingTaste.page.activeTitle`):z.value?.status===`preview_ready`?l(`writingTaste.page.previewTitle`):l(`writingTaste.page.collectingTitle`)),ge=c(()=>z.value?.status===`active`?l(`writingTaste.page.activeCopy`):z.value?.status===`preview_ready`?l(`writingTaste.page.previewCopy`):l(`writingTaste.page.collectingCopy`));a(()=>b.activePersonalSpace?.id,e=>{z.value=null,B.value=null,U.value=null,W.value=null,G.value=!1,Q(e)},{immediate:!0,flush:`sync`});async function Q(e=b.activePersonalSpace?.id){let t=++K;if(q?.abort(),q=null,H.value=!1,!e){V.value=!1;return}let n=new AbortController;q=n,V.value=!0;try{let r=new URLSearchParams({personalSpaceId:e,limit:`500`}),[i,a]=await Promise.all([ne(`/api/writing-taste-profile?${r}`,{signal:n.signal}),le(e,n.signal)]);if(t!==K)return;z.value=Se(i)?i:null,B.value=Ce(a)?a:null,xe()}catch{if(t!==K)return;z.value=null,B.value=null,H.value=!0}finally{t===K&&(V.value=!1,q=null)}}e(()=>{K+=1,q?.abort()});function $(e){return Z.value.get(`${e.item_kind}:${e.item_id}`)??null}function _e(e){U.value=$(e)}function ve(e){W.value=$(e)}function ye(e){if(e.preference_scope!==`project`||!e.preference_project_id)return l(`writingTaste.page.globalScope`);let t=b.state?.personalProjects?.find(({project_id:t})=>t===e.preference_project_id);return l(`writingTaste.page.projectScope`,{project:t?.profile.name??e.preference_project_id})}function be(e){return e.key===`conflicts`?l(`writingTaste.criteria.conflictsProgress`,{current:e.current}):l(`writingTaste.criteria.progress`,{current:e.current,target:e.target})}function xe(){U.value&&=Z.value.get(`${U.value.itemKind}:${U.value.id}`)??null,W.value&&=Z.value.get(`${W.value.itemKind}:${W.value.id}`)??null}function Se(e){if(!e||typeof e!=`object`)return!1;let t=e;return[`collecting`,`preview_ready`,`active`].includes(t.status??``)&&!!t.readiness&&Array.isArray(t.rules)}function Ce(e){if(!e||typeof e!=`object`)return!1;let t=e;return Array.isArray(t.nodes)&&Array.isArray(t.edges)}return(e,a)=>(r(),_(`section`,x,[n(m(te),{class:`writing-taste-back`,to:`/preferences`},{default:t(()=>[a[6]||=h(`span`,{"aria-hidden":`true`},`←`,-1),o(` `+f(m(l)(`writingTaste.page.back`)),1)]),_:1}),V.value&&z.value&&!m(Y)?(r(),v(y,{key:0,variant:`inline`,label:m(l)(`writingTaste.page.loading`)},null,8,[`label`])):u(``,!0),m(Y)?(r(),v(y,{key:1,label:m(l)(`writingTaste.page.loading`)},null,8,[`label`])):J.value?(r(),_(`div`,ue)):z.value?(r(),_(d,{key:4},[h(`header`,{class:p([`writing-taste-hero`,`status-${z.value.status}`])},[h(`div`,pe,[h(`span`,me,[a[7]||=h(`i`,{"aria-hidden":`true`},null,-1),o(` `+f(m(l)(`writingTaste.status.${z.value.status}`)),1)]),h(`h2`,null,f(he.value),1),h(`p`,null,f(ge.value),1)]),h(`div`,S,[h(`strong`,null,f(z.value.readiness.rule_count),1),h(`span`,null,`/ `+f(z.value.readiness.thresholds.rule_count),1),h(`small`,null,f(m(l)(`writingTaste.criteria.rules`)),1)])],2),h(`section`,{class:`writing-taste-readiness`,"aria-label":m(l)(`writingTaste.page.readinessAria`)},[(r(!0),_(d,null,i(z.value.readiness.criteria,e=>(r(),_(`article`,{key:e.key,class:p({met:e.met})},[h(`span`,w,f(e.met?`✓`:`·`),1),h(`div`,null,[h(`strong`,null,f(m(l)(`writingTaste.criteria.${e.key}`)),1),h(`small`,null,f(be(e)),1)])],2))),128))],8,C),h(`section`,T,[h(`header`,null,[h(`h2`,null,f(m(l)(`writingTaste.page.rulesTitle`)),1),h(`span`,null,f(z.value.rules.length),1)]),z.value.rules.length?(r(),_(`div`,E,[(r(!0),_(d,null,i(z.value.rules,e=>(r(),_(`article`,{key:`${e.item_kind}:${e.item_id}`,class:p([`writing-taste-rule`,{"has-conflict":e.has_conflict,"is-hypothesis":e.evidence_status===`Working hypothesis`}])},[h(`div`,D,[h(`span`,{class:p(e.evidence_status.replaceAll(` `,`-`).toLowerCase())},f(m(l)(`writingTaste.evidenceStatus.${e.evidence_status}`)),3),h(`span`,null,f(ye(e)),1),e.has_conflict?(r(),_(`span`,O,f(m(l)(`writingTaste.page.conflict`)),1)):u(``,!0)]),h(`div`,k,[h(`h3`,null,f(e.title),1),h(`p`,null,f(e.instruction),1),e.reason||e.contexts.length?(r(),v(re,{key:0,title:m(l)(`ui.details`)},{default:t(()=>[e.reason?(r(),_(`p`,A,f(e.reason),1)):u(``,!0),e.contexts.length?(r(),_(`p`,j,f(m(l)(`writingTaste.page.contexts`,{contexts:e.contexts.join(`、`)})),1)):u(``,!0)]),_:2},1032,[`title`])):u(``,!0)]),h(`footer`,null,[h(`div`,null,[h(`span`,null,f(m(l)(`writingTaste.page.evidence`,{evidence:e.evidence_count})),1),h(`span`,null,f(m(l)(`writingTaste.page.sessions`,{sessions:e.session_count})),1),e.updated_at?(r(),_(`span`,M,f(m(l)(`writingTaste.page.updated`,{time:m(se)(e.updated_at)})),1)):u(``,!0)]),$(e)?(r(),_(`div`,N,[h(`button`,{class:`secondary-action`,type:`button`,onClick:t=>ve(e)},f(m(l)(`writingTaste.page.edit`)),9,P),e.evidence_status===`Confirmed`?u(``,!0):(r(),_(`button`,{key:0,class:`primary-action`,type:`button`,onClick:t=>_e(e)},f(m(l)(`writingTaste.page.confirm`)),9,F))])):u(``,!0)])],2))),128))])):(r(),_(`div`,I,f(m(l)(`writingTaste.page.rulesEmpty`)),1))]),z.value.ready&&z.value.agent_markdown?(r(),_(`section`,L,[h(`div`,null,[h(`h2`,null,f(m(l)(`writingTaste.page.agentPreviewTitle`)),1)]),h(`button`,{class:`secondary-action`,type:`button`,onClick:a[1]||=e=>G.value=!G.value},f(G.value?m(l)(`writingTaste.page.hideAgentPreview`):m(l)(`writingTaste.page.showAgentPreview`)),1),G.value?(r(),_(`pre`,R,f(z.value.agent_markdown),1)):u(``,!0)])):u(``,!0)],64)):(r(),_(`div`,de,[h(`p`,{role:H.value?`alert`:void 0},f(m(l)(H.value?`common.errors.loadFailed`:`writingTaste.page.profileUnavailable`)),9,fe),m(b).activePersonalSpace?(r(),_(`button`,{key:0,type:`button`,class:`secondary-action`,onClick:a[0]||=e=>Q()},f(m(l)(`common.actions.retry`)),1)):u(``,!0)])),n(oe,{item:W.value,"personal-space-id":m(b).activePersonalSpace?.id??``,"personal-project-id":null,projects:m(b).state?.personalProjects??[],"replacement-items":X.value,onClose:a[2]||=e=>W.value=null,onSaved:a[3]||=e=>Q()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),n(ae,{item:U.value,"personal-space-id":m(b).activePersonalSpace?.id??``,"personal-project-id":null,onClose:a[4]||=e=>U.value=null,onSaved:a[5]||=e=>Q()},null,8,[`item`,`personal-space-id`])]))}}),[[`__scopeId`,`data-v-8c7fa696`]]);export{z as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.writing-taste-view[data-v-8c7fa696]{background:var(--color-surface-subtle);padding:18px 32px 40px;overflow:auto}.writing-taste-view[data-v-8c7fa696]>:not(.vue-dialog){width:min(980px,100%);margin-inline:auto}.writing-taste-back[data-v-8c7fa696]{color:var(--color-muted);align-items:center;gap:7px;margin-bottom:14px;font-size:12px;font-weight:700;text-decoration:none;display:inline-flex}.writing-taste-back[data-v-8c7fa696]:hover{color:var(--color-ink)}.writing-taste-hero[data-v-8c7fa696]{border:1px solid var(--color-border);background:var(--color-surface);border-radius:14px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:24px;padding:24px 26px;display:grid;box-shadow:0 12px 32px #2d3d340f}.writing-taste-hero.status-preview_ready[data-v-8c7fa696],.writing-taste-hero.status-active[data-v-8c7fa696]{border-color:var(--color-success-soft)}.writing-taste-hero__copy[data-v-8c7fa696]{gap:7px;display:grid}.writing-taste-status[data-v-8c7fa696]{color:var(--color-muted);background:var(--color-surface-subtle);border-radius:999px;justify-self:start;align-items:center;gap:6px;padding:3px 8px;font-size:12px;font-weight:800;display:inline-flex}.writing-taste-status i[data-v-8c7fa696]{background:var(--color-muted);border-radius:50%;width:5px;height:5px}.writing-taste-hero h2[data-v-8c7fa696],.writing-taste-hero p[data-v-8c7fa696]{margin:0}.writing-taste-hero h2[data-v-8c7fa696]{color:var(--color-ink);letter-spacing:-.015em;font-size:22px}.writing-taste-hero p[data-v-8c7fa696]{max-width:680px;color:var(--color-muted);font-size:12px;line-height:1.65}.writing-taste-hero__score[data-v-8c7fa696]{border-left:1px solid var(--color-border);min-width:104px;color:var(--color-muted);grid-template-columns:auto 1fr;align-items:baseline;padding:14px 16px;display:grid}.writing-taste-hero__score strong[data-v-8c7fa696]{color:var(--color-ink);font-size:28px}.writing-taste-hero__score span[data-v-8c7fa696]{font-size:12px}.writing-taste-hero__score small[data-v-8c7fa696]{grid-column:1/-1;font-size:12px}.writing-taste-readiness[data-v-8c7fa696]{grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-top:12px;display:grid}.writing-taste-readiness article[data-v-8c7fa696]{border:1px solid var(--color-border);border-radius:var(--radius-control);min-width:0;color:var(--color-muted);background:var(--color-surface);grid-template-columns:auto minmax(0,1fr);align-items:center;gap:8px;padding:10px;display:grid}.writing-taste-readiness article.met[data-v-8c7fa696]{color:var(--color-muted);border-color:var(--color-border-strong);background:var(--color-surface)}.writing-taste-readiness article>span[data-v-8c7fa696]{background:var(--color-surface-subtle);border-radius:50%;place-items:center;width:18px;height:18px;font-size:12px;font-weight:800;display:grid}.writing-taste-readiness article.met>span[data-v-8c7fa696]{color:var(--color-surface);background:var(--color-muted)}.writing-taste-readiness article div[data-v-8c7fa696]{gap:2px;min-width:0;display:grid}.writing-taste-readiness strong[data-v-8c7fa696],.writing-taste-readiness small[data-v-8c7fa696]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.writing-taste-readiness strong[data-v-8c7fa696]{color:var(--color-ink);font-size:12px}.writing-taste-readiness small[data-v-8c7fa696]{font-size:12px}.writing-taste-rules[data-v-8c7fa696]{margin-top:24px}.writing-taste-rules>header[data-v-8c7fa696]{align-items:center;gap:8px;padding:0 2px 10px;display:flex}.writing-taste-rules>header h2[data-v-8c7fa696]{color:var(--color-ink);margin:0;font-size:15px}.writing-taste-rules>header span[data-v-8c7fa696]{min-width:20px;color:var(--color-muted);background:var(--color-surface-subtle);text-align:center;border-radius:999px;padding:2px 6px;font-size:12px;font-weight:800}.writing-taste-rule-list[data-v-8c7fa696]{gap:9px;display:grid}.writing-taste-rule[data-v-8c7fa696]{border:1px solid var(--color-border);background:var(--color-surface);border-radius:11px;gap:10px;padding:15px 17px;display:grid}.writing-taste-rule.is-hypothesis[data-v-8c7fa696]{background:var(--color-surface)}.writing-taste-rule.has-conflict[data-v-8c7fa696]{border-color:var(--color-border-strong)}.writing-taste-rule__status[data-v-8c7fa696]{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.writing-taste-rule__status span[data-v-8c7fa696]{color:var(--color-muted);background:var(--color-surface-subtle);border-radius:999px;padding:2px 7px;font-size:12px;font-weight:800}.writing-taste-rule__status .confirmed[data-v-8c7fa696],.writing-taste-rule__status .observed[data-v-8c7fa696]{color:var(--color-success);background:var(--color-success-soft)}.writing-taste-rule__status .conflict[data-v-8c7fa696]{color:var(--color-danger);background:var(--color-danger-soft)}.writing-taste-rule__body[data-v-8c7fa696]{gap:5px;display:grid}.writing-taste-rule h3[data-v-8c7fa696],.writing-taste-rule p[data-v-8c7fa696]{margin:0}.writing-taste-rule h3[data-v-8c7fa696]{color:var(--color-ink);font-size:13px}.writing-taste-rule p[data-v-8c7fa696]{color:var(--color-ink);font-size:12px;line-height:1.65}.writing-taste-rule__body small[data-v-8c7fa696]{color:var(--color-muted);font-size:12px;line-height:1.5}.writing-taste-rule footer[data-v-8c7fa696]{border-top:1px solid var(--color-border);justify-content:space-between;align-items:center;gap:14px;padding-top:9px;display:flex}.writing-taste-rule footer>div[data-v-8c7fa696]:first-child{color:var(--color-muted);flex-wrap:wrap;gap:10px;font-size:12px;display:flex}.writing-taste-rule__actions[data-v-8c7fa696]{gap:7px;display:flex}.writing-taste-rule__actions button[data-v-8c7fa696],.writing-taste-agent-preview button[data-v-8c7fa696]{padding:6px 10px;font-size:12px}.writing-taste-empty[data-v-8c7fa696],.writing-taste-unavailable[data-v-8c7fa696]{border:1px dashed var(--color-border);min-height:180px;color:var(--color-muted);border-radius:11px;place-items:center;font-size:12px;display:grid}.writing-taste-agent-preview[data-v-8c7fa696]{border:1px solid var(--color-border);background:var(--color-surface-subtle);border-radius:11px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;margin-top:22px;padding:16px 18px;display:grid}.writing-taste-agent-preview h2[data-v-8c7fa696],.writing-taste-agent-preview p[data-v-8c7fa696]{margin:0}.writing-taste-agent-preview h2[data-v-8c7fa696]{color:var(--color-ink);font-size:13px}.writing-taste-agent-preview p[data-v-8c7fa696]{color:var(--color-muted);margin-top:4px;font-size:12px;line-height:1.5}.writing-taste-agent-preview pre[data-v-8c7fa696]{border-radius:var(--radius-control);max-height:360px;color:var(--color-surface-subtle);background:var(--color-ink);white-space:pre-wrap;overflow-wrap:anywhere;grid-column:1/-1;margin:0;padding:14px;font:10px/1.65 ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}@media (width<=980px){.writing-taste-readiness[data-v-8c7fa696]{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=680px){.writing-taste-view[data-v-8c7fa696]{padding-inline:18px}.writing-taste-hero[data-v-8c7fa696]{grid-template-columns:1fr}.writing-taste-hero__score[data-v-8c7fa696]{border-top:1px solid var(--color-border);border-left:0}.writing-taste-readiness[data-v-8c7fa696]{grid-template-columns:repeat(2,minmax(0,1fr))}.writing-taste-rule footer[data-v-8c7fa696],.writing-taste-agent-preview[data-v-8c7fa696]{flex-direction:column;grid-template-columns:1fr;align-items:start}.writing-taste-agent-preview pre[data-v-8c7fa696]{grid-column:1}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.agents-directory,.agent-profile-page{min-width:0;color:var(--color-ink,#1d2129)}.agents-directory-heading{margin-bottom:var(--space-6,24px)}.agents-directory-count{color:var(--color-muted,#667085);margin:0;font-size:14px}.agent-directory-work-error{justify-content:space-between;align-items:center;gap:var(--space-3,12px);margin:calc(var(--space-6,24px) * -1) 0 var(--space-4,16px);color:var(--color-danger,#b93838);font-size:13px;display:flex}.agent-profile-actions{justify-content:flex-end;align-items:center;gap:var(--space-2,8px);flex-wrap:wrap;flex-shrink:0;display:flex}.agents-directory-filters{margin-bottom:var(--space-6,24px);align-items:stretch}.agents-directory-search{flex:280px;min-width:160px}.agents-directory-search input,.agents-directory-filters select{box-sizing:border-box;width:100%}.agents-directory-filters>select{width:auto;min-width:150px}.agents-directory-grid{gap:var(--space-4,16px);grid-template-columns:minmax(0,1fr);margin:0;padding:0;list-style:none;display:grid}.agents-directory-grid>li{min-width:0}.agent-card{box-sizing:border-box;gap:var(--space-3,12px);height:100%;padding:var(--space-4,16px);transition:border-color var(--motion-fast,.16s);flex-direction:column;display:flex}.agent-card:hover{border-color:var(--color-border-strong,#c5cbd5)}.agent-card-topline,.agent-card-meta,.agent-section-heading,.agent-resume-name-row{justify-content:space-between;align-items:center;gap:var(--space-3,12px);display:flex}.agent-card-topline{align-items:flex-start}.agent-card-status-stack{flex-direction:column;align-items:flex-end;gap:4px;min-width:0;display:flex}.agent-card-body{flex:1;min-width:0}.agent-portrait{background:var(--color-accent-soft,#edf3ff);width:72px;height:72px;color:var(--color-accent,#2563eb);border-radius:20px;flex:0 0 72px;place-items:center;font-size:34px;line-height:1;display:grid}.agent-portrait.small{border-radius:14px;flex-basis:46px;width:46px;height:46px;font-size:22px}.agent-directory-name{align-items:center;gap:var(--space-2,8px);min-width:0;margin-top:var(--space-2,8px);font-size:17px;font-weight:650;display:flex}.agent-directory-name a{overflow-wrap:anywhere;min-width:0;color:var(--color-ink,#1d2129);text-decoration:none}.agent-directory-name a:hover{color:var(--color-accent,#2563eb)}.agent-card-responsibility{color:var(--color-muted,#667085);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:6px 0 0;line-height:1.45;display:-webkit-box;overflow:hidden}.agent-inline-skills,.agent-card-project-list{gap:var(--space-2,8px);flex-wrap:wrap;display:flex}.agent-inline-skills{margin-top:var(--space-2,8px)}.agent-inline-skills>span{overflow-wrap:anywhere;background:var(--color-surface-subtle,#f0f2f5);max-width:100%;color:var(--color-muted,#667085);border-radius:6px;padding:3px 7px;font-size:12px;line-height:1.4}.agent-card-meta{border-top:1px solid var(--color-border,#e2e5ea);padding-top:var(--space-3,12px);align-items:flex-end}.agent-card-projects{min-width:0}.agent-card-meta-label{color:var(--color-muted,#667085);margin-bottom:4px;font-size:12px;display:block}.agent-card-project-list .ui-badge{text-overflow:ellipsis;white-space:nowrap;max-width:130px;overflow:hidden}.agent-card-project-count{color:var(--color-accent,#2563eb);background:var(--color-accent-soft,#edf3ff)}.agent-card-no-project{color:var(--color-muted,#667085);font-size:12px}.agent-card-status.is-active,.agent-profile-membership.is-active{color:var(--color-success,#23734f);background:var(--color-success-soft,#edf7f1)}.agent-card-status.is-inactive,.agent-profile-membership.is-inactive{color:var(--color-warning,#936016);background:var(--color-warning-soft,#fff7e8)}.agent-card-status.is-archived,.agent-profile-membership.is-archived{color:var(--color-muted,#667085);background:var(--color-surface-subtle,#f0f2f5)}.agent-card-work-status{text-overflow:ellipsis;white-space:nowrap;max-width:150px;overflow:hidden}.agent-card-work-status.is-running{color:var(--color-accent,#2563eb);background:var(--color-accent-soft,#edf3ff)}.agent-card-work-status.is-awaiting_review{color:var(--color-warning,#936016);background:var(--color-warning-soft,#fff7e8)}.agent-card-work-status.is-blocked,.agent-card-work-status.is-unavailable{color:var(--color-danger,#b93838);background:var(--color-danger-soft,#fff1f0)}.agent-card-work-status.is-queued,.agent-card-work-status.is-paused,.agent-card-work-status.is-awaiting_recruitment{color:var(--color-warning,#936016);background:var(--color-warning-soft,#fff7e8)}.agent-card-work-status.is-none,.agent-card-work-status.is-loading,.agent-card-work-status.is-unreported{color:var(--color-muted,#667085);background:var(--color-surface-subtle,#f0f2f5)}.agent-directory-open{white-space:nowrap;flex:none;min-height:32px;padding:6px 9px;font-size:12px}.agent-profile-empty{box-sizing:border-box;min-height:140px}.agents-directory .sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.agent-profile-page{box-sizing:border-box;width:100%;max-width:1120px;margin:0 auto}.agent-profile-back{align-items:center;gap:var(--space-2,8px);margin-bottom:var(--space-5,20px);color:var(--color-muted,#667085);font-size:14px;text-decoration:none;display:inline-flex}.agent-profile-back:hover,.agent-profile-footer a,.agent-section-heading>a{color:var(--color-accent,#2563eb)}.agent-resume-header{align-items:start;gap:var(--space-5,20px);padding:var(--space-6,24px);grid-template-columns:auto minmax(0,1fr) auto;display:grid}.agent-resume-intro{min-width:0}.agent-resume-intro h1{overflow-wrap:anywhere;letter-spacing:-.025em;min-width:0;margin:0;font-size:clamp(26px,3vw,36px);line-height:1.15}.agent-resume-name-row{flex-wrap:wrap;justify-content:flex-start;align-items:baseline}.agent-profile-membership{flex:none}.agent-resume-intro>p{max-width:650px;margin:var(--space-3,12px) 0;overflow-wrap:anywhere;color:var(--color-muted,#667085);line-height:1.65}.agent-resume-meta{gap:var(--space-3,12px);color:var(--color-muted,#667085);flex-wrap:wrap;font-size:12px;display:flex}.agent-profile-refresh-status,.agent-profile-partial{margin:var(--space-4,16px) 0 0;color:var(--color-muted,#667085);font-size:13px}.agent-profile-tabs{gap:var(--space-5,20px);margin-top:var(--space-6,24px);border-bottom:1px solid var(--color-border,#e2e5ea);display:flex;overflow-x:auto}.agent-profile-tab{min-height:44px;color:var(--color-muted,#667085);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;flex:none;padding:8px 2px;font-size:13px;position:relative}.agent-profile-tab:hover,.agent-profile-tab[aria-selected=true]{color:var(--color-accent,#2563eb)}.agent-profile-tab[aria-selected=true]{border-bottom-color:var(--color-accent,#2563eb);font-weight:650}.agent-profile-panel{min-width:0;margin-top:var(--space-4,16px)}.agent-profile-panel>.ui-card+.ui-card{margin-top:var(--space-4,16px)}.agent-profile-primary-grid{gap:var(--space-4,16px);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.agent-resume-section{box-sizing:border-box;min-width:0;padding:var(--space-6,24px)}.agent-resume-section h2{letter-spacing:-.01em;margin:0;font-size:18px}.agent-resume-section>h2{margin-bottom:var(--space-4,16px)}.agent-resume-section h3{margin:0 0 var(--space-2,8px);font-size:14px}.agent-resume-section p{margin:var(--space-2,8px) 0;overflow-wrap:anywhere;white-space:pre-line;line-height:1.7}.agent-section-heading{margin-bottom:var(--space-4,16px)}.agent-section-heading>span{color:var(--color-muted,#667085);font-size:12px}.agent-resume-list{margin:0;padding:0;list-style:none}.agent-resume-list li{padding:var(--space-3,12px) 0}.agent-resume-list li+li{border-top:1px solid var(--color-border,#e2e5ea)}.agent-project-link{color:var(--color-accent,#2563eb);text-decoration:none}.agent-project-link:hover{text-decoration:underline}.agent-project-overflow{margin-top:var(--space-3,12px)}.agent-project-overflow summary{color:var(--color-accent,#2563eb);cursor:pointer;font-size:13px}.agent-current-work-list{gap:var(--space-2,8px);margin:0;padding:0;list-style:none;display:grid}.agent-current-work-list li{justify-content:space-between;align-items:center;gap:var(--space-3,12px);min-width:0;padding:var(--space-3,12px);border:1px solid var(--color-border,#e2e5ea);border-radius:var(--radius-control,10px);display:flex}.agent-current-work-list .ui-badge,.agent-work-timeline .agent-section-heading>span{white-space:nowrap;flex:none}.agent-current-work-list a{overflow-wrap:anywhere;min-width:0;color:var(--color-accent,#2563eb);font-weight:600;text-decoration:none}.agent-muted,.agent-work-timeline small,.agent-collaborators span{color:var(--color-muted,#667085)}.agent-character{gap:var(--space-5,20px);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.agent-character p{font-size:14px}.agent-strengths{margin-top:var(--space-5,20px)}.agent-strengths h3{margin-bottom:var(--space-3,12px)}.agent-expectation{padding:var(--space-4,16px);border-radius:var(--radius-control,10px);color:var(--color-ink,#1d2129);background:var(--color-accent-soft,#edf3ff)}.agent-expectation strong{margin-bottom:var(--space-2,8px);font-size:13px;display:block}.agent-organization{padding:var(--space-4,16px) 0}.agent-org-lead,.agent-org-members{gap:var(--space-4,16px);padding:var(--space-2,8px) 0;display:flex}.agent-org-lead>span,.agent-org-members>span{min-width:70px;color:var(--color-muted,#667085);font-size:12px}.agent-org-members{margin-left:var(--space-3,12px);padding-left:var(--space-4,16px);border-left:2px solid var(--color-border,#e2e5ea)}.agent-org-members ul{gap:var(--space-3,12px);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.agent-work-timeline{margin:var(--space-5,20px) 0 0 var(--space-2,8px);padding:0 0 0 var(--space-6,24px);border-left:1px solid var(--color-border-strong,#c5cbd5);list-style:none}.agent-work-timeline>li{margin:0 0 var(--space-6,24px);position:relative}.agent-work-timeline>li:before{background:var(--color-accent,#2563eb);content:"";border-radius:50%;width:8px;height:8px;position:absolute;top:5px;left:-29px}.agent-work-timeline .agent-section-heading{margin-bottom:var(--space-2,8px)}.agent-work-timeline a{color:var(--color-accent,#2563eb);font-weight:600;text-decoration:none}.agent-work-timeline p{font-size:14px}.agent-work-timeline small{font-size:12px}.agent-collaborators{gap:var(--space-5,20px) var(--space-8,32px);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.agent-collaborators li{gap:var(--space-2,8px);flex-direction:column;min-width:120px;display:flex}.agent-profile-management-links{gap:var(--space-2,8px);margin-top:var(--space-5,20px);flex-wrap:wrap;display:flex}.agent-profile-footer{gap:var(--space-5,20px);margin-top:var(--space-5,20px);padding:var(--space-5,20px) 0;border-top:1px solid var(--color-border,#e2e5ea);flex-wrap:wrap;font-size:13px;display:flex}.agent-simple-settings{box-sizing:border-box;margin-top:var(--space-4,16px);padding:var(--space-6,24px);border:1px solid var(--color-border,#e2e5ea);border-radius:var(--radius-card,16px);background:var(--color-surface,#fff)}.agent-simple-settings h3{margin:0 0 var(--space-5,20px)}.agent-simple-settings label{gap:var(--space-2,8px);margin-bottom:var(--space-5,20px);color:var(--color-ink,#1d2129);flex-direction:column;font-size:14px;display:flex}.agent-simple-settings small{color:var(--color-muted,#667085);font-size:12px}.agent-simple-settings details{margin:var(--space-5,20px) 0}.agent-simple-settings summary{margin-bottom:var(--space-4,16px);color:var(--color-ink,#1d2129);cursor:pointer;font-size:13px}.agent-simple-settings textarea{min-height:70px}.agent-simple-settings button:disabled{cursor:wait}.agent-locked-platforms p{color:var(--color-ink,#1d2129)}@media (width>=640px){.agents-directory-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=900px){.agents-directory-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=760px){.agents-directory-heading{align-items:flex-start}.agents-directory-heading .agent-profile-actions{gap:var(--space-2,8px)}.agents-directory-filters{align-items:stretch}.agents-directory-search{flex-basis:100%}.agents-directory-filters>select{flex:1;min-width:0}.agent-resume-header{grid-template-columns:auto minmax(0,1fr)}.agent-resume-header .agent-profile-actions{grid-column:1/-1;justify-content:flex-start}.agent-profile-primary-grid,.agent-character{grid-template-columns:1fr}.agent-profile-tabs{gap:var(--space-4,16px)}}@media (width<=480px){.agent-resume-header,.agent-resume-section,.agent-simple-settings{padding:var(--space-4,16px)}.agent-resume-header{grid-template-columns:1fr}.agent-resume-header .agent-profile-actions{grid-column:auto}.agent-portrait{border-radius:16px;flex-basis:56px;width:56px;height:56px;font-size:28px}.agent-current-work-list li{flex-direction:column;align-items:flex-start}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./i18n-D2CJkEYK.js";var t=class extends Error{status;detail;constructor(e,t,n=``){super(e),this.name=`ApiError`,this.status=t,this.detail=n}};async function n(n,r){let i=await fetch(n,r);if(!i.ok){let n=(await i.text()).trim();throw new t(i.status>=500?e(`common.errors.serviceUnavailable`,{status:i.status}):n||e(`common.errors.requestFailed`,{status:i.status}),i.status,n)}return i.json()}function r(e,t){return n(e,t)}function i(e,t){return n(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function a(e,t){return n(e,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function o(e,t){return n(e,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function s(e){return n(e,{method:`DELETE`})}export{a,i,r as n,o as r,s as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{M as e,P as t,_ as n,a as r,h as i,i as a,it as o,n as s,t as c,tt as l,w as u,x as d}from"./i18n-D2CJkEYK.js";var f=[`aria-label`],p=[`lang`,`aria-label`,`aria-pressed`,`onClick`],m=u({__name:`LocaleSwitcher`,setup(u){let m=n(()=>s()),h={"zh-CN":`中`,"en-US":`EN`};function g(e){e!==m.value&&a(e)}return(n,a)=>(e(),d(`div`,{class:`locale-switcher`,role:`group`,"aria-label":l(r)(`common.language.label`)},[(e(!0),d(i,null,t(l(c),t=>(e(),d(`button`,{key:t,type:`button`,lang:t,"aria-label":l(r)(t===`zh-CN`?`common.language.chinese`:`common.language.english`),"aria-pressed":m.value===t,onClick:e=>g(t)},o(h[t]),9,p))),128))],8,f))}});function h(e,t){return s()===`zh-CN`?e:t}var g={draft:[`草案`,`Draft`],active:[`进行中`,`Active`],paused:[`已暂停`,`Paused`],waiting_input:[`等待你的判断`,`Awaiting your decision`],waiting_auth:[`等待授权`,`Awaiting authorization`],concluded:[`已结束`,`Concluded`],failed:[`失败`,`Failed`],cancelled:[`已停止`,`Stopped`],discussion:[`讨论`,`Discussion`],collaboration:[`协作任务`,`Collaborative task`],planning:[`分工`,`Planning`],implementation:[`实施`,`Implementation`],review:[`审查`,`Review`],synthesis:[`汇总`,`Synthesis`],moderator:[`主持人`,`Moderator`],specialist:[`专家`,`Specialist`],implementer:[`实施者`,`Implementer`],reviewer:[`审查者`,`Reviewer`],pending:[`待处理`,`Pending`],claimed:[`已领取`,`Claimed`],running:[`运行中`,`Running`],reported_complete:[`已报告完成`,`Completion reported`],completed:[`已提交回合`,`Turn submitted`],interrupted:[`已中断`,`Interrupted`],blocked:[`受阻`,`Blocked`],expired:[`已过期`,`Expired`],cancellation_requested:[`已请求取消`,`Cancellation requested`],human_accepted:[`已由人确认`,`Accepted by human`],task_verified:[`任务验证通过`,`Task verified`],"read-only":[`只读`,`Read only`],"workspace-write":[`允许写入工作区`,`Workspace write`],mcp:[`MCP · 主动参与`,`MCP · active participation`],codex:[`Codex CLI`,`Codex CLI`],"claude-code":[`Claude Code CLI`,`Claude Code CLI`],pi:[`Pi · 本地 Ollama`,`Pi · local Ollama`],grok:[`Grok · xAI API`,`Grok · xAI API`],a2a:[`A2A · 协议适配`,`A2A · protocol adapter`],proposal:[`提案`,`Proposal`],question:[`提问`,`Question`],handoff:[`交接`,`Handoff`],result:[`结果`,`Result`],dissent:[`分歧`,`Dissent`],user:[`你的补充`,`Your input`],human:[`你的补充`,`Your input`],system:[`系统事件`,`System event`],seat_joined:[`席位加入`,`Seat joined`],turn_claimed:[`回合被领取`,`Turn claimed`],phase_changed:[`阶段改变`,`Phase changed`],attempt_failed:[`尝试失败`,`Attempt failed`],attempt_interrupted:[`尝试中断`,`Attempt interrupted`],owner_control:[`所有者操作`,`Owner control`],invitation_issued:[`邀请已签发`,`Invitation issued`],invitation_revoked:[`邀请已撤销`,`Invitation revoked`],owner_completed:[`所有者验收`,`Owner acceptance`],turn_skipped:[`回合被跳过`,`Turn skipped`]};function _(e){if(!e)return h(`未知`,`Unknown`);let t=g[e];return t?h(...t):e}function v(e){if(!e)return h(`未知`,`Unknown`);let t=new Date(e);return Number.isNaN(t.getTime())?String(e):t.toLocaleString(s(),{hour12:!1})}function y(e){if(typeof e==`string`)return e;if(!e||typeof e!=`object`)return h(`未提供标识`,`No identifier reported`);let t=e;return[t.title??t.name,t.uri??t.path??t.id].filter(e=>typeof e==`string`).join(` · `)||h(`未提供标识`,`No identifier reported`)}export{m as a,v as i,h as n,_ as r,y as t};
|