fuli-context 0.8.3 → 0.9.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +105 -6
  2. package/README.zh-CN.md +92 -6
  3. package/dist/web/assets/{AboutPage-HLhChD_Q.js → AboutPage-u2Bv6cO-.js} +1 -1
  4. package/dist/web/assets/{AgentHand-BaLSbn08.js → AgentHand-CsMcNXUm.js} +1 -1
  5. package/dist/web/assets/{AgentName-0PIU7MOX.js → AgentName-BboCA-Fd.js} +1 -1
  6. package/dist/web/assets/{AgentProfilePage-9cSsZHnk.js → AgentProfilePage-Dyux6qE3.js} +1 -1
  7. package/dist/web/assets/AgentsDirectoryPage-BEJdvmX7.js +1 -0
  8. package/dist/web/assets/{ConnectionsPage-D0wPYbwd.js → ConnectionsPage-Dw_hK_EM.js} +1 -1
  9. package/dist/web/assets/{EmployeeRecruitDialog-BrPH3e50.js → EmployeeRecruitDialog-DP_ktv3w.js} +1 -1
  10. package/dist/web/assets/{EmployeeWorkbenchPage-u-jw38PW.js → EmployeeWorkbenchPage-CAt8lVnr.js} +1 -1
  11. package/dist/web/assets/{GrowthLoading-DFOy-mEl.js → GrowthLoading-DIwqGFSc.js} +1 -1
  12. package/dist/web/assets/{KnowledgeEditDialog-DBsjlkDr.js → KnowledgeEditDialog-Degd9AGD.js} +1 -1
  13. package/dist/web/assets/{KnowledgeInspector-C79hbuOo.js → KnowledgeInspector-yms1ysZ4.js} +1 -1
  14. package/dist/web/assets/{KnowledgeOrganizerPage-Cz1BnAtz.js → KnowledgeOrganizerPage-C64wNn8a.js} +1 -1
  15. package/dist/web/assets/KnowledgePage-BTFEXzgi.js +1 -0
  16. package/dist/web/assets/{KnowledgeWorkspace-B2vj12QG.js → KnowledgeWorkspace-BsF1X4Aq.js} +1 -1
  17. package/dist/web/assets/{NotFoundPage-D340EQJP.js → NotFoundPage-DfaNTiD1.js} +1 -1
  18. package/dist/web/assets/{OverviewPage-BKiYudrC.js → OverviewPage-VXMfcWFI.js} +1 -1
  19. package/dist/web/assets/{PersonalProfilePage-BIGTcem2.js → PersonalProfilePage-C1LBhcYu.js} +1 -1
  20. package/dist/web/assets/PersonalProjectsPage-B5lV4ZJW.js +1 -0
  21. package/dist/web/assets/ProjectAgentFirstTask-6afJ8HUe.css +1 -0
  22. package/dist/web/assets/ProjectAgentFirstTask-DF-IvEqp.js +1 -0
  23. package/dist/web/assets/ProjectAgentsPage-CgL92gng.js +13 -0
  24. package/dist/web/assets/ProjectAgentsPage-CoJ4qQlA.css +1 -0
  25. package/dist/web/assets/{ProjectScopePicker-8hrgvmg-.js → ProjectScopePicker-CZUMdyYz.js} +1 -1
  26. package/dist/web/assets/{PublicProjectsPage-b5zx0dFS.js → PublicProjectsPage-e4CpxHk9.js} +1 -1
  27. package/dist/web/assets/{ReviewPage-BLdWYDmj.js → ReviewPage-DugEaFvI.js} +1 -1
  28. package/dist/web/assets/RoundtablesPage-642YtZBC.js +2 -0
  29. package/dist/web/assets/RoundtablesPage-DCbIBnBq.css +1 -0
  30. package/dist/web/assets/{SearchableSelect-vaoSDq1g.js → SearchableSelect-Do6X3fXi.js} +1 -1
  31. package/dist/web/assets/{SettingsPage-Dxjrkq1g.js → SettingsPage-wqYxDPyu.js} +1 -1
  32. package/dist/web/assets/{SharedJefaReportPage-YG2xwQQy.js → SharedJefaReportPage-CNQDezJr.js} +1 -1
  33. package/dist/web/assets/{WritingTastePage-CPPduPb1.js → WritingTastePage-CAUvbDlL.js} +1 -1
  34. package/dist/web/assets/{agent-profile.css_vue_type_style_index_0_src_true_lang-LTJ1ptv9.js → agent-profile.css_vue_type_style_index_0_src_true_lang-DHOcWSe_.js} +1 -1
  35. package/dist/web/assets/{catalog-B9tlJAp9.js → catalog-JmKyJnKL.js} +1 -1
  36. package/dist/web/assets/{client-InXscj8J.js → client-DTQ_tUr2.js} +1 -1
  37. package/dist/web/assets/{console-hUns2aD-.js → console-CrhIK67Y.js} +1 -1
  38. package/dist/web/assets/{conversation-launcher-settings-DEtJ6pZg.js → conversation-launcher-settings-fUWCt3XG.js} +1 -1
  39. package/dist/web/assets/copy-CX6pyzAG.js +1 -0
  40. package/dist/web/assets/i18n-CIIxzhPZ.js +10 -0
  41. package/dist/web/assets/{identity-Wt2Xio_B.js → identity-CdFITIOu.js} +1 -1
  42. package/dist/web/assets/{index-CWMqDq8g.css → index-CYZi7E1e.css} +1 -1
  43. package/dist/web/assets/index-DMoxVzDU.js +2 -0
  44. package/dist/web/assets/{model-C1GwBvd9.js → model-CJsrDUNb.js} +1 -1
  45. package/dist/web/assets/{personal-profile-graph-BdV_3I1u.js → personal-profile-graph-CQLOait6.js} +1 -1
  46. package/dist/web/assets/{shared-report-tRQV1iJl.js → shared-report-Cll2Yj8W.js} +1 -1
  47. package/dist/web/assets/{task-evidence-BUu7yYIn.js → task-evidence-DTiPCs7r.js} +1 -1
  48. package/dist/web/assets/{useApi-CROJJdhE-QfNm4ADP.js → useApi-CROJJdhE-fcdVGInY.js} +1 -1
  49. package/dist/web/assets/{useModalDialog-BopF-KHN.js → useModalDialog-B-45idX9.js} +1 -1
  50. package/dist/web/assets/{vue-router-COCNAJJn.js → vue-router-BUX6njIv.js} +1 -1
  51. package/dist/web/index.html +12 -11
  52. package/docs/employee-agents.md +20 -1
  53. package/docs/roundtable-beta-testing.md +102 -0
  54. package/docs/roundtable-beta-validation.md +125 -0
  55. package/docs/roundtable-research.md +142 -0
  56. package/graph-provider/fuli_graph/app.py +5 -0
  57. package/graph-provider/fuli_graph/models.py +1 -0
  58. package/graph-provider/fuli_graph/project_agent_task_models.py +1 -0
  59. package/graph-provider/fuli_graph/store_project_agent_context.py +4 -0
  60. package/graph-provider/fuli_graph/store_project_agent_task_reads.py +23 -8
  61. package/graph-provider/fuli_graph/store_project_agent_tasks.py +1 -0
  62. package/graph-provider/fuli_graph/store_records.py +1 -0
  63. package/graph-provider/fuli_graph/store_task_contexts.py +2 -1
  64. package/graph-provider/fuli_graph/task_context_adoption.py +9 -4
  65. package/graph-provider/fuli_graph/task_context_temporary_owner.py +25 -0
  66. package/graph-provider/fuli_graph/temporary_project_scope.py +88 -0
  67. package/npm-shrinkwrap.json +131 -79
  68. package/package.json +7 -3
  69. package/skills/capturing-session-knowledge/SKILL.md +20 -5
  70. package/src/agent-tools/graph-definitions.js +1 -1
  71. package/src/agent-tools/interface-catalog.js +5 -0
  72. package/src/agent-tools/project-agent-definitions.js +2 -2
  73. package/src/agent-tools.js +9 -2
  74. package/src/agents/a2a/roundtable-participant.js +374 -0
  75. package/src/agents/claude-code/roundtable-participant.js +24 -0
  76. package/src/agents/codex/roundtable-config.js +29 -0
  77. package/src/agents/codex/roundtable-participant.js +34 -0
  78. package/src/agents/grok/roundtable-participant.js +185 -0
  79. package/src/agents/pi/roundtable-participant.js +193 -0
  80. package/src/agents/pi/roundtable-result-format.js +183 -0
  81. package/src/cli/command-registry.js +2 -0
  82. package/src/cli/roundtable-command.js +59 -0
  83. package/src/cli.js +5 -0
  84. package/src/graphiti/agent-knowledge-workflows.js +14 -5
  85. package/src/graphiti/federated-application.js +3 -1
  86. package/src/graphiti/project-agent-mapping.js +1 -0
  87. package/src/graphiti/project-agent-workflows.js +28 -11
  88. package/src/graphiti/project-path-context.js +1 -0
  89. package/src/graphiti/provider-client.js +3 -0
  90. package/src/graphiti/temporary-project-scope.js +46 -0
  91. package/src/http/api-router.js +2 -0
  92. package/src/http/error-mapping.js +2 -0
  93. package/src/mcp/provider-task-context-registry.js +10 -0
  94. package/src/mcp/session-id.js +1 -0
  95. package/src/mcp/tool-annotations.js +2 -0
  96. package/src/roundtables/application.js +69 -0
  97. package/src/roundtables/domain.js +181 -0
  98. package/src/roundtables/http-router.js +56 -0
  99. package/src/roundtables/mcp-server.js +48 -0
  100. package/src/roundtables/participant-registry.js +12 -0
  101. package/src/roundtables/process.js +70 -0
  102. package/src/roundtables/result-contract.js +47 -0
  103. package/src/roundtables/server.js +52 -0
  104. package/src/roundtables/service.js +396 -0
  105. package/src/roundtables/store.js +59 -0
  106. package/src/roundtables/tool-contract.js +41 -0
  107. package/src/roundtables/turn-prompt.js +21 -0
  108. package/src/roundtables/worker.js +85 -0
  109. package/dist/web/assets/AgentsDirectoryPage-7G02Xm6C.js +0 -1
  110. package/dist/web/assets/KnowledgePage-JyfFFUrg.js +0 -1
  111. package/dist/web/assets/PersonalProjectsPage-CzjDCIi0.js +0 -1
  112. package/dist/web/assets/ProjectAgentsPage-C5F2WgwJ.js +0 -13
  113. package/dist/web/assets/ProjectAgentsPage-C89ZEDgi.css +0 -1
  114. package/dist/web/assets/i18n-75woNt31.js +0 -9
  115. package/dist/web/assets/index-pleRuLpw.js +0 -2
@@ -1 +1 @@
1
- import{A as e,C as t,F as ee,H as n,M as r,N as i,R as a,T as o,Z as s,_ as c,a as l,at as u,b as d,d as f,h as p,j as m,m as h,nt as g,p as te,rt as _,v,x as y,z as b}from"./i18n-75woNt31.js";import{t as x}from"./_plugin-vue_export-helper-BDNMzG2s.js";var ne={class:`project-scope-heading`},S=[`id`],C={key:0,class:`project-scope-count`,role:`status`},w=[`disabled`,`aria-expanded`,`aria-controls`,`aria-labelledby`],re={key:0,viewBox:`0 0 20 20`,width:`18`,height:`18`,"aria-hidden":`true`},ie=[`id`],ae={key:1,class:`project-scope-multiple`},oe=[`id`,`aria-labelledby`],se=[`placeholder`,`aria-label`,`disabled`],T={class:`project-scope-bulk`},E={class:`project-scope-option project-scope-all`},D=[`checked`,`indeterminate`,`disabled`],O=[`disabled`],k=[`disabled`],A={class:`project-scope-list`},j=[`value`,`checked`,`disabled`,`onChange`],M={key:0,class:`project-scope-project-id`},N={key:0,class:`project-scope-empty`},P={key:0,class:`project-scope-footer`},F={role:`status`},I={key:1,class:`project-scope-hint`},L={key:2,class:`project-scope-hint`},R=x(o({__name:`ProjectScopePicker`,props:{modelValue:{},projects:{},disabled:{type:Boolean},inline:{type:Boolean},label:{},hint:{},emptyLabel:{},compact:{type:Boolean},allLabel:{},showCount:{type:Boolean},resettable:{type:Boolean}},emits:[`update:modelValue`,`reset`],setup(o,{emit:x}){let R=o,z=x,B=s(null),V=s(null),H=s(null),U=s(!1),W=s(``),G=`employee-projects-${a().replace(/[^a-zA-Z0-9_-]/g,``)}`,K=c(()=>new Set(R.modelValue)),q=c(()=>R.projects.filter(e=>K.value.has(e.id)).length),J=c(()=>R.projects.length>0&&q.value===R.projects.length),ce=c(()=>R.label??l(`employees.scope.label`)),Y=c(()=>{let e=new Map;for(let t of R.projects)e.set(t.name,(e.get(t.name)??0)+1);return new Set([...e].filter(([,e])=>e>1).map(([e])=>e))}),le=c(()=>{let e=R.projects.find(e=>K.value.has(e.id));return e?`${e.name}${Y.value.has(e.name)?` · ${e.id}`:``}`:``}),ue=c(()=>R.showCount?l(`employees.scope.count`,{selected:q.value,total:R.projects.length}):J.value?R.allLabel??l(`employees.scope.allSummary`,{count:q.value}):q.value===1?le.value:q.value?l(`employees.scope.selected`,{count:q.value}):R.emptyLabel??l(`employees.unassigned`)),X=c(()=>{let e=W.value.trim().toLocaleLowerCase();return R.projects.filter(t=>`${t.name} ${t.id}`.toLocaleLowerCase().includes(e))});b(()=>R.disabled,e=>{e&&Z()}),r(()=>document.addEventListener(`pointerdown`,Q)),m(()=>document.removeEventListener(`pointerdown`,Q));async function de(){if(!R.disabled){if(U.value){Z();return}W.value=``,U.value=!0,await e(),H.value?.focus()}}function Z(t=!1){U.value=!1,t&&e(()=>V.value?.focus())}function Q(e){U.value&&!B.value?.contains(e.target)&&Z()}function fe(e){e.relatedTarget&&!B.value?.contains(e.relatedTarget)&&Z()}function pe(e){U.value&&e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),Z(!0))}function $(e){R.disabled||z(`update:modelValue`,e)}function me(){$(J.value?[]:R.projects.map(e=>e.id))}function he(){$(R.projects.filter(e=>!K.value.has(e.id)).map(e=>e.id))}function ge(e){let t=new Set(R.modelValue);t.has(e)?t.delete(e):t.add(e),$(R.projects.filter(e=>t.has(e.id)).map(e=>e.id))}return(e,r)=>(i(),y(`div`,{ref_key:`root`,ref:B,class:_([`project-scope-picker`,{"is-inline":o.inline,"is-compact":o.compact,"has-count":o.showCount}]),onFocusout:fe,onKeydown:pe},[v(`div`,ne,[v(`span`,{id:`${G}-label`,class:`project-scope-label`},u(ce.value),9,S),o.inline?(i(),y(`span`,C,u(g(l)(`employees.scope.count`,{selected:q.value,total:o.projects.length})),1)):d(``,!0)]),o.inline?d(``,!0):(i(),y(`button`,{key:0,ref_key:`trigger`,ref:V,type:`button`,class:`project-scope-trigger`,disabled:o.disabled,"aria-expanded":U.value,"aria-controls":`${G}-panel`,"aria-labelledby":`${G}-label ${G}-value`,onClick:de},[o.compact?(i(),y(`svg`,re,[...r[4]||=[v(`path`,{d:`M3 5h14M5.5 10h9M8 15h4`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`},null,-1)]])):d(``,!0),v(`span`,{id:`${G}-value`,class:`project-scope-value`},u(ue.value),9,ie),o.compact&&!o.showCount?(i(),y(`small`,ae,u(g(l)(`employees.scope.multiple`)),1)):d(``,!0),r[5]||=v(`svg`,{viewBox:`0 0 20 20`,width:`18`,height:`18`,"aria-hidden":`true`},[v(`path`,{d:`m5 7.5 5 5 5-5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`,"stroke-linejoin":`round`})],-1)],8,w)),o.inline||U.value?(i(),y(`div`,{key:1,id:`${G}-panel`,class:`project-scope-panel`,role:`group`,"aria-labelledby":`${G}-label`},[n(v(`input`,{ref_key:`search`,ref:H,"onUpdate:modelValue":r[0]||=e=>W.value=e,type:`search`,class:`project-scope-search`,placeholder:g(l)(`employees.scope.search`),"aria-label":g(l)(`employees.scope.search`),disabled:o.disabled,onKeydown:r[1]||=te(h(()=>{},[`prevent`]),[`enter`])},null,40,se),[[f,W.value]]),v(`div`,T,[v(`label`,E,[v(`input`,{type:`checkbox`,checked:J.value,indeterminate:q.value>0&&!J.value,disabled:o.disabled||!o.projects.length,onChange:me},null,40,D),v(`span`,null,[t(u(o.allLabel??g(l)(`employees.scope.all`))+` `,1),v(`small`,null,u(o.projects.length),1)])]),v(`button`,{type:`button`,disabled:o.disabled||!o.projects.length,onClick:he},u(g(l)(`employees.scope.invert`)),9,O),o.resettable?(i(),y(`button`,{key:0,class:`project-scope-reset`,type:`button`,disabled:o.disabled,onClick:r[2]||=e=>z(`reset`)},u(g(l)(`employees.scope.reset`)),9,k)):d(``,!0)]),v(`div`,A,[(i(!0),y(p,null,ee(X.value,e=>(i(),y(`label`,{key:e.id,class:_([`project-scope-option`,{"is-selected":K.value.has(e.id)}])},[v(`input`,{type:`checkbox`,value:e.id,checked:K.value.has(e.id),disabled:o.disabled,onChange:t=>ge(e.id)},null,40,j),v(`span`,null,[t(u(e.name),1),Y.value.has(e.name)?(i(),y(`small`,M,u(e.id),1)):d(``,!0)])],2))),128)),X.value.length?d(``,!0):(i(),y(`p`,N,u(g(l)(o.projects.length?`employees.scope.noMatch`:`employees.scope.empty`)),1))]),o.inline?d(``,!0):(i(),y(`div`,P,[v(`span`,F,u(g(l)(`employees.scope.count`,{selected:q.value,total:o.projects.length})),1),v(`button`,{type:`button`,onClick:r[3]||=e=>Z(!0)},u(g(l)(`employees.scope.done`)),1)])),o.compact&&o.hint?(i(),y(`p`,I,u(o.hint),1)):d(``,!0)],8,oe)):d(``,!0),!o.compact&&o.hint!==``?(i(),y(`p`,L,u(o.hint??g(l)(`employees.scope.snapshotHint`)),1)):d(``,!0)],34))}}),[[`__scopeId`,`data-v-bbd9c029`]]);export{R as t};
1
+ import{A as e,C as t,F as ee,H as n,M as r,N as i,R as a,T as o,Z as s,_ as c,a as l,at as u,b as d,d as f,h as p,j as m,m as h,nt as g,p as te,rt as _,v,x as y,z as b}from"./i18n-CIIxzhPZ.js";import{t as x}from"./_plugin-vue_export-helper-BDNMzG2s.js";var ne={class:`project-scope-heading`},S=[`id`],C={key:0,class:`project-scope-count`,role:`status`},w=[`disabled`,`aria-expanded`,`aria-controls`,`aria-labelledby`],re={key:0,viewBox:`0 0 20 20`,width:`18`,height:`18`,"aria-hidden":`true`},ie=[`id`],ae={key:1,class:`project-scope-multiple`},oe=[`id`,`aria-labelledby`],se=[`placeholder`,`aria-label`,`disabled`],T={class:`project-scope-bulk`},E={class:`project-scope-option project-scope-all`},D=[`checked`,`indeterminate`,`disabled`],O=[`disabled`],k=[`disabled`],A={class:`project-scope-list`},j=[`value`,`checked`,`disabled`,`onChange`],M={key:0,class:`project-scope-project-id`},N={key:0,class:`project-scope-empty`},P={key:0,class:`project-scope-footer`},F={role:`status`},I={key:1,class:`project-scope-hint`},L={key:2,class:`project-scope-hint`},R=x(o({__name:`ProjectScopePicker`,props:{modelValue:{},projects:{},disabled:{type:Boolean},inline:{type:Boolean},label:{},hint:{},emptyLabel:{},compact:{type:Boolean},allLabel:{},showCount:{type:Boolean},resettable:{type:Boolean}},emits:[`update:modelValue`,`reset`],setup(o,{emit:x}){let R=o,z=x,B=s(null),V=s(null),H=s(null),U=s(!1),W=s(``),G=`employee-projects-${a().replace(/[^a-zA-Z0-9_-]/g,``)}`,K=c(()=>new Set(R.modelValue)),q=c(()=>R.projects.filter(e=>K.value.has(e.id)).length),J=c(()=>R.projects.length>0&&q.value===R.projects.length),ce=c(()=>R.label??l(`employees.scope.label`)),Y=c(()=>{let e=new Map;for(let t of R.projects)e.set(t.name,(e.get(t.name)??0)+1);return new Set([...e].filter(([,e])=>e>1).map(([e])=>e))}),le=c(()=>{let e=R.projects.find(e=>K.value.has(e.id));return e?`${e.name}${Y.value.has(e.name)?` · ${e.id}`:``}`:``}),ue=c(()=>R.showCount?l(`employees.scope.count`,{selected:q.value,total:R.projects.length}):J.value?R.allLabel??l(`employees.scope.allSummary`,{count:q.value}):q.value===1?le.value:q.value?l(`employees.scope.selected`,{count:q.value}):R.emptyLabel??l(`employees.unassigned`)),X=c(()=>{let e=W.value.trim().toLocaleLowerCase();return R.projects.filter(t=>`${t.name} ${t.id}`.toLocaleLowerCase().includes(e))});b(()=>R.disabled,e=>{e&&Z()}),r(()=>document.addEventListener(`pointerdown`,Q)),m(()=>document.removeEventListener(`pointerdown`,Q));async function de(){if(!R.disabled){if(U.value){Z();return}W.value=``,U.value=!0,await e(),H.value?.focus()}}function Z(t=!1){U.value=!1,t&&e(()=>V.value?.focus())}function Q(e){U.value&&!B.value?.contains(e.target)&&Z()}function fe(e){e.relatedTarget&&!B.value?.contains(e.relatedTarget)&&Z()}function pe(e){U.value&&e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),Z(!0))}function $(e){R.disabled||z(`update:modelValue`,e)}function me(){$(J.value?[]:R.projects.map(e=>e.id))}function he(){$(R.projects.filter(e=>!K.value.has(e.id)).map(e=>e.id))}function ge(e){let t=new Set(R.modelValue);t.has(e)?t.delete(e):t.add(e),$(R.projects.filter(e=>t.has(e.id)).map(e=>e.id))}return(e,r)=>(i(),y(`div`,{ref_key:`root`,ref:B,class:_([`project-scope-picker`,{"is-inline":o.inline,"is-compact":o.compact,"has-count":o.showCount}]),onFocusout:fe,onKeydown:pe},[v(`div`,ne,[v(`span`,{id:`${G}-label`,class:`project-scope-label`},u(ce.value),9,S),o.inline?(i(),y(`span`,C,u(g(l)(`employees.scope.count`,{selected:q.value,total:o.projects.length})),1)):d(``,!0)]),o.inline?d(``,!0):(i(),y(`button`,{key:0,ref_key:`trigger`,ref:V,type:`button`,class:`project-scope-trigger`,disabled:o.disabled,"aria-expanded":U.value,"aria-controls":`${G}-panel`,"aria-labelledby":`${G}-label ${G}-value`,onClick:de},[o.compact?(i(),y(`svg`,re,[...r[4]||=[v(`path`,{d:`M3 5h14M5.5 10h9M8 15h4`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`},null,-1)]])):d(``,!0),v(`span`,{id:`${G}-value`,class:`project-scope-value`},u(ue.value),9,ie),o.compact&&!o.showCount?(i(),y(`small`,ae,u(g(l)(`employees.scope.multiple`)),1)):d(``,!0),r[5]||=v(`svg`,{viewBox:`0 0 20 20`,width:`18`,height:`18`,"aria-hidden":`true`},[v(`path`,{d:`m5 7.5 5 5 5-5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`,"stroke-linejoin":`round`})],-1)],8,w)),o.inline||U.value?(i(),y(`div`,{key:1,id:`${G}-panel`,class:`project-scope-panel`,role:`group`,"aria-labelledby":`${G}-label`},[n(v(`input`,{ref_key:`search`,ref:H,"onUpdate:modelValue":r[0]||=e=>W.value=e,type:`search`,class:`project-scope-search`,placeholder:g(l)(`employees.scope.search`),"aria-label":g(l)(`employees.scope.search`),disabled:o.disabled,onKeydown:r[1]||=te(h(()=>{},[`prevent`]),[`enter`])},null,40,se),[[f,W.value]]),v(`div`,T,[v(`label`,E,[v(`input`,{type:`checkbox`,checked:J.value,indeterminate:q.value>0&&!J.value,disabled:o.disabled||!o.projects.length,onChange:me},null,40,D),v(`span`,null,[t(u(o.allLabel??g(l)(`employees.scope.all`))+` `,1),v(`small`,null,u(o.projects.length),1)])]),v(`button`,{type:`button`,disabled:o.disabled||!o.projects.length,onClick:he},u(g(l)(`employees.scope.invert`)),9,O),o.resettable?(i(),y(`button`,{key:0,class:`project-scope-reset`,type:`button`,disabled:o.disabled,onClick:r[2]||=e=>z(`reset`)},u(g(l)(`employees.scope.reset`)),9,k)):d(``,!0)]),v(`div`,A,[(i(!0),y(p,null,ee(X.value,e=>(i(),y(`label`,{key:e.id,class:_([`project-scope-option`,{"is-selected":K.value.has(e.id)}])},[v(`input`,{type:`checkbox`,value:e.id,checked:K.value.has(e.id),disabled:o.disabled,onChange:t=>ge(e.id)},null,40,j),v(`span`,null,[t(u(e.name),1),Y.value.has(e.name)?(i(),y(`small`,M,u(e.id),1)):d(``,!0)])],2))),128)),X.value.length?d(``,!0):(i(),y(`p`,N,u(g(l)(o.projects.length?`employees.scope.noMatch`:`employees.scope.empty`)),1))]),o.inline?d(``,!0):(i(),y(`div`,P,[v(`span`,F,u(g(l)(`employees.scope.count`,{selected:q.value,total:o.projects.length})),1),v(`button`,{type:`button`,onClick:r[3]||=e=>Z(!0)},u(g(l)(`employees.scope.done`)),1)])),o.compact&&o.hint?(i(),y(`p`,I,u(o.hint),1)):d(``,!0)],8,oe)):d(``,!0),!o.compact&&o.hint!==``?(i(),y(`p`,L,u(o.hint??g(l)(`employees.scope.snapshotHint`)),1)):d(``,!0)],34))}}),[[`__scopeId`,`data-v-bbd9c029`]]);export{R as t};
@@ -1 +1 @@
1
- import{C as e,F as t,H as n,N as r,T as i,Z as a,_ as o,a as s,at as c,b as l,d as ee,h as u,j as te,m as ne,n as re,nt as d,rt as ie,v as f,w as p,x as m,y as h}from"./i18n-75woNt31.js";import{t as ae}from"./console-hUns2aD-.js";import{t as g}from"./GrowthLoading-DFOy-mEl.js";import{h as oe}from"./useApi-CROJJdhE-QfNm4ADP.js";import{i as _,n as v,t as y}from"./client-InXscj8J.js";import{t as b}from"./useModalDialog-BopF-KHN.js";import{t as se}from"./paths-CDREouhi.js";import{t as x}from"./SearchableSelect-vaoSDq1g.js";import{r as S,t as C}from"./identity-Wt2Xio_B.js";var ce={class:`view`},le={class:`space-heading public-space-heading`},ue=[`aria-label`],de={class:`project-grid`},fe={class:`project-card-heading`},pe={class:`project-card-heading-actions`},me=[`onClick`],he={class:`completion-badge`},ge={class:`project-purpose`},_e={class:`evidence-row`},ve={key:0,class:`muted`},ye={class:`project-access`},be={class:`muted`},xe={key:0,class:`project-release-meta`},Se={class:`project-card-footer`},Ce=[`onClick`],we=[`onClick`],Te={key:0,class:`empty-state project-empty`},Ee={class:`project-section`},De={class:`section-toolbar compact-toolbar relation-section-toolbar`},Oe=[`disabled`],ke={key:0,class:`muted`},Ae={class:`compact-relation-preview`,"aria-live":`polite`},je={key:0},Me={key:1},Ne={class:`primary-action`,type:`submit`},Pe={key:0,class:`project-dialog-shell`},Fe={class:`project-dialog-header`},Ie={id:`public-project-details-title`},Le={class:`project-latest-release`},Re={key:0},ze={key:1,class:`muted`},Be={class:`project-detail-columns`},Ve={key:1,class:`muted`},He={key:0,class:`muted`},Ue={key:1,class:`project-latest-release`},We={class:`muted`},Ge={class:`project-dialog-actions`},Ke={key:0,class:`project-dialog-shell`},qe={class:`project-dialog-header`},Je={id:`public-project-deletion-title`},Ye=[`disabled`],Xe={class:`project-delete-confirmation`},Ze=[`disabled`],Qe={key:0,class:`publish-dialog-error`,role:`alert`},$e={class:`project-dialog-actions`},et=[`disabled`],tt={key:1},nt=`fuli-workspace-v1`,w=i({__name:`PublicProjectsPage`,setup(i){let w=ae(),rt=oe(),T=a(null),E=a([]),D=a([]),O=a(!1),k=a(!1),A=a(``),j=a(``),M=a(`RELATED_TO`),N=a(null),P=a(``),F=a(!1),I=a(``),L=0,R=null,z=o(()=>w.state?.projects??[]),it=o(()=>w.state?.providers?.workspaces??[]),B=o(()=>new Set((w.state?.subscriptions??[]).map(({provider_url:e,project_id:t})=>`${e}::${t}`))),V=o(()=>z.value.filter(({role:e,isOwner:t})=>e===`maintainer`||t)),H=o(()=>V.value.filter(({providerUrl:e})=>X(e))),at=o(()=>H.value.map(e=>({value:e.id,label:e.name,meta:`#${C(e.id,26)}`,search:S(e.id)}))),ot=o(()=>{let e=z.value.find(({id:e})=>e===A.value);return!e||!X(e.providerUrl)?[]:z.value.filter(({id:t,providerUrl:n})=>t!==e.id&&n===e.providerUrl&&X(n))}),st=o(()=>ot.value.map(e=>({value:e.id,label:e.name,meta:`#${C(e.id,26)}`,search:S(e.id)}))),ct=o(()=>z.value.find(({id:e})=>e===A.value)??null),lt=o(()=>z.value.find(({id:e})=>e===j.value)??null),ut=o(()=>W.value.find(({value:e})=>e===M.value)?.label??s(`pages.publicProjects.relationLabels.relatedTo`)),dt=o(()=>T.value?X(T.value.providerUrl):!1),U=o(()=>!!(N.value&&P.value===N.value.name)),W=o(()=>[{value:`PART_OF`,label:s(`pages.publicProjects.relationLabels.partOf`)},{value:`USES_KNOWLEDGE_FROM`,label:s(`pages.publicProjects.relationLabels.usesKnowledgeFrom`)},{value:`DEPENDS_ON`,label:s(`pages.publicProjects.relationLabels.dependsOn`)},{value:`PROVIDES_TO`,label:s(`pages.publicProjects.relationLabels.providesTo`)},{value:`SHARES_CAPABILITY_WITH`,label:s(`pages.publicProjects.relationLabels.sharesCapabilityWith`)},{value:`SUCCESSOR_OF`,label:s(`pages.publicProjects.relationLabels.successorOf`)},{value:`RELATED_TO`,label:s(`pages.publicProjects.relationLabels.relatedTo`)}]),{dialogRef:ft,initialFocusRef:pt,onCancel:G,onKeydown:K}=b(()=>!!T.value,Q),{dialogRef:mt,initialFocusRef:ht,onCancel:q,onKeydown:J}=b(()=>!!N.value,xt);function Y(e){return`${e.providerUrl}::${e.id}`}function X(e){return it.value.find(({providerUrl:t})=>t===e)?.protocol!==nt}function Z(e){return e.profile?.purpose||e.profile?.scope||e.profile?.technical_summary||e.description||s(`pages.publicProjects.fallbackDescription`)}async function gt(e){try{if(B.value.has(Y(e))){let t=new URLSearchParams({personalSpaceId:w.activePersonalSpace?.id??``,providerUrl:e.providerUrl});await y(`/api/subscriptions/${encodeURIComponent(e.id)}?${t}`),w.notify(s(`pages.publicProjects.unsubscribed`,{name:e.name}))}else await _(`/api/subscriptions`,{personalSpaceId:w.activePersonalSpace?.id,projectId:e.id,providerUrl:e.providerUrl,projectName:e.name}),w.notify(s(`pages.publicProjects.subscribed`,{name:e.name}));await w.refresh()}catch(e){w.reportError(e)}}async function _t(e){if(Q(),T.value=e,E.value=[],D.value=[],!X(e.providerUrl))return;let t=++L,n=new AbortController;R=n,O.value=!0;try{let r=new URLSearchParams({providerUrl:e.providerUrl}),[i,a]=await Promise.all([v(`/api/projects/${encodeURIComponent(e.id)}/releases?${r}`,{signal:n.signal}),v(`/api/project-relations?${new URLSearchParams({projectId:e.id,providerUrl:e.providerUrl})}`,{signal:n.signal})]);if(t!==L||n.signal.aborted)return;E.value=i.releases??[],D.value=a.relations??[]}catch(e){if(t!==L||n.signal.aborted)return;w.reportError(e)}finally{if(t!==L||n.signal.aborted)return;O.value=!1,R===n&&(R=null)}}async function vt(e){Q(),await rt.push(se(`public`,e.id,`graph`))}function yt(){L+=1,R?.abort(),R=null,O.value=!1}function Q(){yt(),T.value=null,E.value=[],D.value=[]}function bt(e){X(e.providerUrl)&&(N.value=e,P.value=``,I.value=``)}function xt(){F.value||(N.value=null,P.value=``,I.value=``)}async function St(){let e=N.value;if(!e||!U.value){I.value=s(`pages.publicProjects.deleteNameRequired`);return}if(!X(e.providerUrl)){I.value=s(`pages.publicProjects.providerOperationsUnavailable`);return}F.value=!0,I.value=``;try{let t=new URLSearchParams({providerUrl:e.providerUrl});await y(`/api/projects/${encodeURIComponent(e.id)}?${t}`),T.value=null,N.value=null,w.notify(s(`pages.publicProjects.deleted`,{name:e.name})),await w.refresh()}catch(e){I.value=e instanceof Error?e.message:s(`pages.publicProjects.deleteFailed`),w.reportError(e)}finally{F.value=!1}}async function Ct(){let e=z.value.find(({id:e})=>e===A.value),t=z.value.find(({id:e})=>e===j.value);if(!e||!t){w.reportError(Error(s(`pages.publicProjects.chooseRelationProjects`)));return}if(!X(e.providerUrl)){w.reportError(Error(s(`pages.publicProjects.providerOperationsUnavailable`)));return}try{await _(`/api/project-relations`,{sourceProjectId:e.id,targetProjectId:t.id,providerUrl:e.providerUrl,relationType:M.value,note:null}),k.value=!1,A.value=``,j.value=``,w.notify(M.value===`PART_OF`?s(`pages.publicProjects.parentRelationSubmitted`):s(`pages.publicProjects.relationCreated`))}catch(e){w.reportError(e)}}te(yt);function $(e){return e?new Date(e).toLocaleString(re()):s(`pages.publicProjects.timeNotRecorded`)}return(i,a)=>(r(),m(`section`,ce,[f(`div`,le,[a[11]||=f(`span`,{class:`space-heading-icon`,"aria-hidden":`true`},[f(`span`,{class:`nav-icon nav-icon-public-project`})],-1),f(`div`,null,[f(`p`,null,c(d(s)(`pages.publicProjects.intro`)),1)]),f(`div`,{class:`public-space-stats`,"aria-label":d(s)(`pages.publicProjects.overviewAria`)},[f(`span`,null,[f(`strong`,null,c(z.value.length),1),e(c(d(s)(`pages.publicProjects.discoverable`)),1)]),f(`span`,null,[f(`strong`,null,c(d(w).state?.subscriptions.length??0),1),e(c(d(s)(`pages.publicProjects.subscribedCount`)),1)])],8,ue)]),f(`div`,de,[(r(!0),m(u,null,t(z.value,e=>(r(),m(`article`,{key:Y(e),class:`project-card`},[f(`div`,fe,[f(`div`,null,[f(`h4`,null,c(e.name),1)]),f(`div`,pe,[e.can_manage&&X(e.providerUrl)?(r(),m(`button`,{key:0,class:`management-action`,type:`button`,onClick:t=>bt(e)},c(d(s)(`pages.publicProjects.manage`)),9,me)):l(``,!0),f(`div`,he,[f(`strong`,null,c(e.profile?.assessment?.score??`—`),1),f(`span`,null,c(e.profile?.assessment?d(s)(`pages.publicProjects.coverage`):d(s)(`pages.publicProjects.noSummary`)),1)])])]),f(`p`,ge,c(Z(e)),1),f(`div`,_e,[(r(!0),m(u,null,t(e.profile?.sources??[],(e,t)=>(r(),m(`span`,{key:t,class:`status-chip`},c(e.kind??d(s)(`pages.publicProjects.material`)),1))),128)),e.profile?.sources?.length?l(``,!0):(r(),m(`span`,ve,c(d(s)(`pages.publicProjects.noSources`)),1))]),f(`div`,ye,[f(`span`,{class:ie([`status-chip`,{owner:e.isOwner}])},c(e.isOwner?`Owner`:e.role??`Reader`),3),f(`span`,be,c(e.isOwner?d(s)(`pages.publicProjects.publishedByYou`):d(s)(`pages.publicProjects.publiclyDiscoverable`)),1),e.current_release&&X(e.providerUrl)?(r(),m(`span`,xe,[f(`strong`,null,c(e.current_release.version),1),f(`span`,null,c($(e.current_release.published_at)),1)])):l(``,!0)]),f(`footer`,Se,[f(`button`,{class:`secondary-action`,type:`button`,onClick:t=>gt(e)},c(B.value.has(Y(e))?d(s)(`pages.publicProjects.unsubscribe`):d(s)(`pages.publicProjects.subscribe`)),9,Ce),f(`button`,{class:`primary-action`,type:`button`,onClick:t=>_t(e)},c(d(s)(`common.actions.viewDetails`)),9,we)])]))),128)),z.value.length?l(``,!0):(r(),m(`div`,Te,c(d(s)(`pages.publicProjects.noProjects`)),1))]),f(`section`,Ee,[f(`div`,De,[f(`div`,null,[f(`h3`,null,c(d(s)(`pages.publicProjects.relationsTitle`)),1),f(`p`,null,c(d(s)(`pages.publicProjects.relationsCopy`)),1)]),f(`button`,{class:`primary-action`,type:`button`,disabled:!H.value.length,onClick:a[0]||=e=>k.value=!k.value},c(d(s)(`pages.publicProjects.addRelation`)),9,Oe)]),V.value.length&&!H.value.length?(r(),m(`p`,ke,c(d(s)(`pages.publicProjects.providerOperationsUnavailable`)),1)):l(``,!0),k.value?(r(),m(`form`,{key:1,class:`relation-composer relation-composer-form compact-relation-form`,onSubmit:ne(Ct,[`prevent`])},[f(`label`,null,[e(c(d(s)(`pages.publicProjects.sourceProject`))+` `,1),p(x,{modelValue:A.value,"onUpdate:modelValue":a[1]||=e=>A.value=e,options:at.value,label:d(s)(`pages.publicProjects.sourceProjectLabel`),placeholder:d(s)(`pages.publicProjects.chooseProject`),searchable:``,required:``,onChange:a[2]||=e=>j.value=``},null,8,[`modelValue`,`options`,`label`,`placeholder`])]),f(`label`,null,[e(c(d(s)(`pages.publicProjects.relation`))+` `,1),p(x,{modelValue:M.value,"onUpdate:modelValue":a[3]||=e=>M.value=e,options:W.value,label:d(s)(`pages.publicProjects.relationTypeLabel`)},null,8,[`modelValue`,`options`,`label`])]),f(`label`,null,[e(c(d(s)(`pages.publicProjects.targetProject`))+` `,1),p(x,{modelValue:j.value,"onUpdate:modelValue":a[4]||=e=>j.value=e,options:st.value,label:d(s)(`pages.publicProjects.targetProjectLabel`),placeholder:d(s)(`pages.publicProjects.chooseProject`),searchable:``,required:``},null,8,[`modelValue`,`options`,`label`,`placeholder`])]),f(`div`,Ae,[f(`span`,null,c(d(s)(`pages.publicProjects.preview`)),1),f(`strong`,null,c(ct.value?.name||d(s)(`pages.publicProjects.sourceProject`))+` `+c(ut.value)+` `+c(lt.value?.name||d(s)(`pages.publicProjects.targetProject`)),1),M.value===`PART_OF`?(r(),m(`p`,je,c(d(s)(`pages.publicProjects.parentConfirmation`)),1)):(r(),m(`p`,Me,c(d(s)(`pages.publicProjects.relationBoundary`)),1))]),f(`button`,Ne,c(d(s)(`pages.publicProjects.addRelation`)),1)],32)):l(``,!0)]),f(`dialog`,{ref_key:`detailsDialogRef`,ref:ft,class:`project-dialog vue-dialog`,"aria-modal":`true`,"aria-labelledby":`public-project-details-title`,onCancel:a[6]||=(...e)=>d(G)&&d(G)(...e),onKeydown:a[7]||=(...e)=>d(K)&&d(K)(...e)},[T.value?(r(),m(`div`,Pe,[f(`header`,Fe,[f(`div`,null,[f(`h3`,Ie,c(T.value.name),1),f(`p`,null,c(Z(T.value)),1)]),f(`button`,{ref_key:`detailsInitialFocusRef`,ref:pt,class:`secondary-action`,type:`button`,onClick:Q},c(d(s)(`common.actions.close`)),513)]),dt.value?(r(),m(u,{key:0},[f(`section`,Le,[f(`h4`,null,c(d(s)(`pages.publicProjects.latestRelease`)),1),T.value.current_release?(r(),m(`p`,Re,[f(`strong`,null,c(T.value.current_release.version),1),e(` · `+c($(T.value.current_release.published_at)),1)])):(r(),m(`p`,ze,c(d(s)(`pages.publicProjects.noRelease`)),1))]),f(`div`,Be,[f(`section`,null,[f(`h4`,null,c(d(s)(`pages.publicProjects.releaseHistory`)),1),O.value?(r(),h(g,{key:0,variant:`compact`,label:d(s)(`pages.publicProjects.loading`)},null,8,[`label`])):l(``,!0),(r(!0),m(u,null,t(E.value,e=>(r(),m(`article`,{key:e.version,class:`project-release-item`},[f(`strong`,null,c(e.version),1),f(`p`,null,c(e.update_summary),1),f(`small`,null,c($(e.published_at)),1)]))),128)),!O.value&&!E.value.length?(r(),m(`p`,Ve,c(d(s)(`pages.publicProjects.noReleaseHistory`)),1)):l(``,!0)]),f(`section`,null,[f(`h4`,null,c(d(s)(`pages.publicProjects.relationsTitle`)),1),(r(!0),m(u,null,t(D.value,e=>(r(),m(`article`,{key:e.id,class:`project-detail-relation`},[f(`strong`,null,c(e.relation_type),1),f(`small`,null,c(e.status??`active`),1)]))),128)),!O.value&&!D.value.length?(r(),m(`p`,He,c(d(s)(`pages.publicProjects.noRelations`)),1)):l(``,!0)])])],64)):(r(),m(`section`,Ue,[f(`p`,We,c(d(s)(`pages.publicProjects.providerOperationsUnavailableTitle`)),1)])),f(`footer`,Ge,[f(`span`,null,c(d(s)(`pages.publicProjects.contentManagementSeparated`)),1),f(`button`,{class:`primary-action`,type:`button`,onClick:a[5]||=e=>vt(T.value)},c(d(s)(`pages.publicProjects.viewGraph`)),1)])])):l(``,!0)],544),f(`dialog`,{ref_key:`deletionDialogRef`,ref:mt,class:`project-dialog vue-dialog`,"aria-modal":`true`,"aria-labelledby":`public-project-deletion-title`,onCancel:a[9]||=(...e)=>d(q)&&d(q)(...e),onKeydown:a[10]||=(...e)=>d(J)&&d(J)(...e)},[N.value?(r(),m(`div`,Ke,[f(`header`,qe,[f(`div`,null,[f(`h3`,Je,c(d(s)(`pages.publicProjects.deleteTitle`)),1),f(`p`,null,c(d(s)(`pages.publicProjects.deleteCopy`)),1)]),f(`button`,{class:`secondary-action`,type:`button`,disabled:F.value,onClick:xt},c(d(s)(`common.actions.close`)),9,Ye)]),f(`label`,Xe,[e(c(d(s)(`pages.publicProjects.enterFullName`))+` `,1),f(`strong`,null,c(N.value.name),1),n(f(`input`,{ref_key:`deletionInitialFocusRef`,ref:ht,"onUpdate:modelValue":a[8]||=e=>P.value=e,autocomplete:`off`,disabled:F.value},null,8,Ze),[[ee,P.value]])]),I.value?(r(),m(`p`,Qe,c(I.value),1)):l(``,!0),f(`footer`,$e,[f(`span`,null,c(d(s)(`pages.publicProjects.deleteWarning`)),1),f(`button`,{class:`reject`,type:`button`,disabled:!U.value||F.value,onClick:St},[F.value?(r(),h(g,{key:0,variant:`inline`,label:d(s)(`pages.publicProjects.deleting`)},null,8,[`label`])):(r(),m(`span`,tt,c(d(s)(`pages.publicProjects.deletePermanently`)),1))],8,et)])])):l(``,!0)],544)]))}});export{w as default};
1
+ import{C as e,F as t,H as n,N as r,T as i,Z as a,_ as o,a as s,at as c,b as l,d as ee,h as u,j as te,m as ne,n as re,nt as d,rt as ie,v as f,w as p,x as m,y as h}from"./i18n-CIIxzhPZ.js";import{t as ae}from"./console-CrhIK67Y.js";import{t as g}from"./GrowthLoading-DIwqGFSc.js";import{h as oe}from"./useApi-CROJJdhE-fcdVGInY.js";import{i as _,n as v,t as y}from"./client-DTQ_tUr2.js";import{t as b}from"./useModalDialog-B-45idX9.js";import{t as se}from"./paths-CDREouhi.js";import{t as x}from"./SearchableSelect-Do6X3fXi.js";import{r as S,t as C}from"./identity-CdFITIOu.js";var ce={class:`view`},le={class:`space-heading public-space-heading`},ue=[`aria-label`],de={class:`project-grid`},fe={class:`project-card-heading`},pe={class:`project-card-heading-actions`},me=[`onClick`],he={class:`completion-badge`},ge={class:`project-purpose`},_e={class:`evidence-row`},ve={key:0,class:`muted`},ye={class:`project-access`},be={class:`muted`},xe={key:0,class:`project-release-meta`},Se={class:`project-card-footer`},Ce=[`onClick`],we=[`onClick`],Te={key:0,class:`empty-state project-empty`},Ee={class:`project-section`},De={class:`section-toolbar compact-toolbar relation-section-toolbar`},Oe=[`disabled`],ke={key:0,class:`muted`},Ae={class:`compact-relation-preview`,"aria-live":`polite`},je={key:0},Me={key:1},Ne={class:`primary-action`,type:`submit`},Pe={key:0,class:`project-dialog-shell`},Fe={class:`project-dialog-header`},Ie={id:`public-project-details-title`},Le={class:`project-latest-release`},Re={key:0},ze={key:1,class:`muted`},Be={class:`project-detail-columns`},Ve={key:1,class:`muted`},He={key:0,class:`muted`},Ue={key:1,class:`project-latest-release`},We={class:`muted`},Ge={class:`project-dialog-actions`},Ke={key:0,class:`project-dialog-shell`},qe={class:`project-dialog-header`},Je={id:`public-project-deletion-title`},Ye=[`disabled`],Xe={class:`project-delete-confirmation`},Ze=[`disabled`],Qe={key:0,class:`publish-dialog-error`,role:`alert`},$e={class:`project-dialog-actions`},et=[`disabled`],tt={key:1},nt=`fuli-workspace-v1`,w=i({__name:`PublicProjectsPage`,setup(i){let w=ae(),rt=oe(),T=a(null),E=a([]),D=a([]),O=a(!1),k=a(!1),A=a(``),j=a(``),M=a(`RELATED_TO`),N=a(null),P=a(``),F=a(!1),I=a(``),L=0,R=null,z=o(()=>w.state?.projects??[]),it=o(()=>w.state?.providers?.workspaces??[]),B=o(()=>new Set((w.state?.subscriptions??[]).map(({provider_url:e,project_id:t})=>`${e}::${t}`))),V=o(()=>z.value.filter(({role:e,isOwner:t})=>e===`maintainer`||t)),H=o(()=>V.value.filter(({providerUrl:e})=>X(e))),at=o(()=>H.value.map(e=>({value:e.id,label:e.name,meta:`#${C(e.id,26)}`,search:S(e.id)}))),ot=o(()=>{let e=z.value.find(({id:e})=>e===A.value);return!e||!X(e.providerUrl)?[]:z.value.filter(({id:t,providerUrl:n})=>t!==e.id&&n===e.providerUrl&&X(n))}),st=o(()=>ot.value.map(e=>({value:e.id,label:e.name,meta:`#${C(e.id,26)}`,search:S(e.id)}))),ct=o(()=>z.value.find(({id:e})=>e===A.value)??null),lt=o(()=>z.value.find(({id:e})=>e===j.value)??null),ut=o(()=>W.value.find(({value:e})=>e===M.value)?.label??s(`pages.publicProjects.relationLabels.relatedTo`)),dt=o(()=>T.value?X(T.value.providerUrl):!1),U=o(()=>!!(N.value&&P.value===N.value.name)),W=o(()=>[{value:`PART_OF`,label:s(`pages.publicProjects.relationLabels.partOf`)},{value:`USES_KNOWLEDGE_FROM`,label:s(`pages.publicProjects.relationLabels.usesKnowledgeFrom`)},{value:`DEPENDS_ON`,label:s(`pages.publicProjects.relationLabels.dependsOn`)},{value:`PROVIDES_TO`,label:s(`pages.publicProjects.relationLabels.providesTo`)},{value:`SHARES_CAPABILITY_WITH`,label:s(`pages.publicProjects.relationLabels.sharesCapabilityWith`)},{value:`SUCCESSOR_OF`,label:s(`pages.publicProjects.relationLabels.successorOf`)},{value:`RELATED_TO`,label:s(`pages.publicProjects.relationLabels.relatedTo`)}]),{dialogRef:ft,initialFocusRef:pt,onCancel:G,onKeydown:K}=b(()=>!!T.value,Q),{dialogRef:mt,initialFocusRef:ht,onCancel:q,onKeydown:J}=b(()=>!!N.value,xt);function Y(e){return`${e.providerUrl}::${e.id}`}function X(e){return it.value.find(({providerUrl:t})=>t===e)?.protocol!==nt}function Z(e){return e.profile?.purpose||e.profile?.scope||e.profile?.technical_summary||e.description||s(`pages.publicProjects.fallbackDescription`)}async function gt(e){try{if(B.value.has(Y(e))){let t=new URLSearchParams({personalSpaceId:w.activePersonalSpace?.id??``,providerUrl:e.providerUrl});await y(`/api/subscriptions/${encodeURIComponent(e.id)}?${t}`),w.notify(s(`pages.publicProjects.unsubscribed`,{name:e.name}))}else await _(`/api/subscriptions`,{personalSpaceId:w.activePersonalSpace?.id,projectId:e.id,providerUrl:e.providerUrl,projectName:e.name}),w.notify(s(`pages.publicProjects.subscribed`,{name:e.name}));await w.refresh()}catch(e){w.reportError(e)}}async function _t(e){if(Q(),T.value=e,E.value=[],D.value=[],!X(e.providerUrl))return;let t=++L,n=new AbortController;R=n,O.value=!0;try{let r=new URLSearchParams({providerUrl:e.providerUrl}),[i,a]=await Promise.all([v(`/api/projects/${encodeURIComponent(e.id)}/releases?${r}`,{signal:n.signal}),v(`/api/project-relations?${new URLSearchParams({projectId:e.id,providerUrl:e.providerUrl})}`,{signal:n.signal})]);if(t!==L||n.signal.aborted)return;E.value=i.releases??[],D.value=a.relations??[]}catch(e){if(t!==L||n.signal.aborted)return;w.reportError(e)}finally{if(t!==L||n.signal.aborted)return;O.value=!1,R===n&&(R=null)}}async function vt(e){Q(),await rt.push(se(`public`,e.id,`graph`))}function yt(){L+=1,R?.abort(),R=null,O.value=!1}function Q(){yt(),T.value=null,E.value=[],D.value=[]}function bt(e){X(e.providerUrl)&&(N.value=e,P.value=``,I.value=``)}function xt(){F.value||(N.value=null,P.value=``,I.value=``)}async function St(){let e=N.value;if(!e||!U.value){I.value=s(`pages.publicProjects.deleteNameRequired`);return}if(!X(e.providerUrl)){I.value=s(`pages.publicProjects.providerOperationsUnavailable`);return}F.value=!0,I.value=``;try{let t=new URLSearchParams({providerUrl:e.providerUrl});await y(`/api/projects/${encodeURIComponent(e.id)}?${t}`),T.value=null,N.value=null,w.notify(s(`pages.publicProjects.deleted`,{name:e.name})),await w.refresh()}catch(e){I.value=e instanceof Error?e.message:s(`pages.publicProjects.deleteFailed`),w.reportError(e)}finally{F.value=!1}}async function Ct(){let e=z.value.find(({id:e})=>e===A.value),t=z.value.find(({id:e})=>e===j.value);if(!e||!t){w.reportError(Error(s(`pages.publicProjects.chooseRelationProjects`)));return}if(!X(e.providerUrl)){w.reportError(Error(s(`pages.publicProjects.providerOperationsUnavailable`)));return}try{await _(`/api/project-relations`,{sourceProjectId:e.id,targetProjectId:t.id,providerUrl:e.providerUrl,relationType:M.value,note:null}),k.value=!1,A.value=``,j.value=``,w.notify(M.value===`PART_OF`?s(`pages.publicProjects.parentRelationSubmitted`):s(`pages.publicProjects.relationCreated`))}catch(e){w.reportError(e)}}te(yt);function $(e){return e?new Date(e).toLocaleString(re()):s(`pages.publicProjects.timeNotRecorded`)}return(i,a)=>(r(),m(`section`,ce,[f(`div`,le,[a[11]||=f(`span`,{class:`space-heading-icon`,"aria-hidden":`true`},[f(`span`,{class:`nav-icon nav-icon-public-project`})],-1),f(`div`,null,[f(`p`,null,c(d(s)(`pages.publicProjects.intro`)),1)]),f(`div`,{class:`public-space-stats`,"aria-label":d(s)(`pages.publicProjects.overviewAria`)},[f(`span`,null,[f(`strong`,null,c(z.value.length),1),e(c(d(s)(`pages.publicProjects.discoverable`)),1)]),f(`span`,null,[f(`strong`,null,c(d(w).state?.subscriptions.length??0),1),e(c(d(s)(`pages.publicProjects.subscribedCount`)),1)])],8,ue)]),f(`div`,de,[(r(!0),m(u,null,t(z.value,e=>(r(),m(`article`,{key:Y(e),class:`project-card`},[f(`div`,fe,[f(`div`,null,[f(`h4`,null,c(e.name),1)]),f(`div`,pe,[e.can_manage&&X(e.providerUrl)?(r(),m(`button`,{key:0,class:`management-action`,type:`button`,onClick:t=>bt(e)},c(d(s)(`pages.publicProjects.manage`)),9,me)):l(``,!0),f(`div`,he,[f(`strong`,null,c(e.profile?.assessment?.score??`—`),1),f(`span`,null,c(e.profile?.assessment?d(s)(`pages.publicProjects.coverage`):d(s)(`pages.publicProjects.noSummary`)),1)])])]),f(`p`,ge,c(Z(e)),1),f(`div`,_e,[(r(!0),m(u,null,t(e.profile?.sources??[],(e,t)=>(r(),m(`span`,{key:t,class:`status-chip`},c(e.kind??d(s)(`pages.publicProjects.material`)),1))),128)),e.profile?.sources?.length?l(``,!0):(r(),m(`span`,ve,c(d(s)(`pages.publicProjects.noSources`)),1))]),f(`div`,ye,[f(`span`,{class:ie([`status-chip`,{owner:e.isOwner}])},c(e.isOwner?`Owner`:e.role??`Reader`),3),f(`span`,be,c(e.isOwner?d(s)(`pages.publicProjects.publishedByYou`):d(s)(`pages.publicProjects.publiclyDiscoverable`)),1),e.current_release&&X(e.providerUrl)?(r(),m(`span`,xe,[f(`strong`,null,c(e.current_release.version),1),f(`span`,null,c($(e.current_release.published_at)),1)])):l(``,!0)]),f(`footer`,Se,[f(`button`,{class:`secondary-action`,type:`button`,onClick:t=>gt(e)},c(B.value.has(Y(e))?d(s)(`pages.publicProjects.unsubscribe`):d(s)(`pages.publicProjects.subscribe`)),9,Ce),f(`button`,{class:`primary-action`,type:`button`,onClick:t=>_t(e)},c(d(s)(`common.actions.viewDetails`)),9,we)])]))),128)),z.value.length?l(``,!0):(r(),m(`div`,Te,c(d(s)(`pages.publicProjects.noProjects`)),1))]),f(`section`,Ee,[f(`div`,De,[f(`div`,null,[f(`h3`,null,c(d(s)(`pages.publicProjects.relationsTitle`)),1),f(`p`,null,c(d(s)(`pages.publicProjects.relationsCopy`)),1)]),f(`button`,{class:`primary-action`,type:`button`,disabled:!H.value.length,onClick:a[0]||=e=>k.value=!k.value},c(d(s)(`pages.publicProjects.addRelation`)),9,Oe)]),V.value.length&&!H.value.length?(r(),m(`p`,ke,c(d(s)(`pages.publicProjects.providerOperationsUnavailable`)),1)):l(``,!0),k.value?(r(),m(`form`,{key:1,class:`relation-composer relation-composer-form compact-relation-form`,onSubmit:ne(Ct,[`prevent`])},[f(`label`,null,[e(c(d(s)(`pages.publicProjects.sourceProject`))+` `,1),p(x,{modelValue:A.value,"onUpdate:modelValue":a[1]||=e=>A.value=e,options:at.value,label:d(s)(`pages.publicProjects.sourceProjectLabel`),placeholder:d(s)(`pages.publicProjects.chooseProject`),searchable:``,required:``,onChange:a[2]||=e=>j.value=``},null,8,[`modelValue`,`options`,`label`,`placeholder`])]),f(`label`,null,[e(c(d(s)(`pages.publicProjects.relation`))+` `,1),p(x,{modelValue:M.value,"onUpdate:modelValue":a[3]||=e=>M.value=e,options:W.value,label:d(s)(`pages.publicProjects.relationTypeLabel`)},null,8,[`modelValue`,`options`,`label`])]),f(`label`,null,[e(c(d(s)(`pages.publicProjects.targetProject`))+` `,1),p(x,{modelValue:j.value,"onUpdate:modelValue":a[4]||=e=>j.value=e,options:st.value,label:d(s)(`pages.publicProjects.targetProjectLabel`),placeholder:d(s)(`pages.publicProjects.chooseProject`),searchable:``,required:``},null,8,[`modelValue`,`options`,`label`,`placeholder`])]),f(`div`,Ae,[f(`span`,null,c(d(s)(`pages.publicProjects.preview`)),1),f(`strong`,null,c(ct.value?.name||d(s)(`pages.publicProjects.sourceProject`))+` `+c(ut.value)+` `+c(lt.value?.name||d(s)(`pages.publicProjects.targetProject`)),1),M.value===`PART_OF`?(r(),m(`p`,je,c(d(s)(`pages.publicProjects.parentConfirmation`)),1)):(r(),m(`p`,Me,c(d(s)(`pages.publicProjects.relationBoundary`)),1))]),f(`button`,Ne,c(d(s)(`pages.publicProjects.addRelation`)),1)],32)):l(``,!0)]),f(`dialog`,{ref_key:`detailsDialogRef`,ref:ft,class:`project-dialog vue-dialog`,"aria-modal":`true`,"aria-labelledby":`public-project-details-title`,onCancel:a[6]||=(...e)=>d(G)&&d(G)(...e),onKeydown:a[7]||=(...e)=>d(K)&&d(K)(...e)},[T.value?(r(),m(`div`,Pe,[f(`header`,Fe,[f(`div`,null,[f(`h3`,Ie,c(T.value.name),1),f(`p`,null,c(Z(T.value)),1)]),f(`button`,{ref_key:`detailsInitialFocusRef`,ref:pt,class:`secondary-action`,type:`button`,onClick:Q},c(d(s)(`common.actions.close`)),513)]),dt.value?(r(),m(u,{key:0},[f(`section`,Le,[f(`h4`,null,c(d(s)(`pages.publicProjects.latestRelease`)),1),T.value.current_release?(r(),m(`p`,Re,[f(`strong`,null,c(T.value.current_release.version),1),e(` · `+c($(T.value.current_release.published_at)),1)])):(r(),m(`p`,ze,c(d(s)(`pages.publicProjects.noRelease`)),1))]),f(`div`,Be,[f(`section`,null,[f(`h4`,null,c(d(s)(`pages.publicProjects.releaseHistory`)),1),O.value?(r(),h(g,{key:0,variant:`compact`,label:d(s)(`pages.publicProjects.loading`)},null,8,[`label`])):l(``,!0),(r(!0),m(u,null,t(E.value,e=>(r(),m(`article`,{key:e.version,class:`project-release-item`},[f(`strong`,null,c(e.version),1),f(`p`,null,c(e.update_summary),1),f(`small`,null,c($(e.published_at)),1)]))),128)),!O.value&&!E.value.length?(r(),m(`p`,Ve,c(d(s)(`pages.publicProjects.noReleaseHistory`)),1)):l(``,!0)]),f(`section`,null,[f(`h4`,null,c(d(s)(`pages.publicProjects.relationsTitle`)),1),(r(!0),m(u,null,t(D.value,e=>(r(),m(`article`,{key:e.id,class:`project-detail-relation`},[f(`strong`,null,c(e.relation_type),1),f(`small`,null,c(e.status??`active`),1)]))),128)),!O.value&&!D.value.length?(r(),m(`p`,He,c(d(s)(`pages.publicProjects.noRelations`)),1)):l(``,!0)])])],64)):(r(),m(`section`,Ue,[f(`p`,We,c(d(s)(`pages.publicProjects.providerOperationsUnavailableTitle`)),1)])),f(`footer`,Ge,[f(`span`,null,c(d(s)(`pages.publicProjects.contentManagementSeparated`)),1),f(`button`,{class:`primary-action`,type:`button`,onClick:a[5]||=e=>vt(T.value)},c(d(s)(`pages.publicProjects.viewGraph`)),1)])])):l(``,!0)],544),f(`dialog`,{ref_key:`deletionDialogRef`,ref:mt,class:`project-dialog vue-dialog`,"aria-modal":`true`,"aria-labelledby":`public-project-deletion-title`,onCancel:a[9]||=(...e)=>d(q)&&d(q)(...e),onKeydown:a[10]||=(...e)=>d(J)&&d(J)(...e)},[N.value?(r(),m(`div`,Ke,[f(`header`,qe,[f(`div`,null,[f(`h3`,Je,c(d(s)(`pages.publicProjects.deleteTitle`)),1),f(`p`,null,c(d(s)(`pages.publicProjects.deleteCopy`)),1)]),f(`button`,{class:`secondary-action`,type:`button`,disabled:F.value,onClick:xt},c(d(s)(`common.actions.close`)),9,Ye)]),f(`label`,Xe,[e(c(d(s)(`pages.publicProjects.enterFullName`))+` `,1),f(`strong`,null,c(N.value.name),1),n(f(`input`,{ref_key:`deletionInitialFocusRef`,ref:ht,"onUpdate:modelValue":a[8]||=e=>P.value=e,autocomplete:`off`,disabled:F.value},null,8,Ze),[[ee,P.value]])]),I.value?(r(),m(`p`,Qe,c(I.value),1)):l(``,!0),f(`footer`,$e,[f(`span`,null,c(d(s)(`pages.publicProjects.deleteWarning`)),1),f(`button`,{class:`reject`,type:`button`,disabled:!U.value||F.value,onClick:St},[F.value?(r(),h(g,{key:0,variant:`inline`,label:d(s)(`pages.publicProjects.deleting`)},null,8,[`label`])):(r(),m(`span`,tt,c(d(s)(`pages.publicProjects.deletePermanently`)),1))],8,et)])])):l(``,!0)],544)]))}});export{w as default};
@@ -1 +1 @@
1
- import{F as e,N as t,T as n,Z as r,_ as i,a,at as o,b as s,h as c,j as ee,nt as l,v as u,w as te,x as d,y as f,z as p}from"./i18n-75woNt31.js";import{t as ne}from"./console-hUns2aD-.js";import{t as m}from"./GrowthLoading-DFOy-mEl.js";import{i as h,n as g}from"./client-InXscj8J.js";import{t as re}from"./SearchableSelect-vaoSDq1g.js";import{r as ie,t as _}from"./identity-Wt2Xio_B.js";import{u as v}from"./model-C1GwBvd9.js";var ae={class:`view`},oe={class:`section-title`},se={class:`review-list`,"data-review-queue":`personal`},ce={key:1,class:`review-error`,role:`alert`},le=[`disabled`],y={class:`review-stage`},ue={class:`review-meta`},de={class:`review-actions stacked-actions`},fe=[`disabled`,`onClick`],pe=[`disabled`,`onClick`],me=[`disabled`,`onClick`],he={key:2,class:`empty-state`},ge={key:0,class:`project-section`},_e={class:`section-toolbar`},ve={class:`review-list`,"data-review-queue":`shared`},b={key:1,class:`review-error`,role:`alert`},ye=[`disabled`],be={class:`review-stage`},xe={class:`review-meta`},Se={class:`review-actions`},Ce=[`disabled`,`onClick`],we=[`disabled`,`onClick`],Te={key:2,class:`empty-state`},x=n({__name:`ReviewPage`,setup(n){let x=ne(),S=r([]),C=r([]),w=r(``),T=r(!1),E=r(``),D=r(!1),O=r(``),k=r(new Set),A=r(new Set),j=0,M=null,N=0,P=null,F=i(()=>(x.state?.projects??[]).filter(e=>e.role===`maintainer`&&Oe(e))),Ee=i(()=>F.value.map(e=>({value:e.id,label:e.name,meta:`#`+_(e.id,26),search:ie(e.id)}))),I=i(()=>F.value.find(({id:e})=>e===w.value)??null),De=i(()=>{let e=I.value;return e?e.id+`\0`+e.providerUrl:``});function Oe(e){return L(x.state,e)}function L(e,t){if(e?.capabilities?.reviewProposals!==!0)return!1;let n=e.providers?.workspaces?.find(({providerUrl:e})=>e===t.providerUrl);if(!n||n.status!==`ready`)return!1;let r=n.capabilities;return!!(r&&typeof r==`object`&&r.reviewProposals===!0)}function R(e){return e?e.personalSpaces.find(({id:t})=>t===e.activePersonalSpaceId)?.id??e.personalSpaces[0]?.id??``:``}function z(e,t){let n=(e?.projects??[]).find(n=>n.id===t&&n.role===`maintainer`&&L(e,n));return n?n.id+`\0`+n.providerUrl:``}function B(e){return e instanceof Error&&e.message?e.message:a(`common.errors.loadFailed`)}function V(e){return!!(e&&typeof e==`object`&&`name`in e&&e.name===`AbortError`)}function H(e,t,n){let r=new Set(e.value);n?r.add(t):r.delete(t),e.value=r}function U(){j+=1,M?.abort(),M=null,S.value=[],E.value=``,T.value=!1}function W(){N+=1,P?.abort(),P=null,C.value=[],O.value=``,D.value=!1}function G(e,t){return t===j&&x.activePersonalSpace?.id===e}function K(e,t){let n=I.value;return t===N&&n?.id===e.id&&n.providerUrl===e.providerUrl}function q(e,t,n){return G(n,t)&&S.value.some(({id:t})=>t===e.id)}function J(e,t,n){return K(t,n)&&C.value.some(({id:t})=>t===e.id)}function Y(e,t){return e+`\0`+t}async function X(e=x.activePersonalSpace?.id){M?.abort();let t=++j,n=new AbortController;if(M=n,T.value=!0,E.value=``,!e){T.value=!1,M===n&&(M=null);return}try{let r=await g(`/api/personal-review?`+new URLSearchParams({personalSpaceId:e,status:`pending`}),{signal:n.signal});if(!G(e,t)||n.signal.aborted)return;S.value=r.drafts??[]}catch(r){if(!G(e,t)||n.signal.aborted||V(r))return;E.value=B(r)}finally{t===j&&M===n&&(T.value=!1,M=null)}}async function Z(){let e=I.value;if(!e)return;P?.abort();let t=++N,n=new AbortController;P=n,D.value=!0,O.value=``;try{let r=await g(`/api/review?`+new URLSearchParams({projectId:e.id,providerUrl:e.providerUrl,status:`pending`}),{signal:n.signal});if(!K(e,t)||n.signal.aborted)return;C.value=r.proposals??[]}catch(r){if(!K(e,t)||n.signal.aborted||V(r))return;O.value=B(r)}finally{t===N&&P===n&&(D.value=!1,P=null)}}async function Q(e,t){let n=x.activePersonalSpace?.id,r=j;if(!(!n||T.value||E.value||!q(e,r,n))&&!k.value.has(e.id)){H(k,e.id,!0);try{if(T.value||E.value||!q(e,r,n)||(await h(`/api/personal-review/`+encodeURIComponent(e.id)+`/decision`,{decision:t}),!G(n,r)))return;await Promise.all([X(n),x.refresh()])}catch(e){G(n,r)&&!V(e)&&(E.value=B(e))}finally{H(k,e.id,!1)}}}async function $(e,t){let n=I.value,r=N;if(!n||D.value||O.value||!J(e,n,r))return;let i=Y(n.id,e.id);if(!A.value.has(i)){H(A,i,!0);try{if(D.value||O.value||!J(e,n,r)||(await h(`/api/review/`+encodeURIComponent(e.id)+`/decision`,{projectId:n.id,providerUrl:n.providerUrl,decision:t,note:null}),!K(n,r)))return;await Z()}catch(e){K(n,r)&&!V(e)&&(O.value=B(e))}finally{H(A,i,!1)}}}return p(()=>x.state,(e,t)=>{if(!e||!t)return;let n=R(t),r=R(e);r&&r===n&&X(r);let i=w.value,a=z(t,i),o=z(e,i);o&&o===a&&Z()},{flush:`sync`}),p(()=>x.activePersonalSpace?.id??``,e=>{U(),e&&X(e)},{immediate:!0,flush:`sync`}),p(F,e=>{e.some(({id:e})=>e===w.value)||(w.value=e[0]?.id??``)},{immediate:!0,flush:`sync`}),p(De,()=>{W(),I.value&&Z()},{immediate:!0,flush:`sync`}),ee(()=>{U(),W()}),(n,r)=>(t(),d(`section`,ae,[u(`div`,oe,[u(`h3`,null,o(l(a)(`pages.review.personalTitle`)),1),u(`p`,null,o(l(a)(`pages.review.personalCopy`)),1)]),u(`div`,se,[T.value?(t(),f(m,{key:0,variant:`compact`,label:l(a)(`pages.review.loadingPersonal`)},null,8,[`label`])):s(``,!0),E.value?(t(),d(`div`,ce,[u(`span`,null,o(E.value),1),u(`button`,{class:`secondary-action`,type:`button`,disabled:T.value,onClick:r[0]||=e=>X()},o(l(a)(`common.actions.retry`)),9,le)])):s(``,!0),(t(!0),d(c,null,e(S.value,e=>(t(),d(`article`,{key:e.id,class:`review-item review-item-detailed`},[u(`div`,null,[u(`div`,y,o(l(a)(`pages.review.beforePublic`)),1),u(`h4`,null,o(e.episode.name),1),u(`p`,null,o(e.episode.summary||e.episode.source_description),1),u(`div`,ue,[u(`span`,null,o(l(a)(`common.counts.entities`,{count:e.episode.entities?.length??0})),1),u(`span`,null,o(l(a)(`common.counts.relationships`,{count:e.episode.relationships?.length??0})),1),u(`span`,null,o(l(v)(e.created_at)),1)])]),u(`div`,de,[k.value.has(e.id)?(t(),f(m,{key:0,variant:`inline`,label:l(a)(`pages.review.savingDecision`)},null,8,[`label`])):s(``,!0),u(`button`,{class:`secondary-action`,type:`button`,disabled:T.value||E.value!==``||k.value.has(e.id),onClick:t=>Q(e,`keep_personal`)},o(l(a)(`pages.review.keepPersonal`)),9,fe),u(`button`,{class:`reject`,type:`button`,disabled:T.value||E.value!==``||k.value.has(e.id),onClick:t=>Q(e,`ignore`)},o(l(a)(`pages.review.ignore`)),9,pe),l(x).state?.capabilities?.submitKnowledge?(t(),d(`button`,{key:1,class:`approve`,type:`button`,disabled:T.value||E.value!==``||k.value.has(e.id),onClick:t=>Q(e,`submit_public`)},o(l(a)(`pages.review.submitPublic`)),9,me)):s(``,!0)])]))),128)),!T.value&&!E.value&&!S.value.length?(t(),d(`div`,he,o(l(a)(`pages.review.noPersonalDrafts`)),1)):s(``,!0)]),l(x).state?.capabilities?.reviewProposals&&F.value.length?(t(),d(`section`,ge,[u(`div`,_e,[u(`div`,null,[u(`h3`,null,o(l(a)(`pages.review.publicTitle`)),1),u(`p`,null,o(l(a)(`pages.review.publicCopy`)),1)]),te(re,{modelValue:w.value,"onUpdate:modelValue":r[1]||=e=>w.value=e,options:Ee.value,label:l(a)(`pages.review.projectLabel`),"control-id":`review-project`,searchable:``},null,8,[`modelValue`,`options`,`label`])]),u(`div`,ve,[D.value?(t(),f(m,{key:0,variant:`compact`,label:l(a)(`pages.review.loadingPublic`)},null,8,[`label`])):s(``,!0),O.value?(t(),d(`div`,b,[u(`span`,null,o(O.value),1),u(`button`,{class:`secondary-action`,type:`button`,disabled:D.value,onClick:r[2]||=e=>Z()},o(l(a)(`common.actions.retry`)),9,ye)])):s(``,!0),(t(!0),d(c,null,e(C.value,e=>(t(),d(`article`,{key:e.id,class:`review-item`},[u(`div`,null,[u(`div`,be,o(l(a)(`pages.review.maintainerReview`)),1),u(`h4`,null,o(e.episode.name),1),u(`p`,null,o(e.episode.summary||e.episode.source_description),1),u(`div`,xe,[u(`span`,null,o(l(v)(e.created_at)),1)])]),u(`div`,Se,[A.value.has(Y(w.value,e.id))?(t(),f(m,{key:0,variant:`inline`,label:l(a)(`pages.review.savingDecision`)},null,8,[`label`])):s(``,!0),u(`button`,{class:`reject`,type:`button`,disabled:D.value||O.value!==``||A.value.has(Y(w.value,e.id)),onClick:t=>$(e,`reject`)},o(l(a)(`pages.review.reject`)),9,Ce),u(`button`,{class:`approve`,type:`button`,disabled:D.value||O.value!==``||A.value.has(Y(w.value,e.id)),onClick:t=>$(e,`approve`)},o(l(a)(`pages.review.approve`)),9,we)])]))),128)),!D.value&&!O.value&&!C.value.length?(t(),d(`div`,Te,o(l(a)(`pages.review.noProposals`)),1)):s(``,!0)])])):s(``,!0)]))}});export{x as default};
1
+ import{F as e,N as t,T as n,Z as r,_ as i,a,at as o,b as s,h as c,j as ee,nt as l,v as u,w as te,x as d,y as f,z as p}from"./i18n-CIIxzhPZ.js";import{t as ne}from"./console-CrhIK67Y.js";import{t as m}from"./GrowthLoading-DIwqGFSc.js";import{i as h,n as g}from"./client-DTQ_tUr2.js";import{t as re}from"./SearchableSelect-Do6X3fXi.js";import{r as ie,t as _}from"./identity-CdFITIOu.js";import{u as v}from"./model-CJsrDUNb.js";var ae={class:`view`},oe={class:`section-title`},se={class:`review-list`,"data-review-queue":`personal`},ce={key:1,class:`review-error`,role:`alert`},le=[`disabled`],y={class:`review-stage`},ue={class:`review-meta`},de={class:`review-actions stacked-actions`},fe=[`disabled`,`onClick`],pe=[`disabled`,`onClick`],me=[`disabled`,`onClick`],he={key:2,class:`empty-state`},ge={key:0,class:`project-section`},_e={class:`section-toolbar`},ve={class:`review-list`,"data-review-queue":`shared`},b={key:1,class:`review-error`,role:`alert`},ye=[`disabled`],be={class:`review-stage`},xe={class:`review-meta`},Se={class:`review-actions`},Ce=[`disabled`,`onClick`],we=[`disabled`,`onClick`],Te={key:2,class:`empty-state`},x=n({__name:`ReviewPage`,setup(n){let x=ne(),S=r([]),C=r([]),w=r(``),T=r(!1),E=r(``),D=r(!1),O=r(``),k=r(new Set),A=r(new Set),j=0,M=null,N=0,P=null,F=i(()=>(x.state?.projects??[]).filter(e=>e.role===`maintainer`&&Oe(e))),Ee=i(()=>F.value.map(e=>({value:e.id,label:e.name,meta:`#`+_(e.id,26),search:ie(e.id)}))),I=i(()=>F.value.find(({id:e})=>e===w.value)??null),De=i(()=>{let e=I.value;return e?e.id+`\0`+e.providerUrl:``});function Oe(e){return L(x.state,e)}function L(e,t){if(e?.capabilities?.reviewProposals!==!0)return!1;let n=e.providers?.workspaces?.find(({providerUrl:e})=>e===t.providerUrl);if(!n||n.status!==`ready`)return!1;let r=n.capabilities;return!!(r&&typeof r==`object`&&r.reviewProposals===!0)}function R(e){return e?e.personalSpaces.find(({id:t})=>t===e.activePersonalSpaceId)?.id??e.personalSpaces[0]?.id??``:``}function z(e,t){let n=(e?.projects??[]).find(n=>n.id===t&&n.role===`maintainer`&&L(e,n));return n?n.id+`\0`+n.providerUrl:``}function B(e){return e instanceof Error&&e.message?e.message:a(`common.errors.loadFailed`)}function V(e){return!!(e&&typeof e==`object`&&`name`in e&&e.name===`AbortError`)}function H(e,t,n){let r=new Set(e.value);n?r.add(t):r.delete(t),e.value=r}function U(){j+=1,M?.abort(),M=null,S.value=[],E.value=``,T.value=!1}function W(){N+=1,P?.abort(),P=null,C.value=[],O.value=``,D.value=!1}function G(e,t){return t===j&&x.activePersonalSpace?.id===e}function K(e,t){let n=I.value;return t===N&&n?.id===e.id&&n.providerUrl===e.providerUrl}function q(e,t,n){return G(n,t)&&S.value.some(({id:t})=>t===e.id)}function J(e,t,n){return K(t,n)&&C.value.some(({id:t})=>t===e.id)}function Y(e,t){return e+`\0`+t}async function X(e=x.activePersonalSpace?.id){M?.abort();let t=++j,n=new AbortController;if(M=n,T.value=!0,E.value=``,!e){T.value=!1,M===n&&(M=null);return}try{let r=await g(`/api/personal-review?`+new URLSearchParams({personalSpaceId:e,status:`pending`}),{signal:n.signal});if(!G(e,t)||n.signal.aborted)return;S.value=r.drafts??[]}catch(r){if(!G(e,t)||n.signal.aborted||V(r))return;E.value=B(r)}finally{t===j&&M===n&&(T.value=!1,M=null)}}async function Z(){let e=I.value;if(!e)return;P?.abort();let t=++N,n=new AbortController;P=n,D.value=!0,O.value=``;try{let r=await g(`/api/review?`+new URLSearchParams({projectId:e.id,providerUrl:e.providerUrl,status:`pending`}),{signal:n.signal});if(!K(e,t)||n.signal.aborted)return;C.value=r.proposals??[]}catch(r){if(!K(e,t)||n.signal.aborted||V(r))return;O.value=B(r)}finally{t===N&&P===n&&(D.value=!1,P=null)}}async function Q(e,t){let n=x.activePersonalSpace?.id,r=j;if(!(!n||T.value||E.value||!q(e,r,n))&&!k.value.has(e.id)){H(k,e.id,!0);try{if(T.value||E.value||!q(e,r,n)||(await h(`/api/personal-review/`+encodeURIComponent(e.id)+`/decision`,{decision:t}),!G(n,r)))return;await Promise.all([X(n),x.refresh()])}catch(e){G(n,r)&&!V(e)&&(E.value=B(e))}finally{H(k,e.id,!1)}}}async function $(e,t){let n=I.value,r=N;if(!n||D.value||O.value||!J(e,n,r))return;let i=Y(n.id,e.id);if(!A.value.has(i)){H(A,i,!0);try{if(D.value||O.value||!J(e,n,r)||(await h(`/api/review/`+encodeURIComponent(e.id)+`/decision`,{projectId:n.id,providerUrl:n.providerUrl,decision:t,note:null}),!K(n,r)))return;await Z()}catch(e){K(n,r)&&!V(e)&&(O.value=B(e))}finally{H(A,i,!1)}}}return p(()=>x.state,(e,t)=>{if(!e||!t)return;let n=R(t),r=R(e);r&&r===n&&X(r);let i=w.value,a=z(t,i),o=z(e,i);o&&o===a&&Z()},{flush:`sync`}),p(()=>x.activePersonalSpace?.id??``,e=>{U(),e&&X(e)},{immediate:!0,flush:`sync`}),p(F,e=>{e.some(({id:e})=>e===w.value)||(w.value=e[0]?.id??``)},{immediate:!0,flush:`sync`}),p(De,()=>{W(),I.value&&Z()},{immediate:!0,flush:`sync`}),ee(()=>{U(),W()}),(n,r)=>(t(),d(`section`,ae,[u(`div`,oe,[u(`h3`,null,o(l(a)(`pages.review.personalTitle`)),1),u(`p`,null,o(l(a)(`pages.review.personalCopy`)),1)]),u(`div`,se,[T.value?(t(),f(m,{key:0,variant:`compact`,label:l(a)(`pages.review.loadingPersonal`)},null,8,[`label`])):s(``,!0),E.value?(t(),d(`div`,ce,[u(`span`,null,o(E.value),1),u(`button`,{class:`secondary-action`,type:`button`,disabled:T.value,onClick:r[0]||=e=>X()},o(l(a)(`common.actions.retry`)),9,le)])):s(``,!0),(t(!0),d(c,null,e(S.value,e=>(t(),d(`article`,{key:e.id,class:`review-item review-item-detailed`},[u(`div`,null,[u(`div`,y,o(l(a)(`pages.review.beforePublic`)),1),u(`h4`,null,o(e.episode.name),1),u(`p`,null,o(e.episode.summary||e.episode.source_description),1),u(`div`,ue,[u(`span`,null,o(l(a)(`common.counts.entities`,{count:e.episode.entities?.length??0})),1),u(`span`,null,o(l(a)(`common.counts.relationships`,{count:e.episode.relationships?.length??0})),1),u(`span`,null,o(l(v)(e.created_at)),1)])]),u(`div`,de,[k.value.has(e.id)?(t(),f(m,{key:0,variant:`inline`,label:l(a)(`pages.review.savingDecision`)},null,8,[`label`])):s(``,!0),u(`button`,{class:`secondary-action`,type:`button`,disabled:T.value||E.value!==``||k.value.has(e.id),onClick:t=>Q(e,`keep_personal`)},o(l(a)(`pages.review.keepPersonal`)),9,fe),u(`button`,{class:`reject`,type:`button`,disabled:T.value||E.value!==``||k.value.has(e.id),onClick:t=>Q(e,`ignore`)},o(l(a)(`pages.review.ignore`)),9,pe),l(x).state?.capabilities?.submitKnowledge?(t(),d(`button`,{key:1,class:`approve`,type:`button`,disabled:T.value||E.value!==``||k.value.has(e.id),onClick:t=>Q(e,`submit_public`)},o(l(a)(`pages.review.submitPublic`)),9,me)):s(``,!0)])]))),128)),!T.value&&!E.value&&!S.value.length?(t(),d(`div`,he,o(l(a)(`pages.review.noPersonalDrafts`)),1)):s(``,!0)]),l(x).state?.capabilities?.reviewProposals&&F.value.length?(t(),d(`section`,ge,[u(`div`,_e,[u(`div`,null,[u(`h3`,null,o(l(a)(`pages.review.publicTitle`)),1),u(`p`,null,o(l(a)(`pages.review.publicCopy`)),1)]),te(re,{modelValue:w.value,"onUpdate:modelValue":r[1]||=e=>w.value=e,options:Ee.value,label:l(a)(`pages.review.projectLabel`),"control-id":`review-project`,searchable:``},null,8,[`modelValue`,`options`,`label`])]),u(`div`,ve,[D.value?(t(),f(m,{key:0,variant:`compact`,label:l(a)(`pages.review.loadingPublic`)},null,8,[`label`])):s(``,!0),O.value?(t(),d(`div`,b,[u(`span`,null,o(O.value),1),u(`button`,{class:`secondary-action`,type:`button`,disabled:D.value,onClick:r[2]||=e=>Z()},o(l(a)(`common.actions.retry`)),9,ye)])):s(``,!0),(t(!0),d(c,null,e(C.value,e=>(t(),d(`article`,{key:e.id,class:`review-item`},[u(`div`,null,[u(`div`,be,o(l(a)(`pages.review.maintainerReview`)),1),u(`h4`,null,o(e.episode.name),1),u(`p`,null,o(e.episode.summary||e.episode.source_description),1),u(`div`,xe,[u(`span`,null,o(l(v)(e.created_at)),1)])]),u(`div`,Se,[A.value.has(Y(w.value,e.id))?(t(),f(m,{key:0,variant:`inline`,label:l(a)(`pages.review.savingDecision`)},null,8,[`label`])):s(``,!0),u(`button`,{class:`reject`,type:`button`,disabled:D.value||O.value!==``||A.value.has(Y(w.value,e.id)),onClick:t=>$(e,`reject`)},o(l(a)(`pages.review.reject`)),9,Ce),u(`button`,{class:`approve`,type:`button`,disabled:D.value||O.value!==``||A.value.has(Y(w.value,e.id)),onClick:t=>$(e,`approve`)},o(l(a)(`pages.review.approve`)),9,we)])]))),128)),!D.value&&!O.value&&!C.value.length?(t(),d(`div`,Te,o(l(a)(`pages.review.noProposals`)),1)):s(``,!0)])])):s(``,!0)]))}});export{x as default};
@@ -0,0 +1,2 @@
1
+ import{C as e,F as t,H as n,N as r,T as i,V as a,Z as o,_ as s,at as c,b as l,c as u,d,h as f,j as p,m,nt as h,rt as g,u as _,v,w as y,x as b,y as x,z as S}from"./i18n-CIIxzhPZ.js";import{t as C}from"./GrowthLoading-DIwqGFSc.js";import{h as w,m as T}from"./useApi-CROJJdhE-fcdVGInY.js";import{t as E}from"./vue-router-BUX6njIv.js";import{a as D,i as O,n as k,r as A,t as j}from"./copy-CX6pyzAG.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=i({__name:`RoundtableCreate`,emits:[`created`,`cancel`],setup(i,{emit:a}){let p=a,g=o(``),y=o(`discussion`),S=o([{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=o(``),D=o(``),O=o(),j=o(3),M=o(30),q=o(30),J=o(5),Y=o(!1),X=o(``),Z=o({}),Q=o({}),ke=3,$=s(()=>g.value.trim()&&S.value.length>=2&&S.value.length<=6&&S.value.every(e=>e.name.trim())&&S.value.filter(e=>e.role===`moderator`).length===1&&S.value.every(e=>y.value!==`collaboration`||e.role!==`implementer`||!Z.value[e.id]||Q.value[e.id]?.trim())&&(y.value===`discussion`||S.value.some(e=>e.role===`implementer`)&&S.value.some(e=>e.role===`reviewer`)));function Ae(){S.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:g.value.trim(),mode:y.value,seats:S.value.map(e=>({...e,name:e.name.trim(),...e.role===`implementer`&&y.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}:{}}}:{}});p(`created`,e.id)}catch(e){X.value=e instanceof Error?e.message:k(`创建失败`,`Creation failed`)}finally{Y.value=!1}}}return(i,a)=>(r(),b(`section`,P,[v(`div`,F,[v(`h2`,I,c(h(k)(`创建圆桌`,`Create a roundtable`)),1),v(`button`,{type:`button`,onClick:a[0]||=e=>p(`cancel`),disabled:Y.value},c(h(k)(`关闭`,`Close`)),9,L)]),v(`form`,{onSubmit:m(je,[`prevent`])},[v(`label`,R,[e(c(h(k)(`共同目标`,`Shared goal`)),1),n(v(`textarea`,{"onUpdate:modelValue":a[1]||=e=>g.value=e,required:``,maxlength:`12000`,rows:`3`,placeholder:h(k)(`描述要一起解决的问题和期望的交付`,`Describe the problem and expected deliverable`)},null,8,z),[[d,g.value]])]),v(`label`,B,[e(c(h(k)(`方式`,`Mode`)),1),n(v(`select`,{"onUpdate:modelValue":a[2]||=e=>y.value=e},[v(`option`,V,c(h(A)(`discussion`)),1),v(`option`,H,c(h(A)(`collaboration`)),1)],512),[[_,y.value]])]),v(`div`,U,[v(`h3`,null,c(h(k)(`参与席位`,`Seats`)),1),v(`span`,null,c(S.value.length)+` / 6`,1)]),v(`p`,W,c(h(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),b(f,null,t(S.value,(i,a)=>(r(),b(`div`,{key:i.id,class:`rt-seat-form`},[v(`label`,G,[e(c(h(k)(`姓名`,`Name`)),1),n(v(`input`,{"onUpdate:modelValue":e=>i.name=e,required:``,maxlength:`120`,"aria-label":`${h(k)(`姓名`,`Name`)} ${a+1}`},null,8,K),[[d,i.name]])]),v(`label`,ee,[e(c(h(k)(`职责`,`Role`)),1),n(v(`select`,{"onUpdate:modelValue":e=>i.role=e,"aria-label":`${h(k)(`职责`,`Role`)} ${a+1}`},[(r(),b(f,null,t(w,e=>v(`option`,{key:e,value:e},c(h(A)(e)),9,ne)),64))],8,te),[[_,i.role]])]),v(`label`,re,[e(c(h(k)(`参与方式`,`Adapter`)),1),n(v(`select`,{"onUpdate:modelValue":e=>i.runtime=e,"aria-label":`${h(k)(`参与方式`,`Adapter`)} ${a+1}`},[(r(),b(f,null,t(T,e=>v(`option`,{key:e,value:e},c(h(A)(e)),9,ae)),64))],8,ie),[[_,i.runtime]])]),v(`button`,{type:`button`,disabled:S.value.length<=2||Y.value,"aria-label":`${h(k)(`移除`,`Remove`)} ${i.name||a+1}`,onClick:e=>S.value.splice(a,1)},`×`,8,oe),i.role===`implementer`&&y.value===`collaboration`?(r(),b(`div`,se,[v(`label`,null,[n(v(`input`,{"onUpdate:modelValue":e=>Z.value[i.id]=e,type:`checkbox`},null,8,ce),[[u,Z.value[i.id]]]),e(` `+c(h(k)(`允许此实施席位写入指定工作区`,`Allow this implementer to write to the specified workspace`)),1)]),Z.value[i.id]?(r(),b(`label`,le,[e(c(h(k)(`获授权工作区路径`,`Authorized workspace path`)),1),n(v(`input`,{"onUpdate:modelValue":e=>Q.value[i.id]=e,required:``},null,8,ue),[[d,Q.value[i.id]]])])):l(``,!0)])):l(``,!0)]))),128)),v(`button`,{type:`button`,disabled:S.value.length>=6||Y.value,onClick:Ae},c(h(k)(`添加席位`,`Add seat`)),9,de),!$.value&&g.value.trim()?(r(),b(`p`,fe,c(h(k)(`需要 2–6 个有姓名的席位和一位主持人;协作任务还需要实施者和审查者。`,`Use 2–6 named seats and exactly one moderator. Collaborative tasks also require an implementer and a reviewer.`)),1)):l(``,!0),v(`details`,pe,[v(`summary`,null,c(h(k)(`停止条件与项目`,`Limits and project`)),1),v(`label`,me,[e(c(h(k)(`已登记项目的本机路径(可选)`,`Registered local project path (optional)`)),1),n(v(`input`,{"onUpdate:modelValue":a[3]||=e=>E.value=e,placeholder:h(k)(`留空建立独立临时圆桌`,`Leave blank for an independent temporary room`)},null,8,he),[[d,E.value]])]),v(`p`,ge,c(h(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(),b(f,{key:0},[v(`label`,_e,[e(c(h(k)(`关联已有 Fuli 任务 ID(可选)`,`Existing Fuli task ID (optional)`)),1),n(v(`input`,{"onUpdate:modelValue":a[4]||=e=>D.value=e},null,512),[[d,D.value]])]),D.value.trim()?(r(),b(`label`,ve,[e(c(h(k)(`产物版本(用于任务验证)`,`Artifact revision (for task verification)`)),1),n(v(`input`,{"onUpdate:modelValue":a[5]||=e=>O.value=e,type:`number`,min:`0`,step:`1`},null,512),[[d,O.value,void 0,{number:!0}]])])):l(``,!0),v(`p`,ye,c(h(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)):l(``,!0),v(`div`,be,[v(`label`,xe,[e(c(h(k)(`讨论轮数`,`Discussion rounds`)),1),n(v(`input`,{"onUpdate:modelValue":a[6]||=e=>j.value=e,type:`number`,min:`1`,max:`3`,required:``},null,512),[[d,j.value,void 0,{number:!0}]])]),v(`label`,Se,[e(c(h(k)(`Agent 发言上限`,`Agent message limit`)),1),n(v(`input`,{"onUpdate:modelValue":a[7]||=e=>M.value=e,type:`number`,min:`1`,max:`30`,required:``},null,512),[[d,M.value,void 0,{number:!0}]])]),v(`label`,Ce,[e(c(h(k)(`总时限(分钟)`,`Total minutes`)),1),n(v(`input`,{"onUpdate:modelValue":a[8]||=e=>q.value=e,type:`number`,min:`1`,max:`30`,required:``},null,512),[[d,q.value,void 0,{number:!0}]])]),v(`label`,we,[e(c(h(k)(`单回合(分钟)`,`Minutes per turn`)),1),n(v(`input`,{"onUpdate:modelValue":a[9]||=e=>J.value=e,type:`number`,min:`1`,max:`5`,required:``},null,512),[[d,J.value,void 0,{number:!0}]])])])]),y.value===`collaboration`?(r(),b(`p`,Te,c(h(k)(`实施席位仍需要在工作端明确授权工作区写入;审查默认只读。执行结果等待你的验收。`,`Implementation still requires explicit workspace write permission on the worker. Reviews default to read only. Results await your acceptance.`)),1)):l(``,!0),X.value?(r(),b(`p`,Ee,c(X.value),1)):l(``,!0),v(`button`,{type:`submit`,class:`rt-primary`,disabled:!$.value||Y.value},[Y.value?(r(),x(C,{key:0,variant:`inline`,label:`创建圆桌 · Creating roundtable`})):(r(),b(`span`,Oe,c(h(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=i({__name:`RoundtableSeats`,props:{room:{},activeSeatId:{}},emits:[`changed`],setup(i,{emit:a}){let s=i,m=a,_=o(null),y=o(``),w=o(``),T=o(``),E=o(``),D=o(typeof window>`u`?``:window.location.origin),j=o(!1),M=o(``),P=o(``),F=!1;S(()=>s.room.id,()=>{_.value=null,w.value=``,T.value=``}),p(()=>{F=!0,_.value=null});async function I(e){if(y.value)return;y.value=`invite:${e}`,w.value=``,_.value=null,T.value=``;let t=s.room.id;try{let n=await N.invite(t,e);!F&&s.room.id===t&&(_.value=n)}catch(e){w.value=e instanceof Error?e.message:k(`创建邀请失败`,`Invitation failed`)}finally{y.value=``}}async function L(e){if(!y.value){y.value=`revoke:${e}`,w.value=``;try{await N.revoke(s.room.id,e),_.value?.seatId===e&&(_.value=null),m(`changed`)}catch(e){w.value=e instanceof Error?e.message:k(`撤销失败`,`Revocation failed`)}finally{y.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=s.room.seats.find(e=>e.id===_.value?.seatId);if(!e||e.runtime===`mcp`)return``;let t=e=>`'${e.replaceAll(`'`,`''`)}'`;return`fl roundtable worker --url ${t(D.value)} --room ${t(s.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(s.room.id)}/mcp`}return(a,o)=>(r(),b(`section`,J,[v(`div`,Y,[v(`h2`,X,c(h(k)(`圆桌席位`,`Seats`)),1),v(`span`,null,c(i.room.seats.length),1)]),v(`p`,Z,c(h(k)(`邀请仅授予一个席位的权限。加入记录是历史证据,当前在线状态由工作端轮询和回合回执确定。`,`An invitation grants access to one seat. Join records are historical evidence; worker polling and turn receipts determine current activity.`)),1),v(`div`,Q,[(r(!0),b(f,null,t(i.room.seats,e=>(r(),b(`article`,{key:e.id,class:g([`rt-seat`,{"rt-seat-current":e.id===i.activeSeatId}])},[v(`div`,ke,[v(`strong`,null,c(e.name),1),v(`span`,$,c(h(A)(e.role)),1)]),v(`p`,null,c(h(A)(e.runtime)),1),v(`p`,Ae,c(e.identityKind===`fuli`?h(k)(`已绑定 Fuli 身份`,`Bound Fuli identity`):h(k)(`独立任务席位`,`Independent task seat`)),1),v(`p`,je,c(e.joinedAt?`${h(k)(`加入于`,`Joined`)} ${h(O)(e.joinedAt)}`:h(k)(`尚无加入记录`,`No join recorded`)),1),e.execution?(r(),b(`p`,Me,c(h(A)(e.execution.permission))+` · `+c(e.execution.workspace),1)):l(``,!0),v(`div`,Ne,[v(`button`,{type:`button`,disabled:!!y.value,onClick:t=>I(e.id)},[y.value===`invite:${e.id}`?(r(),x(C,{key:0,variant:`inline`,label:`创建席位邀请 · Creating seat invitation`})):(r(),b(`span`,Fe,c(h(k)(`邀请参与`,`Invite participant`)),1))],8,Pe),v(`button`,{type:`button`,disabled:!!y.value,onClick:t=>L(e.id)},[y.value===`revoke:${e.id}`?(r(),x(C,{key:0,variant:`inline`,label:`撤销席位凭据 · Revoking seat credentials`})):(r(),b(`span`,Le,c(h(k)(`撤销凭据`,`Revoke credentials`)),1))],8,Ie)])],2))),128))]),w.value?(r(),b(`p`,Re,c(w.value),1)):l(``,!0),_.value?(r(),b(`section`,ze,[v(`div`,Be,[v(`h3`,Ve,c(h(k)(`席位邀请 · 仅此次显示`,`Seat invitation · shown once`)),1),v(`button`,{type:`button`,onClick:o[0]||=e=>{_.value=null,T.value=``}},c(h(k)(`隐藏凭据`,`Hide credential`)),1)]),v(`p`,null,c(i.room.seats.find(e=>e.id===_.value?.seatId)?.name)+` · `+c(h(k)(`有效期至`,`Expires`))+` `+c(h(O)(_.value.expiresAt)),1),v(`label`,He,[e(c(h(k)(`席位访问凭据`,`Seat credential`)),1),v(`input`,{value:_.value.seatToken,readonly:``,autocomplete:`off`,spellcheck:`false`,type:`password`,"data-testid":`seat-token`,onFocus:o[1]||=e=>e.target.select()},null,40,Ue)]),v(`button`,{type:`button`,onClick:o[2]||=e=>R(_.value.seatToken,`token`)},c(T.value===`token`?h(k)(`凭据已复制`,`Credential copied`):h(k)(`复制凭据`,`Copy credential`)),1),v(`p`,We,c(h(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),v(`label`,Ge,[e(c(h(k)(`参与者可访问的协调端地址`,`Coordinator URL reachable by participant`)),1),n(v(`input`,{"onUpdate:modelValue":o[3]||=e=>D.value=e,type:`url`},null,512),[[d,D.value]])]),v(`p`,Ke,c(h(k)(`另一台电脑需要可访问的 HTTPS 地址,并在协调端设置 public-url;本机测试可使用回环地址。`,`Another computer needs a reachable HTTPS URL configured as public-url on the coordinator. Loopback works for local testing.`)),1),i.room.seats.find(e=>e.id===_.value?.seatId)?.runtime===`mcp`?(r(),b(f,{key:1},[v(`p`,$e,c(h(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),v(`pre`,null,[v(`code`,null,c(B()),1)]),v(`button`,{type:`button`,onClick:o[9]||=e=>R(B(),`mcp`)},c(T.value===`mcp`?h(k)(`地址已复制`,`URL copied`):h(k)(`复制 MCP 地址`,`Copy MCP URL`)),1),v(`p`,et,c(h(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(),b(f,{key:0},[v(`label`,qe,[e(c(h(k)(`参与端本地工作区`,`Worker local workspace`)),1),n(v(`input`,{"onUpdate:modelValue":o[4]||=e=>E.value=e,placeholder:h(k)(`填写参与者电脑上的路径`,`Path on the participant’s computer`)},null,8,Je),[[d,E.value]])]),i.room.seats.find(e=>e.id===_.value?.seatId)?.execution?.permission===`workspace-write`?(r(),b(`label`,Ye,[n(v(`input`,{"onUpdate:modelValue":o[5]||=e=>j.value=e,type:`checkbox`},null,512),[[u,j.value]]),e(` `+c(h(k)(`工作端用户明确允许写入此工作区`,`The worker’s user explicitly permits writing to this workspace`)),1)])):l(``,!0),i.room.seats.find(e=>e.id===_.value?.seatId)?.runtime===`a2a`?(r(),b(`label`,Xe,[e(c(h(k)(`A2A 端点`,`A2A endpoint`)),1),n(v(`input`,{"onUpdate:modelValue":o[6]||=e=>M.value=e,type:`url`,placeholder:`https://…`},null,512),[[d,M.value]])])):l(``,!0),i.room.seats.find(e=>e.id===_.value?.seatId)?.runtime===`pi`?(r(),b(`label`,Ze,[e(c(h(k)(`参与电脑上的 Ollama 模型`,`Ollama model on participant computer`)),1),n(v(`input`,{"onUpdate:modelValue":o[7]||=e=>P.value=e,placeholder:`fuli-roundtable-qwen3-32k:latest`},null,512),[[d,P.value]])])):l(``,!0),v(`p`,null,c(h(k)(`在参与端 PowerShell 中,先设置环境变量,再启动工作端:`,`In the worker’s PowerShell, set the environment variable and start the worker:`)),1),v(`pre`,null,[v(`code`,null,`$env:FULI_ROUNDTABLE_TOKEN = '<`+c(h(k)(`粘贴席位凭据`,`PASTE_SEAT_CREDENTIAL`))+`>'
2
+ `+c(z()),1)]),v(`button`,{type:`button`,onClick:o[8]||=e=>R(z(),`command`)},c(T.value===`command`?h(k)(`命令已复制`,`Command copied`):h(k)(`复制工作端命令`,`Copy worker command`)),1),v(`p`,Qe,c(h(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)),v(`p`,tt,c(h(k)(`协调端地址`,`Coordinator URL`))+`: `+c(D.value)+` · `+c(h(k)(`圆桌`,`Room`))+`: `+c(i.room.id)+` · `+c(h(k)(`席位`,`Seat`))+`: `+c(_.value.seatId),1)])):l(``,!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=i({__name:`RoundtableResults`,props:{snapshot:{}},setup(n){let i=n,a=s(()=>i.snapshot.messages.filter(e=>e.actual)),o=s(()=>i.snapshot.messages.filter(e=>e.kind===`dissent`)),u=s(()=>[...i.snapshot.outcome?.artifacts??[],...i.snapshot.tasks.flatMap(e=>e.artifacts??[])]),d=e=>i.snapshot.room.seats.find(t=>t.id===e)?.name??e??k(`系统`,`System`);function p(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 m(e){return e==null?k(`未报告`,`Not reported`):typeof e==`string`?e:JSON.stringify(e,null,2)}function g(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(i,s)=>(r(),b(`section`,rt,[v(`div`,it,[v(`h2`,at,c(h(k)(`结果与证据`,`Results and evidence`)),1),n.snapshot.outcome?(r(),b(`span`,ot,c(h(A)(n.snapshot.outcome.acceptance)),1)):l(``,!0)]),n.snapshot.outcome?(r(),b(f,{key:0},[v(`p`,st,c(n.snapshot.outcome.body),1),v(`p`,ct,c(h(k)(`Agent 报告的结论保留为报告;人工验收和任务验证分别记录。`,`Agent conclusions remain reports. Human acceptance and task verification are recorded separately.`)),1),n.snapshot.outcome.verification?.reported==null?l(``,!0):(r(),b(`details`,lt,[v(`summary`,null,c(h(k)(`汇总验证报告`,`Outcome verification report`)),1),v(`p`,ut,c(m(n.snapshot.outcome.verification.reported)),1),v(`p`,dt,c(n.snapshot.outcome.verification.confirmed?h(k)(`服务端记录为已确认`,`Recorded as confirmed by server`):h(k)(`参与端报告,尚未确认`,`Participant report, not confirmed`)),1)]))],64)):(r(),b(`p`,ft,c(h(k)(`尚未提交最终结论。讨论、任务报告与实际执行记录会持续保留。`,`No final outcome has been submitted. Discussion, task reports and execution records are preserved.`)),1)),v(`h3`,null,c(h(k)(`任务`,`Tasks`)),1),n.snapshot.tasks.length?(r(),b(`div`,pt,[v(`table`,null,[v(`thead`,null,[v(`tr`,null,[v(`th`,null,c(h(k)(`任务 / 阶段`,`Task / phase`)),1),v(`th`,null,c(h(k)(`负责人`,`Assignee`)),1),v(`th`,null,c(h(k)(`权限`,`Permission`)),1),v(`th`,null,c(h(k)(`状态`,`Status`)),1),v(`th`,null,c(h(k)(`依赖`,`Dependencies`)),1)])]),v(`tbody`,null,[(r(!0),b(f,null,t(n.snapshot.tasks,t=>(r(),b(`tr`,{key:t.id},[v(`td`,null,[e(c(t.title||t.id),1),v(`small`,null,c(h(A)(t.phase)),1)]),v(`td`,null,c(d(t.seatId)),1),v(`td`,null,c(h(A)(t.permission)),1),v(`td`,null,c(h(A)(t.status)),1),v(`td`,null,c(t.dependencies?.join(`, `)||`—`),1)]))),128))])])])):(r(),b(`p`,mt,c(h(k)(`本圆桌尚无执行任务。讨论消息不算工作进程执行。`,`No execution tasks in this room. Discussion messages are not worker execution.`)),1)),(r(!0),b(f,null,t(n.snapshot.tasks.filter(e=>e.verification!=null),e=>(r(),b(`div`,{key:e.id},[v(`details`,ht,[v(`summary`,null,c(h(k)(`任务验证报告`,`Task verification report`))+` · `+c(e.title||e.id),1),v(`p`,gt,c(m(e.verification)),1)])]))),128)),v(`h3`,null,c(h(k)(`保留的分歧`,`Retained dissent`)),1),(r(!0),b(f,null,t(o.value,e=>(r(),b(`article`,{key:e.id,class:`rt-dissent`},[v(`strong`,null,c(d(e.seatId))+` · #`+c(e.seq),1),v(`p`,_t,c(e.body),1)]))),128)),(r(!0),b(f,null,t(n.snapshot.outcome?.dissent??[],(e,t)=>(r(),b(`p`,{key:t,class:`rt-message-body`},c(p(e)),1))),128)),!o.value.length&&!n.snapshot.outcome?.dissent?.length?(r(),b(`p`,vt,c(h(k)(`尚未记录分歧。`,`No dissent recorded.`)),1)):l(``,!0),v(`h3`,null,c(h(k)(`产物引用`,`Artifact references`)),1),u.value.length?(r(),b(`ul`,yt,[(r(!0),b(f,null,t(u.value,(e,t)=>(r(),b(`li`,{key:t},c(h(j)(e)),1))),128))])):(r(),b(`p`,bt,c(h(k)(`尚无产物引用。`,`No artifact references reported.`)),1)),v(`h3`,null,c(h(k)(`实际运行回执`,`Actual runtime receipts`)),1),v(`p`,xt,c(h(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),a.value.length?(r(),b(`div`,St,[v(`table`,Ct,[v(`thead`,null,[v(`tr`,null,[v(`th`,null,c(h(k)(`席位 / 消息`,`Seat / message`)),1),v(`th`,null,c(h(k)(`报告的应用`,`Reported application`)),1),v(`th`,null,c(h(k)(`报告的模型`,`Reported model`)),1),v(`th`,null,c(h(k)(`会话`,`Session`)),1),v(`th`,null,c(h(k)(`用量`,`Usage`)),1),v(`th`,null,c(h(k)(`证据来源`,`Provenance`)),1),v(`th`,null,c(h(k)(`时间`,`Time`)),1)])]),v(`tbody`,null,[(r(!0),b(f,null,t(a.value,t=>(r(),b(`tr`,{key:t.id},[v(`td`,null,[e(c(d(t.seatId)),1),v(`small`,null,`#`+c(t.seq)+` · `+c(h(A)(t.kind)),1)]),v(`td`,null,c(t.actual?.applicationLabel||t.actual?.reportedApplication||t.actual?.sourceApplication||h(k)(`未知`,`Unknown`)),1),v(`td`,null,c(t.actual?.model||h(k)(`未知`,`Unknown`)),1),v(`td`,null,c(t.actual?.sessionId||h(k)(`未知`,`Unknown`)),1),v(`td`,null,c(g(t.actual?.usage)),1),v(`td`,null,[e(c(h(k)(`参与端报告`,`Participant reported`)),1),v(`small`,null,c(h(k)(`身份未独立验证`,`Identity not independently verified`)),1)]),v(`td`,null,c(h(O)(t.createdAt)),1)]))),128))])])])):(r(),b(`p`,wt,c(h(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=i({__name:`RoundtableEvents`,props:{snapshot:{}},setup(n){let i=n,a=e=>i.snapshot.room.seats.find(t=>t.id===e)?.name??e;return(i,o)=>(r(),b(`details`,Et,[v(`summary`,null,c(h(k)(`回合尝试、恢复与历史事件`,`Turn attempts, recovery and history`)),1),v(`p`,Dt,c(h(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),n.snapshot.attempts?.length?(r(),b(`div`,Ot,[v(`table`,kt,[v(`thead`,null,[v(`tr`,null,[v(`th`,null,c(h(k)(`参与者`,`Participant`)),1),v(`th`,null,c(h(k)(`尝试`,`Attempt`)),1),v(`th`,null,c(h(k)(`状态`,`Status`)),1),v(`th`,null,c(h(k)(`领取时间`,`Claimed at`)),1),v(`th`,null,c(h(k)(`结束时间`,`Finished at`)),1)])]),v(`tbody`,null,[(r(!0),b(f,null,t(n.snapshot.attempts,e=>(r(),b(`tr`,{key:`${e.turnId}:${e.id}`},[v(`td`,null,c(a(e.seatId)),1),v(`td`,null,c(e.id),1),v(`td`,null,c(h(A)(e.status)),1),v(`td`,null,c(h(O)(e.startedAt)),1),v(`td`,null,c(e.finishedAt?h(O)(e.finishedAt):`—`),1)]))),128))])])])):(r(),b(`p`,At,c(h(k)(`尚无回合尝试。`,`No turn attempts yet.`)),1)),v(`h3`,null,c(h(k)(`过期结果存档`,`Stale result archive`)),1),v(`p`,jt,c(h(k)(`晚到结果保留在历史中,不替代当前讨论或交付结论。`,`Late results remain in history and do not replace current discussion or delivery outcomes.`)),1),(r(!0),b(f,null,t(n.snapshot.lateResults??[],e=>(r(),b(`article`,{key:`${e.turnId}:${e.attemptId}`,class:`rt-message`},[v(`strong`,null,c(a(e.seatId))+` · `+c(h(O)(e.receivedAt)),1),v(`p`,Mt,c(e.body),1),v(`small`,null,c(e.turnId)+` / `+c(e.attemptId),1)]))),128)),n.snapshot.lateResults?.length?l(``,!0):(r(),b(`p`,Nt,c(h(k)(`没有过期结果。`,`No stale results.`)),1)),v(`h3`,null,c(h(k)(`状态事件`,`Status events`)),1),v(`ol`,Pt,[(r(!0),b(f,null,t(n.snapshot.events??[],t=>(r(),b(`li`,{key:t.id},[v(`span`,null,c(h(A)(t.kind)),1),e(` · `+c(h(O)(t.createdAt)),1),t.kind===`cancellation_requested`&&t.confirmed!==!0?(r(),b(`small`,Ft,` · `+c(h(k)(`取消尚未确认`,`Cancellation not confirmed`)),1)):l(``,!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=i({__name:`RoundtableDetail`,props:{snapshot:{},refreshing:{type:Boolean}},emits:[`refresh`],setup(i,{emit:a}){let u=i,p=a,_=o(``),w=o(``),T=o(``),E=o(``),D=o(!1),j=o(!1),M=o(3),P=o(30),F=o(30),I=o(5),L=s(()=>u.snapshot.room),R=s(()=>[`concluded`,`failed`,`cancelled`].includes(L.value.status)),z=s(()=>L.value.seats.every(e=>e.joinedAt)),B=s(()=>L.value.status===`active`&&L.value.phase===`discussion`&&(L.value.round??1)>1&&u.snapshot.currentTurn?.status===`pending`&&L.value.phaseIndex===0),V=s(()=>[`paused`,`waiting_input`].includes(L.value.status)&&u.snapshot.currentTurn&&![`pending`,`claimed`].includes(u.snapshot.currentTurn.status)),H=s(()=>u.snapshot.currentTurn&&u.snapshot.currentTurn.status!==`claimed`&&[`discussion`,`planning`].includes(L.value.phase)),U=s(()=>!u.snapshot.currentTurn||[`pending`,`claimed`].includes(u.snapshot.currentTurn.status)),W=e=>L.value.seats.find(t=>t.id===e)?.name??e??k(`系统`,`System`);S(()=>L.value.id,()=>{_.value=``,w.value=``,D.value=!1,j.value=!1}),S(()=>`${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)}),p(`refresh`)}catch(e){w.value=e instanceof Error?e.message:k(`更新停止条件失败`,`Could not update limits`),p(`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=``,p(`refresh`)}catch(e){w.value=e instanceof Error?e.message:k(`操作失败`,`Action failed`),p(`refresh`)}finally{T.value=``}}}async function ee(){if(!(!_.value.trim()||T.value)){T.value=`message`,w.value=``;try{await N.message(L.value.id,_.value.trim()),_.value=``,p(`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(a,o)=>(r(),b(`div`,Lt,[v(`section`,Rt,[v(`div`,zt,[v(`span`,Bt,c(h(A)(L.value.mode))+` · `+c(L.value.binding?.projectId||h(k)(`独立临时任务`,`Independent temporary task`)),1),v(`span`,{class:`rt-tag`,"data-status":L.value.status},c(h(A)(L.value.status)),9,Vt)]),v(`h1`,null,c(L.value.goal),1),v(`div`,Ht,[v(`span`,null,c(h(k)(`阶段`,`Phase`))+`: `+c(h(A)(L.value.phase)),1),v(`span`,null,c(h(k)(`讨论轮数`,`Discussion rounds`))+`: `+c(L.value.round??0)+` / `+c(L.value.limits.maxRounds),1),v(`span`,null,c(h(k)(`Agent 发言`,`Agent messages`))+`: `+c(L.value.agentMessageCount??0)+` / `+c(L.value.limits.maxMessages),1),v(`span`,null,c(h(k)(`总时限`,`Time limit`))+`: `+c(Math.round(L.value.limits.maxDurationMs/6e4))+` `+c(h(k)(`分钟`,`min`)),1)]),L.value.stopReason?(r(),b(`p`,Ut,c(h(k)(`当前原因`,`Current reason`))+`: `+c(L.value.stopReason),1)):l(``,!0),v(`div`,Wt,[L.value.status===`draft`?(r(),b(`button`,{key:0,class:`rt-primary`,type:`button`,disabled:!!T.value||!z.value,onClick:o[0]||=e=>K(`start`)},c(h(k)(`开始圆桌`,`Start roundtable`)),9,Gt)):l(``,!0),L.value.status===`active`?(r(),b(`button`,{key:1,type:`button`,disabled:!!T.value,onClick:o[1]||=e=>K(`pause`)},c(h(k)(`暂停`,`Pause`)),9,Kt)):l(``,!0),[`paused`,`waiting_auth`,`waiting_input`].includes(L.value.status)&&!(L.value.phase===`synthesis`&&i.snapshot.outcome&&!i.snapshot.currentTurn)?(r(),b(`button`,{key:2,type:`button`,disabled:!!T.value||!U.value,onClick:o[2]||=e=>K(`resume`)},c(h(k)(`恢复`,`Resume`)),9,qt)):l(``,!0),R.value?l(``,!0):(r(),b(`button`,{key:3,type:`button`,disabled:!!T.value,onClick:o[3]||=e=>D.value=!D.value},c(h(k)(`停止`,`Stop`)),9,Jt)),v(`button`,{type:`button`,disabled:i.refreshing||!!T.value,onClick:o[4]||=e=>p(`refresh`)},c(h(k)(`刷新`,`Refresh`)),9,Yt)]),L.value.status===`draft`&&!z.value?(r(),b(`p`,Xt,c(h(k)(`先邀请所有席位,在各参与端完成预检并加入后开始。选择平台不会自动启动工作端。`,`Invite every seat and complete preflight and joining on each worker before starting. Choosing an adapter does not start a worker.`)),1)):l(``,!0),T.value&&T.value!==`message`?(r(),x(C,{key:2,variant:`inline`,label:te[T.value]||`更新圆桌 · Updating roundtable`},null,8,[`label`])):l(``,!0),D.value?(r(),b(`div`,Zt,[v(`p`,null,c(h(k)(`停止将拒绝新回合并请求取消当前运行。外部进程是否已取消,以工作端回执为准。`,`Stopping blocks new turns and requests cancellation of the current run. Worker receipts confirm whether external execution stopped.`)),1),v(`label`,Qt,[e(c(h(k)(`停止原因(可选)`,`Stop reason (optional)`)),1),n(v(`input`,{"onUpdate:modelValue":o[5]||=e=>E.value=e,maxlength:`2000`},null,512),[[d,E.value]])]),v(`button`,{type:`button`,disabled:!!T.value,onClick:o[6]||=e=>K(`stop`)},c(h(k)(`确认停止`,`Confirm stop`)),9,$t)])):l(``,!0),w.value?(r(),b(`p`,en,c(w.value),1)):l(``,!0),R.value?l(``,!0):(r(),b(`details`,tn,[v(`summary`,null,c(h(k)(`由你修改停止条件`,`Change limits explicitly`)),1),v(`p`,nn,c(h(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),v(`form`,{class:`rt-budget-form`,onSubmit:m(G,[`prevent`])},[v(`div`,rn,[v(`label`,an,[e(c(h(k)(`讨论轮数`,`Discussion rounds`)),1),n(v(`input`,{"onUpdate:modelValue":o[7]||=e=>M.value=e,type:`number`,min:`1`,max:`3`,required:``},null,512),[[d,M.value,void 0,{number:!0}]])]),v(`label`,on,[e(c(h(k)(`Agent 发言上限`,`Agent message limit`)),1),n(v(`input`,{"onUpdate:modelValue":o[8]||=e=>P.value=e,type:`number`,min:`1`,max:`30`,required:``},null,512),[[d,P.value,void 0,{number:!0}]])]),v(`label`,sn,[e(c(h(k)(`总时限(分钟)`,`Total minutes`)),1),n(v(`input`,{"onUpdate:modelValue":o[9]||=e=>F.value=e,type:`number`,min:`0.1`,step:`0.1`,max:`30`,required:``},null,512),[[d,F.value,void 0,{number:!0}]])]),v(`label`,cn,[e(c(h(k)(`单回合(分钟)`,`Minutes per turn`)),1),n(v(`input`,{"onUpdate:modelValue":o[10]||=e=>I.value=e,type:`number`,min:`0.1`,step:`0.1`,max:`5`,required:``},null,512),[[d,I.value,void 0,{number:!0}]])])]),v(`button`,{type:`submit`,disabled:!!T.value},c(h(k)(`确认修改停止条件`,`Confirm limit changes`)),9,ln)],32)]))]),y(nt,{room:L.value,"active-seat-id":i.snapshot.currentTurn?.seatId,onChanged:o[11]||=e=>p(`refresh`)},null,8,[`room`,`active-seat-id`]),v(`section`,un,[v(`div`,dn,[v(`h2`,fn,c(h(k)(`公开讨论`,`Shared discussion`)),1),v(`span`,null,c(i.snapshot.messages.length)+` `+c(h(k)(`条记录`,`records`)),1)]),i.snapshot.currentTurn?(r(),b(`div`,pn,[v(`strong`,null,c(h(k)(`当前回合`,`Current turn`))+` · `+c(W(i.snapshot.currentTurn.seatId)),1),v(`span`,null,c(h(A)(i.snapshot.currentTurn.status))+` · `+c(h(A)(i.snapshot.currentTurn.phase)),1),i.snapshot.currentTurn.deadline?(r(),b(`small`,mn,c(h(k)(`期限`,`Deadline`))+`: `+c(h(O)(i.snapshot.currentTurn.deadline)),1)):l(``,!0)])):l(``,!0),v(`div`,hn,[(r(!0),b(f,null,t(i.snapshot.messages,e=>(r(),b(`article`,{key:e.id,class:g([`rt-message`,{"rt-message-user":[`user`,`human`].includes(e.kind),"rt-message-system":e.kind===`system`}])},[v(`div`,gn,[v(`strong`,null,c(e.kind===`human`?h(k)(`你`,`You`):W(e.seatId)),1),v(`span`,null,c(h(A)(e.kind))+` · #`+c(e.seq),1)]),v(`p`,_n,c(e.body),1),v(`small`,null,c(h(O)(e.createdAt)),1)],2))),128)),i.snapshot.messages.length?l(``,!0):(r(),b(`p`,vn,c(h(k)(`这里会保存按顺序发布的提案、审查、交接和补充要求。`,`Ordered proposals, reviews, handoffs and your additions will appear here.`)),1))]),i.snapshot.hasMore?(r(),b(`button`,{key:1,type:`button`,disabled:i.refreshing,onClick:o[12]||=e=>p(`refresh`)},c(h(k)(`读取后续消息`,`Load remaining messages`)),9,yn)):l(``,!0),R.value?l(``,!0):(r(),b(`form`,{key:2,class:`rt-input-form`,onSubmit:m(ee,[`prevent`])},[v(`label`,bn,[e(c(h(k)(`补充要求`,`Add a requirement`)),1),n(v(`textarea`,{"onUpdate:modelValue":o[13]||=e=>_.value=e,maxlength:`16000`,rows:`3`,placeholder:h(k)(`所有获授权席位可见。不要填写凭据或他人的私有记忆。`,`Visible to all authorized seats. Keep credentials and others’ private memory out.`)},null,8,xn),[[d,_.value]])]),v(`button`,{type:`submit`,disabled:!_.value.trim()||!!T.value},[T.value===`message`?(r(),x(C,{key:0,variant:`inline`,label:`发送补充要求 · Sending requirement`})):(r(),b(`span`,Cn,c(h(k)(`发送`,`Send`)),1))],8,Sn)],32)),R.value?l(``,!0):(r(),b(`details`,wn,[v(`summary`,null,c(h(k)(`主持与恢复操作`,`Moderation and recovery`)),1),v(`p`,Tn,c(h(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),v(`label`,En,[e(c(h(k)(`操作原因(跳过回合时必填)`,`Reason (required when skipping a turn)`)),1),n(v(`input`,{"onUpdate:modelValue":o[14]||=e=>E.value=e,maxlength:`2000`},null,512),[[d,E.value]])]),v(`div`,Dn,[v(`button`,{type:`button`,disabled:!!T.value||!B.value,onClick:o[15]||=e=>K(`advance_phase`)},c(h(k)(`提前推进阶段`,`Advance phase early`)),9,On),v(`button`,{type:`button`,disabled:!!T.value||!V.value,onClick:o[16]||=e=>K(`retry_turn`)},c(h(k)(`重试回合`,`Retry turn`)),9,kn),v(`button`,{type:`button`,disabled:!!T.value||!H.value||!E.value.trim(),onClick:o[17]||=e=>K(`skip_turn`)},c(h(k)(`记录并跳过回合`,`Record and skip turn`)),9,An)])]))]),y(Tt,{snapshot:i.snapshot},null,8,[`snapshot`]),y(It,{snapshot:i.snapshot},null,8,[`snapshot`]),L.value.status===`waiting_input`&&L.value.phase===`synthesis`&&i.snapshot.outcome?(r(),b(`section`,jn,[v(`h2`,null,c(h(k)(`由你验收`,`Your acceptance`)),1),v(`p`,null,c(h(k)(`检查结论、保留分歧、产物和验证报告后,明确记录是否接受交付。人工接受不会制造模型用量或工作进程证据。`,`Review the conclusion, dissent, artifacts and verification reports before accepting delivery. Acceptance does not create model usage or worker evidence.`)),1),v(`button`,{type:`button`,disabled:!!T.value,onClick:o[18]||=e=>j.value=!j.value},c(h(k)(`检查并接受交付`,`Review and accept delivery`)),9,Mn),j.value?(r(),b(`div`,Nn,[v(`p`,null,c(h(k)(`此操作记录你的人工验收,并结束本圆桌。`,`This records your acceptance and concludes this room.`)),1),v(`button`,{class:`rt-primary`,type:`button`,disabled:!!T.value,onClick:o[19]||=e=>K(`complete`)},c(h(k)(`确认接受交付`,`Confirm acceptance`)),9,Pn),v(`button`,{type:`button`,onClick:o[20]||=e=>j.value=!1},c(h(k)(`继续检查`,`Keep reviewing`)),1)])):l(``,!0)])):l(``,!0)]))}});function In(e){let t=o([]),n=o(null),r=o(!1),i=o(``),a=o(!1),s=0,c=!1,l;async function u(){if(r.value||c)return;let o=s,l=e.value;r.value=!0;try{let e=n.value?.messages.at(-1)?.seq??0,r=l?await N.read(l,e):await N.list();if(c||o!==s)return;if(`room`in r){let e=new Map([...n.value?.messages??[],...r.messages].map(e=>[e.id,e]));n.value={...r,messages:[...e.values()].sort((e,t)=>e.seq-t.seq)}}else t.value=r.rooms;a.value=!0,i.value=``}catch(e){!c&&o===s&&(i.value=e instanceof Error?e.message:k(`读取圆桌失败`,`Could not read roundtable`))}finally{o===s&&(r.value=!1)}}function d(){c||(l=setTimeout(async()=>{await u(),d()},4e3))}return S(e,async()=>{s++,r.value=!1,n.value=null,i.value=``,a.value=!1;let e=s;l&&clearTimeout(l),await u(),e===s&&d()},{immediate:!0}),p(()=>{c=!0,s++,l&&clearTimeout(l)}),{rooms:t,snapshot:n,loading:r,loaded:a,error:i,refresh:u}}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=i({__name:`RoundtablesPage`,setup(n){let i=T(),u=w(),d=s(()=>typeof i.params.roomId==`string`?i.params.roomId:``),{rooms:p,snapshot:m,loading:g,loaded:_,error:S,refresh:j}=In(d),M=o(!1),N=s(()=>d.value?!!m.value:_.value||M.value);async function P(e){M.value=!1,await u.push(`/roundtables/${encodeURIComponent(e)}`)}return(n,i)=>(r(),b(`main`,Ln,[v(`header`,Rn,[v(`div`,null,[y(h(E),{class:`rt-brand`,to:`/`},{default:a(()=>[i[4]||=e(`Fuli `,-1),v(`span`,null,c(h(k)(`复利`,``)),1)]),_:1}),v(`div`,zn,[y(h(E),{to:`/roundtables`},{default:a(()=>[e(c(h(k)(`Agent 圆桌`,`Agent Roundtable`)),1)]),_:1}),i[5]||=v(`span`,{class:`rt-tag`},`Beta`,-1)])]),v(`div`,Bn,[d.value?(r(),x(h(E),{key:0,to:`/roundtables`},{default:a(()=>[e(c(h(k)(`全部圆桌`,`All roundtables`)),1)]),_:1})):l(``,!0),y(h(E),{to:`/project-agents`},{default:a(()=>[e(c(h(k)(`Agent 目录`,`Agent directory`)),1)]),_:1}),y(D)])]),v(`div`,Vn,[h(S)?(r(),b(`div`,Hn,[v(`strong`,null,c(h(k)(`读取失败,保留已加载内容`,`Could not refresh; loaded content is preserved`)),1),v(`p`,null,c(h(S)),1),v(`button`,{type:`button`,disabled:h(g),onClick:i[0]||=(...e)=>h(j)&&h(j)(...e)},c(h(k)(`重试`,`Retry`)),9,Un)])):l(``,!0),h(g)&&!N.value?(r(),x(C,{key:1,label:d.value?`读取圆桌与公开消息 · Loading roundtable and shared messages`:`读取圆桌列表 · Loading roundtable list`},null,8,[`label`])):l(``,!0),h(g)&&N.value?(r(),b(`div`,Wn,[y(C,{variant:`inline`,label:d.value?`刷新圆桌与公开消息 · Refreshing roundtable and shared messages`:`刷新圆桌列表 · Refreshing roundtable list`},null,8,[`label`])])):l(``,!0),h(m)?(r(),x(Fn,{key:h(m).room.id,snapshot:h(m),refreshing:h(g),onRefresh:h(j)},null,8,[`snapshot`,`refreshing`,`onRefresh`])):d.value?l(``,!0):(r(),b(f,{key:4},[v(`section`,Gn,[v(`div`,null,[v(`p`,Kn,c(h(k)(`一起讨论,分别执行,共同交付`,`Discuss together. Execute independently. Deliver with evidence.`)),1),v(`h1`,null,c(h(k)(`让不同 Agent 围绕同一个目标工作。`,`Bring different agents around one shared goal.`)),1),v(`p`,null,c(h(k)(`身份和长期知识由 Fuli 管理。本次讨论、分工、回合与结果留在圆桌里,执行由获授权的参与端完成。`,`Fuli manages identity and lasting knowledge. This roundtable keeps discussion, tasks, turns and outcomes; authorized participant workers perform execution.`)),1)]),v(`button`,{class:`rt-primary`,type:`button`,onClick:i[1]||=e=>M.value=!M.value},c(h(k)(`创建圆桌`,`Create roundtable`)),1)]),M.value?(r(),x(q,{key:0,onCreated:P,onCancel:i[2]||=e=>M.value=!1})):l(``,!0),v(`section`,qn,[v(`div`,Jn,[v(`h2`,Yn,c(h(k)(`你的圆桌`,`Your roundtables`)),1),v(`button`,{type:`button`,disabled:h(g),onClick:i[3]||=(...e)=>h(j)&&h(j)(...e)},c(h(k)(`刷新`,`Refresh`)),9,Xn)]),h(p).length?(r(),b(`div`,Zn,[(r(!0),b(f,null,t(h(p),e=>(r(),x(h(E),{key:e.id,class:`rt-room-card`,to:`/roundtables/${encodeURIComponent(e.id)}`},{default:a(()=>[v(`div`,Qn,[v(`span`,$n,c(h(A)(e.status)),1),v(`small`,null,c(h(A)(e.mode)),1)]),v(`h3`,null,c(e.goal),1),v(`p`,null,c(h(A)(e.phase))+` · `+c(e.seats.length)+` `+c(h(k)(`位参与者`,`participants`)),1),v(`small`,null,c(h(O)(e.updatedAt||e.createdAt)),1)]),_:2},1032,[`to`]))),128))])):!h(g)&&!h(S)?(r(),b(`p`,er,c(h(k)(`还没有圆桌。创建一个目标明确的讨论或协作任务,邀请独立参与者加入。`,`No roundtables yet. Create a focused discussion or collaborative task and invite independent participants.`)),1)):l(``,!0)]),v(`section`,tr,[v(`p`,nr,c(h(k)(`完整产品版图`,`Product capability map`)),1),v(`h2`,rr,c(h(k)(`同一个协作层,连接长期知识与实际工作。`,`One collaboration layer connects lasting knowledge to real work.`)),1),v(`ol`,null,[v(`li`,null,[v(`span`,ir,c(h(k)(`已提供`,`Available`)),1),v(`strong`,null,c(h(k)(`身份与知识`,`Identity and knowledge`)),1),v(`p`,null,c(h(k)(`Agent 职责、项目范围、确认状态与时间历史。按需读取,不因同桌共享私有记忆。`,`Agent roles, project scope, confirmation and temporal history. Retrieved on demand; shared rooms do not expose private memory.`)),1)]),v(`li`,null,[i[6]||=v(`span`,{class:`rt-tag`},`Beta`,-1),v(`strong`,null,c(h(k)(`圆桌协作`,`Roundtable coordination`)),1),v(`p`,null,c(h(k)(`共同目标 → 讨论 → 分工 → 实施 → 审查 → 汇总与人工验收。`,`Shared goal → discussion → planning → implementation → review → synthesis and human acceptance.`)),1)]),v(`li`,null,[i[7]||=v(`span`,{class:`rt-tag`},`Beta`,-1),v(`strong`,null,c(h(k)(`开放接入`,`Open adapters`)),1),v(`p`,null,c(h(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)]),v(`li`,null,[i[8]||=v(`span`,{class:`rt-tag`},`Beta`,-1),v(`strong`,null,c(h(k)(`跨电脑交付`,`Delivery across computers`)),1),v(`p`,null,c(h(k)(`一台协调端,各参与端主动领取授权回合;公开消息、分歧、产物和实际来源一起保留。`,`One coordinator; workers pull authorized turns. Shared messages, dissent, artifacts and actual sources stay together.`)),1)])]),v(`p`,ar,c(h(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};
@@ -0,0 +1 @@
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 +1 @@
1
- import{A as e,F as t,H as n,M as r,N as i,R as a,T as o,Z as s,_ as c,a as l,at as u,b as d,d as f,h as p,j as m,m as h,n as ee,nt as g,rt as _,v,x as y,z as b}from"./i18n-75woNt31.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=o({__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(o,{emit:k}){let A=o,j=k,M=s(null),N=s(null),P=s(null),F=s(null),I=s(!1),L=s(!1),R=s(``),z=a().replace(/[^A-Za-z0-9_-]/g,``),B=c(()=>A.label),V=c(()=>A.placeholder??l(`common.searchableSelect.placeholder`)),H=c(()=>A.searchPlaceholder??l(`common.searchableSelect.searchPlaceholder`)),U=c(()=>`${A.controlId||`searchable-select-${z}`}-options`),W=c(()=>A.options.find(({value:e})=>e===A.modelValue)??null),G=c(()=>A.searchable??A.options.length>5),K=c(()=>{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});b(()=>A.disabled,e=>{e&&J()}),r(()=>{document.addEventListener(`pointerdown`,X)}),m(()=>{document.removeEventListener(`pointerdown`,X)});async function ce(){I.value?J():await q()}async function q(){A.disabled||(R.value=``,pe(),I.value=!0,await e(),G.value?P.value?.focus():fe()?.focus())}function J({restoreFocus:t=!1}={}){I.value=!1,L.value=!1,R.value=``,t&&e(()=>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,r)=>(i(),y(`div`,{ref_key:`root`,ref:M,class:_([`searchable-select`,{open:I.value,"open-up":L.value,disabled:o.disabled}]),"data-select-id":o.controlId,onFocusout:Z},[v(`select`,{class:`searchable-select-native`,value:o.modelValue,name:o.name,required:o.required,disabled:o.disabled,tabindex:`-1`,"aria-hidden":`true`},[(i(!0),y(p,null,t(o.options,e=>(i(),y(`option`,{key:e.value,value:e.value,disabled:e.disabled},u(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:o.disabled,onPointerdown:r[0]||=h(()=>{},[`stop`]),onClick:h(ce,[`stop`]),onKeydown:le},[v(`span`,T,[v(`span`,E,u(W.value?.label||V.value),1),W.value?.meta?(i(),y(`small`,D,u(W.value.meta),1)):d(``,!0)]),r[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?(i(),y(`div`,te,[n(v(`input`,{ref_key:`searchInput`,ref:P,"onUpdate:modelValue":r[1]||=e=>R.value=e,type:`search`,autocomplete:`off`,placeholder:H.value,"aria-label":g(l)(`common.searchableSelect.searchAria`,{label:B.value}),onKeydown:ue},null,40,ne),[[f,R.value]])])):d(``,!0),v(`div`,{id:U.value,ref_key:`optionsList`,ref:F,class:`searchable-select-options`,role:`listbox`},[(i(!0),y(p,null,t(K.value,e=>(i(),y(`button`,{key:e.value,type:`button`,class:`searchable-select-option`,role:`option`,"aria-selected":e.value===o.modelValue,disabled:e.disabled,onMousedown:r[2]||=h(()=>{},[`prevent`]),onClick:t=>Y(e),onKeydown:t=>de(t,e)},[v(`span`,ae,[v(`strong`,null,u(e.label),1),e.meta?(i(),y(`small`,oe,u(e.meta),1)):d(``,!0)]),r[4]||=v(`i`,{class:`searchable-select-check`,"aria-hidden":`true`},null,-1)],40,ie))),128))],8,re),K.value.length===0?(i(),y(`p`,se,u(g(l)(`common.searchableSelect.noMatches`)),1)):d(``,!0)],8,O)],42,x))}});export{k as t};
1
+ import{A as e,F as t,H as n,M as r,N as i,R as a,T as o,Z as s,_ as c,a as l,at as u,b as d,d as f,h as p,j as m,m as h,n as ee,nt as g,rt as _,v,x as y,z as b}from"./i18n-CIIxzhPZ.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=o({__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(o,{emit:k}){let A=o,j=k,M=s(null),N=s(null),P=s(null),F=s(null),I=s(!1),L=s(!1),R=s(``),z=a().replace(/[^A-Za-z0-9_-]/g,``),B=c(()=>A.label),V=c(()=>A.placeholder??l(`common.searchableSelect.placeholder`)),H=c(()=>A.searchPlaceholder??l(`common.searchableSelect.searchPlaceholder`)),U=c(()=>`${A.controlId||`searchable-select-${z}`}-options`),W=c(()=>A.options.find(({value:e})=>e===A.modelValue)??null),G=c(()=>A.searchable??A.options.length>5),K=c(()=>{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});b(()=>A.disabled,e=>{e&&J()}),r(()=>{document.addEventListener(`pointerdown`,X)}),m(()=>{document.removeEventListener(`pointerdown`,X)});async function ce(){I.value?J():await q()}async function q(){A.disabled||(R.value=``,pe(),I.value=!0,await e(),G.value?P.value?.focus():fe()?.focus())}function J({restoreFocus:t=!1}={}){I.value=!1,L.value=!1,R.value=``,t&&e(()=>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,r)=>(i(),y(`div`,{ref_key:`root`,ref:M,class:_([`searchable-select`,{open:I.value,"open-up":L.value,disabled:o.disabled}]),"data-select-id":o.controlId,onFocusout:Z},[v(`select`,{class:`searchable-select-native`,value:o.modelValue,name:o.name,required:o.required,disabled:o.disabled,tabindex:`-1`,"aria-hidden":`true`},[(i(!0),y(p,null,t(o.options,e=>(i(),y(`option`,{key:e.value,value:e.value,disabled:e.disabled},u(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:o.disabled,onPointerdown:r[0]||=h(()=>{},[`stop`]),onClick:h(ce,[`stop`]),onKeydown:le},[v(`span`,T,[v(`span`,E,u(W.value?.label||V.value),1),W.value?.meta?(i(),y(`small`,D,u(W.value.meta),1)):d(``,!0)]),r[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?(i(),y(`div`,te,[n(v(`input`,{ref_key:`searchInput`,ref:P,"onUpdate:modelValue":r[1]||=e=>R.value=e,type:`search`,autocomplete:`off`,placeholder:H.value,"aria-label":g(l)(`common.searchableSelect.searchAria`,{label:B.value}),onKeydown:ue},null,40,ne),[[f,R.value]])])):d(``,!0),v(`div`,{id:U.value,ref_key:`optionsList`,ref:F,class:`searchable-select-options`,role:`listbox`},[(i(!0),y(p,null,t(K.value,e=>(i(),y(`button`,{key:e.value,type:`button`,class:`searchable-select-option`,role:`option`,"aria-selected":e.value===o.modelValue,disabled:e.disabled,onMousedown:r[2]||=h(()=>{},[`prevent`]),onClick:t=>Y(e),onKeydown:t=>de(t,e)},[v(`span`,ae,[v(`strong`,null,u(e.label),1),e.meta?(i(),y(`small`,oe,u(e.meta),1)):d(``,!0)]),r[4]||=v(`i`,{class:`searchable-select-check`,"aria-hidden":`true`},null,-1)],40,ie))),128))],8,re),K.value.length===0?(i(),y(`p`,se,u(g(l)(`common.searchableSelect.noMatches`)),1)):d(``,!0)],8,O)],42,x))}});export{k as t};
@@ -1 +1 @@
1
- import{C as e,F as t,H as n,M as r,N as i,T as a,Z as o,_ as s,a as c,at as l,b as u,c as d,d as f,h as p,i as m,it as h,j as ee,m as te,n as ne,nt as g,r as re,v as _,w as v,x as y,y as b,z as ie}from"./i18n-75woNt31.js";import{t as ae}from"./console-hUns2aD-.js";import{t as x}from"./GrowthLoading-DFOy-mEl.js";import{t as S}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{a as oe,n as C}from"./client-InXscj8J.js";import{t as w}from"./SearchableSelect-vaoSDq1g.js";import{i as se,n as T,s as ce,t as E}from"./conversation-launcher-settings-DEtJ6pZg.js";var le=[`aria-label`],ue={class:`settings-content`},de={key:1,class:`settings-top-status`,role:`status`},fe={key:0},pe={key:1},me={class:`settings-card resource-card`},he={class:`section-heading`},ge={key:0},_e=[`disabled`],ve={key:1,class:`settings-error`,role:`alert`},ye={class:`resource-totals`},D={class:`resource-breakdowns`},O={class:`resource-group`},k={class:`resource-group`},A={class:`resource-notes`},j={key:0},M={key:1},N=[`aria-busy`],P=[`disabled`],be={class:`settings-card ports-card`},xe={class:`section-heading`},Se={key:0,class:`restart-chip`},Ce={class:`port-section`},we={class:`port-grid`},Te=[`onUpdate:modelValue`],Ee={class:`port-section development-section`},De={id:`conversation-launchers`,class:`settings-card conversation-launcher-card`},Oe={class:`conversation-launcher-list`},ke={class:`conversation-launcher-heading`},Ae={class:`conversation-launcher-switch`},je=[`onUpdate:modelValue`],Me={key:0,class:`conversation-launcher-note`},Ne={key:1,class:`conversation-launcher-fields`},Pe=[`onUpdate:modelValue`],Fe={class:`conversation-launcher-template`},Ie=[`onUpdate:modelValue`],Le={class:`settings-card behavior-card`},Re={class:`setting-list`},ze={class:`setting-row`},Be=[`checked`],Ve={class:`setting-row`},He=[`checked`],Ue={class:`setting-row`},We={class:`setting-row select-row`},Ge={class:`setting-row select-row`},Ke={class:`setting-row select-row`},qe={key:0,class:`settings-error`,role:`alert`},Je={key:4,class:`settings-error`,role:`alert`},F=S(a({__name:`SettingsPage`,setup(a){let S=ae(),F=o(null),I=o(null),L=o(null),R=o(!0),z=s({get:()=>S.settingsSaving,set:e=>{S.settingsSaving=e}}),B=o(!1),V=o(``),H=o(``),U=o(!1),W=null,Ye=[`console`,`personalProvider`,`personalNeo4jHttp`,`personalNeo4jBolt`],G=s({get:()=>ne(),set:e=>m(e)}),K=[5,10,30,60],Xe=se,Ze=s(()=>[{value:`zh-CN`,label:c(`settings.behavior.zh`)},{value:`en-US`,label:c(`settings.behavior.en`)}]),Qe=s(()=>K.map(e=>({value:String(e),label:c(`settings.resources.refreshUnit`,{seconds:e})}))),$e=s(()=>[{value:`native`,label:c(`settings.behavior.runtimeModes.native`)},{value:`container`,label:c(`settings.behavior.runtimeModes.container`)}]),et=s(()=>[{value:`any`,label:c(`settings.conversationLaunchers.idFormats.any`)},{value:`uuid`,label:c(`settings.conversationLaunchers.idFormats.uuid`)}]),tt=s(()=>S.state?.capturePolicy?.enabled!==!1),nt=s(()=>S.state?.agentAccessPolicy?.enabled!==!1),rt=s(()=>Math.max(1,...L.value?.memory.components.map(({bytes:e})=>e)??[1])),it=s(()=>Math.max(1,...L.value?.disk.components.map(({bytes:e})=>e)??[1])),at=s(()=>I.value?.graphRuntimeMode===`container`&&Number.isFinite(L.value?.memory.hostTotalBytes)&&Number(L.value?.memory.hostTotalBytes)<=16*1024**3);r(async()=>{S.runtimeStatus===`idle`&&S.refresh(),await Promise.all([ot(),q()]),R.value=!1}),ee(Y),ie(()=>I.value?.resourceRefreshSeconds,()=>st());async function ot(){try{let e=await C(`/api/system/settings`);F.value=e,I.value={...structuredClone(e.configured),conversationLaunchers:E(e.configured.conversationLaunchers)},T(e.configured.conversationLaunchers),V.value=``}catch(e){V.value=e instanceof Error?e.message:c(`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:c(`settings.resources.unavailable`)}finally{B.value=!1}}}async function J(){if(!(!I.value||z.value)){z.value=!0,U.value=!1;try{let e=await oe(`/api/system/settings`,I.value);F.value=e,I.value={...structuredClone(e.configured),conversationLaunchers:E(e.configured.conversationLaunchers)},T(e.configured.conversationLaunchers),U.value=!0,V.value=``,window.setTimeout(()=>{U.value=!1},2400)}catch(e){V.value=e instanceof Error?e.message:c(`settings.saveError`)}finally{z.value=!1}}}function st(){Y();let e=I.value?.resourceRefreshSeconds;e&&(W=setInterval(()=>void q(),e*1e3))}function Y(){W&&clearInterval(W),W=null}function ct(e){S.updateCapturePolicy(e.currentTarget.checked)}function lt(e){S.updateAgentAccessPolicy(e.currentTarget.checked)}function ut(e){(e===`zh-CN`||e===`en-US`)&&m(e)}function dt(e){let t=K.find(t=>String(t)===e);t===void 0||!I.value||(I.value.resourceRefreshSeconds=t)}function ft(e){!I.value||e!==`native`&&e!==`container`||(I.value.graphRuntimeMode=e)}function pt(e){let t=c(`settings.conversationLaunchers.applications.${e}`);return t===`settings.conversationLaunchers.applications.${e}`?ce(e):t}function mt(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 re.global.te(t)?c(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)):`—`}return(r,a)=>(i(),y(`section`,{class:`view settings-view`,"aria-label":g(c)(`settings.aria`)},[_(`div`,ue,[z.value?(i(),b(x,{key:0,variant:`inline`,label:g(c)(`settings.saving`)},null,8,[`label`])):u(``,!0),U.value||F.value?.restartRequired?(i(),y(`div`,de,[U.value?(i(),y(`strong`,fe,l(g(c)(`settings.saved`)),1)):u(``,!0),F.value?.restartRequired?(i(),y(`span`,pe,l(g(c)(`settings.restartCopy`)),1)):u(``,!0)])):u(``,!0),_(`section`,me,[_(`header`,he,[_(`div`,null,[_(`h3`,null,l(g(c)(`settings.resources.title`)),1),L.value?(i(),y(`p`,ge,l(g(c)(`settings.resources.measuredAt`,{time:$(L.value.sampledAt)})),1)):u(``,!0)]),_(`button`,{class:`quiet-button`,type:`button`,disabled:B.value,onClick:q},l(g(c)(`common.actions.refresh`)),9,_e)]),B.value?(i(),b(x,{key:0,variant:L.value?`inline`:`compact`,label:g(c)(`settings.resources.loading`)},null,8,[`variant`,`label`])):u(``,!0),H.value?(i(),y(`p`,ve,l(H.value),1)):L.value?(i(),y(p,{key:2},[_(`div`,ye,[_(`article`,null,[_(`span`,null,l(g(c)(`settings.resources.memory`)),1),_(`strong`,null,l(Z(L.value.memory.usedBytes)),1),_(`small`,null,l(g(c)(`settings.resources.available`,{value:Z(L.value.memory.hostFreeBytes)})),1)]),_(`article`,null,[_(`span`,null,l(g(c)(`settings.resources.disk`)),1),_(`strong`,null,l(Z(L.value.disk.usedBytes)),1),_(`small`,null,l(g(c)(`settings.resources.available`,{value:Z(L.value.disk.hostFreeBytes)})),1)])]),_(`div`,D,[_(`div`,O,[_(`h4`,null,l(g(c)(`settings.resources.memory`)),1),(i(!0),y(p,null,t(L.value.memory.components,e=>(i(),y(`div`,{key:e.id,class:`resource-row`},[_(`div`,null,[_(`span`,null,l(X(e)),1),_(`strong`,null,l(Z(e.bytes)),1)]),_(`i`,null,[_(`b`,{style:h({width:Q(e.bytes,rt.value)})},null,4)])]))),128))]),_(`div`,k,[_(`h4`,null,l(g(c)(`settings.resources.disk`)),1),(i(!0),y(p,null,t(L.value.disk.components,e=>(i(),y(`div`,{key:e.id,class:`resource-row`},[_(`div`,null,[_(`span`,null,l(X(e)),1),_(`strong`,null,l(Z(e.bytes)),1)]),_(`i`,null,[_(`b`,{style:h({width:Q(e.bytes,it.value)})},null,4)])]))),128))])]),_(`div`,A,[_(`span`,null,l(g(c)(`settings.resources.diskMeasuredAt`,{time:$(L.value.disk.measuredAt)})),1),L.value.status===`partial`?(i(),y(`span`,j,l(g(c)(`settings.resources.partial`)),1)):u(``,!0),L.value.disk.temporaryBytes?(i(),y(`span`,M,l(g(c)(`settings.resources.temporary`,{value:Z(L.value.disk.temporaryBytes)})),1)):u(``,!0),_(`span`,null,l(g(c)(L.value.exclusions.includes(`shared-container-vm-overhead`)?`settings.resources.exclusionsContainer`:`settings.resources.exclusionsNative`)),1)])],64)):u(``,!0)]),R.value&&!I.value?(i(),b(x,{key:2,variant:`compact`,label:g(c)(`settings.loading`)},null,8,[`label`])):u(``,!0),I.value?(i(),y(`form`,{key:3,id:`settings-form`,class:`settings-form`,"aria-busy":z.value,onSubmit:te(J,[`prevent`])},[_(`fieldset`,{class:`settings-fields`,disabled:z.value},[_(`section`,be,[_(`header`,xe,[_(`h3`,null,l(g(c)(`settings.ports.title`)),1),F.value?.restartRequired?(i(),y(`span`,Se,l(g(c)(`settings.restartRequired`)),1)):u(``,!0)]),_(`div`,Ce,[_(`h4`,null,l(g(c)(`settings.ports.personal`)),1),_(`div`,we,[(i(),y(p,null,t(Ye,e=>_(`label`,{key:e},[_(`span`,null,l(g(c)(`settings.ports.${e}`)),1),n(_(`input`,{"onUpdate:modelValue":t=>I.value.ports[e]=t,type:`number`,min:`1`,max:`65535`,required:``},null,8,Te),[[f,I.value.ports[e],void 0,{number:!0}]]),_(`small`,null,l(g(c)(`settings.ports.active`,{port:mt(e)})),1)])),64))])]),_(`div`,Ee,[_(`div`,null,[_(`h4`,null,l(g(c)(`settings.ports.development`)),1),_(`span`,null,l(g(c)(`settings.ports.developing`)),1)]),_(`p`,null,l(g(c)(`settings.ports.developmentMeta`)),1)])]),_(`section`,De,[_(`h3`,null,l(g(c)(`settings.conversationLaunchers.title`)),1),_(`div`,Oe,[(i(!0),y(p,null,t(g(Xe),t=>(i(),y(`article`,{key:t,class:`conversation-launcher-row`},[_(`div`,ke,[_(`span`,null,[_(`strong`,null,l(pt(t)),1),_(`small`,null,l(g(c)(`settings.conversationLaunchers.sourceId`,{id:t})),1)]),_(`label`,Ae,[_(`span`,null,l(g(c)(`settings.conversationLaunchers.enabled`)),1),n(_(`input`,{"onUpdate:modelValue":e=>I.value.conversationLaunchers[t].enabled=e,type:`checkbox`,role:`switch`},null,8,je),[[d,I.value.conversationLaunchers[t].enabled]])])]),I.value.conversationLaunchers[t].enabled&&t===`codex`?(i(),y(`small`,Me,l(g(c)(`settings.conversationLaunchers.idFormatMeta`)),1)):u(``,!0),I.value.conversationLaunchers[t].enabled?(i(),y(`div`,Ne,[_(`label`,null,[_(`span`,null,l(g(c)(`settings.conversationLaunchers.idFormat`)),1),v(w,{modelValue:I.value.conversationLaunchers[t].idFormat,"onUpdate:modelValue":e=>I.value.conversationLaunchers[t].idFormat=e,class:`launcher-select`,"control-id":`settings-conversation-${t}-id-format`,options:et.value,label:g(c)(`settings.conversationLaunchers.idFormat`)},null,8,[`modelValue`,`onUpdate:modelValue`,`control-id`,`options`,`label`])]),_(`label`,null,[_(`span`,null,l(g(c)(`settings.conversationLaunchers.appName`)),1),n(_(`input`,{"onUpdate:modelValue":e=>I.value.conversationLaunchers[t].appName=e,type:`text`,maxlength:`64`,required:``},null,8,Pe),[[f,I.value.conversationLaunchers[t].appName,void 0,{trim:!0}]])]),_(`label`,Fe,[_(`span`,null,[e(l(g(c)(`settings.conversationLaunchers.urlTemplate`))+` `,1),a[1]||=_(`small`,null,[_(`code`,null,`{id}`)],-1)]),n(_(`input`,{"onUpdate:modelValue":e=>I.value.conversationLaunchers[t].urlTemplate=e,type:`text`,maxlength:`1024`,spellcheck:`false`,required:``},null,8,Ie),[[f,I.value.conversationLaunchers[t].urlTemplate,void 0,{trim:!0}]])])])):u(``,!0)]))),128))])]),_(`section`,Le,[_(`h3`,null,l(g(c)(`settings.behavior.title`)),1),_(`div`,Re,[_(`label`,ze,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.capture`)),1),_(`small`,null,l(g(c)(`settings.behavior.captureMeta`)),1)]),_(`input`,{type:`checkbox`,role:`switch`,checked:tt.value,onChange:ct},null,40,Be)]),_(`label`,Ve,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.agentAccess`)),1),_(`small`,null,l(g(c)(`settings.behavior.agentAccessMeta`)),1)]),_(`input`,{type:`checkbox`,role:`switch`,checked:nt.value,onChange:lt},null,40,He)]),_(`label`,Ue,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.lanAccess`)),1),_(`small`,null,l(g(c)(`settings.behavior.lanAccessMeta`)),1)]),n(_(`input`,{"onUpdate:modelValue":a[0]||=e=>I.value.lanAccess=e,type:`checkbox`,role:`switch`},null,512),[[d,I.value.lanAccess]])]),_(`div`,We,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.runtimeMode`)),1),_(`small`,null,l(at.value?g(c)(`settings.behavior.runtimeRecommendation`):g(c)(`settings.behavior.runtimeModeMeta`,{mode:g(c)(`settings.behavior.runtimeModes.${F.value?.active.graphRuntimeMode??I.value.graphRuntimeMode}`)})),1)]),v(w,{class:`settings-select`,"control-id":`settings-runtime-mode`,"model-value":I.value.graphRuntimeMode,options:$e.value,label:g(c)(`settings.behavior.runtimeMode`),"onUpdate:modelValue":ft},null,8,[`model-value`,`options`,`label`])]),_(`div`,Ge,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.language`)),1)]),v(w,{class:`settings-select`,"control-id":`settings-language`,"model-value":G.value,options:Ze.value,label:g(c)(`settings.behavior.language`),"onUpdate:modelValue":ut},null,8,[`model-value`,`options`,`label`])]),_(`div`,Ke,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.resources.refresh`)),1)]),v(w,{class:`settings-select`,"control-id":`settings-refresh-interval`,"model-value":String(I.value.resourceRefreshSeconds),options:Qe.value,label:g(c)(`settings.resources.refresh`),"onUpdate:modelValue":dt},null,8,[`model-value`,`options`,`label`])])])])],8,P),V.value?(i(),y(`p`,qe,l(V.value),1)):u(``,!0)],40,N)):R.value?u(``,!0):(i(),y(`p`,Je,l(V.value||g(c)(`settings.loadError`)),1))])],8,le))}}),[[`__scopeId`,`data-v-d1c1de43`]]);export{F as default};
1
+ import{C as e,F as t,H as n,M as r,N as i,T as a,Z as o,_ as s,a as c,at as l,b as u,c as d,d as f,h as p,i as m,it as h,j as ee,m as te,n as ne,nt as g,r as re,v as _,w as v,x as y,y as b,z as ie}from"./i18n-CIIxzhPZ.js";import{t as ae}from"./console-CrhIK67Y.js";import{t as x}from"./GrowthLoading-DIwqGFSc.js";import{t as S}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{a as oe,n as C}from"./client-DTQ_tUr2.js";import{t as w}from"./SearchableSelect-Do6X3fXi.js";import{i as se,n as T,s as ce,t as E}from"./conversation-launcher-settings-fUWCt3XG.js";var le=[`aria-label`],ue={class:`settings-content`},de={key:1,class:`settings-top-status`,role:`status`},fe={key:0},pe={key:1},me={class:`settings-card resource-card`},he={class:`section-heading`},ge={key:0},_e=[`disabled`],ve={key:1,class:`settings-error`,role:`alert`},ye={class:`resource-totals`},D={class:`resource-breakdowns`},O={class:`resource-group`},k={class:`resource-group`},A={class:`resource-notes`},j={key:0},M={key:1},N=[`aria-busy`],P=[`disabled`],be={class:`settings-card ports-card`},xe={class:`section-heading`},Se={key:0,class:`restart-chip`},Ce={class:`port-section`},we={class:`port-grid`},Te=[`onUpdate:modelValue`],Ee={class:`port-section development-section`},De={id:`conversation-launchers`,class:`settings-card conversation-launcher-card`},Oe={class:`conversation-launcher-list`},ke={class:`conversation-launcher-heading`},Ae={class:`conversation-launcher-switch`},je=[`onUpdate:modelValue`],Me={key:0,class:`conversation-launcher-note`},Ne={key:1,class:`conversation-launcher-fields`},Pe=[`onUpdate:modelValue`],Fe={class:`conversation-launcher-template`},Ie=[`onUpdate:modelValue`],Le={class:`settings-card behavior-card`},Re={class:`setting-list`},ze={class:`setting-row`},Be=[`checked`],Ve={class:`setting-row`},He=[`checked`],Ue={class:`setting-row`},We={class:`setting-row select-row`},Ge={class:`setting-row select-row`},Ke={class:`setting-row select-row`},qe={key:0,class:`settings-error`,role:`alert`},Je={key:4,class:`settings-error`,role:`alert`},F=S(a({__name:`SettingsPage`,setup(a){let S=ae(),F=o(null),I=o(null),L=o(null),R=o(!0),z=s({get:()=>S.settingsSaving,set:e=>{S.settingsSaving=e}}),B=o(!1),V=o(``),H=o(``),U=o(!1),W=null,Ye=[`console`,`personalProvider`,`personalNeo4jHttp`,`personalNeo4jBolt`],G=s({get:()=>ne(),set:e=>m(e)}),K=[5,10,30,60],Xe=se,Ze=s(()=>[{value:`zh-CN`,label:c(`settings.behavior.zh`)},{value:`en-US`,label:c(`settings.behavior.en`)}]),Qe=s(()=>K.map(e=>({value:String(e),label:c(`settings.resources.refreshUnit`,{seconds:e})}))),$e=s(()=>[{value:`native`,label:c(`settings.behavior.runtimeModes.native`)},{value:`container`,label:c(`settings.behavior.runtimeModes.container`)}]),et=s(()=>[{value:`any`,label:c(`settings.conversationLaunchers.idFormats.any`)},{value:`uuid`,label:c(`settings.conversationLaunchers.idFormats.uuid`)}]),tt=s(()=>S.state?.capturePolicy?.enabled!==!1),nt=s(()=>S.state?.agentAccessPolicy?.enabled!==!1),rt=s(()=>Math.max(1,...L.value?.memory.components.map(({bytes:e})=>e)??[1])),it=s(()=>Math.max(1,...L.value?.disk.components.map(({bytes:e})=>e)??[1])),at=s(()=>I.value?.graphRuntimeMode===`container`&&Number.isFinite(L.value?.memory.hostTotalBytes)&&Number(L.value?.memory.hostTotalBytes)<=16*1024**3);r(async()=>{S.runtimeStatus===`idle`&&S.refresh(),await Promise.all([ot(),q()]),R.value=!1}),ee(Y),ie(()=>I.value?.resourceRefreshSeconds,()=>st());async function ot(){try{let e=await C(`/api/system/settings`);F.value=e,I.value={...structuredClone(e.configured),conversationLaunchers:E(e.configured.conversationLaunchers)},T(e.configured.conversationLaunchers),V.value=``}catch(e){V.value=e instanceof Error?e.message:c(`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:c(`settings.resources.unavailable`)}finally{B.value=!1}}}async function J(){if(!(!I.value||z.value)){z.value=!0,U.value=!1;try{let e=await oe(`/api/system/settings`,I.value);F.value=e,I.value={...structuredClone(e.configured),conversationLaunchers:E(e.configured.conversationLaunchers)},T(e.configured.conversationLaunchers),U.value=!0,V.value=``,window.setTimeout(()=>{U.value=!1},2400)}catch(e){V.value=e instanceof Error?e.message:c(`settings.saveError`)}finally{z.value=!1}}}function st(){Y();let e=I.value?.resourceRefreshSeconds;e&&(W=setInterval(()=>void q(),e*1e3))}function Y(){W&&clearInterval(W),W=null}function ct(e){S.updateCapturePolicy(e.currentTarget.checked)}function lt(e){S.updateAgentAccessPolicy(e.currentTarget.checked)}function ut(e){(e===`zh-CN`||e===`en-US`)&&m(e)}function dt(e){let t=K.find(t=>String(t)===e);t===void 0||!I.value||(I.value.resourceRefreshSeconds=t)}function ft(e){!I.value||e!==`native`&&e!==`container`||(I.value.graphRuntimeMode=e)}function pt(e){let t=c(`settings.conversationLaunchers.applications.${e}`);return t===`settings.conversationLaunchers.applications.${e}`?ce(e):t}function mt(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 re.global.te(t)?c(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)):`—`}return(r,a)=>(i(),y(`section`,{class:`view settings-view`,"aria-label":g(c)(`settings.aria`)},[_(`div`,ue,[z.value?(i(),b(x,{key:0,variant:`inline`,label:g(c)(`settings.saving`)},null,8,[`label`])):u(``,!0),U.value||F.value?.restartRequired?(i(),y(`div`,de,[U.value?(i(),y(`strong`,fe,l(g(c)(`settings.saved`)),1)):u(``,!0),F.value?.restartRequired?(i(),y(`span`,pe,l(g(c)(`settings.restartCopy`)),1)):u(``,!0)])):u(``,!0),_(`section`,me,[_(`header`,he,[_(`div`,null,[_(`h3`,null,l(g(c)(`settings.resources.title`)),1),L.value?(i(),y(`p`,ge,l(g(c)(`settings.resources.measuredAt`,{time:$(L.value.sampledAt)})),1)):u(``,!0)]),_(`button`,{class:`quiet-button`,type:`button`,disabled:B.value,onClick:q},l(g(c)(`common.actions.refresh`)),9,_e)]),B.value?(i(),b(x,{key:0,variant:L.value?`inline`:`compact`,label:g(c)(`settings.resources.loading`)},null,8,[`variant`,`label`])):u(``,!0),H.value?(i(),y(`p`,ve,l(H.value),1)):L.value?(i(),y(p,{key:2},[_(`div`,ye,[_(`article`,null,[_(`span`,null,l(g(c)(`settings.resources.memory`)),1),_(`strong`,null,l(Z(L.value.memory.usedBytes)),1),_(`small`,null,l(g(c)(`settings.resources.available`,{value:Z(L.value.memory.hostFreeBytes)})),1)]),_(`article`,null,[_(`span`,null,l(g(c)(`settings.resources.disk`)),1),_(`strong`,null,l(Z(L.value.disk.usedBytes)),1),_(`small`,null,l(g(c)(`settings.resources.available`,{value:Z(L.value.disk.hostFreeBytes)})),1)])]),_(`div`,D,[_(`div`,O,[_(`h4`,null,l(g(c)(`settings.resources.memory`)),1),(i(!0),y(p,null,t(L.value.memory.components,e=>(i(),y(`div`,{key:e.id,class:`resource-row`},[_(`div`,null,[_(`span`,null,l(X(e)),1),_(`strong`,null,l(Z(e.bytes)),1)]),_(`i`,null,[_(`b`,{style:h({width:Q(e.bytes,rt.value)})},null,4)])]))),128))]),_(`div`,k,[_(`h4`,null,l(g(c)(`settings.resources.disk`)),1),(i(!0),y(p,null,t(L.value.disk.components,e=>(i(),y(`div`,{key:e.id,class:`resource-row`},[_(`div`,null,[_(`span`,null,l(X(e)),1),_(`strong`,null,l(Z(e.bytes)),1)]),_(`i`,null,[_(`b`,{style:h({width:Q(e.bytes,it.value)})},null,4)])]))),128))])]),_(`div`,A,[_(`span`,null,l(g(c)(`settings.resources.diskMeasuredAt`,{time:$(L.value.disk.measuredAt)})),1),L.value.status===`partial`?(i(),y(`span`,j,l(g(c)(`settings.resources.partial`)),1)):u(``,!0),L.value.disk.temporaryBytes?(i(),y(`span`,M,l(g(c)(`settings.resources.temporary`,{value:Z(L.value.disk.temporaryBytes)})),1)):u(``,!0),_(`span`,null,l(g(c)(L.value.exclusions.includes(`shared-container-vm-overhead`)?`settings.resources.exclusionsContainer`:`settings.resources.exclusionsNative`)),1)])],64)):u(``,!0)]),R.value&&!I.value?(i(),b(x,{key:2,variant:`compact`,label:g(c)(`settings.loading`)},null,8,[`label`])):u(``,!0),I.value?(i(),y(`form`,{key:3,id:`settings-form`,class:`settings-form`,"aria-busy":z.value,onSubmit:te(J,[`prevent`])},[_(`fieldset`,{class:`settings-fields`,disabled:z.value},[_(`section`,be,[_(`header`,xe,[_(`h3`,null,l(g(c)(`settings.ports.title`)),1),F.value?.restartRequired?(i(),y(`span`,Se,l(g(c)(`settings.restartRequired`)),1)):u(``,!0)]),_(`div`,Ce,[_(`h4`,null,l(g(c)(`settings.ports.personal`)),1),_(`div`,we,[(i(),y(p,null,t(Ye,e=>_(`label`,{key:e},[_(`span`,null,l(g(c)(`settings.ports.${e}`)),1),n(_(`input`,{"onUpdate:modelValue":t=>I.value.ports[e]=t,type:`number`,min:`1`,max:`65535`,required:``},null,8,Te),[[f,I.value.ports[e],void 0,{number:!0}]]),_(`small`,null,l(g(c)(`settings.ports.active`,{port:mt(e)})),1)])),64))])]),_(`div`,Ee,[_(`div`,null,[_(`h4`,null,l(g(c)(`settings.ports.development`)),1),_(`span`,null,l(g(c)(`settings.ports.developing`)),1)]),_(`p`,null,l(g(c)(`settings.ports.developmentMeta`)),1)])]),_(`section`,De,[_(`h3`,null,l(g(c)(`settings.conversationLaunchers.title`)),1),_(`div`,Oe,[(i(!0),y(p,null,t(g(Xe),t=>(i(),y(`article`,{key:t,class:`conversation-launcher-row`},[_(`div`,ke,[_(`span`,null,[_(`strong`,null,l(pt(t)),1),_(`small`,null,l(g(c)(`settings.conversationLaunchers.sourceId`,{id:t})),1)]),_(`label`,Ae,[_(`span`,null,l(g(c)(`settings.conversationLaunchers.enabled`)),1),n(_(`input`,{"onUpdate:modelValue":e=>I.value.conversationLaunchers[t].enabled=e,type:`checkbox`,role:`switch`},null,8,je),[[d,I.value.conversationLaunchers[t].enabled]])])]),I.value.conversationLaunchers[t].enabled&&t===`codex`?(i(),y(`small`,Me,l(g(c)(`settings.conversationLaunchers.idFormatMeta`)),1)):u(``,!0),I.value.conversationLaunchers[t].enabled?(i(),y(`div`,Ne,[_(`label`,null,[_(`span`,null,l(g(c)(`settings.conversationLaunchers.idFormat`)),1),v(w,{modelValue:I.value.conversationLaunchers[t].idFormat,"onUpdate:modelValue":e=>I.value.conversationLaunchers[t].idFormat=e,class:`launcher-select`,"control-id":`settings-conversation-${t}-id-format`,options:et.value,label:g(c)(`settings.conversationLaunchers.idFormat`)},null,8,[`modelValue`,`onUpdate:modelValue`,`control-id`,`options`,`label`])]),_(`label`,null,[_(`span`,null,l(g(c)(`settings.conversationLaunchers.appName`)),1),n(_(`input`,{"onUpdate:modelValue":e=>I.value.conversationLaunchers[t].appName=e,type:`text`,maxlength:`64`,required:``},null,8,Pe),[[f,I.value.conversationLaunchers[t].appName,void 0,{trim:!0}]])]),_(`label`,Fe,[_(`span`,null,[e(l(g(c)(`settings.conversationLaunchers.urlTemplate`))+` `,1),a[1]||=_(`small`,null,[_(`code`,null,`{id}`)],-1)]),n(_(`input`,{"onUpdate:modelValue":e=>I.value.conversationLaunchers[t].urlTemplate=e,type:`text`,maxlength:`1024`,spellcheck:`false`,required:``},null,8,Ie),[[f,I.value.conversationLaunchers[t].urlTemplate,void 0,{trim:!0}]])])])):u(``,!0)]))),128))])]),_(`section`,Le,[_(`h3`,null,l(g(c)(`settings.behavior.title`)),1),_(`div`,Re,[_(`label`,ze,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.capture`)),1),_(`small`,null,l(g(c)(`settings.behavior.captureMeta`)),1)]),_(`input`,{type:`checkbox`,role:`switch`,checked:tt.value,onChange:ct},null,40,Be)]),_(`label`,Ve,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.agentAccess`)),1),_(`small`,null,l(g(c)(`settings.behavior.agentAccessMeta`)),1)]),_(`input`,{type:`checkbox`,role:`switch`,checked:nt.value,onChange:lt},null,40,He)]),_(`label`,Ue,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.lanAccess`)),1),_(`small`,null,l(g(c)(`settings.behavior.lanAccessMeta`)),1)]),n(_(`input`,{"onUpdate:modelValue":a[0]||=e=>I.value.lanAccess=e,type:`checkbox`,role:`switch`},null,512),[[d,I.value.lanAccess]])]),_(`div`,We,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.runtimeMode`)),1),_(`small`,null,l(at.value?g(c)(`settings.behavior.runtimeRecommendation`):g(c)(`settings.behavior.runtimeModeMeta`,{mode:g(c)(`settings.behavior.runtimeModes.${F.value?.active.graphRuntimeMode??I.value.graphRuntimeMode}`)})),1)]),v(w,{class:`settings-select`,"control-id":`settings-runtime-mode`,"model-value":I.value.graphRuntimeMode,options:$e.value,label:g(c)(`settings.behavior.runtimeMode`),"onUpdate:modelValue":ft},null,8,[`model-value`,`options`,`label`])]),_(`div`,Ge,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.behavior.language`)),1)]),v(w,{class:`settings-select`,"control-id":`settings-language`,"model-value":G.value,options:Ze.value,label:g(c)(`settings.behavior.language`),"onUpdate:modelValue":ut},null,8,[`model-value`,`options`,`label`])]),_(`div`,Ke,[_(`span`,null,[_(`strong`,null,l(g(c)(`settings.resources.refresh`)),1)]),v(w,{class:`settings-select`,"control-id":`settings-refresh-interval`,"model-value":String(I.value.resourceRefreshSeconds),options:Qe.value,label:g(c)(`settings.resources.refresh`),"onUpdate:modelValue":dt},null,8,[`model-value`,`options`,`label`])])])])],8,P),V.value?(i(),y(`p`,qe,l(V.value),1)):u(``,!0)],40,N)):R.value?u(``,!0):(i(),y(`p`,Je,l(V.value||g(c)(`settings.loadError`)),1))])],8,le))}}),[[`__scopeId`,`data-v-d1c1de43`]]);export{F as default};
@@ -1 +1 @@
1
- import{N as e,T as t,Z as n,_ as r,a as i,at as a,b as o,h as s,nt as c,v as l,x as u,y as d,z as f}from"./i18n-75woNt31.js";import{t as p}from"./GrowthLoading-DFOy-mEl.js";import{t as m}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{m as h}from"./useApi-CROJJdhE-QfNm4ADP.js";import{i as g,n as _,t as v}from"./shared-report-tRQV1iJl.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(t({__name:`SharedJefaReportPage`,setup(t){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;f(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(),u(`main`,y,[l(`header`,null,[n[1]||=l(`strong`,null,`Jefa`,-1),l(`h1`,null,a(c(i)(`employees.share.title`)),1),l(`span`,null,a(c(i)(`employees.share.readOnly`)),1)]),T.value?(e(),d(p,{key:0,label:c(i)(`employees.loadingReport`)},null,8,[`label`])):D.value?(e(),u(`div`,b,[l(`p`,null,a(D.value),1),l(`button`,{type:`button`,onClick:j},a(c(i)(`employees.retry`)),1)])):(e(),u(s,{key:2},[E.value?(e(),u(`p`,x,a(c(i)(`employees.share.unavailableCount`,{count:E.value})),1)):o(``,!0),O.value?(e(),d(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(),u(`div`,S,[l(`h2`,null,a(c(i)(`employees.shareContent.emptyTitle`)),1),l(`p`,null,a(c(i)(`employees.shareContent.emptyReport`,{count:C.value.length})),1),l(`button`,{type:`button`,onClick:j},a(c(i)(`common.actions.refresh`)),1)]))],64))]))}}),[[`__scopeId`,`data-v-0c275c93`]]);export{C as default};
1
+ import{N as e,T as t,Z as n,_ as r,a as i,at as a,b as o,h as s,nt as c,v as l,x as u,y as d,z as f}from"./i18n-CIIxzhPZ.js";import{t as p}from"./GrowthLoading-DIwqGFSc.js";import{t as m}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{m as h}from"./useApi-CROJJdhE-fcdVGInY.js";import{i as g,n as _,t as v}from"./shared-report-Cll2Yj8W.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(t({__name:`SharedJefaReportPage`,setup(t){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;f(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(),u(`main`,y,[l(`header`,null,[n[1]||=l(`strong`,null,`Jefa`,-1),l(`h1`,null,a(c(i)(`employees.share.title`)),1),l(`span`,null,a(c(i)(`employees.share.readOnly`)),1)]),T.value?(e(),d(p,{key:0,label:c(i)(`employees.loadingReport`)},null,8,[`label`])):D.value?(e(),u(`div`,b,[l(`p`,null,a(D.value),1),l(`button`,{type:`button`,onClick:j},a(c(i)(`employees.retry`)),1)])):(e(),u(s,{key:2},[E.value?(e(),u(`p`,x,a(c(i)(`employees.share.unavailableCount`,{count:E.value})),1)):o(``,!0),O.value?(e(),d(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(),u(`div`,S,[l(`h2`,null,a(c(i)(`employees.shareContent.emptyTitle`)),1),l(`p`,null,a(c(i)(`employees.shareContent.emptyReport`,{count:C.value.length})),1),l(`button`,{type:`button`,onClick:j},a(c(i)(`common.actions.refresh`)),1)]))],64))]))}}),[[`__scopeId`,`data-v-0c275c93`]]);export{C as default};
@@ -1 +1 @@
1
- import{C as e,F as t,N as n,T as r,V as i,Z as a,_ as o,a as s,at as c,b as l,h as u,j as ee,nt as d,rt as f,v as p,w as m,x as h,y as g,z as te}from"./i18n-75woNt31.js";import{t as ne}from"./console-hUns2aD-.js";import{t as _}from"./GrowthLoading-DFOy-mEl.js";import{t as v}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as re}from"./vue-router-COCNAJJn.js";import{n as ie}from"./client-InXscj8J.js";import{i as y,n as b,t as x}from"./KnowledgeEditDialog-DBsjlkDr.js";import{u as S,x as ae}from"./model-C1GwBvd9.js";import{t as oe}from"./personal-profile-graph-BdV_3I1u.js";var se={class:`view writing-taste-view`},ce={key:2,class:`writing-taste-unavailable`},le=[`role`],ue={class:`writing-taste-hero__copy`},de={class:`writing-taste-status`},C={class:`writing-taste-hero__score`,"aria-hidden":`true`},w=[`aria-label`],T={"aria-hidden":`true`},E={class:`writing-taste-rules`},D={key:0,class:`writing-taste-rule-list`},O={class:`writing-taste-rule__status`},k={key:0,class:`conflict`},A={class:`writing-taste-rule__body`},j={key:0},M={key:1},N={key:0},P={key:0,class:`writing-taste-rule__actions`},F=[`onClick`],I=[`onClick`],L={key:1,class:`writing-taste-empty`},R={key:0,class:`writing-taste-agent-preview`},z={key:0},B=v(r({__name:`WritingTastePage`,setup(r){let v=ne(),B=a(null),V=a(null),H=a(!1),U=a(!1),W=a(null),G=a(null),K=a(!1),q=0,J=null,Y=y(o(()=>H.value&&!B.value)),X=o(()=>ae(V.value)),Z=o(()=>new Map(X.value.map(e=>[`${e.itemKind}:${e.id}`,e]))),fe=o(()=>B.value?.status===`active`?s(`writingTaste.page.activeTitle`):B.value?.status===`preview_ready`?s(`writingTaste.page.previewTitle`):s(`writingTaste.page.collectingTitle`)),pe=o(()=>B.value?.status===`active`?s(`writingTaste.page.activeCopy`):B.value?.status===`preview_ready`?s(`writingTaste.page.previewCopy`):s(`writingTaste.page.collectingCopy`));te(()=>v.activePersonalSpace?.id,e=>{B.value=null,V.value=null,W.value=null,G.value=null,K.value=!1,Q(e)},{immediate:!0,flush:`sync`});async function Q(e=v.activePersonalSpace?.id){let t=++q;if(J?.abort(),J=null,U.value=!1,!e){H.value=!1;return}let n=new AbortController;J=n,H.value=!0;try{let r=new URLSearchParams({personalSpaceId:e,limit:`500`}),[i,a]=await Promise.all([ie(`/api/writing-taste-profile?${r}`,{signal:n.signal}),oe(e,n.signal)]);if(t!==q)return;B.value=ye(i)?i:null,V.value=be(a)?a:null,ve()}catch{if(t!==q)return;B.value=null,V.value=null,U.value=!0}finally{t===q&&(H.value=!1,J=null)}}ee(()=>{q+=1,J?.abort()});function $(e){return Z.value.get(`${e.item_kind}:${e.item_id}`)??null}function me(e){W.value=$(e)}function he(e){G.value=$(e)}function ge(e){if(e.preference_scope!==`project`||!e.preference_project_id)return s(`writingTaste.page.globalScope`);let t=v.state?.personalProjects?.find(({project_id:t})=>t===e.preference_project_id);return s(`writingTaste.page.projectScope`,{project:t?.profile.name??e.preference_project_id})}function _e(e){return e.key===`conflicts`?s(`writingTaste.criteria.conflictsProgress`,{current:e.current}):s(`writingTaste.criteria.progress`,{current:e.current,target:e.target})}function ve(){W.value&&=Z.value.get(`${W.value.itemKind}:${W.value.id}`)??null,G.value&&=Z.value.get(`${G.value.itemKind}:${G.value.id}`)??null}function ye(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 be(e){if(!e||typeof e!=`object`)return!1;let t=e;return Array.isArray(t.nodes)&&Array.isArray(t.edges)}return(r,a)=>(n(),h(`section`,se,[m(d(re),{class:`writing-taste-back`,to:`/preferences`},{default:i(()=>[a[6]||=p(`span`,{"aria-hidden":`true`},`←`,-1),e(` `+c(d(s)(`writingTaste.page.back`)),1)]),_:1}),H.value&&!d(Y)?(n(),g(_,{key:0,variant:`inline`,label:d(s)(`writingTaste.page.loading`)},null,8,[`label`])):l(``,!0),d(Y)?(n(),g(_,{key:1,label:d(s)(`writingTaste.page.loading`)},null,8,[`label`])):B.value?(n(),h(u,{key:3},[p(`header`,{class:f([`writing-taste-hero`,`status-${B.value.status}`])},[p(`div`,ue,[p(`span`,de,[a[7]||=p(`i`,{"aria-hidden":`true`},null,-1),e(` `+c(d(s)(`writingTaste.status.${B.value.status}`)),1)]),p(`h2`,null,c(fe.value),1),p(`p`,null,c(pe.value),1)]),p(`div`,C,[p(`strong`,null,c(B.value.readiness.rule_count),1),p(`span`,null,`/ `+c(B.value.readiness.thresholds.rule_count),1),p(`small`,null,c(d(s)(`writingTaste.criteria.rules`)),1)])],2),p(`section`,{class:`writing-taste-readiness`,"aria-label":d(s)(`writingTaste.page.readinessAria`)},[(n(!0),h(u,null,t(B.value.readiness.criteria,e=>(n(),h(`article`,{key:e.key,class:f({met:e.met})},[p(`span`,T,c(e.met?`✓`:`·`),1),p(`div`,null,[p(`strong`,null,c(d(s)(`writingTaste.criteria.${e.key}`)),1),p(`small`,null,c(_e(e)),1)])],2))),128))],8,w),p(`section`,E,[p(`header`,null,[p(`h2`,null,c(d(s)(`writingTaste.page.rulesTitle`)),1),p(`span`,null,c(B.value.rules.length),1)]),B.value.rules.length?(n(),h(`div`,D,[(n(!0),h(u,null,t(B.value.rules,e=>(n(),h(`article`,{key:`${e.item_kind}:${e.item_id}`,class:f([`writing-taste-rule`,{"has-conflict":e.has_conflict,"is-hypothesis":e.evidence_status===`Working hypothesis`}])},[p(`div`,O,[p(`span`,{class:f(e.evidence_status.replaceAll(` `,`-`).toLowerCase())},c(d(s)(`writingTaste.evidenceStatus.${e.evidence_status}`)),3),p(`span`,null,c(ge(e)),1),e.has_conflict?(n(),h(`span`,k,c(d(s)(`writingTaste.page.conflict`)),1)):l(``,!0)]),p(`div`,A,[p(`h3`,null,c(e.title),1),p(`p`,null,c(e.instruction),1),e.reason?(n(),h(`small`,j,c(e.reason),1)):l(``,!0),e.contexts.length?(n(),h(`small`,M,c(d(s)(`writingTaste.page.contexts`,{contexts:e.contexts.join(`、`)})),1)):l(``,!0)]),p(`footer`,null,[p(`div`,null,[p(`span`,null,c(d(s)(`writingTaste.page.evidence`,{evidence:e.evidence_count})),1),p(`span`,null,c(d(s)(`writingTaste.page.sessions`,{sessions:e.session_count})),1),e.updated_at?(n(),h(`span`,N,c(d(s)(`writingTaste.page.updated`,{time:d(S)(e.updated_at)})),1)):l(``,!0)]),$(e)?(n(),h(`div`,P,[p(`button`,{class:`secondary-action`,type:`button`,onClick:t=>he(e)},c(d(s)(`writingTaste.page.edit`)),9,F),e.evidence_status===`Confirmed`?l(``,!0):(n(),h(`button`,{key:0,class:`primary-action`,type:`button`,onClick:t=>me(e)},c(d(s)(`writingTaste.page.confirm`)),9,I))])):l(``,!0)])],2))),128))])):(n(),h(`div`,L,c(d(s)(`writingTaste.page.rulesEmpty`)),1))]),B.value.ready&&B.value.agent_markdown?(n(),h(`section`,R,[p(`div`,null,[p(`h2`,null,c(d(s)(`writingTaste.page.agentPreviewTitle`)),1),p(`p`,null,c(d(s)(`writingTaste.page.agentPreviewCopy`)),1)]),p(`button`,{class:`secondary-action`,type:`button`,onClick:a[1]||=e=>K.value=!K.value},c(K.value?d(s)(`writingTaste.page.hideAgentPreview`):d(s)(`writingTaste.page.showAgentPreview`)),1),K.value?(n(),h(`pre`,z,c(B.value.agent_markdown),1)):l(``,!0)])):l(``,!0)],64)):(n(),h(`div`,ce,[p(`p`,{role:U.value?`alert`:void 0},c(d(s)(U.value?`common.errors.loadFailed`:`writingTaste.page.profileUnavailable`)),9,le),d(v).activePersonalSpace?(n(),h(`button`,{key:0,type:`button`,class:`secondary-action`,onClick:a[0]||=e=>Q()},c(d(s)(`common.actions.retry`)),1)):l(``,!0)])),m(x,{item:G.value,"personal-space-id":d(v).activePersonalSpace?.id??``,"personal-project-id":null,projects:d(v).state?.personalProjects??[],"replacement-items":X.value,onClose:a[2]||=e=>G.value=null,onSaved:a[3]||=e=>Q()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),m(b,{item:W.value,"personal-space-id":d(v).activePersonalSpace?.id??``,"personal-project-id":null,onClose:a[4]||=e=>W.value=null,onSaved:a[5]||=e=>Q()},null,8,[`item`,`personal-space-id`])]))}}),[[`__scopeId`,`data-v-4bfe6da0`]]);export{B as default};
1
+ import{C as e,F as t,N as n,T as r,V as i,Z as a,_ as o,a as s,at as c,b as l,h as u,j as ee,nt as d,rt as f,v as p,w as m,x as h,y as g,z as te}from"./i18n-CIIxzhPZ.js";import{t as ne}from"./console-CrhIK67Y.js";import{t as _}from"./GrowthLoading-DIwqGFSc.js";import{t as v}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as re}from"./vue-router-BUX6njIv.js";import{n as ie}from"./client-DTQ_tUr2.js";import{i as y,n as b,t as x}from"./KnowledgeEditDialog-Degd9AGD.js";import{u as S,x as ae}from"./model-CJsrDUNb.js";import{t as oe}from"./personal-profile-graph-CQLOait6.js";var se={class:`view writing-taste-view`},ce={key:2,class:`writing-taste-unavailable`},le=[`role`],ue={class:`writing-taste-hero__copy`},de={class:`writing-taste-status`},C={class:`writing-taste-hero__score`,"aria-hidden":`true`},w=[`aria-label`],T={"aria-hidden":`true`},E={class:`writing-taste-rules`},D={key:0,class:`writing-taste-rule-list`},O={class:`writing-taste-rule__status`},k={key:0,class:`conflict`},A={class:`writing-taste-rule__body`},j={key:0},M={key:1},N={key:0},P={key:0,class:`writing-taste-rule__actions`},F=[`onClick`],I=[`onClick`],L={key:1,class:`writing-taste-empty`},R={key:0,class:`writing-taste-agent-preview`},z={key:0},B=v(r({__name:`WritingTastePage`,setup(r){let v=ne(),B=a(null),V=a(null),H=a(!1),U=a(!1),W=a(null),G=a(null),K=a(!1),q=0,J=null,Y=y(o(()=>H.value&&!B.value)),X=o(()=>ae(V.value)),Z=o(()=>new Map(X.value.map(e=>[`${e.itemKind}:${e.id}`,e]))),fe=o(()=>B.value?.status===`active`?s(`writingTaste.page.activeTitle`):B.value?.status===`preview_ready`?s(`writingTaste.page.previewTitle`):s(`writingTaste.page.collectingTitle`)),pe=o(()=>B.value?.status===`active`?s(`writingTaste.page.activeCopy`):B.value?.status===`preview_ready`?s(`writingTaste.page.previewCopy`):s(`writingTaste.page.collectingCopy`));te(()=>v.activePersonalSpace?.id,e=>{B.value=null,V.value=null,W.value=null,G.value=null,K.value=!1,Q(e)},{immediate:!0,flush:`sync`});async function Q(e=v.activePersonalSpace?.id){let t=++q;if(J?.abort(),J=null,U.value=!1,!e){H.value=!1;return}let n=new AbortController;J=n,H.value=!0;try{let r=new URLSearchParams({personalSpaceId:e,limit:`500`}),[i,a]=await Promise.all([ie(`/api/writing-taste-profile?${r}`,{signal:n.signal}),oe(e,n.signal)]);if(t!==q)return;B.value=ye(i)?i:null,V.value=be(a)?a:null,ve()}catch{if(t!==q)return;B.value=null,V.value=null,U.value=!0}finally{t===q&&(H.value=!1,J=null)}}ee(()=>{q+=1,J?.abort()});function $(e){return Z.value.get(`${e.item_kind}:${e.item_id}`)??null}function me(e){W.value=$(e)}function he(e){G.value=$(e)}function ge(e){if(e.preference_scope!==`project`||!e.preference_project_id)return s(`writingTaste.page.globalScope`);let t=v.state?.personalProjects?.find(({project_id:t})=>t===e.preference_project_id);return s(`writingTaste.page.projectScope`,{project:t?.profile.name??e.preference_project_id})}function _e(e){return e.key===`conflicts`?s(`writingTaste.criteria.conflictsProgress`,{current:e.current}):s(`writingTaste.criteria.progress`,{current:e.current,target:e.target})}function ve(){W.value&&=Z.value.get(`${W.value.itemKind}:${W.value.id}`)??null,G.value&&=Z.value.get(`${G.value.itemKind}:${G.value.id}`)??null}function ye(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 be(e){if(!e||typeof e!=`object`)return!1;let t=e;return Array.isArray(t.nodes)&&Array.isArray(t.edges)}return(r,a)=>(n(),h(`section`,se,[m(d(re),{class:`writing-taste-back`,to:`/preferences`},{default:i(()=>[a[6]||=p(`span`,{"aria-hidden":`true`},`←`,-1),e(` `+c(d(s)(`writingTaste.page.back`)),1)]),_:1}),H.value&&!d(Y)?(n(),g(_,{key:0,variant:`inline`,label:d(s)(`writingTaste.page.loading`)},null,8,[`label`])):l(``,!0),d(Y)?(n(),g(_,{key:1,label:d(s)(`writingTaste.page.loading`)},null,8,[`label`])):B.value?(n(),h(u,{key:3},[p(`header`,{class:f([`writing-taste-hero`,`status-${B.value.status}`])},[p(`div`,ue,[p(`span`,de,[a[7]||=p(`i`,{"aria-hidden":`true`},null,-1),e(` `+c(d(s)(`writingTaste.status.${B.value.status}`)),1)]),p(`h2`,null,c(fe.value),1),p(`p`,null,c(pe.value),1)]),p(`div`,C,[p(`strong`,null,c(B.value.readiness.rule_count),1),p(`span`,null,`/ `+c(B.value.readiness.thresholds.rule_count),1),p(`small`,null,c(d(s)(`writingTaste.criteria.rules`)),1)])],2),p(`section`,{class:`writing-taste-readiness`,"aria-label":d(s)(`writingTaste.page.readinessAria`)},[(n(!0),h(u,null,t(B.value.readiness.criteria,e=>(n(),h(`article`,{key:e.key,class:f({met:e.met})},[p(`span`,T,c(e.met?`✓`:`·`),1),p(`div`,null,[p(`strong`,null,c(d(s)(`writingTaste.criteria.${e.key}`)),1),p(`small`,null,c(_e(e)),1)])],2))),128))],8,w),p(`section`,E,[p(`header`,null,[p(`h2`,null,c(d(s)(`writingTaste.page.rulesTitle`)),1),p(`span`,null,c(B.value.rules.length),1)]),B.value.rules.length?(n(),h(`div`,D,[(n(!0),h(u,null,t(B.value.rules,e=>(n(),h(`article`,{key:`${e.item_kind}:${e.item_id}`,class:f([`writing-taste-rule`,{"has-conflict":e.has_conflict,"is-hypothesis":e.evidence_status===`Working hypothesis`}])},[p(`div`,O,[p(`span`,{class:f(e.evidence_status.replaceAll(` `,`-`).toLowerCase())},c(d(s)(`writingTaste.evidenceStatus.${e.evidence_status}`)),3),p(`span`,null,c(ge(e)),1),e.has_conflict?(n(),h(`span`,k,c(d(s)(`writingTaste.page.conflict`)),1)):l(``,!0)]),p(`div`,A,[p(`h3`,null,c(e.title),1),p(`p`,null,c(e.instruction),1),e.reason?(n(),h(`small`,j,c(e.reason),1)):l(``,!0),e.contexts.length?(n(),h(`small`,M,c(d(s)(`writingTaste.page.contexts`,{contexts:e.contexts.join(`、`)})),1)):l(``,!0)]),p(`footer`,null,[p(`div`,null,[p(`span`,null,c(d(s)(`writingTaste.page.evidence`,{evidence:e.evidence_count})),1),p(`span`,null,c(d(s)(`writingTaste.page.sessions`,{sessions:e.session_count})),1),e.updated_at?(n(),h(`span`,N,c(d(s)(`writingTaste.page.updated`,{time:d(S)(e.updated_at)})),1)):l(``,!0)]),$(e)?(n(),h(`div`,P,[p(`button`,{class:`secondary-action`,type:`button`,onClick:t=>he(e)},c(d(s)(`writingTaste.page.edit`)),9,F),e.evidence_status===`Confirmed`?l(``,!0):(n(),h(`button`,{key:0,class:`primary-action`,type:`button`,onClick:t=>me(e)},c(d(s)(`writingTaste.page.confirm`)),9,I))])):l(``,!0)])],2))),128))])):(n(),h(`div`,L,c(d(s)(`writingTaste.page.rulesEmpty`)),1))]),B.value.ready&&B.value.agent_markdown?(n(),h(`section`,R,[p(`div`,null,[p(`h2`,null,c(d(s)(`writingTaste.page.agentPreviewTitle`)),1),p(`p`,null,c(d(s)(`writingTaste.page.agentPreviewCopy`)),1)]),p(`button`,{class:`secondary-action`,type:`button`,onClick:a[1]||=e=>K.value=!K.value},c(K.value?d(s)(`writingTaste.page.hideAgentPreview`):d(s)(`writingTaste.page.showAgentPreview`)),1),K.value?(n(),h(`pre`,z,c(B.value.agent_markdown),1)):l(``,!0)])):l(``,!0)],64)):(n(),h(`div`,ce,[p(`p`,{role:U.value?`alert`:void 0},c(d(s)(U.value?`common.errors.loadFailed`:`writingTaste.page.profileUnavailable`)),9,le),d(v).activePersonalSpace?(n(),h(`button`,{key:0,type:`button`,class:`secondary-action`,onClick:a[0]||=e=>Q()},c(d(s)(`common.actions.retry`)),1)):l(``,!0)])),m(x,{item:G.value,"personal-space-id":d(v).activePersonalSpace?.id??``,"personal-project-id":null,projects:d(v).state?.personalProjects??[],"replacement-items":X.value,onClose:a[2]||=e=>G.value=null,onSaved:a[3]||=e=>Q()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),m(b,{item:W.value,"personal-space-id":d(v).activePersonalSpace?.id??``,"personal-project-id":null,onClose:a[4]||=e=>W.value=null,onSaved:a[5]||=e=>Q()},null,8,[`item`,`personal-space-id`])]))}}),[[`__scopeId`,`data-v-4bfe6da0`]]);export{B as default};
@@ -1 +1 @@
1
- import{Z as e,a as t,z as n}from"./i18n-75woNt31.js";import{n as r}from"./client-InXscj8J.js";import{t as i}from"./task-evidence-BUu7yYIn.js";function a(a){let o=e([]),s=e(!1),c=e(``),l=0;async function u(){let e=++l,n=a.value;if(o.value=[],c.value=``,!a.value){s.value=!1;return}s.value=!0;try{let t=await r(`/api/project-agents?${new URLSearchParams({personalSpaceId:n})}`);if(e!==l)return;o.value=i(t).filter(e=>!!(e&&typeof e==`object`&&`agentId`in e&&`profile`in e&&`personalSpaceId`in e&&e.personalSpaceId===n))}catch(n){e===l&&(c.value=n instanceof Error?n.message:t(`agentProfiles.loadError`))}finally{e===l&&(s.value=!1)}}return n(a,u,{immediate:!0}),{agents:o,loading:s,error:c,load:u}}export{a as t};
1
+ import{Z as e,a as t,z as n}from"./i18n-CIIxzhPZ.js";import{n as r}from"./client-DTQ_tUr2.js";import{t as i}from"./task-evidence-DTiPCs7r.js";function a(a){let o=e([]),s=e(!1),c=e(``),l=0;async function u(){let e=++l,n=a.value;if(o.value=[],c.value=``,!a.value){s.value=!1;return}s.value=!0;try{let t=await r(`/api/project-agents?${new URLSearchParams({personalSpaceId:n})}`);if(e!==l)return;o.value=i(t).filter(e=>!!(e&&typeof e==`object`&&`agentId`in e&&`profile`in e&&`personalSpaceId`in e&&e.personalSpaceId===n))}catch(n){e===l&&(c.value=n instanceof Error?n.message:t(`agentProfiles.loadError`))}finally{e===l&&(s.value=!1)}}return n(a,u,{immediate:!0}),{agents:o,loading:s,error:c,load:u}}export{a as t};
@@ -1 +1 @@
1
- import{Z as e,a as t}from"./i18n-75woNt31.js";import{n}from"./client-InXscj8J.js";function r(e){let t=/^employee\.([a-z][a-z0-9-]{0,63})$/.exec(e.agentId)?.[1];return t&&e.profile.capabilities.includes(`fuli.employee:${t}`)?t:null}var i=e([]),a=e(!1),o=e(``),s=``,c=null,l=0;async function u(e){if(!e)return[];let t=await n(`/api/employee-templates?${new URLSearchParams({personalSpaceId:e})}`);return Array.isArray(t.templates)?t.templates:[]}function d(e){if(e===s&&c)return c;let t=++l;return e!==s&&(i.value=[]),s=e,o.value=``,e?(a.value=!0,c=u(e).then(e=>{t===l&&(i.value=e)}).catch(e=>{t===l&&(i.value=[],o.value=f(e))}).finally(()=>{t===l&&(a.value=!1,c=null)}),c):(i.value=[],a.value=!1,Promise.resolve())}function f(e){let n=e instanceof Error?e.message:``;try{let e=JSON.parse(n);return e.code&&[`runtime_unavailable`,`assignment_required`,`project_not_found`,`identity_conflict`,`reactivation_required`,`assignment_scope_conflict`,`assignment_update_incomplete`].includes(e.code)?t(`employees.errors.${e.code}`):e.error||t(`employees.loadError`)}catch{return n||t(`employees.loadError`)}}export{i as a,r as i,a as n,u as o,f as r,d as s,o as t};
1
+ import{Z as e,a as t}from"./i18n-CIIxzhPZ.js";import{n}from"./client-DTQ_tUr2.js";function r(e){let t=/^employee\.([a-z][a-z0-9-]{0,63})$/.exec(e.agentId)?.[1];return t&&e.profile.capabilities.includes(`fuli.employee:${t}`)?t:null}var i=e([]),a=e(!1),o=e(``),s=``,c=null,l=0;async function u(e){if(!e)return[];let t=await n(`/api/employee-templates?${new URLSearchParams({personalSpaceId:e})}`);return Array.isArray(t.templates)?t.templates:[]}function d(e){if(e===s&&c)return c;let t=++l;return e!==s&&(i.value=[]),s=e,o.value=``,e?(a.value=!0,c=u(e).then(e=>{t===l&&(i.value=e)}).catch(e=>{t===l&&(i.value=[],o.value=f(e))}).finally(()=>{t===l&&(a.value=!1,c=null)}),c):(i.value=[],a.value=!1,Promise.resolve())}function f(e){let n=e instanceof Error?e.message:``;try{let e=JSON.parse(n);return e.code&&[`runtime_unavailable`,`assignment_required`,`project_not_found`,`identity_conflict`,`reactivation_required`,`assignment_scope_conflict`,`assignment_update_incomplete`].includes(e.code)?t(`employees.errors.${e.code}`):e.error||t(`employees.loadError`)}catch{return n||t(`employees.loadError`)}}export{i as a,r as i,a as n,u as o,f as r,d as s,o as t};
@@ -1 +1 @@
1
- import{a as e}from"./i18n-75woNt31.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
+ import{a as e}from"./i18n-CIIxzhPZ.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 +1 @@
1
- import{$ as e,A as t,D as n,G as r,J as i,K as a,O as o,U as s,W as c,Y as l,Z as u,_ as d,a as f,et as p,q as m,tt as h,z as g}from"./i18n-75woNt31.js";import{n as _,r as v}from"./client-InXscj8J.js";var y=typeof window<`u`,b,x=e=>b=e,S=Symbol();function C(e){return e&&typeof e==`object`&&Object.prototype.toString.call(e)===`[object Object]`&&typeof e.toJSON!=`function`}var w=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof global==`object`&&global.global===global?global:typeof globalThis==`object`?globalThis:{HTMLElement:null};function T(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([``,e],{type:e.type}):e}function E(e,t,n){let r=new XMLHttpRequest;r.open(`GET`,e),r.responseType=`blob`,r.onload=function(){j(r.response,t,n)},r.onerror=function(){console.error(`could not download file`)},r.send()}function D(e){let t=new XMLHttpRequest;t.open(`HEAD`,e,!1);try{t.send()}catch{}return t.status>=200&&t.status<=299}function O(e){try{e.dispatchEvent(new MouseEvent(`click`))}catch{let t=new MouseEvent(`click`,{bubbles:!0,cancelable:!0,view:window,detail:0,screenX:80,screenY:20,clientX:80,clientY:20,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null});e.dispatchEvent(t)}}var k=typeof navigator==`object`?navigator:{userAgent:``},A=/Macintosh/.test(k.userAgent)&&/AppleWebKit/.test(k.userAgent)&&!/Safari/.test(k.userAgent),j=y?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!A?M:`msSaveOrOpenBlob`in k?N:P:()=>{};function M(e,t=`download`,n){let r=document.createElement(`a`);r.download=t,r.rel=`noopener`,typeof e==`string`?(r.href=e,r.origin===location.origin?O(r):D(r.href)?E(e,t,n):(r.target=`_blank`,O(r))):(r.href=URL.createObjectURL(e),setTimeout(function(){URL.revokeObjectURL(r.href)},4e4),setTimeout(function(){O(r)},0))}function N(e,t=`download`,n){if(typeof e==`string`)if(D(e))E(e,t,n);else{let t=document.createElement(`a`);t.href=e,t.target=`_blank`,setTimeout(function(){O(t)})}else navigator.msSaveOrOpenBlob(T(e,n),t)}function P(e,t,n,r){if(r||=open(``,`_blank`),r&&(r.document.title=r.document.body.innerText=`downloading...`),typeof e==`string`)return E(e,t,n);let i=e.type===`application/octet-stream`,a=/constructor/i.test(String(w.HTMLElement))||`safari`in w,o=/CriOS\/[\d]+/.test(navigator.userAgent);if((o||i&&a||A)&&typeof FileReader<`u`){let t=new FileReader;t.onloadend=function(){let e=t.result;if(typeof e!=`string`)throw r=null,Error(`Wrong reader.result type`);e=o?e:e.replace(/^data:[^;]*;/,`data:attachment/file;`),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{let t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout(function(){URL.revokeObjectURL(t)},4e4)}}var{assign:F}=Object;function I(){let e=s(!0),t=e.run(()=>u({})),n=[],r=[],i=m({install(e){x(i),i._a=e,e.provide(S,i),e.config.globalProperties.$pinia=i,r.forEach(e=>n.push(e)),r=[]},use(e){return this._a?n.push(e):r.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}var L=()=>{};function R(e,t,n,r=L){e.add(t);let a=()=>{e.delete(t)&&r()};return!n&&c()&&i(a),a}function z(e,...t){e.forEach(e=>{e(...t)})}var B=e=>e(),V=Symbol(),H=Symbol();function U(e,t){e instanceof Map&&t instanceof Map?t.forEach((t,n)=>e.set(n,t)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(let n in t){if(!Object.hasOwn(t,n))continue;let i=t[n],o=e[n];C(o)&&C(i)&&Object.hasOwn(e,n)&&!a(i)&&!r(i)?e[n]=U(o,i):e[n]=i}return e}var W=Symbol();function G(e){return!e||typeof e!=`object`||!Object.hasOwn(e,W)}var{assign:K}=Object;function q(e){return!!(a(e)&&e.effect)}function J(e,t,n,r){let{state:i,actions:a,getters:o}=t,s=n.state.value[e],c;function l(){return s||(n.state.value[e]=i?i():{}),K(h(n.state.value[e]),a,Object.keys(o||{}).reduce((t,r)=>(t[r]=m(d(()=>{x(n);let t=n._s.get(e);return o[r].call(t,t)})),t),{}))}return c=Y(e,l,t,n,r,!0),c}function Y(e,n,i={},o,c,u){let d,f=K({actions:{}},i),m={deep:!0},h,_,v=new Set,y=new Set,b=o.state.value[e];!u&&!b&&(o.state.value[e]={});let S;function C(n){let r;h=_=!1,typeof n==`function`?(n(o.state.value[e]),r={type:`patch function`,storeId:e,events:void 0}):(U(o.state.value[e],n),r={type:`patch object`,payload:n,storeId:e,events:void 0});let i=S=Symbol();t().then(()=>{S===i&&(h=!0)}),_=!0,z(v,r,o.state.value[e])}let w=u?function(){let{state:e}=i,t=e?e():{};this.$patch(e=>{K(e,t)})}:L;function T(){d.stop(),v.clear(),y.clear(),o._s.delete(e)}let E=(t,n=``)=>{if(V in t)return t[H]=n,t;let r=function(){x(o);let n=Array.from(arguments),i=new Set,a=new Set;function s(e){i.add(e)}function c(e){a.add(e)}z(y,{args:n,name:r[H],store:D,after:s,onError:c});let l;try{l=t.apply(this&&this.$id===e?this:D,n)}catch(e){throw z(a,e),e}return l instanceof Promise?l.then(e=>(z(i,e),e)).catch(e=>(z(a,e),Promise.reject(e))):(z(i,l),l)};return r[V]=!0,r[H]=n,r},D=l({_p:o,$id:e,$onAction:R.bind(null,y),$patch:C,$reset:w,$subscribe(t,n={}){if(v.has(t))return L;let r=R(v,t,n.detached,()=>i()),i=d.run(()=>g(()=>o.state.value[e],r=>{(n.flush===`sync`?_:h)&&t({storeId:e,type:`direct`,events:void 0},r)},K({},m,n)));return r},$dispose:T});o._s.set(e,D);let O=(o._a&&o._a.runWithContext||B)(()=>o._e.run(()=>(d=s()).run(()=>n({action:E}))));for(let t in O){let n=O[t];a(n)&&!q(n)||r(n)?u||(b&&G(n)&&(a(n)?n.value=b[t]:U(n,b[t])),o.state.value[e][t]=n):typeof n==`function`&&(O[t]=E(n,t),f.actions[t]=n)}return K(D,O),K(p(D),O),Object.defineProperty(D,"$state",{get:()=>o.state.value[e],set:e=>{C(t=>{K(t,e)})}}),o._p.forEach(e=>{let t=d.run(()=>e({store:D,app:o._a,pinia:o,options:f}));K(D,t)}),b&&u&&i.hydrate&&i.hydrate(D.$state,b),h=!0,_=!0,D}function X(e,t,r){let i,a=typeof t==`function`;i=a?r:t;function s(r,s){let c=n();return r||=c?o(S,null):null,r&&x(r),r=b,r._s.has(e)||(a?Y(e,t,i,r):J(e,i,r)),r._s.get(e)}return s.$id=e,s}var Z=X(`console`,()=>{let t=e(null),n=u(`idle`),r=u(!1),i=u(null),a=d(()=>{let e=t.value;return e?e.personalSpaces.find(({id:t})=>t===e.activePersonalSpaceId)??e.personalSpaces[0]??null:null}),o=d(()=>t.value?.mode===`connected`?`ready`:t.value?.mode===`degraded`?`error`:`disconnected`);async function s(){n.value=`loading`;try{t.value=await _(`/api/state`),n.value=`ready`}catch(e){n.value=`error`,h(e)}}async function c(e){try{let n=await v(`/api/capture-policy`,{enabled:e});t.value&&={...t.value,capturePolicy:n},m(f(e?`console.captureNotices.enabled`:`console.captureNotices.disabled`))}catch(e){h(e)}}async function l(e){try{let n=await v(`/api/agent-access-policy`,{enabled:e});t.value&&={...t.value,agentAccessPolicy:n},m(f(e?`console.agentAccess.enabledNotice`:`console.agentAccess.disabledNotice`))}catch(e){h(e)}}function p(e){return t.value?.capabilities?.[e]===!0}function m(e){i.value={message:e,tone:`success`}}function h(e){i.value={message:e instanceof Error?e.message:f(`common.errors.operationFailed`),tone:`error`}}function g(){i.value=null}return{state:t,runtimeStatus:n,settingsSaving:r,feedback:i,activePersonalSpace:a,publicRuntimeStatus:o,refresh:s,updateCapturePolicy:c,updateAgentAccessPolicy:l,hasCapability:p,notify:m,reportError:h,clearFeedback:g}});export{I as n,X as r,Z as t};
1
+ import{$ as e,A as t,D as n,G as r,J as i,K as a,O as o,U as s,W as c,Y as l,Z as u,_ as d,a as f,et as p,q as m,tt as h,z as g}from"./i18n-CIIxzhPZ.js";import{n as _,r as v}from"./client-DTQ_tUr2.js";var y=typeof window<`u`,b,x=e=>b=e,S=Symbol();function C(e){return e&&typeof e==`object`&&Object.prototype.toString.call(e)===`[object Object]`&&typeof e.toJSON!=`function`}var w=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof global==`object`&&global.global===global?global:typeof globalThis==`object`?globalThis:{HTMLElement:null};function T(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([``,e],{type:e.type}):e}function E(e,t,n){let r=new XMLHttpRequest;r.open(`GET`,e),r.responseType=`blob`,r.onload=function(){j(r.response,t,n)},r.onerror=function(){console.error(`could not download file`)},r.send()}function D(e){let t=new XMLHttpRequest;t.open(`HEAD`,e,!1);try{t.send()}catch{}return t.status>=200&&t.status<=299}function O(e){try{e.dispatchEvent(new MouseEvent(`click`))}catch{let t=new MouseEvent(`click`,{bubbles:!0,cancelable:!0,view:window,detail:0,screenX:80,screenY:20,clientX:80,clientY:20,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null});e.dispatchEvent(t)}}var k=typeof navigator==`object`?navigator:{userAgent:``},A=/Macintosh/.test(k.userAgent)&&/AppleWebKit/.test(k.userAgent)&&!/Safari/.test(k.userAgent),j=y?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!A?M:`msSaveOrOpenBlob`in k?N:P:()=>{};function M(e,t=`download`,n){let r=document.createElement(`a`);r.download=t,r.rel=`noopener`,typeof e==`string`?(r.href=e,r.origin===location.origin?O(r):D(r.href)?E(e,t,n):(r.target=`_blank`,O(r))):(r.href=URL.createObjectURL(e),setTimeout(function(){URL.revokeObjectURL(r.href)},4e4),setTimeout(function(){O(r)},0))}function N(e,t=`download`,n){if(typeof e==`string`)if(D(e))E(e,t,n);else{let t=document.createElement(`a`);t.href=e,t.target=`_blank`,setTimeout(function(){O(t)})}else navigator.msSaveOrOpenBlob(T(e,n),t)}function P(e,t,n,r){if(r||=open(``,`_blank`),r&&(r.document.title=r.document.body.innerText=`downloading...`),typeof e==`string`)return E(e,t,n);let i=e.type===`application/octet-stream`,a=/constructor/i.test(String(w.HTMLElement))||`safari`in w,o=/CriOS\/[\d]+/.test(navigator.userAgent);if((o||i&&a||A)&&typeof FileReader<`u`){let t=new FileReader;t.onloadend=function(){let e=t.result;if(typeof e!=`string`)throw r=null,Error(`Wrong reader.result type`);e=o?e:e.replace(/^data:[^;]*;/,`data:attachment/file;`),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{let t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout(function(){URL.revokeObjectURL(t)},4e4)}}var{assign:F}=Object;function I(){let e=s(!0),t=e.run(()=>u({})),n=[],r=[],i=m({install(e){x(i),i._a=e,e.provide(S,i),e.config.globalProperties.$pinia=i,r.forEach(e=>n.push(e)),r=[]},use(e){return this._a?n.push(e):r.push(e),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return i}var L=()=>{};function R(e,t,n,r=L){e.add(t);let a=()=>{e.delete(t)&&r()};return!n&&c()&&i(a),a}function z(e,...t){e.forEach(e=>{e(...t)})}var B=e=>e(),V=Symbol(),H=Symbol();function U(e,t){e instanceof Map&&t instanceof Map?t.forEach((t,n)=>e.set(n,t)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(let n in t){if(!Object.hasOwn(t,n))continue;let i=t[n],o=e[n];C(o)&&C(i)&&Object.hasOwn(e,n)&&!a(i)&&!r(i)?e[n]=U(o,i):e[n]=i}return e}var W=Symbol();function G(e){return!e||typeof e!=`object`||!Object.hasOwn(e,W)}var{assign:K}=Object;function q(e){return!!(a(e)&&e.effect)}function J(e,t,n,r){let{state:i,actions:a,getters:o}=t,s=n.state.value[e],c;function l(){return s||(n.state.value[e]=i?i():{}),K(h(n.state.value[e]),a,Object.keys(o||{}).reduce((t,r)=>(t[r]=m(d(()=>{x(n);let t=n._s.get(e);return o[r].call(t,t)})),t),{}))}return c=Y(e,l,t,n,r,!0),c}function Y(e,n,i={},o,c,u){let d,f=K({actions:{}},i),m={deep:!0},h,_,v=new Set,y=new Set,b=o.state.value[e];!u&&!b&&(o.state.value[e]={});let S;function C(n){let r;h=_=!1,typeof n==`function`?(n(o.state.value[e]),r={type:`patch function`,storeId:e,events:void 0}):(U(o.state.value[e],n),r={type:`patch object`,payload:n,storeId:e,events:void 0});let i=S=Symbol();t().then(()=>{S===i&&(h=!0)}),_=!0,z(v,r,o.state.value[e])}let w=u?function(){let{state:e}=i,t=e?e():{};this.$patch(e=>{K(e,t)})}:L;function T(){d.stop(),v.clear(),y.clear(),o._s.delete(e)}let E=(t,n=``)=>{if(V in t)return t[H]=n,t;let r=function(){x(o);let n=Array.from(arguments),i=new Set,a=new Set;function s(e){i.add(e)}function c(e){a.add(e)}z(y,{args:n,name:r[H],store:D,after:s,onError:c});let l;try{l=t.apply(this&&this.$id===e?this:D,n)}catch(e){throw z(a,e),e}return l instanceof Promise?l.then(e=>(z(i,e),e)).catch(e=>(z(a,e),Promise.reject(e))):(z(i,l),l)};return r[V]=!0,r[H]=n,r},D=l({_p:o,$id:e,$onAction:R.bind(null,y),$patch:C,$reset:w,$subscribe(t,n={}){if(v.has(t))return L;let r=R(v,t,n.detached,()=>i()),i=d.run(()=>g(()=>o.state.value[e],r=>{(n.flush===`sync`?_:h)&&t({storeId:e,type:`direct`,events:void 0},r)},K({},m,n)));return r},$dispose:T});o._s.set(e,D);let O=(o._a&&o._a.runWithContext||B)(()=>o._e.run(()=>(d=s()).run(()=>n({action:E}))));for(let t in O){let n=O[t];a(n)&&!q(n)||r(n)?u||(b&&G(n)&&(a(n)?n.value=b[t]:U(n,b[t])),o.state.value[e][t]=n):typeof n==`function`&&(O[t]=E(n,t),f.actions[t]=n)}return K(D,O),K(p(D),O),Object.defineProperty(D,"$state",{get:()=>o.state.value[e],set:e=>{C(t=>{K(t,e)})}}),o._p.forEach(e=>{let t=d.run(()=>e({store:D,app:o._a,pinia:o,options:f}));K(D,t)}),b&&u&&i.hydrate&&i.hydrate(D.$state,b),h=!0,_=!0,D}function X(e,t,r){let i,a=typeof t==`function`;i=a?r:t;function s(r,s){let c=n();return r||=c?o(S,null):null,r&&x(r),r=b,r._s.has(e)||(a?Y(e,t,i,r):J(e,i,r)),r._s.get(e)}return s.$id=e,s}var Z=X(`console`,()=>{let t=e(null),n=u(`idle`),r=u(!1),i=u(null),a=d(()=>{let e=t.value;return e?e.personalSpaces.find(({id:t})=>t===e.activePersonalSpaceId)??e.personalSpaces[0]??null:null}),o=d(()=>t.value?.mode===`connected`?`ready`:t.value?.mode===`degraded`?`error`:`disconnected`);async function s(){n.value=`loading`;try{t.value=await _(`/api/state`),n.value=`ready`}catch(e){n.value=`error`,h(e)}}async function c(e){try{let n=await v(`/api/capture-policy`,{enabled:e});t.value&&={...t.value,capturePolicy:n},m(f(e?`console.captureNotices.enabled`:`console.captureNotices.disabled`))}catch(e){h(e)}}async function l(e){try{let n=await v(`/api/agent-access-policy`,{enabled:e});t.value&&={...t.value,agentAccessPolicy:n},m(f(e?`console.agentAccess.enabledNotice`:`console.agentAccess.disabledNotice`))}catch(e){h(e)}}function p(e){return t.value?.capabilities?.[e]===!0}function m(e){i.value={message:e,tone:`success`}}function h(e){i.value={message:e instanceof Error?e.message:f(`common.errors.operationFailed`),tone:`error`}}function g(){i.value=null}return{state:t,runtimeStatus:n,settingsSaving:r,feedback:i,activePersonalSpace:a,publicRuntimeStatus:o,refresh:s,updateCapturePolicy:c,updateAgentAccessPolicy:l,hasCapability:p,notify:m,reportError:h,clearFeedback:g}});export{I as n,X as r,Z as t};
@@ -1 +1 @@
1
- import{$ as e,X as t,a as n}from"./i18n-75woNt31.js";import{n as r}from"./client-InXscj8J.js";var i=[`codex`,`claude`,`claude_code`,`cursor`,`gemini_cli`,`kiro`,`other`],a={codex:`Codex`,claude:`Claude`,claude_code:`Claude Code`,cursor:`Cursor`,gemini_cli:`Gemini CLI`,kiro:`Kiro`,other:`Other Agent`},o=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,s=/^[^\u0000-\u001f\u007f]{1,512}$/,c=new Set([`about`,`blob`,`data`,`file`,`javascript`]),l={codex:{enabled:!0,idFormat:`uuid`,appName:`Codex`,urlTemplate:`codex://threads/{id}`},claude:{enabled:!1,idFormat:`any`,appName:`Claude`,urlTemplate:``},claude_code:{enabled:!1,idFormat:`any`,appName:`Claude Code`,urlTemplate:``},cursor:{enabled:!1,idFormat:`any`,appName:`Cursor`,urlTemplate:``},gemini_cli:{enabled:!1,idFormat:`any`,appName:`Gemini CLI`,urlTemplate:``},kiro:{enabled:!1,idFormat:`any`,appName:`Kiro`,urlTemplate:``},other:{enabled:!1,idFormat:`any`,appName:`Other Agent`,urlTemplate:``}};function u(e={}){let t=e.source_application?.trim().toLocaleLowerCase().replaceAll(`-`,`_`).replaceAll(` `,`_`);if(t&&a[t])return t;let n=`${e.source_kind??``} ${e.source_description??``}`.toLocaleLowerCase();return n.includes(`claude`)?`claude_code`:n.includes(`cursor`)?`cursor`:n.includes(`gemini`)?`gemini_cli`:n.includes(`kiro`)?`kiro`:n.includes(`codex`)?`codex`:`other`}function d(e){let t=u(e);return t===`other`?n(`knowledge.domain.actors.otherAgent`):a[t]}function f(e){return a[e]}function p(e={},t=l){if(m(e,t)!==`available`)return null;let n=t[u(e)],r=e.session_id.trim();return n.urlTemplate.replace(`{id}`,encodeURIComponent(r))}function m(e={},t=l){let n=t[u(e)];return n?.enabled?_(e.session_id?.trim()??``,n.idFormat)?v(n.urlTemplate)?`available`:`invalid_template`:`invalid_id`:`disabled`}function h(e={},t=l){let n=t[u(e)];return n?.enabled&&n.appName.trim()?n.appName.trim():null}async function g(e={},t=globalThis.navigator?.clipboard){return!e.session_id||!t?.writeText?!1:(await t.writeText(e.session_id),!0)}function _(e,t){return s.test(e)?t===`any`||o.test(e):!1}function v(e){if(e.split(`{id}`).length!==2||/\s/.test(e))return!1;let t=/^([a-z][a-z0-9+.-]*):/i.exec(e)?.[1]?.toLocaleLowerCase();return!!t&&!c.has(t)}var y=e(w(l)),b=null;function x(){return C(),t(y)}function S(e){y.value=w(e)}function C({force:e=!1}={}){return!e&&b||(b=r(`/api/system/settings`).then(e=>{S(e.configured.conversationLaunchers)}).catch(()=>void 0)),b}function w(e){return Object.fromEntries(i.map(t=>[t,{...l[t],...e?.[t]??{}}]))}export{g as a,h as c,i,p as l,S as n,d as o,x as r,f as s,w as t};
1
+ import{$ as e,X as t,a as n}from"./i18n-CIIxzhPZ.js";import{n as r}from"./client-DTQ_tUr2.js";var i=[`codex`,`claude`,`claude_code`,`cursor`,`gemini_cli`,`kiro`,`other`],a={codex:`Codex`,claude:`Claude`,claude_code:`Claude Code`,cursor:`Cursor`,gemini_cli:`Gemini CLI`,kiro:`Kiro`,other:`Other Agent`},o=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,s=/^[^\u0000-\u001f\u007f]{1,512}$/,c=new Set([`about`,`blob`,`data`,`file`,`javascript`]),l={codex:{enabled:!0,idFormat:`uuid`,appName:`Codex`,urlTemplate:`codex://threads/{id}`},claude:{enabled:!1,idFormat:`any`,appName:`Claude`,urlTemplate:``},claude_code:{enabled:!1,idFormat:`any`,appName:`Claude Code`,urlTemplate:``},cursor:{enabled:!1,idFormat:`any`,appName:`Cursor`,urlTemplate:``},gemini_cli:{enabled:!1,idFormat:`any`,appName:`Gemini CLI`,urlTemplate:``},kiro:{enabled:!1,idFormat:`any`,appName:`Kiro`,urlTemplate:``},other:{enabled:!1,idFormat:`any`,appName:`Other Agent`,urlTemplate:``}};function u(e={}){let t=e.source_application?.trim().toLocaleLowerCase().replaceAll(`-`,`_`).replaceAll(` `,`_`);if(t&&a[t])return t;let n=`${e.source_kind??``} ${e.source_description??``}`.toLocaleLowerCase();return n.includes(`claude`)?`claude_code`:n.includes(`cursor`)?`cursor`:n.includes(`gemini`)?`gemini_cli`:n.includes(`kiro`)?`kiro`:n.includes(`codex`)?`codex`:`other`}function d(e){let t=u(e);return t===`other`?n(`knowledge.domain.actors.otherAgent`):a[t]}function f(e){return a[e]}function p(e={},t=l){if(m(e,t)!==`available`)return null;let n=t[u(e)],r=e.session_id.trim();return n.urlTemplate.replace(`{id}`,encodeURIComponent(r))}function m(e={},t=l){let n=t[u(e)];return n?.enabled?_(e.session_id?.trim()??``,n.idFormat)?v(n.urlTemplate)?`available`:`invalid_template`:`invalid_id`:`disabled`}function h(e={},t=l){let n=t[u(e)];return n?.enabled&&n.appName.trim()?n.appName.trim():null}async function g(e={},t=globalThis.navigator?.clipboard){return!e.session_id||!t?.writeText?!1:(await t.writeText(e.session_id),!0)}function _(e,t){return s.test(e)?t===`any`||o.test(e):!1}function v(e){if(e.split(`{id}`).length!==2||/\s/.test(e))return!1;let t=/^([a-z][a-z0-9+.-]*):/i.exec(e)?.[1]?.toLocaleLowerCase();return!!t&&!c.has(t)}var y=e(w(l)),b=null;function x(){return C(),t(y)}function S(e){y.value=w(e)}function C({force:e=!1}={}){return!e&&b||(b=r(`/api/system/settings`).then(e=>{S(e.configured.conversationLaunchers)}).catch(()=>void 0)),b}function w(e){return Object.fromEntries(i.map(t=>[t,{...l[t],...e?.[t]??{}}]))}export{g as a,h as c,i,p as l,S as n,d as o,x as r,f as s,w as t};
@@ -0,0 +1 @@
1
+ import{F as e,N as t,T as n,_ as r,a as i,at as a,h as o,i as s,n as c,nt as l,t as u,x as d}from"./i18n-CIIxzhPZ.js";var f=[`aria-label`],p=[`lang`,`aria-label`,`aria-pressed`,`onClick`],m=n({__name:`LocaleSwitcher`,setup(n){let m=r(()=>c()),h={"zh-CN":`中`,"en-US":`EN`};function g(e){e!==m.value&&s(e)}return(n,r)=>(t(),d(`div`,{class:`locale-switcher`,role:`group`,"aria-label":l(i)(`common.language.label`)},[(t(!0),d(o,null,e(l(u),e=>(t(),d(`button`,{key:e,type:`button`,lang:e,"aria-label":l(i)(e===`zh-CN`?`common.language.chinese`:`common.language.english`),"aria-pressed":m.value===e,onClick:t=>g(e)},a(h[e]),9,p))),128))],8,f))}});function h(e,t){return c()===`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(c(),{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};