fuli-context 0.12.2 → 0.12.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -3
- package/README.zh-CN.md +9 -2
- package/dist/web/assets/{AboutPage-Dized8Uz.js → AboutPage-DKsgqteA.js} +1 -1
- package/dist/web/assets/{AgentConversations-Ccy41mEA.js → AgentConversations-BnFsfRj3.js} +1 -1
- package/dist/web/assets/{AgentHand-UzVhbKUC.js → AgentHand-B5lezlek.js} +1 -1
- package/dist/web/assets/{AgentName-DJpvkub2.js → AgentName-C-V41xs0.js} +1 -1
- package/dist/web/assets/AgentProfilePage-DjgqtOdz.js +1 -0
- package/dist/web/assets/AgentsDirectoryPage-IgN5QEdW.js +1 -0
- package/dist/web/assets/{AgentsDirectoryPage-Cv-vxw2C.css → AgentsDirectoryPage-kc3EgeGO.css} +1 -1
- package/dist/web/assets/{ConnectionsPage-uXcabab_.js → ConnectionsPage-CXtNiTEF.js} +1 -1
- package/dist/web/assets/EmployeeRecruitDialog-o6eyMw2g.js +1 -0
- package/dist/web/assets/EmployeeWorkbenchPage-4EnGLauW.js +3 -0
- package/dist/web/assets/{KnowledgeEditDialog-HmiqLC-Y.js → KnowledgeEditDialog-BlBd6Xql.js} +1 -1
- package/dist/web/assets/{KnowledgeInspector-Cj2yK4Qh.js → KnowledgeInspector-Dl7SAgaY.js} +1 -1
- package/dist/web/assets/{KnowledgeOrganizerPage-DT3BROZm.js → KnowledgeOrganizerPage-CpH4x6UA.js} +1 -1
- package/dist/web/assets/KnowledgePage-C-gFr7ln.js +1 -0
- package/dist/web/assets/{KnowledgeWorkspace-DA_dqVRG.js → KnowledgeWorkspace-4q_HfXas.js} +1 -1
- package/dist/web/assets/{NotFoundPage-x_Yd59mm.js → NotFoundPage-DtmfJSGx.js} +1 -1
- package/dist/web/assets/{OverviewPage-3eZjQ26v.js → OverviewPage-C1zw_8_6.js} +1 -1
- package/dist/web/assets/PersonalProfilePage-B0_zIINs.css +1 -0
- package/dist/web/assets/{PersonalProfilePage-CDQk096L.js → PersonalProfilePage-tQyS7qsa.js} +1 -1
- package/dist/web/assets/PersonalProjectsPage-Cgd_bjeK.js +1 -0
- package/dist/web/assets/{ProjectAgentFirstTask-BkRJ0zwO.js → ProjectAgentFirstTask-Caf7c6F_.js} +1 -1
- package/dist/web/assets/{ProjectAgentsPage-BuNNqSEy.js → ProjectAgentsPage-BOGkN5ZN.js} +1 -1
- package/dist/web/assets/{ProjectScopePicker-CiDxM2Yx.js → ProjectScopePicker-NyqcG6Iz.js} +1 -1
- package/dist/web/assets/{PublicProjectsPage-ByOT559r.js → PublicProjectsPage-CYwQLZmy.js} +1 -1
- package/dist/web/assets/{ReviewPage-C0Vdr9uq.js → ReviewPage-EyuAtIOq.js} +1 -1
- package/dist/web/assets/{RoundtablesPage-L3ShEWS3.js → RoundtablesPage-JVBXsJrs.js} +1 -1
- package/dist/web/assets/SettingsPage-BARo0Ds0.css +1 -0
- package/dist/web/assets/SettingsPage-Dfi7kl9c.js +1 -0
- package/dist/web/assets/{SharedJefaReportPage-Bg6lIk3E.js → SharedJefaReportPage-DFy5Ty7o.js} +1 -1
- package/dist/web/assets/{UiButton-x8hiHNRM.js → UiButton-neeym_gA.js} +1 -1
- package/dist/web/assets/{UiDialog-mjletK0y.js → UiDialog-BFVoqFnc.js} +1 -1
- package/dist/web/assets/{UiDisclosure-_IxeiexW.js → UiDisclosure-B-T7BmB5.js} +1 -1
- package/dist/web/assets/{UiSegmented-WFfz9Evl.js → UiSegmented-D_kyRKDw.js} +1 -1
- package/dist/web/assets/{UiSelect-K29jnV-1.js → UiSelect-DDyct4mf.js} +1 -1
- package/dist/web/assets/{WritingTastePage-DCULB-d2.js → WritingTastePage-BPRq6kJ6.js} +1 -1
- package/dist/web/assets/{agent-pins-DS4mNsNt.js → agent-pins-6LRHTMF6.js} +1 -1
- package/dist/web/assets/agent-profile-UgNiXgpU.css +1 -0
- package/dist/web/assets/{attention-store-CA5y8j1R.js → attention-store-BGHyzWfv.js} +1 -1
- package/dist/web/assets/avatars-z6ANYG_r.js +1 -0
- package/dist/web/assets/{catalog-D0VEfOAV.js → catalog-kb-cA8t6.js} +1 -1
- package/dist/web/assets/{client-DnwnUBQV.js → client-DodUFQDp.js} +1 -1
- package/dist/web/assets/{console-Cw7TzOSC.js → console-C2Lfifq-.js} +1 -1
- package/dist/web/assets/{conversation-launcher-settings-Yc13viwr.js → conversation-launcher-settings-CowfVz7l.js} +1 -1
- package/dist/web/assets/{i18n-oJFlt8hW.js → i18n-B4Fp9Oa5.js} +1 -1
- package/dist/web/assets/{identity-DSGS4CZc.js → identity-DG_za-J7.js} +1 -1
- package/dist/web/assets/index-DsExj49_.css +1 -0
- package/dist/web/assets/index-RxlM8aQV.js +5 -0
- package/dist/web/assets/{judgment-types-DR931cZ7.js → judgment-types-DRqrjStd.js} +1 -1
- package/dist/web/assets/{model-BJ-UF4cs.js → model-C0eHDNsF.js} +1 -1
- package/dist/web/assets/{personal-profile-graph-SOK0BR0w.js → personal-profile-graph-CHY3WYhi.js} +1 -1
- package/dist/web/assets/project-team-api-Dfm8C4B8.js +1 -0
- package/dist/web/assets/{shared-report-CiX64ZiD.js → shared-report-8JFvD9TZ.js} +1 -1
- package/dist/web/assets/tonborg-avatar-DyxAdTD6.webp +0 -0
- package/dist/web/assets/{useAgentRoster-B84mzZIg.js → useAgentRoster-QDbOwtLj.js} +1 -1
- package/dist/web/assets/{useApi-CROJJdhE-7gt0QyQ5.js → useApi-CROJJdhE-IuC5qwny.js} +1 -1
- package/dist/web/assets/{vue-router-CCvPGaLD.js → vue-router-nZMhR3dI.js} +1 -1
- package/dist/web/index.html +16 -15
- package/graph-provider/fuli_graph/project_agent_task_models.py +1 -0
- package/graph-provider/fuli_graph/system_agents.py +27 -3
- package/graph-provider/pyproject.toml +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/src/cli/command-registry.js +2 -1
- package/src/cli/setup-command.js +16 -2
- package/src/cli/update-command.js +54 -39
- package/src/cli/update-installation.js +54 -0
- package/src/cli.js +1 -2
- package/src/employees/catalog/tonborg.json +1 -1
- package/src/http/api-router.js +28 -1
- package/src/local-runtime/lifecycle.js +1 -0
- package/src/setup/graph-runtime.js +1 -1
- package/src/setup/options.js +1 -0
- package/src/system/settings-apply-worker.js +6 -0
- package/src/system/settings-apply.js +116 -0
- package/src/system/system-service.js +25 -5
- package/dist/web/assets/AgentProfilePage-CFViQ8kj.js +0 -1
- package/dist/web/assets/AgentsDirectoryPage-CBFTg_IE.js +0 -1
- package/dist/web/assets/EmployeeRecruitDialog-D8Hvhc-M.js +0 -1
- package/dist/web/assets/EmployeeWorkbenchPage-TBl_HNj6.js +0 -3
- package/dist/web/assets/KnowledgePage-C4J4VueL.js +0 -1
- package/dist/web/assets/PersonalProfilePage-DrMDAAdy.css +0 -1
- package/dist/web/assets/PersonalProjectsPage-CJxp4Wyz.js +0 -1
- package/dist/web/assets/SettingsPage-BE8pWbI6.css +0 -1
- package/dist/web/assets/SettingsPage-McYuinGz.js +0 -1
- package/dist/web/assets/agent-profile-Bh3MJGvb.css +0 -1
- package/dist/web/assets/index-BfHCcUL2.css +0 -1
- package/dist/web/assets/index-CxNER7Oo.js +0 -5
- package/dist/web/assets/project-team-api-C_0qJk_B.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,E as t,I as n,M as r,P as i,Q as a,S as o,U as s,a as c,at as l,f as u,g as d,h as f,it as p,j as m,n as ee,ot as h,rt as g,v as _,x as v,y,z as b}from"./i18n-
|
|
1
|
+
import{B as e,E as t,I as n,M as r,P as i,Q as a,S as o,U as s,a as c,at as l,f as u,g as d,h as f,it as p,j as m,n as ee,ot as h,rt as g,v as _,x as v,y,z as b}from"./i18n-B4Fp9Oa5.js";import{t as x}from"./_plugin-vue_export-helper-BDNMzG2s.js";var te=[`data-select-id`],ne=[`name`,`required`,`disabled`,`multiple`],re=[`value`,`selected`],S=[`aria-expanded`,`aria-label`,`disabled`],C=[`placeholder`,`aria-label`],ie=[`aria-multiselectable`],ae=[`aria-selected`,`disabled`,`onClick`],w={key:0,class:`ui-select__box`,"aria-hidden":`true`},T={class:`ui-select__copy`},E={key:0},D={key:1,class:`ui-select__check`,viewBox:`0 0 12 12`,width:`12`,height:`12`,"aria-hidden":`true`},O={key:0,class:`ui-select__empty`},k={key:1,class:`ui-select__actions`},A=[`disabled`],j=x(t({__name:`UiSelect`,props:{modelValue:{},options:{},label:{},multiple:{type:Boolean,default:!1},placeholder:{default:void 0},searchable:{type:Boolean,default:void 0},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},name:{default:void 0},controlId:{default:void 0},size:{default:`md`},field:{type:Boolean,default:!1}},emits:[`update:modelValue`,`change`],setup(t,{emit:x}){let j=t,M=x,N=a(null),P=a(null),F=a(null),I=a(null),L=a(!1),R=a(``),z=a({}),B=`${j.controlId||`ui-select-${b().replace(/[^A-Za-z0-9_-]/g,``)}`}-options`,V=_(()=>new Set(Array.isArray(j.modelValue)?j.modelValue:[j.modelValue])),H=_(()=>j.options.filter(e=>V.value.has(e.value))),U=_(()=>j.searchable??j.options.length>7),W=_(()=>{let e=H.value;return e.length?e.length===1?e[0].label:c(`common.searchableSelect.selectedCount`,{count:e.length}):j.placeholder??c(`common.searchableSelect.placeholder`)}),G=_(()=>{let e=ee(),t=R.value.trim().toLocaleLowerCase(e);return t?j.options.filter(n=>[n.label,n.value,n.meta,n.search].filter(Boolean).join(` `).toLocaleLowerCase(e).includes(t)):j.options});e(()=>j.disabled,e=>{e&&Y()}),r(()=>Q());function K(e){M(`update:modelValue`,e),M(`change`,e)}function q(e){if(j.disabled||e.disabled)return;if(!j.multiple){K(e.value),Y({restoreFocus:!0});return}let t=Array.isArray(j.modelValue)?j.modelValue:[];K(V.value.has(e.value)?t.filter(t=>t!==e.value):[...t,e.value])}function oe(){K(j.options.filter(e=>!e.disabled&&!V.value.has(e.value)).map(e=>e.value))}function se(){K([])}async function J(){j.disabled||L.value||(R.value=``,X(),L.value=!0,ce(),await m(),U.value?F.value?.focus():($().find(e=>e.getAttribute(`aria-selected`)===`true`)??$()[0])?.focus())}function Y({restoreFocus:e=!1}={}){L.value&&(L.value=!1,Q(),e&&m(()=>P.value?.focus()))}function X(){let e=P.value?.getBoundingClientRect();if(!e)return;let t=Math.max(e.width,220),n=Math.min(e.left,window.innerWidth-t-8),r=window.innerHeight-e.bottom;z.value=r<280&&e.top>r?{left:`${n}px`,width:`${t}px`,bottom:`${window.innerHeight-e.top+4}px`}:{left:`${n}px`,width:`${t}px`,top:`${e.bottom+4}px`}}function Z(e){N.value?.contains(e.target)||Y()}function ce(){document.addEventListener(`pointerdown`,Z,!0),window.addEventListener(`scroll`,X,!0),window.addEventListener(`resize`,X)}function Q(){document.removeEventListener(`pointerdown`,Z,!0),window.removeEventListener(`scroll`,X,!0),window.removeEventListener(`resize`,X)}function le(e){N.value?.contains(e.relatedTarget)||queueMicrotask(()=>{N.value?.contains(document.activeElement)||Y()})}function $(){return[...I.value?.querySelectorAll(`.ui-select__option:not(:disabled)`)??[]]}function ue(e){[`ArrowDown`,`Enter`,` `].includes(e.key)&&(e.preventDefault(),L.value&&e.key!==`ArrowDown`?Y():J())}function de(e){e.key===`Escape`?(e.preventDefault(),Y({restoreFocus:!0})):e.key===`ArrowDown`?(e.preventDefault(),$()[0]?.focus()):e.key===`Enter`&&(e.preventDefault(),$()[0]?.click())}function fe(e){if(e.key===`Escape`){e.preventDefault(),Y({restoreFocus:!0});return}if(e.key===`Tab`){Y();return}if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key))return;e.preventDefault();let t=$(),n=t.indexOf(e.currentTarget);t[e.key===`Home`?0:e.key===`End`?t.length-1:e.key===`ArrowDown`?Math.min(t.length-1,n+1):Math.max(0,n-1)]?.focus()}return(e,r)=>(i(),o(`div`,{ref_key:`root`,ref:N,class:p([`ui-select`,[`ui-select--${t.size}`,{"is-open":L.value,"is-disabled":t.disabled,"ui-field":t.field}]]),"data-select-id":t.controlId,onFocusout:le},[t.field?(i(),o(`span`,{key:0,class:`ui-select__label`,onClick:r[0]||=e=>P.value?.focus()},h(t.label),1)):v(``,!0),y(`select`,{class:`ui-select__native`,name:t.name,required:t.required,disabled:t.disabled,multiple:t.multiple,tabindex:`-1`,"aria-hidden":`true`},[(i(!0),o(d,null,n(t.options,e=>(i(),o(`option`,{key:e.value,value:e.value,selected:V.value.has(e.value)},h(e.label),9,re))),128))],8,ne),y(`button`,{ref_key:`trigger`,ref:P,type:`button`,class:`ui-select__trigger`,role:`combobox`,"aria-haspopup":`listbox`,"aria-expanded":L.value,"aria-controls":B,"aria-label":t.label,disabled:t.disabled,onClick:r[1]||=e=>L.value?Y():J(),onKeydown:ue},[y(`span`,{class:p([`ui-select__value`,{"is-placeholder":!H.value.length}])},h(W.value),3),r[6]||=y(`svg`,{class:`ui-select__chevron`,viewBox:`0 0 12 12`,width:`12`,height:`12`,"aria-hidden":`true`},[y(`path`,{d:`m3 4.5 3 3 3-3`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`})],-1)],40,S),L.value?(i(),o(`div`,{key:1,class:`ui-select__panel`,style:l(z.value)},[U.value?s((i(),o(`input`,{key:0,ref_key:`searchInput`,ref:F,"onUpdate:modelValue":r[2]||=e=>R.value=e,class:`ui-select__search`,type:`search`,autocomplete:`off`,placeholder:g(c)(`common.searchableSelect.searchPlaceholder`),"aria-label":g(c)(`common.searchableSelect.searchAria`,{label:t.label}),onKeydown:de},null,40,C)),[[u,R.value]]):v(``,!0),y(`div`,{id:B,ref_key:`list`,ref:I,class:`ui-select__list`,role:`listbox`,"aria-multiselectable":t.multiple||void 0},[(i(!0),o(d,null,n(G.value,e=>(i(),o(`button`,{key:e.value,type:`button`,class:`ui-select__option`,role:`option`,"aria-selected":V.value.has(e.value),disabled:e.disabled,onMousedown:r[3]||=f(()=>{},[`prevent`]),onClick:t=>q(e),onKeydown:fe},[t.multiple?(i(),o(`span`,w)):v(``,!0),y(`span`,T,[y(`span`,null,h(e.label),1),e.meta?(i(),o(`small`,E,h(e.meta),1)):v(``,!0)]),!t.multiple&&V.value.has(e.value)?(i(),o(`svg`,D,[...r[7]||=[y(`path`,{d:`m2.5 6.2 2.3 2.3 4.7-5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.6`,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,-1)]])):v(``,!0)],40,ae))),128)),G.value.length?v(``,!0):(i(),o(`p`,O,h(g(c)(`common.searchableSelect.noMatches`)),1))],8,ie),t.multiple&&t.options.length>3?(i(),o(`div`,k,[y(`button`,{type:`button`,onMousedown:r[4]||=f(()=>{},[`prevent`]),onClick:oe},h(g(c)(`common.searchableSelect.invert`)),33),y(`button`,{type:`button`,disabled:!H.value.length,onMousedown:r[5]||=f(()=>{},[`prevent`]),onClick:se},h(g(c)(`common.searchableSelect.clear`)),41,A)])):v(``,!0)],4)):v(``,!0)],42,te))}}),[[`__scopeId`,`data-v-3a363c0e`]]);export{j as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,E as t,H as n,I as r,M as i,P as a,Q as o,S as s,T as c,a as l,b as u,g as d,it as f,ot as p,rt as m,v as h,w as g,x as _,y as v}from"./i18n-
|
|
1
|
+
import{B as e,E as t,H as n,I as r,M as i,P as a,Q as o,S as s,T as c,a as l,b as u,g as d,it as f,ot as p,rt as m,v as h,w as g,x as _,y as v}from"./i18n-B4Fp9Oa5.js";import{t as y}from"./console-C2Lfifq-.js";import{r as ee,s as b}from"./client-DodUFQDp.js";import{t as x}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as te}from"./vue-router-nZMhR3dI.js";import{t as ne}from"./UiDisclosure-B-T7BmB5.js";import{i as re,n as ie,t as ae}from"./KnowledgeEditDialog-BlBd6Xql.js";import{u as oe,x as se}from"./model-C0eHDNsF.js";import{t as ce}from"./personal-profile-graph-CHY3WYhi.js";var le={class:`view writing-taste-view`},S={key:2,class:`view-loading`,"aria-busy":`true`},ue={key:3,class:`writing-taste-unavailable`},de=[`role`],fe={class:`writing-taste-hero__copy`},pe={class:`writing-taste-status`},me={class:`writing-taste-hero__score`,"aria-hidden":`true`},C=[`aria-label`],w={"aria-hidden":`true`},T={class:`writing-taste-rules`},E={key:0,class:`writing-taste-rule-list`},D={class:`writing-taste-rule__status`},O={key:0,class:`conflict`},k={class:`writing-taste-rule__body`},A={key:0},j={key:1},M={key:0},N={key:0,class:`writing-taste-rule__actions`},P=[`onClick`],F=[`onClick`],I={key:1,class:`writing-taste-empty`},L={key:0,class:`writing-taste-agent-preview`},R={key:0},z=x(t({__name:`WritingTastePage`,setup(t){let x=y(),z=o(null),B=o(null),V=o(!1),H=o(!1),U=o(null),W=o(null),G=o(!1),K=0,q=null,J=h(()=>V.value&&!z.value),Y=re(J),X=h(()=>se(B.value)),Z=h(()=>new Map(X.value.map(e=>[`${e.itemKind}:${e.id}`,e]))),he=h(()=>z.value?.status===`active`?l(`writingTaste.page.activeTitle`):z.value?.status===`preview_ready`?l(`writingTaste.page.previewTitle`):l(`writingTaste.page.collectingTitle`)),ge=h(()=>z.value?.status===`active`?l(`writingTaste.page.activeCopy`):z.value?.status===`preview_ready`?l(`writingTaste.page.previewCopy`):l(`writingTaste.page.collectingCopy`));e(()=>x.activePersonalSpace?.id,e=>{z.value=null,B.value=null,U.value=null,W.value=null,G.value=!1,Q(e)},{immediate:!0,flush:`sync`});async function Q(e=x.activePersonalSpace?.id){let t=++K;if(q?.abort(),q=null,H.value=!1,!e){V.value=!1;return}let n=new AbortController;q=n,V.value=!0;try{let r=new URLSearchParams({personalSpaceId:e,limit:`500`}),[i,a]=await Promise.all([ee(`/api/writing-taste-profile?${r}`,{signal:n.signal}),ce(e,n.signal)]);if(t!==K)return;z.value=Se(i)?i:null,B.value=Ce(a)?a:null,xe()}catch{if(t!==K)return;z.value=null,B.value=null,H.value=!0}finally{t===K&&(V.value=!1,q=null)}}i(()=>{K+=1,q?.abort()});function $(e){return Z.value.get(`${e.item_kind}:${e.item_id}`)??null}function _e(e){U.value=$(e)}function ve(e){W.value=$(e)}function ye(e){if(e.preference_scope!==`project`||!e.preference_project_id)return l(`writingTaste.page.globalScope`);let t=x.state?.personalProjects?.find(({project_id:t})=>t===e.preference_project_id);return l(`writingTaste.page.projectScope`,{project:t?.profile.name??e.preference_project_id})}function be(e){return e.key===`conflicts`?l(`writingTaste.criteria.conflictsProgress`,{current:e.current}):l(`writingTaste.criteria.progress`,{current:e.current,target:e.target})}function xe(){U.value&&=Z.value.get(`${U.value.itemKind}:${U.value.id}`)??null,W.value&&=Z.value.get(`${W.value.itemKind}:${W.value.id}`)??null}function Se(e){if(!e||typeof e!=`object`)return!1;let t=e;return[`collecting`,`preview_ready`,`active`].includes(t.status??``)&&!!t.readiness&&Array.isArray(t.rules)}function Ce(e){if(!e||typeof e!=`object`)return!1;let t=e;return Array.isArray(t.nodes)&&Array.isArray(t.edges)}return(e,t)=>(a(),s(`section`,le,[c(m(te),{class:`writing-taste-back`,to:`/preferences`},{default:n(()=>[t[6]||=v(`span`,{"aria-hidden":`true`},`←`,-1),g(` `+p(m(l)(`writingTaste.page.back`)),1)]),_:1}),V.value&&z.value&&!m(Y)?(a(),u(b,{key:0,variant:`inline`,label:m(l)(`writingTaste.page.loading`)},null,8,[`label`])):_(``,!0),m(Y)?(a(),u(b,{key:1,label:m(l)(`writingTaste.page.loading`)},null,8,[`label`])):J.value?(a(),s(`div`,S)):z.value?(a(),s(d,{key:4},[v(`header`,{class:f([`writing-taste-hero`,`status-${z.value.status}`])},[v(`div`,fe,[v(`span`,pe,[t[7]||=v(`i`,{"aria-hidden":`true`},null,-1),g(` `+p(m(l)(`writingTaste.status.${z.value.status}`)),1)]),v(`h2`,null,p(he.value),1),v(`p`,null,p(ge.value),1)]),v(`div`,me,[v(`strong`,null,p(z.value.readiness.rule_count),1),v(`span`,null,`/ `+p(z.value.readiness.thresholds.rule_count),1),v(`small`,null,p(m(l)(`writingTaste.criteria.rules`)),1)])],2),v(`section`,{class:`writing-taste-readiness`,"aria-label":m(l)(`writingTaste.page.readinessAria`)},[(a(!0),s(d,null,r(z.value.readiness.criteria,e=>(a(),s(`article`,{key:e.key,class:f({met:e.met})},[v(`span`,w,p(e.met?`✓`:`·`),1),v(`div`,null,[v(`strong`,null,p(m(l)(`writingTaste.criteria.${e.key}`)),1),v(`small`,null,p(be(e)),1)])],2))),128))],8,C),v(`section`,T,[v(`header`,null,[v(`h2`,null,p(m(l)(`writingTaste.page.rulesTitle`)),1),v(`span`,null,p(z.value.rules.length),1)]),z.value.rules.length?(a(),s(`div`,E,[(a(!0),s(d,null,r(z.value.rules,e=>(a(),s(`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`}])},[v(`div`,D,[v(`span`,{class:f(e.evidence_status.replaceAll(` `,`-`).toLowerCase())},p(m(l)(`writingTaste.evidenceStatus.${e.evidence_status}`)),3),v(`span`,null,p(ye(e)),1),e.has_conflict?(a(),s(`span`,O,p(m(l)(`writingTaste.page.conflict`)),1)):_(``,!0)]),v(`div`,k,[v(`h3`,null,p(e.title),1),v(`p`,null,p(e.instruction),1),e.reason||e.contexts.length?(a(),u(ne,{key:0,title:m(l)(`ui.details`)},{default:n(()=>[e.reason?(a(),s(`p`,A,p(e.reason),1)):_(``,!0),e.contexts.length?(a(),s(`p`,j,p(m(l)(`writingTaste.page.contexts`,{contexts:e.contexts.join(`、`)})),1)):_(``,!0)]),_:2},1032,[`title`])):_(``,!0)]),v(`footer`,null,[v(`div`,null,[v(`span`,null,p(m(l)(`writingTaste.page.evidence`,{evidence:e.evidence_count})),1),v(`span`,null,p(m(l)(`writingTaste.page.sessions`,{sessions:e.session_count})),1),e.updated_at?(a(),s(`span`,M,p(m(l)(`writingTaste.page.updated`,{time:m(oe)(e.updated_at)})),1)):_(``,!0)]),$(e)?(a(),s(`div`,N,[v(`button`,{class:`secondary-action`,type:`button`,onClick:t=>ve(e)},p(m(l)(`writingTaste.page.edit`)),9,P),e.evidence_status===`Confirmed`?_(``,!0):(a(),s(`button`,{key:0,class:`primary-action`,type:`button`,onClick:t=>_e(e)},p(m(l)(`writingTaste.page.confirm`)),9,F))])):_(``,!0)])],2))),128))])):(a(),s(`div`,I,p(m(l)(`writingTaste.page.rulesEmpty`)),1))]),z.value.ready&&z.value.agent_markdown?(a(),s(`section`,L,[v(`div`,null,[v(`h2`,null,p(m(l)(`writingTaste.page.agentPreviewTitle`)),1)]),v(`button`,{class:`secondary-action`,type:`button`,onClick:t[1]||=e=>G.value=!G.value},p(G.value?m(l)(`writingTaste.page.hideAgentPreview`):m(l)(`writingTaste.page.showAgentPreview`)),1),G.value?(a(),s(`pre`,R,p(z.value.agent_markdown),1)):_(``,!0)])):_(``,!0)],64)):(a(),s(`div`,ue,[v(`p`,{role:H.value?`alert`:void 0},p(m(l)(H.value?`common.errors.loadFailed`:`writingTaste.page.profileUnavailable`)),9,de),m(x).activePersonalSpace?(a(),s(`button`,{key:0,type:`button`,class:`secondary-action`,onClick:t[0]||=e=>Q()},p(m(l)(`common.actions.retry`)),1)):_(``,!0)])),c(ae,{item:W.value,"personal-space-id":m(x).activePersonalSpace?.id??``,"personal-project-id":null,projects:m(x).state?.personalProjects??[],"replacement-items":X.value,onClose:t[2]||=e=>W.value=null,onSaved:t[3]||=e=>Q()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),c(ie,{item:U.value,"personal-space-id":m(x).activePersonalSpace?.id??``,"personal-project-id":null,onClose:t[4]||=e=>U.value=null,onSaved:t[5]||=e=>Q()},null,8,[`item`,`personal-space-id`])]))}}),[[`__scopeId`,`data-v-753ab4d9`]]);export{z as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,Q as t,a as n,k as r,r as i}from"./i18n-
|
|
1
|
+
import{B as e,Q as t,a as n,k as r,r as i}from"./i18n-B4Fp9Oa5.js";import{o as a,r as o}from"./client-DodUFQDp.js";import{t as s}from"./useAgentRoster-QDbOwtLj.js";var c=Symbol(`agent-pins`),l=Symbol(`agent-roster`),u=new Map,d={loading:`Reading pinned Agents…`,saving:`Saving Agent pin…`,loadError:`Pinned Agents are temporarily unavailable.`,saveError:`The Agent pin could not be saved.`,conflictError:`The pin list changed. Try again.`};function f(e,t){let r=`agentPins.${e}`;return i.global.te(r)?n(r):t}function p(e){return f(e,d[e])}function m(e){if(!e||typeof e!=`object`||!(`status`in e))return null;let t=e.status;return typeof t==`number`?t:null}function h(e){let t=e&&typeof e==`object`?e:{},n=Array.isArray(t.agentIds)?[...new Set(t.agentIds.filter(e=>typeof e==`string`&&e.length>0))]:[];return{revision:typeof t.revision==`number`?t.revision:0,agentIds:n}}function g(e){let t=u.get(e);if(t)return t;let n=o(`/api/agent-pins?${new URLSearchParams({personalSpaceId:e})}`).then(e=>h(e)).finally(()=>{u.get(e)===n&&u.delete(e)});return u.set(e,n),n}function _(n){let r=t([]),i=t(null),o=t(!1),s=t(null),c=t(``),l=new Map,u=0;function d(){r.value=[],i.value=null,o.value=!1,s.value=null,c.value=``}function f(e){i.value=e.revision,r.value=[...e.agentIds]}async function _(e={}){let t=n.value,r=++u;if(c.value=``,!t){d();return}let i=e.force?void 0:l.get(t);if(i){f(i),o.value=!1;return}o.value=!0;try{let e=await g(t);if(l.set(t,e),r!==u||n.value!==t)return;f(e)}catch{r===u&&n.value===t&&(c.value=p(`loadError`))}finally{r===u&&n.value===t&&(o.value=!1)}}async function v(e,t){let r=n.value;if(!r||(i.value===null&&await _(),n.value!==r||i.value===null))return!1;let o=i.value;s.value=e,c.value=``;try{let i=h(await a(`/api/agent-pins`,{personalSpaceId:r,agentId:e,pinned:t,expectedRevision:o}));return l.set(r,i),n.value===r&&f(i),!0}catch(e){return n.value===r&&(m(e)===409?(await _({force:!0}),n.value===r&&!c.value&&(c.value=p(`conflictError`))):c.value=p(`saveError`)),!1}finally{n.value===r&&(s.value=null)}}return e(n,()=>{u+=1,d(),n.value&&_()},{immediate:!0}),{agentIds:r,revision:i,loading:o,savingAgentId:s,error:c,load:_,setPinned:v}}function v(e){return r(c,null)??_(e)}function y(e){return r(l,null)??s(e)}export{v as a,_ as i,l as n,y as o,f as r,c as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agents-directory,.agent-profile-page{min-width:0;color:var(--color-ink,#1d2129)}.agents-directory{width:100%;max-width:var(--page-max);margin-inline:auto}.agents-directory-heading{margin-bottom:var(--space-6,24px)}.agents-directory-count{color:var(--color-muted,#667085);margin:0;font-size:14px}.agent-directory-work-error{justify-content:space-between;align-items:center;gap:var(--space-3,12px);margin:calc(var(--space-6,24px) * -1) 0 var(--space-4,16px);color:var(--color-danger,#b93838);font-size:13px;display:flex}.agent-profile-actions{justify-content:flex-end;align-items:center;gap:var(--space-2,8px);flex-wrap:wrap;flex-shrink:0;display:flex}.agents-directory-filters{margin-bottom:var(--space-6,24px);align-items:stretch}.agents-directory-search{flex:280px;min-width:160px}.agents-directory-search input{box-sizing:border-box;width:100%}.agents-directory-select{flex:0 0 180px}.agents-directory-grid{gap:var(--space-4,16px);grid-template-columns:minmax(0,1fr);margin:0;padding:0;list-style:none;display:grid}.agents-directory-grid>li{min-width:0}.agent-card{box-sizing:border-box;height:100%;transition:border-color var(--motion-fast), box-shadow var(--motion-fast);flex-direction:column;gap:10px;padding:18px;display:flex}.agent-card:hover{border-color:var(--color-border-strong);box-shadow:0 6px 20px #1b1f1d0f}.agent-card-topline,.agent-card-meta,.agent-section-heading,.agent-resume-name-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.agent-card-topline{justify-content:flex-start}.agent-portrait{background:var(--color-accent-soft);width:72px;height:72px;color:var(--color-accent);border-radius:20px;flex:0 0 72px;place-items:center;font-size:34px;line-height:1;display:grid}.agent-portrait img{object-fit:cover;border-radius:inherit;width:100%;height:100%}.agent-portrait.small{border-radius:11px;flex-basis:40px;width:40px;height:40px;font-size:19px}.agent-directory-name{flex:1;align-items:center;gap:8px;min-width:0;font-size:16px;font-weight:650;display:flex}.agent-directory-name a{min-width:0;color:var(--color-ink);text-overflow:ellipsis;white-space:nowrap;text-decoration:none;overflow:hidden}.agent-directory-name a:hover{color:var(--color-accent)}.agent-card-role{font-size:11px;font-weight:600}.agent-card-responsibility{color:var(--color-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:2px 0 0;font-size:13px;line-height:1.55;display:-webkit-box;overflow:hidden}.agent-inline-skills,.agent-card-project-list{flex-wrap:wrap;gap:6px;display:flex}.agent-inline-skills>span{overflow-wrap:anywhere;max-width:100%;color:var(--color-muted);font-size:12px;line-height:1.4}.agent-inline-skills>span+span:before{content:"·";color:var(--color-faint);margin-right:6px}.agent-card-meta{border-top:1px solid var(--color-border);margin-top:auto;padding-top:12px}.agent-card-projects{min-width:0}.agent-card-project-list .ui-badge{text-overflow:ellipsis;white-space:nowrap;max-width:130px;overflow:hidden}.agent-card-project-count{color:var(--color-accent);background:var(--color-accent-soft)}.agent-card-no-project{color:var(--color-faint);font-size:12px}.agent-card-status{margin-left:auto}.agent-card-status.is-active,.agent-profile-membership.is-active{color:var(--color-success);background:var(--color-success-soft)}.agent-card-status.is-inactive,.agent-profile-membership.is-inactive{color:var(--color-warning);background:var(--color-warning-soft)}.agent-card-status.is-archived,.agent-profile-membership.is-archived{color:var(--color-muted);background:var(--color-surface-subtle)}.agent-card-work-status{max-width:140px;color:var(--color-muted);text-overflow:ellipsis;white-space:nowrap;flex:none;align-items:center;gap:6px;margin-left:auto;font-size:12px;display:inline-flex;overflow:hidden}.agent-card-work-status:before{content:"";background:var(--color-faint);border-radius:50%;flex:none;width:6px;height:6px}.agent-card-work-status.is-running{color:var(--color-accent)}.agent-card-work-status.is-running:before{background:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-soft)}.agent-card-work-status:is(.is-awaiting_review,.is-queued,.is-paused,.is-awaiting_recruitment){color:var(--color-warning)}.agent-card-work-status:is(.is-awaiting_review,.is-queued,.is-paused,.is-awaiting_recruitment):before{background:var(--color-warning)}.agent-card-work-status:is(.is-blocked,.is-unavailable){color:var(--color-danger)}.agent-card-work-status:is(.is-blocked,.is-unavailable):before{background:var(--color-danger)}.agent-directory-open{color:var(--color-muted);white-space:nowrap;flex:none;font-size:12px;font-weight:550;text-decoration:none}.agent-directory-open:hover{color:var(--color-accent)}.agent-profile-empty{box-sizing:border-box;min-height:140px}.agents-directory .sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.agent-profile-page{width:100%;max-width:min(var(--page-max), 1440px);box-sizing:border-box;margin:0 auto}.agent-profile-back{align-items:center;gap:var(--space-2,8px);margin-bottom:var(--space-5,20px);color:var(--color-muted,#667085);font-size:14px;text-decoration:none;display:inline-flex}.agent-profile-back:hover,.agent-profile-footer a,.agent-section-heading>a{color:var(--color-accent,#2563eb)}.agent-resume-header{align-items:start;gap:var(--space-5,20px);padding:var(--space-6,24px);grid-template-columns:auto minmax(0,1fr) auto;display:grid}.agent-resume-intro{min-width:0}.agent-resume-intro h1{overflow-wrap:anywhere;letter-spacing:-.025em;min-width:0;margin:0;font-size:clamp(26px,3vw,36px);line-height:1.15}.agent-resume-name-row{flex-wrap:wrap;justify-content:flex-start;align-items:baseline}.agent-profile-membership{flex:none}.agent-resume-intro>p{max-width:650px;margin:var(--space-3,12px) 0;overflow-wrap:anywhere;color:var(--color-muted,#667085);line-height:1.65}.agent-resume-meta{gap:var(--space-3,12px);color:var(--color-muted,#667085);flex-wrap:wrap;font-size:12px;display:flex}.agent-profile-refresh-status,.agent-profile-partial{margin:var(--space-4,16px) 0 0;color:var(--color-muted,#667085);font-size:13px}.agent-profile-tabs{gap:var(--space-5,20px);margin-top:var(--space-6,24px);border-bottom:1px solid var(--color-border,#e2e5ea);display:flex;overflow-x:auto}.agent-profile-tab{min-height:44px;color:var(--color-muted,#667085);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;flex:none;padding:8px 2px;font-size:13px;position:relative}.agent-profile-tab:hover,.agent-profile-tab[aria-selected=true]{color:var(--color-accent,#2563eb)}.agent-profile-tab[aria-selected=true]{border-bottom-color:var(--color-accent,#2563eb);font-weight:650}.agent-profile-panel{min-width:0;margin-top:var(--space-4,16px)}.agent-profile-panel>.ui-card+.ui-card{margin-top:var(--space-4,16px)}.agent-profile-primary-grid{gap:var(--space-4,16px);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.agent-resume-section{box-sizing:border-box;min-width:0;padding:var(--space-6,24px)}.agent-resume-section h2{letter-spacing:-.01em;margin:0;font-size:18px}.agent-resume-section>h2{margin-bottom:var(--space-4,16px)}.agent-resume-section h3{margin:0 0 var(--space-2,8px);font-size:14px}.agent-resume-section p{margin:var(--space-2,8px) 0;overflow-wrap:anywhere;white-space:pre-line;line-height:1.7}.agent-section-heading{margin-bottom:var(--space-4,16px)}.agent-section-heading>span{color:var(--color-muted,#667085);font-size:12px}.agent-resume-list{margin:0;padding:0;list-style:none}.agent-resume-list li{padding:var(--space-3,12px) 0}.agent-resume-list li+li{border-top:1px solid var(--color-border,#e2e5ea)}.agent-project-link{color:var(--color-accent,#2563eb);text-decoration:none}.agent-project-link:hover{text-decoration:underline}.agent-project-overflow{margin-top:var(--space-3,12px)}.agent-project-overflow summary{color:var(--color-accent,#2563eb);cursor:pointer;font-size:13px}.agent-current-work-list{gap:var(--space-2,8px);margin:0;padding:0;list-style:none;display:grid}.agent-current-work-list li{justify-content:space-between;align-items:center;gap:var(--space-3,12px);min-width:0;padding:var(--space-3,12px);border:1px solid var(--color-border,#e2e5ea);border-radius:var(--radius-control,10px);display:flex}.agent-current-work-list .ui-badge,.agent-work-timeline .agent-section-heading>span{white-space:nowrap;flex:none}.agent-current-work-list a{overflow-wrap:anywhere;min-width:0;color:var(--color-accent,#2563eb);font-weight:600;text-decoration:none}.agent-muted,.agent-org-lead-unavailable,.agent-work-timeline small,.agent-collaborators span{color:var(--color-muted,#667085)}.agent-character{gap:var(--space-5,20px);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.agent-character p{font-size:14px}.agent-strengths{margin-top:var(--space-5,20px)}.agent-strengths h3{margin-bottom:var(--space-3,12px)}.agent-expectation{padding:var(--space-4,16px);border-radius:var(--radius-control,10px);color:var(--color-ink,#1d2129);background:var(--color-accent-soft,#edf3ff)}.agent-expectation strong{margin-bottom:var(--space-2,8px);font-size:13px;display:block}.agent-organization{padding:var(--space-4,16px) 0}.agent-org-lead,.agent-org-members{gap:var(--space-4,16px);padding:var(--space-2,8px) 0;display:flex}.agent-org-lead>span,.agent-org-members>span{min-width:70px;color:var(--color-muted,#667085);font-size:12px}.agent-org-members{margin-left:var(--space-3,12px);padding-left:var(--space-4,16px);border-left:2px solid var(--color-border,#e2e5ea)}.agent-org-members ul{gap:var(--space-3,12px);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.agent-work-timeline{margin:var(--space-5,20px) 0 0 var(--space-2,8px);padding:0 0 0 var(--space-6,24px);border-left:1px solid var(--color-border-strong,#c5cbd5);list-style:none}.agent-work-timeline>li{margin:0 0 var(--space-6,24px);position:relative}.agent-work-timeline>li:before{background:var(--color-accent,#2563eb);content:"";border-radius:50%;width:8px;height:8px;position:absolute;top:5px;left:-29px}.agent-work-timeline .agent-section-heading{margin-bottom:var(--space-2,8px)}.agent-work-timeline a{color:var(--color-accent,#2563eb);font-weight:600;text-decoration:none}.agent-work-timeline p{font-size:14px}.agent-work-timeline small{font-size:12px}.agent-collaborators{gap:var(--space-5,20px) var(--space-8,32px);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.agent-collaborators li{gap:var(--space-2,8px);flex-direction:column;min-width:120px;display:flex}.agent-profile-management-links{gap:var(--space-2,8px);margin-top:var(--space-5,20px);flex-wrap:wrap;display:flex}.agent-profile-footer{gap:var(--space-5,20px);margin-top:var(--space-5,20px);padding:var(--space-5,20px) 0;border-top:1px solid var(--color-border,#e2e5ea);flex-wrap:wrap;font-size:13px;display:flex}.agent-simple-settings{box-sizing:border-box;margin-top:var(--space-4,16px);padding:var(--space-6,24px);border:1px solid var(--color-border,#e2e5ea);border-radius:var(--radius-card,16px);background:var(--color-surface,#fff)}.agent-simple-settings h3{margin:0 0 var(--space-5,20px)}.agent-simple-settings label,.agent-simple-settings .agent-platform-field{gap:var(--space-2,8px);margin-bottom:var(--space-5,20px);color:var(--color-ink,#1d2129);flex-direction:column;font-size:14px;display:flex}.agent-simple-settings small{color:var(--color-muted,#667085);font-size:12px}.agent-simple-settings details{margin:var(--space-5,20px) 0}.agent-simple-settings summary{margin-bottom:var(--space-4,16px);color:var(--color-ink,#1d2129);cursor:pointer;font-size:13px}.agent-simple-settings textarea{min-height:70px}.agent-simple-settings button:disabled{cursor:wait}.agent-locked-platforms p{color:var(--color-ink,#1d2129)}@media (width>=640px){.agents-directory-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=900px){.agents-directory-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=760px){.agents-directory-heading{align-items:flex-start}.agents-directory-heading .agent-profile-actions{gap:var(--space-2,8px)}.agents-directory-filters{align-items:stretch}.agents-directory-search{flex-basis:100%}.agents-directory-filters>select{flex:1;min-width:0}.agent-resume-header{grid-template-columns:auto minmax(0,1fr)}.agent-resume-header .agent-profile-actions{grid-column:1/-1;justify-content:flex-start}.agent-profile-primary-grid,.agent-character{grid-template-columns:1fr}.agent-profile-tabs{gap:var(--space-4,16px)}}@media (width<=480px){.agent-resume-header,.agent-resume-section,.agent-simple-settings{padding:var(--space-4,16px)}.agent-resume-header{grid-template-columns:1fr}.agent-resume-header .agent-profile-actions{grid-column:auto}.agent-portrait{border-radius:16px;flex-basis:56px;width:56px;height:56px;font-size:28px}.agent-current-work-list li{flex-direction:column;align-items:flex-start}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Q as e,a as t}from"./i18n-
|
|
1
|
+
import{Q as e,a as t}from"./i18n-B4Fp9Oa5.js";import{r as n}from"./console-C2Lfifq-.js";import{a as r,r as i}from"./client-DodUFQDp.js";var a=n(`agent-attention`,()=>{let n=e(``),a=e({}),o=e(0),s=e([]),c=e(0),l=e([]),u=e(0),d=e(``),f=e(!1),p=e(!1),m=e(``),h=e(``),g=e(!1),_=e(!1),v=e(``),y=0,b=0;function x(e,t){d.value=e,l.value=t.items.filter(t=>t.personalSpaceId===e).slice(0,5),u.value=t.total,p.value=!0,m.value=``}function S(){b++,d.value=``,l.value=[],u.value=0,p.value=!1,f.value=!1,m.value=``}async function C(){let e=++y;if(!n.value)return;_.value=!0;let t=++b;d.value=n.value,f.value=!0,m.value=``;try{let r=new URLSearchParams({personalSpaceId:n.value,status:`open`}),l=await i(`/api/agent-attention?${r}&limit=5`);if(e!==y)return;if(a.value=l.counts,o.value=l.total,t===b&&(x(n.value,l),f.value=!1),g.value){h.value&&r.set(`agentId`,h.value);let t=await i(`/api/agent-attention?${r}&limit=100`);if(e!==y)return;s.value=t.items.filter(e=>e.personalSpaceId===n.value&&(!h.value||e.agentId===h.value)),c.value=t.total}v.value=``}catch(n){e===y&&(v.value=n instanceof Error?n.message:String(n)),t===b&&(m.value=n instanceof Error?n.message:String(n),f.value=!1)}finally{e===y&&(_.value=!1),t===b&&(f.value=!1)}}async function w(e=n.value,t={}){if(!e||!t.force&&d.value===e&&(f.value||p.value))return;let r=++b;d.value!==e&&(l.value=[],u.value=0,p.value=!1),d.value=e,f.value=!0,m.value=``;try{let t=await i(`/api/agent-attention?${new URLSearchParams({personalSpaceId:e,status:`open`,limit:`5`})}`);if(r!==b)return;x(e,t)}catch(e){r===b&&(m.value=e instanceof Error?e.message:String(e))}finally{r===b&&(f.value=!1)}}function T(e){n.value!==e&&(y++,n.value=e,a.value={},s.value=[],o.value=0,c.value=0,v.value=``,g.value=!1,_.value=!1,h.value=``,S(),e&&C())}function E(e=``){h.value=e,s.value=[],c.value=0,g.value=!0,C()}async function D(){if(_.value)return;let e=++y;_.value=!0;try{let t=new URLSearchParams({personalSpaceId:n.value,status:`open`,limit:`100`,offset:String(s.value.length)});h.value&&t.set(`agentId`,h.value);let r=await i(`/api/agent-attention?${t}`);if(e!==y)return;let a=new Set(s.value.map(e=>e.requestId));s.value.push(...r.items.filter(e=>e.personalSpaceId===n.value&&(!h.value||e.agentId===h.value)&&!a.has(e.requestId))),c.value=r.total}catch(t){e===y&&(v.value=String(t))}finally{e===y&&(_.value=!1)}}async function O(e,i){let f=n.value;if(!f||e.personalSpaceId!==f)throw Error(t(`attention.wrongSpace`));await r(`/api/agent-attention/respond`,{personalSpaceId:f,personalProjectId:e.personalProjectId,requestId:e.requestId,expectedRevision:e.revision,response:i}),n.value===f&&(s.value=s.value.filter(t=>t.requestId!==e.requestId),o.value=Math.max(0,o.value-1),a.value={...a.value,[e.agentId]:Math.max(0,(a.value[e.agentId]??0)-1)},(!h.value||h.value===e.agentId)&&(c.value=Math.max(0,c.value-1)),d.value===f&&(l.value=l.value.filter(t=>t.requestId!==e.requestId),u.value=Math.max(0,u.value-1)),await C())}return{spaceId:n,counts:a,total:o,items:s,filteredTotal:c,previewItems:l,previewTotal:u,previewSpaceId:d,previewLoading:f,previewLoaded:p,previewError:m,agentId:h,open:g,loading:_,error:v,setSpace:T,show:E,refresh:C,refreshPreview:w,more:D,respond:O}});function o(e){let t=new URLSearchParams({agent:e.agentId,project:e.personalProjectId});return e.taskId&&t.set(`task`,e.taskId),`/project-agents?${t}${e.taskId?`#task-${encodeURIComponent(e.taskId)}`:``}`}export{a as n,o as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={jefa:`/assets/jefa-avatar-Dew42td5.webp`,bole:`/assets/bole-avatar-CVIr-bU_.webp`,tonborg:`/assets/tonborg-avatar-DyxAdTD6.webp`};function t(t){return e[t.replace(/^employee\./,``)]}export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Q as e,a as t}from"./i18n-
|
|
1
|
+
import{Q as e,a as t}from"./i18n-B4Fp9Oa5.js";import{r as n}from"./client-DodUFQDp.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{E as e,P as t,S as n,a as r,it as i,ot as a,y as o}from"./i18n-
|
|
1
|
+
import{E as e,P as t,S as n,a as r,it as i,ot as a,y as o}from"./i18n-B4Fp9Oa5.js";import{t as s}from"./_plugin-vue_export-helper-BDNMzG2s.js";var c=[`aria-label`],l={class:`growth-loading__content`},u={class:`growth-loading__label`},d=s(e({__name:`GrowthLoading`,props:{label:{},variant:{default:`page`}},setup(e){let r=e;return(e,s)=>(t(),n(`span`,{class:i([`growth-loading`,[`growth-loading--${r.variant}`,{"view-loading":r.variant===`page`}]]),role:`status`,"aria-live":`polite`,"aria-atomic":`true`,"aria-label":r.label},[o(`span`,l,[s[0]||=o(`span`,{class:`growth-loading__visual`,"aria-hidden":`true`},[o(`svg`,{class:`growth-loading__mark`,viewBox:`0 0 48 48`,"aria-hidden":`true`,focusable:`false`},[o(`path`,{class:`growth-loading__arc growth-loading__arc--1`,d:`M24 5 A19 19 0 0 1 40.45 33.5`}),o(`path`,{class:`growth-loading__arc growth-loading__arc--2`,d:`M40.45 33.5 A19 19 0 0 1 7.55 33.5`}),o(`path`,{class:`growth-loading__arc growth-loading__arc--3`,d:`M7.55 33.5 A19 19 0 0 1 24 5`})])],-1),o(`span`,u,a(r.label),1)])],10,c))}}),[[`__scopeId`,`data-v-9303b8a4`]]),f=class extends Error{status;detail;constructor(e,t,n=``){super(e),this.name=`ApiError`,this.status=t,this.detail=n}};async function p(e,t){let n=await fetch(e,t);if(!n.ok){let e=(await n.text()).trim();throw new f(n.status>=500?r(`common.errors.serviceUnavailable`,{status:n.status}):e||r(`common.errors.requestFailed`,{status:n.status}),n.status,e)}return n.json()}function m(e,t){return p(e,t)}function h(e,t){return p(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function g(e,t){return p(e,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function _(e,t){return p(e,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}function v(e){return p(e,{method:`DELETE`})}export{h as a,_ as i,v as n,g as o,m as r,d as s,f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,G as t,J as n,K as r,O as i,Q as a,W as o,X as s,Y as c,a as l,et as u,j as d,k as f,nt as p,q as m,tt as h,v as g}from"./i18n-
|
|
1
|
+
import{B as e,G as t,J as n,K as r,O as i,Q as a,W as o,X as s,Y as c,a as l,et as u,j as d,k as f,nt as p,q as m,tt as h,v as g}from"./i18n-B4Fp9Oa5.js";import{i as _,r as v}from"./client-DodUFQDp.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=o(!0),t=e.run(()=>a({})),r=[],i=[],s=n({install(e){x(s),s._a=e,e.provide(S,s),e.config.globalProperties.$pinia=s,i.forEach(e=>r.push(e)),i=[]},use(e){return this._a?r.push(e):i.push(e),this},_p:r,_a:null,_e:e,_s:new Map,state:t});return s}var L=()=>{};function R(e,n,r,i=L){e.add(n);let a=()=>{e.delete(n)&&i()};return!r&&t()&&c(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],a=e[n];C(a)&&C(i)&&Object.hasOwn(e,n)&&!m(i)&&!r(i)?e[n]=U(a,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!!(m(e)&&e.effect)}function J(e,t,r,i){let{state:a,actions:o,getters:s}=t,c=r.state.value[e],l;function u(){return c||(r.state.value[e]=a?a():{}),K(p(r.state.value[e]),o,Object.keys(s||{}).reduce((t,i)=>(t[i]=n(g(()=>{x(r);let t=r._s.get(e);return s[i].call(t,t)})),t),{}))}return l=Y(e,u,t,r,i,!0),l}function Y(t,n,i={},a,c,l){let u,f=K({actions:{}},i),p={deep:!0},g,_,v=new Set,y=new Set,b=a.state.value[t];!l&&!b&&(a.state.value[t]={});let S;function C(e){let n;g=_=!1,typeof e==`function`?(e(a.state.value[t]),n={type:`patch function`,storeId:t,events:void 0}):(U(a.state.value[t],e),n={type:`patch object`,payload:e,storeId:t,events:void 0});let r=S=Symbol();d().then(()=>{S===r&&(g=!0)}),_=!0,z(v,n,a.state.value[t])}let w=l?function(){let{state:e}=i,t=e?e():{};this.$patch(e=>{K(e,t)})}:L;function T(){u.stop(),v.clear(),y.clear(),a._s.delete(t)}let E=(e,n=``)=>{if(V in e)return e[H]=n,e;let r=function(){x(a);let n=Array.from(arguments),i=new Set,o=new Set;function s(e){i.add(e)}function c(e){o.add(e)}z(y,{args:n,name:r[H],store:D,after:s,onError:c});let l;try{l=e.apply(this&&this.$id===t?this:D,n)}catch(e){throw z(o,e),e}return l instanceof Promise?l.then(e=>(z(i,e),e)).catch(e=>(z(o,e),Promise.reject(e))):(z(i,l),l)};return r[V]=!0,r[H]=n,r},D=s({_p:a,$id:t,$onAction:R.bind(null,y),$patch:C,$reset:w,$subscribe(n,r={}){if(v.has(n))return L;let i=R(v,n,r.detached,()=>o()),o=u.run(()=>e(()=>a.state.value[t],e=>{(r.flush===`sync`?_:g)&&n({storeId:t,type:`direct`,events:void 0},e)},K({},p,r)));return i},$dispose:T});a._s.set(t,D);let O=(a._a&&a._a.runWithContext||B)(()=>a._e.run(()=>(u=o()).run(()=>n({action:E}))));for(let e in O){let n=O[e];m(n)&&!q(n)||r(n)?l||(b&&G(n)&&(m(n)?n.value=b[e]:U(n,b[e])),a.state.value[t][e]=n):typeof n==`function`&&(O[e]=E(n,e),f.actions[e]=n)}return K(D,O),K(h(D),O),Object.defineProperty(D,"$state",{get:()=>a.state.value[t],set:e=>{C(t=>{K(t,e)})}}),a._p.forEach(e=>{let t=u.run(()=>e({store:D,app:a._a,pinia:a,options:f}));K(D,t)}),b&&l&&i.hydrate&&i.hydrate(D.$state,b),g=!0,_=!0,D}function X(e,t,n){let r,a=typeof t==`function`;r=a?n:t;function o(n,o){let s=i();return n||=s?f(S,null):null,n&&x(n),n=b,n._s.has(e)||(a?Y(e,t,r,n):J(e,r,n)),n._s.get(e)}return o.$id=e,o}var Z=X(`console`,()=>{let e=u(null),t=a(`idle`),n=a(`idle`),r=g(()=>[`saving`,`applying`].includes(n.value)),i=a(null),o=g(()=>{let t=e.value;return t?t.personalSpaces.find(({id:e})=>e===t.activePersonalSpaceId)??t.personalSpaces[0]??null:null}),s=g(()=>e.value?.mode===`connected`?`ready`:e.value?.mode===`degraded`?`error`:`disconnected`);async function c(){t.value=`loading`;try{e.value=await v(`/api/state`),t.value=`ready`}catch(e){t.value=`error`,h(e)}}async function d(t){try{let n=await _(`/api/capture-policy`,{enabled:t});e.value&&={...e.value,capturePolicy:n},m(l(t?`console.captureNotices.enabled`:`console.captureNotices.disabled`))}catch(e){h(e)}}async function f(t){try{let n=await _(`/api/agent-access-policy`,{enabled:t});e.value&&={...e.value,agentAccessPolicy:n},m(l(t?`console.agentAccess.enabledNotice`:`console.agentAccess.disabledNotice`))}catch(e){h(e)}}function p(t){return e.value?.capabilities?.[t]===!0}function m(e){i.value={message:e,tone:`success`}}function h(e){i.value={message:e instanceof Error?e.message:l(`common.errors.operationFailed`),tone:`error`}}function y(){i.value=null}return{state:e,runtimeStatus:t,settingsSaving:r,settingsSaveState:n,feedback:i,activePersonalSpace:o,publicRuntimeStatus:s,refresh:c,updateCapturePolicy:d,updateAgentAccessPolicy:f,hasCapability:p,notify:m,reportError:h,clearFeedback:y}});export{I as n,X as r,Z as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Z as e,a as t,et as n}from"./i18n-
|
|
1
|
+
import{Z as e,a as t,et as n}from"./i18n-B4Fp9Oa5.js";import{r}from"./client-DodUFQDp.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 n=u(e);return n===`other`?t(`knowledge.domain.actors.otherAgent`):a[n]}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=n(w(l)),b=null;function x(){return C(),e(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};
|
|
@@ -7,4 +7,4 @@ var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],en
|
|
|
7
7
|
交互设计
|
|
8
8
|
可用性审查`,preferencesPlaceholder:`每行一项,仅用于初始协作方式。`,idLocked:`创建后 Agent ID 不可修改;项目通过独立分配管理。`,allowListPlaceholder:`每行一个真实 executor ID;不填写不会猜测可用项。`,required:`请填写 Agent ID、名称和负责范围。`,occupationEmojiInvalid:`职业 emoji 只能填写一个 emoji。`,spaceUnavailable:`当前空间不可用,无法保存 Agent。`,initialAssignmentReason:`从 Agent 名录创建首条项目分配`,projectUnavailable:`所选项目已不可用,请重新选择。`,duplicate:`能力与启动约定不能包含重复项。`,saveFailed:`项目 Agent 保存失败。`},assignmentDialog:{assign:`分配项目`,end:`解除`,replace:`替换`,assignTitle:`分配项目职责`,endTitle:`解除项目分配`,replaceTitle:`替换项目 Agent`,replacement:`替换为`,replacementPlaceholder:`选择已有 Agent`,workKinds:`工作类型`,workKindsPlaceholder:`每行一项`,reasonPlaceholder:`记录分配、解除或替换原因。`,required:`请填写职责和原因。`,replacementRequired:`请选择替换 Agent。`,saveAssign:`保存分配`,saveChange:`保存变更`,saving:`正在保存 Agent 项目分配…`,saveFailed:`项目分配保存失败。`}},"en-US":{firstTask:{title:`Start your first task`,hint:`In an AI client connected to Fuli, ask for the work from your project folder. Fuli registers the project and assigns a responsible Agent.`},diagnostics:{title:`Task start and execution status`,project:`Project scope`,assignment:`Agent assignment`,execution:`Actual execution`,projectState:{temporary:`Isolated temporary project`,identified:`Project linked`,unresolved:`Project not identified`},assignmentState:{assigned:`Task assignment recorded`,unreported:`No task assignment reported`},executionState:{unreported:`No worker report received`,queued:`Worker queued`,running:`Worker reported running`,ended:`Terminal status received`,reported:`Worker report received`},temporaryHint:`This task uses an isolated temporary project.`,summaryReason:{assignedOnly:`Assigned; waiting for the client to report results.`,unassigned:`No assignment or execution recorded yet.`,eventsOnly:`Execution events received; waiting for a summary.`}},advanced:`Advanced settings and diagnostics`,taskDetails:`Collaboration and execution details`,profileDetails:`Agent profile`,conversations:{title:`Conversations and memory`,hint:`Resume across clients with relevant context loaded on demand.`,loading:`Loading conversations…`,loadFailed:`Could not load conversations. Try again.`,empty:`No saved conversations for this project yet.`,untitled:`Untitled conversation`,compacted:`Compacted`,recent:`Recent`,rawRetained:`Compaction never deletes originals.`,loadingMessages:`Loading original messages…`,more:`Load next messages`,noMessages:`No original messages available yet.`,settings:`Memory settings`,loadingPolicy:`Loading memory settings…`,capture:`Save this Agent’s conversations in this project`,compactAfterKb:`Compact after (KB)`,budget:`Context recovery budget`,budgetHint:`Past the threshold, earlier messages fold into a digest; originals are always kept.`,invalidPolicy:`Use 8–1024 KB for compaction and 512–16000 for the budget.`,save:`Save memory settings`,saving:`Saving memory settings…`,saved:`Memory settings saved.`,user:`User`,assistant:`Agent`,tool:`Tool`,copyContinuation:`Copy continuation`,copiedContinuation:`Continuation copied.`,copyContinuationFailed:`Could not copy automatically. Select and copy the instruction below.`,manualContinuation:`Continuation instruction`},workHistory:{title:`Work history`,loading:`Loading employee work records…`,loadFailed:`Could not load work records. Try again.`,empty:`No work records for this project yet.`,reported:`Reported`,completed:`Completed`,incomplete:`Incomplete`,failed:`Failed`,no_change:`No changes`,unreported:`Summary missing`,running:`In progress`},team:{hr:`AR`,manager:`Project manager`,lead:`Project lead`,noLead:`Project lead required`,autoGrow:`Add new employees to the team`,unavailableMember:`Unavailable member`,removeUnavailable:`Uncheck to remove`,autoGrowMeta:`New long-term Agents join the team; the first becomes lead.`,unavailable:`Project lead unavailable; complete the handoff`,summary:`Talk to the lead; members work by specialty.`,members:`Team members`,edit:`Manage team`,save:`Save team`},aria:`Project Agent directory`,title:`Agents`,listLabel:`Space Agent list`,notReported:`Not reported`,noToolsUsed:`No tools used`,searchLabel:`Search Agents`,searchPlaceholder:`Search name, ID, responsibility, or capability`,add:`Add Agent`,edit:`Edit`,saved:`Project Agent saved.`,retry:`Reload`,loading:`Loading the project Agent directory…`,loadError:`Project Agents are temporarily unavailable.`,emptyTitle:`No project Agents yet`,emptyCopy:`Start a project task and AR will staff an Agent.`,noMatchTitle:`No matching Agents`,noMatchCopy:`Change the project, status, or search filters.`,stats:{total:`{count} Agents`,active:`{count} available`,assignments:`{count} assignments`,projects:`Across {count} projects`,noOnlineClaim:`Configured is not online; only reports count`},coordination:{aria:`Agent collaboration policy for {project}`,title:`Project collaboration`,loading:`Loading the project collaboration policy…`,autoReuse:`Reuse the previous Agent`,autoReuseMeta:`New tasks go to the lead, or the last Agent if none. Off: {'@'} an Agent manually.`,askBeforeRecruitment:`Ask before adding an Agent`,askBeforeRecruitmentMeta:`When no Agent can be reused, wait for confirmation before creating one.`,saving:`Saving the project collaboration policy…`,saved:`Project policy saved.`,loadFailed:`Project policy is temporarily unavailable.`,saveFailed:`Project policy could not be saved.`},agentType:{coordinator:`Coordinator`,durable:`Durable`,hr:`AR`,temporary:`Temporary`},status:{all:`All statuses`,active:`Available`,inactive:`Inactive`,archived:`Archived`},assignmentStatus:{active:`Assigned`,ended:`Ended`,unassigned:`Unassigned`,replaced:`Replaced`},taskStatus:{awaiting_recruitment:`Awaiting recruitment`,queued:`Queued`,running:`Running`,paused:`Paused`,failed:`Failed`,awaiting_review:`Awaiting review`,completed:`Completed`,cancelled:`Cancelled`,blocked:`Blocked`,idle:`Idle`},fields:{project:`Project`,agentId:`Agent ID`,occupationEmoji:`Occupation emoji`,responsibility:`Responsibility`,capabilities:`Capabilities`,initialPreferences:`Startup conventions`,status:`Status`,updatedAt:`Last updated`,agentType:`Identity type`,defaultModelStrategy:`Default model strategy`,executorPolicy:`Executor policy`,modelIntent:`Provider-neutral intent`,allowList:`Locked allow-list`,assignments:`Assignments`,memoryScope:`Memory boundary`,scope:`Scope`,assignmentModel:`Assignment strategy`,collaborators:`Collaborators`,actualExecution:`Actual execution`,executionSummary:`Execution summary`,workerEventEvidence:`Worker event evidence`,reportedStaffingDecision:`Reported staffing decision`,executionEnvironment:`Execution environment`,toolsUsed:`Tools used`,sourceApplication:`Source application`,sourceSession:`Source session`,workerSession:`Worker session`,reporterSession:`Reporting session`,tokenUsage:`Token usage`,reportedAt:`Reported at`,workSummary:`Work summary`,terminalStatus:`Terminal status`,actualModel:`Actual model`,worker:`Worker`,coordinator:`Coordinator Agent`,candidateAgents:`Candidate Agents`,complexity:`Complexity`,parallelPlan:`Parallel plan`,run:`Run`,recruitment:`Recruitment source`,strategySource:`Strategy source`,reason:`Reason`,matchBasis:`Match basis`},participantRoles:{lead:`Lead`,collaborator:`Collaborator`},sections:{assignments:`Project assignments & history`,strategy:`Model strategy & executors`,tasks:`Tasks & collaboration`,activity:`Contribution activity`,clients:`Clients`,routing:`Routing rules`,learning:`Candidate evidence`,recruitment:`Recruitment events`},detail:{choose:`Select an Agent to inspect its responsibilities`,noRun:`No run recorded`,stateReported:`State reported; run evidence is not reported`,refresh:`Refresh verified data`,notLoaded:`Verified data for this section has not been loaded.`,loading:{assignments:`Loading project assignments and history…`,tasks:`Loading tasks and collaboration records…`,activity:`Loading contribution activity…`,recruitments:`Loading recruitment events…`,executors:`Loading the executor directory…`,routingRules:`Loading routing rules…`,learning:`Loading candidate learning evidence…`},sectionUnavailable:`Verified data for this section is temporarily unavailable.`,noAssignments:`No project assignments reported.`,noTasks:`No task history.`,noExecutionSummary:`No real participating executor was reported.`,notReportedActualExecution:`Actual execution evidence was not reported.`},strategy:{flexible:`flexible`,locked:`locked`,providerNeutral:`The default strategy is provider-neutral; executor, model, and connection state are never inferred.`,noAllowList:`No locked allow-list; executor availability is not reported.`,lockedUnavailable:`No locked executor is available; tasks stay queued.`,availabilityUnreported:`Availability not reported`,actualUnreported:`Actual use not reported`},activity:{aria:`Daily contribution activity`,empty:`No verified completed, failed, or cancelled history.`,noTasks:`No task summary for this day.`},clients:{codex:`Codex`,claude:`Claude`,claude_code:`Claude Code`,cursor:`Cursor`,gemini_cli:`Gemini CLI`,kiro:`Kiro`,other:`Other client`,allowed:`Allowed`,notAllowed:`Not allowed`,observed:`{count} observed calls`,observedAny:`Observed use reported`,unreported:`Actual use not reported`,integrationUnreported:`Integration status not reported`,empty:`Allowed clients, observed use, and integration status are not reported.`},tokenSources:{executor:`Executor`,host:`Host`,dingdong:`DingDong`},routing:{empty:`No routing rules configured.`,priorityNote:`Only existing rules are shown.`,addExecutor:`Register executor`,editExecutor:`Edit executor`,addRule:`Add rule`,disable:`Disable`,updateFailed:`Could not update the routing rule.`,authorize:`Authorize`,revoke:`Revoke authorization`,authorizing:`Saving executor authorization status…`,revoking:`Saving executor revocation status…`,authorizeReason:`Console authorized executor`,revokeReason:`Console revoked executor authorization`,authorizationFailed:`Could not update executor authorization.`,disabling:`Saving the routing rule disabled status…`,editor:{executorCreateTitle:`Register executor`,executorEditTitle:`Edit executor`,ruleCreateTitle:`Add routing rule`,executorId:`Executor ID`,displayName:`Display name`,executorKind:`Kind`,priority:`Global priority`,capabilities:`Capabilities`,healthRequired:`Require health check`,scope:`Rule scope`,taskId:`Task ID`,workKind:`Work kind`,executorIds:`Allowed executor IDs`,executorIdsPlaceholder:`One real executor ID per line`,requiredCapabilities:`Required capabilities`,evidenceNote:`Authorization and health come from backend reports.`,ruleNote:`Rules only affect candidate matching; they do not change an Agent locked policy.`,executorRequired:`Enter an executor ID, name, and valid priority.`,ruleRequired:`Enter a work kind, executor ID, and reason.`,save:`Save`,savingExecutor:`Saving the executor directory record…`,savingRule:`Saving the routing rule…`,saveFailed:`Could not save the directory entry or rule.`}},learning:{neutral:`Neutral`,recorded:`Evidence recorded`,samples:`{count} samples`,recent:`{count} recent weighted`,score:`Reported score {score}`,decayUnreported:`Decay basis not reported`,ignore:`Ignore`,reset:`Reset`,ignoring:`Saving the learning evidence ignore status…`,resetting:`Saving the learning evidence reset status…`,resetUnavailable:`Project, work-kind, or executor evidence is missing; reset is unavailable.`,updateFailed:`Could not update learning evidence.`,empty:`No real learning evidence; no score or candidate preference is shown.`,note:`Only used to rank peer candidates.`},source:{testRole:`Test role`,cleanup:`Clean up test role`,cleanupLoading:`Cleaning up the test role…`,cleanupFailed:`Could not clean up the test role.`},recruitment:{hr:`AR Agent`,trigger:`Trigger client`,reason:`Recruitment reason`,time:`Time`,testSource:`Test source`,empty:`No matching real recruitment record.`,policy:`Recruitment confirmation`,automatic:`Automatic recruitment`,requireConfirmation:`Require confirmation`,policyUpdateFailed:`Could not update recruitment confirmation policy.`,approve:`Approve`,cancel:`Cancel`,approving:`Submitting the recruitment approval…`,cancelling:`Submitting the recruitment cancellation…`,approveReason:`User approved recruitment event`,cancelReason:`User cancelled recruitment event`,decisionFailed:`Could not process the recruitment event.`},dialog:{createTitle:`Add project Agent`,editTitle:`Edit project Agent`,saveCreate:`Create Agent`,saveEdit:`Save changes`,saving:`Saving the project Agent…`,projectPlaceholder:`Select a project`,agentIdPlaceholder:`For example, design-agent`,namePlaceholder:`For example, Design Agent`,occupationEmojiPlaceholder:`For example, 🎛️`,responsibilityPlaceholder:`Describe the work assigned to this Agent.`,capabilitiesPlaceholder:`One per line, for example:
|
|
9
9
|
Interaction design
|
|
10
|
-
Usability review`,preferencesPlaceholder:`One per line, used only to initialize collaboration.`,idLocked:`The Agent ID is stable after creation; projects are managed as separate assignments.`,allowListPlaceholder:`One real executor ID per line; availability is never inferred.`,required:`Agent ID, name, and responsibility are required.`,occupationEmojiInvalid:`Occupation emoji must contain only emoji characters.`,spaceUnavailable:`The current space is unavailable; the Agent cannot be saved.`,initialAssignmentReason:`Initial project assignment from the Agent directory`,projectUnavailable:`The selected project is no longer available. Choose another project.`,duplicate:`Capabilities and startup conventions cannot contain duplicates.`,saveFailed:`Could not save the project Agent.`},assignmentDialog:{assign:`Assign project`,end:`Unassign`,replace:`Replace`,assignTitle:`Assign project responsibility`,endTitle:`Unassign project`,replaceTitle:`Replace project Agent`,replacement:`Replace with`,replacementPlaceholder:`Select an existing Agent`,workKinds:`Work kinds`,workKindsPlaceholder:`One per line`,reasonPlaceholder:`Record why this assignment changed.`,required:`Responsibility and reason are required.`,replacementRequired:`Choose a replacement Agent.`,saveAssign:`Save assignment`,saveChange:`Save change`,saving:`Saving the Agent project assignment…`,saveFailed:`Could not save the project assignment.`}}},rh={"zh-CN":{overview:{title:`工作台`},preferences:{title:`偏好`,description:`全局与项目级的品味、个性和判断偏好。`},writingTaste:{title:`文风画像`},personalProjects:{title:`项目`,description:`本机私有项目、项目知识与按任务生效的协作偏好。`},projectAgents:{title:`Agents`},roundtable:{title:`圆桌`},employeeWorkbench:{title:`专属 Agent`},loadFailure:{title:`暂时无法打开页面`,resources:`页面文件加载失败,可能是界面刚更新。`,message:`页面没能加载。`,reload:`重新载入并打开`,dismiss:`留在当前页`},organizer:{title:`知识整理`},publicProjects:{title:`公共项目`,description:`发现、订阅和维护公共 Provider 上的项目。`},knowledge:{title:`知识`},about:{title:`关于`},settings:{title:`设置`},review:{title:`审核`,description:`个人发布确认与公共项目 Maintainer 审核。`},connections:{title:`连接`,description:`本地知识库状态、公共 Provider 与项目订阅。`}},"en-US":{overview:{title:`Workspace`},preferences:{title:`Preferences`,description:`Global and project taste, personality, and judgment preferences.`},writingTaste:{title:`Writing taste`},personalProjects:{title:`Projects`,description:`Private local projects, project knowledge, and task-scoped collaboration preferences.`},projectAgents:{title:`Agents`},roundtable:{title:`Roundtable`},employeeWorkbench:{title:`Specialist Agents`},loadFailure:{title:`This page could not open`,resources:`Page files could not load; the app may have just updated.`,message:`The page could not load.`,reload:`Reload and open`,dismiss:`Stay here`},organizer:{title:`Organize`},publicProjects:{title:`Public projects`,description:`Discover, subscribe to, and maintain projects on a public Provider.`},knowledge:{title:`Knowledge`},about:{title:`About`},settings:{title:`Settings`},review:{title:`Review`,description:`Personal publishing confirmation and public project Maintainer review.`},connections:{title:`Connections`,description:`Local knowledge status, public Providers, and project subscriptions.`}}},ih={"zh-CN":{aria:`设置`,connection:{title:`客户端接入`,description:`支持 MCP 工具调用的客户端均可尝试接入,无需指定模型。`,loading:`正在读取 MCP 接入配置…`,loadError:`暂时无法读取接入配置`,retry:`重试`,format:`配置格式`,formats:{standard:`通用 MCP`,vscode:`VS Code`,server:`仅服务配置`},copy:`复制 MCP 配置`,configuration:`MCP 接入配置`,copied:`已复制`,manual:`请选中下方配置手动复制。`,merge:`将 fuli 这一项合并到客户端的 MCP 设置中,保留已有服务。配置用于运行 FULI 的这台电脑。`,boundary:`通用接入提供工具与记忆;自动采集对话和唤醒会话需要客户端适配。`,guide:`接入说明`},peer:{title:`局域网圆桌(Beta)`,description:`在同一局域网的两台电脑之间,只向对方共享当前项目组长。配对、共享和撤销只能在本机完成。`,loading:`正在读取局域网圆桌…`,loadError:`暂时无法读取局域网圆桌`,retry:`重试`,off:`尚未配对。可以在这台电脑上主持,或粘贴另一台电脑的邀请。`,noAddress:`这台电脑没有可用的局域网地址。`,host:`在这台电脑上主持`,hostAddress:`本机地址`,hostName:`这台电脑的名称`,hostAction:`开始主持`,hosting:`正在开启局域网圆桌…`,join:`加入另一台电脑`,invitation:`邀请`,invitationPlaceholder:`粘贴 fuli-peer-invite:1:…`,joinName:`这台电脑的名称`,joinAction:`指纹一致,加入`,previewAction:`查看邀请`,previewing:`正在读取邀请…`,removalPending:`本机已停止共享。对方离线,恢复连接后会自动撤回配对。`,joining:`正在配对…`,fingerprint:`本机指纹`,coordinatorFingerprint:`对方指纹`,compare:`配对前请双方核对指纹。`,invite:`生成一次性邀请`,inviting:`正在生成邀请…`,inviteHint:`邀请十分钟内一次性有效。把邀请交给对方前,先核对指纹。`,copyInvite:`复制邀请`,copied:`已复制`,copyManual:`请选中下方邀请手动复制。`,shares:`共享项目组长`,sharesHint:`每个项目只共享当前组长;对方只能向该组长提问。成员任务仍由本机组长分派。交接组长后需重新共享,不会悄悄换成新人。`,noProjects:`没有可共享的项目。`,lead:`当前组长 {name}`,noLead:`这个项目还没有可用的组长`,clients:`可被唤醒的客户端`,folder:`本机项目文件夹(可选)`,folderHint:`只用于本机唤醒新会话,不会发给对方。`,leadChanged:`这个项目的组长已更换,取消勾选或重新保存后才会共享新的组长。`,leadUnavailable:`当前组长不可用,暂不向对方提供。`,saveShares:`保存共享`,savingShares:`正在保存共享项目组长…`,devices:`已配对设备`,online:`在线`,offline:`离线`,revoke:`撤销`,revoking:`正在撤销配对…`,disable:`关闭局域网圆桌`,disabling:`正在关闭局域网圆桌…`,disableHint:`关闭后停止监听、共享和信任已配对设备。`,clientsCodex:`Codex`,clientsClaude:`Claude Code`},loading:`正在读取运行设置…`,resources:{title:`资源占用`,loading:`正在读取内存与硬盘占用…`,memory:`内存`,disk:`硬盘`,available:`电脑可用 {value}`,partial:`部分组件暂时无法读取`,measuredAt:`内存更新于 {time}`,diskMeasuredAt:`硬盘更新于 {time}`,refresh:`刷新频率`,refreshUnit:`{seconds} 秒`,temporary:`其中 Neo4j 临时文件 {value}`,exclusionsContainer:`不含浏览器标签页及 Docker 共享虚拟机开销。`,exclusionsNative:`不含浏览器标签页内存。原生进程已计入。`,unavailable:`暂时无法获取资源数据`,components:{console:`管理服务`,personalProvider:`个人 Provider`,personalNeo4j:`个人 Neo4j`,workspaceProvider:`开发公共 Provider`,workspaceNeo4j:`开发公共 Neo4j`,application:`程序文件`,localData:`本地运行数据`,containerImages:`容器镜像`,containerWritable:`容器运行数据`,neo4jData:`Neo4j 数据`,neo4jLogs:`Neo4j 日志`}},ports:{title:`服务端口`,personal:`个人服务`,development:`公共服务`,developing:`开发中`,developmentMeta:`fuli-server 发布后,可配置已部署服务的域名。`,console:`管理界面`,personalProvider:`个人 Provider`,personalNeo4jHttp:`个人 Neo4j Browser`,personalNeo4jBolt:`个人 Neo4j Bolt`,workspaceProvider:`公共 Provider`,workspaceNeo4jHttp:`公共 Neo4j Browser`,workspaceNeo4jBolt:`公共 Neo4j Bolt`,active:`当前 {port}`},behavior:{title:`运行设置`,capture:`自动沉淀`,captureMeta:`把新的稳定会话知识写入本机`,agentAccess:`Agent 使用`,agentAccessMeta:`允许已连接的 Agent 调用 FULI`,lanAccess:`局域网访问`,lanAccessMeta:`允许同一可信网络中的设备访问管理界面`,runtimeMode:`图数据库运行方式`,runtimeModeMeta:`当前运行:{mode};保存后重启生效`,runtimeRecommendation:`本机内存较小,推荐原生模式,避免虚拟机常驻内存`,runtimeModes:{native:`原生(低内存)`,container:`容器(兼容)`},language:`界面语言`,zh:`简体中文`,en:`English`},conversationLaunchers:{title:`会话打开方式`,enabled:`启用`,sourceId:`来源 ID · {id}`,idFormat:`可打开的 ID`,appName:`打开 App`,urlTemplate:`链接模板`,idFormats:{any:`任意非空 ID`,uuid:`仅 UUID`},idFormatMeta:`Codex 需要原生会话 UUID。`,applications:{codex:`Codex`,claude:`Claude`,claude_code:`Claude Code`,cursor:`Cursor`,gemini_cli:`Gemini CLI`,kiro:`Kiro`,other:`其他 Agent`}},save:`保存设置`,saving:`正在保存运行设置…`,saved:`设置已保存`,restartRequired:`需要重启`,restartCopy:`端口或局域网设置将在运行 fuli restart 后生效。`,loadError:`无法读取设置`,saveError:`无法保存设置`},"en-US":{connection:{title:`Client connection`,description:`Connect clients that support MCP tool calls. No specific model is required.`,loading:`Loading MCP connection configuration…`,loadError:`Connection configuration is unavailable`,retry:`Retry`,format:`Configuration format`,formats:{standard:`Standard MCP`,vscode:`VS Code`,server:`Server only`},copy:`Copy MCP configuration`,configuration:`MCP connection configuration`,copied:`Copied`,manual:`Select and copy the configuration manually.`,merge:`Merge the fuli entry into your client’s MCP settings and keep existing servers. This configuration is for the computer running FULI.`,boundary:`MCP provides tools and memory. Automatic conversation capture and wake/resume need a client adapter.`,guide:`Connection guide`},peer:{title:`LAN roundtable (Beta)`,description:`On the same LAN, share only each project’s current lead with another computer. Pairing, sharing and revoking stay on this device.`,loading:`Loading the LAN roundtable…`,loadError:`The LAN roundtable is unavailable`,retry:`Retry`,off:`Not paired yet. Host on this computer, or paste an invitation from another one.`,noAddress:`This computer has no usable LAN address.`,host:`Host on this computer`,hostAddress:`This computer’s address`,hostName:`Name of this computer`,hostAction:`Start hosting`,hosting:`Opening the LAN roundtable…`,join:`Join another computer`,invitation:`Invitation`,invitationPlaceholder:`Paste fuli-peer-invite:1:…`,joinName:`Name of this computer`,joinAction:`Fingerprints match · Join`,previewAction:`Review invitation`,previewing:`Reading invitation…`,removalPending:`Sharing has stopped on this device. Pairing will be removed when the coordinator is available.`,joining:`Pairing…`,fingerprint:`This device`,coordinatorFingerprint:`The other device`,compare:`Compare fingerprints before you share an invitation.`,invite:`Create a one-use invitation`,inviting:`Creating an invitation…`,inviteHint:`The invitation is valid once for ten minutes. Compare fingerprints before you send it.`,copyInvite:`Copy invitation`,copied:`Copied`,copyManual:`Select and copy the invitation manually.`,shares:`Shared project leads`,sharesHint:`Each project shares only its current lead. The other device can ask that lead, not members. Member work is still dispatched here. After a handoff, share again; the new lead is never substituted silently.`,noProjects:`No projects can be shared.`,lead:`Current lead {name}`,noLead:`This project has no available lead`,clients:`Clients that may be woken`,folder:`Local project folder (optional)`,folderHint:`Used only to start a new session on this computer. It is never sent to the other device.`,leadChanged:`This project’s lead changed. Uncheck or save again to share the new lead.`,leadUnavailable:`The current lead is unavailable and is not offered to the other device.`,saveShares:`Save sharing`,savingShares:`Saving shared project leads…`,devices:`Paired devices`,online:`Online`,offline:`Offline`,revoke:`Revoke`,revoking:`Revoking the device…`,disable:`Turn off the LAN roundtable`,disabling:`Turning off the LAN roundtable…`,disableHint:`This stops listening, sharing and trusting paired devices.`,clientsCodex:`Codex`,clientsClaude:`Claude Code`},aria:`Settings`,loading:`Loading runtime settings…`,resources:{title:`Resource usage`,loading:`Reading memory and disk usage…`,memory:`Memory`,disk:`Disk`,available:`{value} available on this device`,partial:`Some components are temporarily unavailable`,measuredAt:`Memory updated {time}`,diskMeasuredAt:`Disk updated {time}`,refresh:`Refresh interval`,refreshUnit:`{seconds} seconds`,temporary:`{value} is Neo4j temporary data`,exclusionsContainer:`Browser tabs and shared Docker VM overhead are excluded.`,exclusionsNative:`Browser-tab memory is excluded. Native processes are included.`,unavailable:`Resource data is temporarily unavailable`,components:{console:`Management service`,personalProvider:`Personal Provider`,personalNeo4j:`Personal Neo4j`,workspaceProvider:`Development public Provider`,workspaceNeo4j:`Development public Neo4j`,application:`Application files`,localData:`Local runtime data`,containerImages:`Container images`,containerWritable:`Container runtime data`,neo4jData:`Neo4j data`,neo4jLogs:`Neo4j logs`}},ports:{title:`Service ports`,personal:`Personal services`,development:`Public service`,developing:`In development`,developmentMeta:`Configure the deployed server domain after fuli-server is published.`,console:`Management UI`,personalProvider:`Personal Provider`,personalNeo4jHttp:`Personal Neo4j Browser`,personalNeo4jBolt:`Personal Neo4j Bolt`,workspaceProvider:`Public Provider`,workspaceNeo4jHttp:`Public Neo4j Browser`,workspaceNeo4jBolt:`Public Neo4j Bolt`,active:`Active: {port}`},behavior:{title:`Runtime settings`,capture:`Automatic capture`,captureMeta:`Write new, stable conversation knowledge to this device`,agentAccess:`Agent access`,agentAccessMeta:`Allow connected Agents to use FULI`,lanAccess:`LAN access`,lanAccessMeta:`Allow devices on the same trusted network to open the console`,runtimeMode:`Graph database runtime`,runtimeModeMeta:`Active: {mode}; restart after saving to apply`,runtimeRecommendation:`Native mode is recommended on this low-memory device to avoid VM overhead`,runtimeModes:{native:`Native (low memory)`,container:`Container (compatible)`},language:`Interface language`,zh:`简体中文`,en:`English`},conversationLaunchers:{title:`Conversation openers`,enabled:`Enabled`,sourceId:`Source ID · {id}`,idFormat:`Allowed IDs`,appName:`Open with app`,urlTemplate:`URL template`,idFormats:{any:`Any non-empty ID`,uuid:`UUID only`},idFormatMeta:`Codex needs the native conversation UUID.`,applications:{codex:`Codex`,claude:`Claude`,claude_code:`Claude Code`,cursor:`Cursor`,gemini_cli:`Gemini CLI`,kiro:`Kiro`,other:`Other Agent`}},save:`Save settings`,saving:`Saving runtime settings…`,saved:`Settings saved`,restartRequired:`Restart required`,restartCopy:`Port and LAN changes apply after running fuli restart.`,loadError:`Could not load settings`,saveError:`Could not save settings`}},ah={"zh-CN":{status:{collecting:`收集中`,preview_ready:`初稿已形成`,active:`已启用`},milestone:{aria:`文风画像成熟度`,collectingTitle:`文风画像`,previewTitle:`文风画像 · 初稿`,activeTitle:`文风画像 · 已形成`,rules:`{current}/{target} 条规则`,sessions:`{current}/{target} 次会话`,open:`查看`},page:{loading:`正在读取文风画像…`,back:`返回偏好`,collectingTitle:`文风画像收集中`,collectingCopy:`跨多个会话积累到足够证据,或你确认足够多的规则后生成。`,previewTitle:`文风画像初稿`,previewCopy:`已有重复证据,等你确认。`,activeTitle:`你的文风`,activeCopy:`Agent 写作时会遵循这些规则;当前请求优先。`,readinessAria:`文风画像生成条件`,rulesTitle:`当前规则`,rulesEmpty:`还没有识别到文风规则。`,profileUnavailable:`暂时无法读取文风画像。`,edit:`修改`,confirm:`确认`,conflict:`存在冲突`,evidence:`{evidence} 条证据`,sessions:`{sessions} 次会话`,globalScope:`个人全局`,projectScope:`仅 {project}`,updated:`更新于 {time}`,contexts:`适用:{contexts}`,agentPreviewTitle:`Agent 使用的规则`,showAgentPreview:`查看 Agent 规则`,hideAgentPreview:`收起 Agent 规则`},evidenceStatus:{Confirmed:`已确认`,Observed:`已观察`,"Working hypothesis":`工作假设`},criteria:{rules:`稳定规则`,evidence:`支持证据`,sessions:`独立会话`,days:`观察日期`,confirmed:`用户确认`,conflicts:`未解决冲突`,progress:`{current} / {target}`,conflictsProgress:`{current} 个`}},"en-US":{status:{collecting:`Collecting`,preview_ready:`Draft ready`,active:`Active`},milestone:{aria:`Writing taste readiness`,collectingTitle:`Writing taste`,previewTitle:`Writing taste · draft`,activeTitle:`Writing taste · ready`,rules:`{current}/{target} rules`,sessions:`{current}/{target} sessions`,open:`View`},page:{loading:`Loading writing preferences and rule evidence…`,back:`Back to preferences`,collectingTitle:`Still collecting writing preferences`,collectingCopy:`The profile appears after evidence spans multiple sessions and days, or after you directly confirm enough rules.`,previewTitle:`Writing-taste draft`,previewCopy:`These patterns have repeated evidence but still need your confirmation.`,activeTitle:`Your writing taste`,activeCopy:`Agents use confirmed and observed rules; the current request always wins.`,readinessAria:`Writing taste generation criteria`,rulesTitle:`Current rules`,rulesEmpty:`No writing-related preference has been identified yet.`,profileUnavailable:`Writing taste is temporarily unavailable.`,edit:`Edit`,confirm:`Confirm`,conflict:`Conflict`,evidence:`{evidence} evidence records`,sessions:`{sessions} sessions`,globalScope:`Personal global`,projectScope:`{project} only`,updated:`Updated {time}`,contexts:`Applies to: {contexts}`,agentPreviewTitle:`Rules used by Agents`,showAgentPreview:`View Agent rules`,hideAgentPreview:`Hide Agent rules`},evidenceStatus:{Confirmed:`Confirmed`,Observed:`Observed`,"Working hypothesis":`Working hypothesis`},criteria:{rules:`Stable rules`,evidence:`Supporting evidence`,sessions:`Independent sessions`,days:`Observation days`,confirmed:`User-confirmed`,conflicts:`Unresolved conflicts`,progress:`{current} / {target}`,conflictsProgress:`{current}`}}},oh={"zh-CN":{recruit:`聘请 Agent`,workbench:`Agent 工作台`,directory:`专属 Agent`,project:`分配到项目`,unassigned:`暂不分配`,choose:`选择专属 Agent`,capabilities:`擅长`,permissions:`项目权限`,boardRead:`读取所选项目的看板`,boardWrite:`创建、修改任务与状态`,noExecutor:`聘请不会启动模型或外部执行器。`,hostReady:`工作台已就绪 · 随 FULI 运行`,installRequired:`工作台尚未安装;聘请只创建 Agent 身份。`,installHelp:`构建 Agent 包后运行 fl employee install <目录>。`,recruitName:`聘请 {name}`,rehire:`恢复 {name}`,assign:`保存负责范围`,recruited:`已聘请`,recruiting:`正在保存负责范围…`,open:`打开工作台`,close:`关闭`,cancel:`取消`,retry:`重试`,loading:`正在读取 Agent 目录…`,manageProjects:`管理负责项目`,manageProjectsTitle:`管理 {name} 的项目`,loadingScope:`正在读取项目负责范围…`,loadingBoard:`正在读取任务看板…`,loadingTask:`正在读取任务详情…`,loadingShare:`正在读取项目分享状态…`,loadingReport:`正在读取公开报告…`,invalidScope:`所选项目不在 Jefa 的负责范围内,请检查项目链接。`,task:{create:`新建任务`,detail:`任务详情`,project:`所属项目`,chooseProject:`选择项目`,title:`任务名称`,summary:`任务说明`,priority:`优先级`,criteria:`验收条件(每行一条)`,tags:`标签(逗号分隔)`,save:`保存任务`,saving:`正在保存任务…`,reload:`重新读取`,priorities:{critical:`紧急`,high:`高`,medium:`中`,low:`低`}},share:{title:`对外报告`,projects:`分享项目`,scopeHint:`选择全部或部分项目,生成一个汇总报告链接。`,generate:`生成分享链接`,generating:`正在生成分享链接…`,revoking:`正在关闭分享…`,link:`分享链接`,copy:`复制链接`,copied:`已复制`,preview:`预览报告`,active:`已开放分享`,revoke:`关闭分享`,local:`当前地址只有本机能访问。`,loadFailed:`部分项目的分享状态读取失败,请重试。`,partial:`部分项目没能开启分享,请重试。`,copyFailed:`自动复制失败,请选中链接手动复制。`,unavailable:`报告链接无效、分享已关闭,或项目已不可访问。`,unavailableCount:`{count} 个项目已关闭分享或暂不可访问。`,readOnly:`只读报告`,disclosure:`只公开任务名称、优先级和状态。`},shareContent:{emptyTitle:`暂无可公开的任务`,emptyReport:`这 {count} 个项目还没有公开的任务。`,emptySelection:`所选项目暂无公开任务。`,publicCount:`报告将展示 {count} 条公开任务`,verifyContent:`生成时会校验公开内容,不会自动公开私有任务。`},allProjects:{option:`全部项目`,optionMeta:`{count} 个项目`,title:`任务看板`,projectFilter:`项目范围`,projectFilterHint:`只影响当前看板。`,search:`搜索任务`,searchPlaceholder:`搜索任务、项目或标签`,boardLabel:`任务看板`,partial:`已显示 {loaded}/{total} 个项目,{failed} 个项目读取失败。`,truncated:`有 {count} 个项目超过当前读取上限,暂未展示全部任务。`,empty:`所有项目都很清爽`,emptyHint:`当前负责的项目还没有任务。`,noProjectsVisible:`没有显示任何项目`,noProjectsVisibleHint:`重新勾选项目后,就能继续查看对应任务。`,showAllProjects:`显示全部项目`,noMatch:`没有匹配的任务`,noMatchHint:`换个关键词,或清空搜索后查看全部任务。`,columnEmpty:`暂无任务`,taskCount:`{count} 个任务`,openTask:`在 {project} 中查看任务:{task}`,dragHint:`拖动卡片更新状态;键盘:空格拿起,方向键移动,空格放下。`,dragTask:`移动任务:{task}`,saving:`正在保存任务状态…`,dragLifted:`已拿起“{task}”,当前位置:{status}。`,dragMoved:`已移动到:{status}。`,dragDropped:`已将“{task}”移动到:{status}。`,dragCancelled:`已取消移动。`,moveFailed:`任务移动失败,已恢复原状态:{error}`,refreshRequired:`任务版本信息缺失,请刷新看板后重试。`,status:{planned:`待办`,active:`进行中`,blocked:`阻塞`,review:`待确认`,done:`已完成`}},assignedCount:`负责 {count} 个项目`,noAssignedProjects:`尚未分配项目`,manageHint:`可同时负责多个项目。`,filterLabel:`筛选项目`,filterHint:`仅筛选 Agent 列表,不改变任何负责范围。`,filterEmpty:`未选择项目`,allProjectsFilter:`全部项目`,success:`{name} 已加入`,successUnassigned:`可以稍后为 Agent 分配项目。`,successMultiple:`现在负责 {count} 个项目。`,scopeSaved:`负责范围已保存`,scopeRemoved:`将移出 {count} 个项目,项目和任务数据会保留。`,reloadScope:`重新读取负责范围`,scope:{rule:`管理范围规则`,continuousAll:`全部项目 · 自动纳入`,onlySelected:`只管理所选项目`,allHint:`现在和以后的项目都由 {name} 管理;取消勾选即排除。`,selectedHint:`只管理下方勾选的项目,不自动纳入新项目。`,excludeHint:`取消勾选的项目不再经过这位 Agent。`,excludedCount:`已排除 {count} 个项目。`,successAll:`当前负责 {count} 个项目,以后新建的项目也会自动纳入。`,label:`负责项目`,all:`全部项目`,allSummary:`全部项目 · {count} 个`,selected:`已选 {count} 个项目`,search:`搜索项目`,invert:`反选`,multiple:`多选`,count:`已选 {selected} / 共 {total} 个项目`,done:`完成选择`,reset:`重置`,storageUnavailable:`浏览器无法保存筛选,重新打开后会丢失。`,noMatch:`没有匹配的项目`,empty:`暂无可选项目`,snapshotHint:`支持多选、全选后排除;新建项目需另行选择。`},titles:{heading:`会话标题`,mode:`整理方式`,style:`标题风格`,auto:`自动整理(客户端支持时)`,suggest:`只生成建议`,off:`不整理标题`,emoji:`Emoji + 类型`,text:`纯文字`,example:`格式示例`,exampleTask:`修复登录异常`,boundary:`参考任务优先级与类型;手动改过的标题不再覆盖。`},bole:{title:`团队`,allProjects:`全部项目与未归属`,viewLabel:`团队视图`,search:`搜索 Agent、任务或招募原因`,workFilter:`工作状态`,allWork:`全部状态`,withoutTask:`暂无任务`,allRoles:`全部角色`,clearFilters:`清空筛选`,resultCount:`{count} 条记录`,taskColumn:`当前任务`,projectsColumn:`所属项目`,moreProjects:`另 {count} 个项目`,noMatch:`没有匹配的记录,请调整筛选条件。`,overview:`人员概览`,loading:`正在读取团队成员、任务和招募记录…`,workingNow:`正在工作`,coveredProjects:`覆盖项目`,distribution:`人员分布`,currentWork:`团队成员`,recruitmentHistory:`Bole 工作记录`,noAgents:`还没有可展示的 Agent。`,noRecruitments:`还没有招募记录。`,idle:`暂无进行中的任务记录`,noProject:`未归属项目`,unknownTime:`时间未知`,taskLimit:`只统计最近 200 条任务。`,partialError:`部分人员信息暂时不可用,已保留能够读取的内容。`,types:{coordinator:`统筹 Agent`,durable:`固定 Agent`,hr:`AR Agent`,temporary:`临时 Agent`,other:`其他 Agent`},status:{awaiting_recruitment:`等待招募`,queued:`等待开始`,running:`进行中`,paused:`已暂停`,failed:`需要处理`,awaiting_review:`等待确认`,blocked:`已阻塞`}},createProject:`创建项目`,noProjects:`还没有项目,先聘请 Agent 或创建一个项目。`,noTemplates:`暂无可聘请的 Agent`,emptyWorkbench:`先选择要负责的项目`,unavailable:`这位专属 Agent 暂不可用。`,backToAgents:`返回项目 Agent`,loadError:`Agent 服务暂时不可用,请重试。`,errors:{runtime_unavailable:`工作台未安装或无法加载,请检查 Agent 包后重试。`,assignment_required:`这位 Agent 尚未获准管理此项目,请检查负责范围。`,project_not_found:`项目不可用,请选择有效项目。`,identity_conflict:`标识已被其他 Agent 使用,原有 Agent 未修改。`,reactivation_required:`这位 Agent 已停用,请明确恢复后再分配。`,assignment_scope_conflict:`负责范围已在别处改变。请重新读取,确认后再保存。`,assignment_update_incomplete:`负责范围没能全部保存,请刷新后核对。`}},"en-US":{recruit:`Hire an Agent`,workbench:`Agent workspace`,directory:`Specialist Agents`,project:`Assign to project`,unassigned:`Assign later`,choose:`Choose a specialist Agent`,capabilities:`Specialties`,permissions:`Project permissions`,boardRead:`Read the selected project board`,boardWrite:`Create and update tasks and status`,noExecutor:`Hiring does not start a model or external executor.`,hostReady:`Workbench ready · hosted by FULI`,installRequired:`Workspace not installed; hiring creates the Agent identity only.`,installHelp:`Build the Agent package, then run fl employee install <directory>.`,recruitName:`Hire {name}`,rehire:`Reactivate {name}`,assign:`Save project selection`,recruited:`Hired`,recruiting:`Saving project scope…`,open:`Open workspace`,close:`Close`,cancel:`Cancel`,retry:`Retry`,loading:`Reading Agent directory…`,manageProjects:`Manage assigned projects`,manageProjectsTitle:`Manage {name}’s projects`,loadingScope:`Reading assigned project scope…`,loadingBoard:`Reading the task board…`,loadingTask:`Reading task details…`,loadingShare:`Reading project sharing states…`,loadingReport:`Reading the public report…`,invalidScope:`The selected project is outside Jefa’s assigned scope. Check the project link.`,task:{create:`New task`,detail:`Task details`,project:`Project`,chooseProject:`Choose a project`,title:`Task name`,summary:`Description`,priority:`Priority`,criteria:`Acceptance criteria (one per line)`,tags:`Tags (comma-separated)`,save:`Save task`,saving:`Saving task…`,reload:`Reload`,priorities:{critical:`Critical`,high:`High`,medium:`Medium`,low:`Low`}},share:{title:`External report`,projects:`Projects to share`,scopeHint:`Choose all or selected projects for one report link.`,generate:`Create share link`,generating:`Creating share link…`,revoking:`Stopping sharing…`,link:`Share link`,copy:`Copy link`,copied:`Copied`,preview:`Preview report`,active:`Sharing enabled`,revoke:`Stop sharing`,local:`This address only works on this computer.`,loadFailed:`Some sharing states could not be loaded. Try again.`,partial:`Some projects could not be shared. Try again.`,copyFailed:`Could not copy automatically. Select and copy the link manually.`,unavailable:`The report link is invalid, sharing is disabled, or the projects are unavailable.`,unavailableCount:`{count} projects are unavailable or no longer shared.`,readOnly:`Read-only report`,disclosure:`Only task names, priorities, and status are public.`},shareContent:{emptyTitle:`No public tasks yet`,emptyReport:`These {count} projects have no public tasks yet.`,emptySelection:`The selected projects have no public tasks.`,publicCount:`The report will show {count} public tasks`,verifyContent:`Public content will be verified when generating. Private tasks will not be published automatically.`},allProjects:{option:`All projects`,optionMeta:`{count} projects`,title:`Task board`,projectFilter:`Project scope`,projectFilterHint:`Filters this board only.`,search:`Search tasks`,searchPlaceholder:`Search tasks, projects, or tags`,boardLabel:`Task board`,partial:`Showing {loaded}/{total} projects. {failed} failed to load.`,truncated:`{count} projects exceed the current loading limit; some tasks are not shown.`,empty:`All projects are clear`,emptyHint:`The assigned projects have no tasks yet.`,noProjectsVisible:`No projects shown`,noProjectsVisibleHint:`Select projects again to see their tasks.`,showAllProjects:`Show all projects`,noMatch:`No matching tasks`,noMatchHint:`Try another term, or clear search to see every task.`,columnEmpty:`No tasks`,taskCount:`{count} tasks`,openTask:`View task in {project}: {task}`,dragHint:`Drag cards to update status. Keyboard: Space to lift, arrows to move, Space to drop.`,dragTask:`Move task: {task}`,saving:`Saving task status…`,dragLifted:`Lifted “{task}” from {status}.`,dragMoved:`Moved to {status}.`,dragDropped:`Moved “{task}” to {status}.`,dragCancelled:`Move cancelled.`,moveFailed:`The task could not be moved and was restored: {error}`,refreshRequired:`The task version is missing. Refresh the board and try again.`,status:{planned:`Planned`,active:`In progress`,blocked:`Blocked`,review:`Review`,done:`Done`}},assignedCount:`Assigned to {count} projects`,noAssignedProjects:`No projects assigned`,manageHint:`Can manage several projects.`,filterLabel:`Filter projects`,filterHint:`Filters the Agent list only. Assignments stay unchanged.`,filterEmpty:`No projects selected`,allProjectsFilter:`All projects`,success:`{name} has joined`,successUnassigned:`You can assign this Agent to a project later.`,successMultiple:`Now assigned to {count} projects.`,scopeSaved:`Project selection saved`,scopeRemoved:`Will leave {count} projects. Their projects and tasks will be kept.`,reloadScope:`Reload project selection`,scope:{rule:`Management rule`,continuousAll:`All projects · automatic`,onlySelected:`Selected projects only`,allHint:`{name} manages current and future projects; uncheck one to exclude it.`,selectedHint:`Manage only checked projects. New projects are not included automatically.`,excludeHint:`Unchecked projects no longer go through this Agent.`,excludedCount:`{count} projects excluded.`,successAll:`Managing {count} current projects; future projects will be included automatically.`,label:`Assigned projects`,all:`All projects`,allSummary:`All projects · {count}`,selected:`{count} projects selected`,search:`Search projects`,invert:`Invert selection`,multiple:`Multiple`,count:`{selected} / {total} projects selected`,done:`Done`,reset:`Reset`,storageUnavailable:`This browser cannot save the filter; it resets on reopen.`,noMatch:`No matching projects`,empty:`No projects available`,snapshotHint:`Select multiple, or select all and exclude. New projects must be selected separately.`},titles:{heading:`Session titles`,mode:`Behavior`,style:`Title style`,auto:`Automatic when supported`,suggest:`Suggestions only`,off:`Leave titles unchanged`,emoji:`Emoji + type`,text:`Text only`,example:`Format example`,exampleTask:`Fix sign-in failure`,boundary:`Based on task priority and type; manually edited titles are left alone.`},bole:{title:`Team`,allProjects:`All projects & unassigned`,viewLabel:`Team views`,search:`Search Agents, tasks, or recruitment reasons`,workFilter:`Work status`,allWork:`All statuses`,withoutTask:`No current task`,allRoles:`All roles`,clearFilters:`Clear filters`,resultCount:`{count} records`,taskColumn:`Current task`,projectsColumn:`Projects`,moreProjects:`{count} more projects`,noMatch:`No matching records. Try adjusting the filters.`,overview:`People overview`,loading:`Reading team members, tasks, and recruitment records…`,workingNow:`Working now`,coveredProjects:`Projects covered`,distribution:`People distribution`,currentWork:`Team members`,recruitmentHistory:`Bole’s activity`,noAgents:`No Agents to show yet.`,noRecruitments:`No recruitment records yet.`,idle:`No ongoing task recorded`,noProject:`No project`,unknownTime:`Unknown time`,taskLimit:`Counts the latest 200 tasks only.`,partialError:`Some people data is temporarily unavailable. Available information is still shown.`,types:{coordinator:`Coordinator`,durable:`Durable Agent`,hr:`AR Agent`,temporary:`Temporary Agent`,other:`Other Agent`},status:{awaiting_recruitment:`Awaiting recruitment`,queued:`Queued`,running:`In progress`,paused:`Paused`,failed:`Needs attention`,awaiting_review:`Awaiting review`,blocked:`Blocked`}},createProject:`Create project`,noProjects:`No projects yet. Hire an Agent first or create a project.`,noTemplates:`No specialist Agents available`,emptyWorkbench:`Choose projects to manage`,unavailable:`This specialist Agent is unavailable.`,backToAgents:`Back to project Agents`,loadError:`Agent service is unavailable. Please retry.`,errors:{runtime_unavailable:`Workbench is not installed or could not load. Check its package and retry.`,assignment_required:`This Agent cannot manage this project yet. Check its assigned projects.`,project_not_found:`Project unavailable. Select an active project.`,identity_conflict:`Another Agent uses this identifier. The existing Agent was not modified.`,reactivation_required:`This Agent is inactive. Explicitly reactivate it before assigning.`,assignment_scope_conflict:`Project assignments changed elsewhere. Reload, review, and save again.`,assignment_update_incomplete:`Not everything was saved. Reload and check.`}}},sh={"zh-CN":{title:`待你处理`,count:`{count} 件事待你处理`,all:`全部 Agent`,refresh:`刷新`,close:`关闭`,loading:`正在读取待处理的 Agent 请求…`,loadError:`待办读取失败,请重试`,empty:`暂时没有需要你处理的事情`,response:`你的回复`,send:`提交回复`,sending:`正在提交 Agent 请求答复…`,more:`加载更多`,task:`查看 Agent 任务`,context:`背景与详情`,chooseReply:`选择回复`,other:`其他回复`,note:`补充说明(选填)`,placeholder:`写下你的想法…`,replyHint:`回复只记录你的决定,不会直接执行或授权。`,tooLong:`回复过长,请精简至 4096 字以内。`,queue:`待处理请求`,selectRequest:`选择请求`,agentFallback:`Agent`,projectFallback:`项目`,updated:`请求已更新,请重新确认回复。`,wrongSpace:`请求属于其他空间,请重新打开后回复。`,replies:{agree:`同意此方案`,decline:`暂不同意`,accept:`审核通过`,revise:`需要修改`,resolved:`已处理,可以继续`,clarify:`请补充信息`},displayName:`名字`,roleName:`岗位名称`,kinds:{question:`需要答复`,approval:`需要决定`,review:`需要验收`,permission:`需要权限`,blocked:`需要协助`}},"en-US":{title:`Needs you`,count:`{count} requests need you`,all:`All Agents`,refresh:`Refresh`,close:`Close`,loading:`Loading pending Agent requests…`,loadError:`Could not load requests. Try again`,empty:`Nothing needs your attention`,response:`Your reply`,send:`Reply and resolve`,sending:`Submitting the Agent request response…`,more:`Load more`,task:`View Agent tasks`,context:`Background & details`,chooseReply:`Choose a reply`,other:`Something else`,note:`Add a note (optional)`,placeholder:`Share your thoughts…`,replyHint:`Records your decision only; nothing is executed or granted.`,tooLong:`Shorten your reply to 4096 characters.`,queue:`Pending requests`,selectRequest:`Select a request`,agentFallback:`Agent`,projectFallback:`Project`,updated:`This request changed. Please review your reply.`,wrongSpace:`This request belongs to a different space. Reopen it before replying.`,replies:{agree:`Agree with this proposal`,decline:`Do not agree at this time`,accept:`Review passed`,revise:`Changes needed`,resolved:`Resolved, ready to continue`,clarify:`More information needed`},displayName:`Name`,roleName:`Role name`,kinds:{question:`Question`,approval:`Decision`,review:`Review`,permission:`Permission`,blocked:`Help needed`}}},ch={"zh-CN":{threads:`Agent 之间的对话`,empty:`还没有 Agent 之间的对话`,emptyHint:`Agent 在任意已接入的客户端里调用 message_agent,就会出现在这里。`,select:`选择一段对话查看`,loading:`正在读取 Agent 之间的对话…`,loadFailed:`对话读取失败`,retry:`重试`,messages:`{count} 条消息`,waiting:`等待回复`,to:`发给`,via:{resume:`唤醒原会话回答`,new:`新会话回答`,inbox:`在任务中回复`},status:{queued:`排队中,等对方下次开始任务时回复`,delivering:`正在唤醒对方…`,answered:`已回答`,sent:`已送达`,remoteQueued:`等待对方设备回复`,claimed:`对方正在接收`,running:`对方正在处理`,failed:`未送达`,cancelled:`已取消`,expired:`已过期`,unknown:`结果不明,可能已运行也可能没有`}},"en-US":{threads:`Agent conversations`,empty:`No Agent conversations yet`,emptyHint:`They appear here when an Agent calls message_agent in any connected client.`,select:`Select a conversation`,loading:`Loading Agent conversations…`,loadFailed:`Could not load conversations`,retry:`Retry`,messages:`{count} messages`,waiting:`Waiting for a reply`,to:`to`,via:{resume:`answered by waking its conversation`,new:`answered in a new session`,inbox:`replied during a task`},status:{queued:`Queued until the recipient starts its next task`,delivering:`Waking the recipient…`,answered:`Answered`,sent:`Delivered`,remoteQueued:`Waiting for the other device`,claimed:`Being received`,running:`In progress on the other device`,failed:`Not delivered`,cancelled:`Cancelled`,expired:`Expired`,unknown:`Unknown: it may or may not have run`}}},lh={"zh-CN":{navigation:{title:`pin`},pin:`pin`,unpin:`取消 pin`,loading:`正在读取 pin…`,saving:`正在保存 pin…`,loadError:`暂时无法读取 pin。`,saveError:`暂时无法保存 pin。`,conflictError:`pin 列表已更新,请重试。`,retry:`重试`},"en-US":{navigation:{title:`pin`},pin:`pin`,unpin:`unpin`,loading:`Reading pin…`,saving:`Saving pin…`,loadError:`pin is temporarily unavailable.`,saveError:`The pin could not be saved.`,conflictError:`The pin list changed. Try again.`,retry:`Retry`}},uh={"zh-CN":{settings:{title:`自主程度`,hint:`控制 Tonborg 如何分析请求,以及哪些结果需要你确认。`,project:`项目范围`,global:`所有项目`,inherited:`沿用全局策略`,override:`项目覆盖策略`,reset:`恢复全局策略`,resetTitle:`删除该项目的覆盖策略`,save:`保存策略`,undo:`撤销`,saved:`策略已保存。`,loading:`正在读取判断策略…`,saving:`正在保存判断策略…`,loadError:`暂时无法读取判断策略。`,saveError:`暂时无法保存判断策略。`,conflictError:`判断策略已更新,请重新检查后再保存。`,retry:`重试`},mode:{title:`自主程度`,manual:`我来确认`,manualHint:`只分析,不执行。`,shared:`共同决策`,sharedHint:`按已有确认处理常规事项,拿不准时问我。`,autonomous:`自主处理`,autonomousHint:`把常规审核和执行选择交给 Tonborg,必要时再找我。`},quality:{title:`质量偏好`,quality:`质量优先`,balanced:`平衡`,economy:`经济`},client:{title:`判断客户端`,codex:`Codex`,claude_code:`Claude Code`},workbench:{aria:`Tonborg 判断工作台`,title:`判断工作台`,subtitle:`查看近期判断并决定下一步。`,all:`全部`,human:`需要人工`,review:`运行一次判断`,reviewing:`正在分析待处理事项…`,loading:`正在读取近期判断…`,refresh:`刷新`,empty:`暂时没有判断记录。`,emptyHuman:`没有需要人工处理的判断。`,loadError:`暂时无法读取判断记录。`,reviewError:`判断请求暂时无法完成。`,retry:`重试`,target:`目标`,evidence:`依据`,execution:`执行状态`,policy:`策略`,session:`会话`,source:`来源`,selection:`推荐方案`,executor:`执行器`,model:`模型`,disposition:`建议动作`,actions:{continue_current:`继续当前会话`,reuse_conversation:`复用历史会话`,new_session:`新开会话`,delegate:`委派子 Agent`,ask_user:`请你决定`},details:`查看执行详情`,receipt:`执行回执`,recordError:`记录错误`,feedbackHistory:`反馈历史`,executionHistory:`执行历史`,detailsUnavailable:`详情暂不可用。`,kind:{review:`审阅`,routing:`执行选择`,acceptance:`任务验收`},outcome:{approve:`通过`,escalate:`需要确认`,recommend:`建议`,failed:`失败`},executionStatus:{not_applied:`尚未执行`,applied:`已执行`,stale:`已过期`,failed:`执行失败`},feedback:`反馈`,feedbackReason:`反馈原因(可选)`,feedbackReasonAdd:`添加反馈原因`,feedbackReasonSaved:`已保存反馈原因`,saveReason:`保存原因`,feedbackUp:`有帮助`,feedbackDown:`需要改进`,feedbackSaving:`正在保存反馈…`,feedbackConflict:`记录已更新,请重新查看后再反馈。`,timeUnknown:`时间未知`},links:{profile:`查看 Agent 资料`,memory:`查看记忆`}},"en-US":{settings:{title:`Judgment and autonomy`,hint:`Choose how Tonborg analyzes requests and which results need your confirmation.`,project:`Project scope`,global:`All projects`,inherited:`Using the global policy`,override:`Project override`,reset:`Use global policy`,resetTitle:`Remove this project override`,save:`Save policy`,undo:`Undo`,saved:`Policy saved.`,loading:`Reading judgment policy…`,saving:`Saving judgment policy…`,loadError:`The judgment policy is temporarily unavailable.`,saveError:`The judgment policy could not be saved.`,conflictError:`The judgment policy changed. Review it before saving again.`,retry:`Retry`},mode:{title:`Autonomy scope`,manual:`Manual`,manualHint:`Analyze only; do not apply changes.`,shared:`Shared`,sharedHint:`Apply safe and reversible items.`,autonomous:`Autonomous`,autonomousHint:`Handle additional routine items; risky actions always need you.`},quality:{title:`Quality preference`,quality:`Quality priority`,balanced:`Balanced`,economy:`Economy`},client:{title:`Judgment client`,codex:`Codex`,claude_code:`Claude Code`},workbench:{aria:`Tonborg judgment workbench`,title:`Judgment workbench`,subtitle:`Review recent decisions and choose what happens next.`,all:`All`,human:`Human needed`,review:`Run a judgment review`,reviewing:`Analyzing pending items…`,loading:`Reading recent judgments…`,refresh:`Refresh`,empty:`There are no judgment records yet.`,emptyHuman:`No judgments need human attention.`,loadError:`Judgment records are temporarily unavailable.`,reviewError:`The judgment request could not be completed.`,retry:`Retry`,target:`Target`,evidence:`Evidence`,execution:`Execution`,policy:`Policy`,session:`Session`,source:`Source`,selection:`Recommended option`,executor:`Executor`,model:`Model`,disposition:`Suggested action`,actions:{continue_current:`Continue here`,reuse_conversation:`Reuse conversation`,new_session:`Start session`,delegate:`Delegate work`,ask_user:`Ask you`},details:`View execution details`,receipt:`Execution receipt`,recordError:`Record error`,feedbackHistory:`Feedback history`,executionHistory:`Execution history`,detailsUnavailable:`Details are temporarily unavailable.`,kind:{review:`Review`,routing:`Execution choice`,acceptance:`Task acceptance`},outcome:{approve:`Approved`,escalate:`Needs confirmation`,recommend:`Recommended`,failed:`Failed`},executionStatus:{not_applied:`Not applied`,applied:`Applied`,stale:`Stale`,failed:`Execution failed`},feedback:`Feedback`,feedbackReason:`Feedback reason (optional)`,feedbackReasonAdd:`Add feedback reason`,feedbackReasonSaved:`Feedback reason saved`,saveReason:`Save reason`,feedbackUp:`Helpful`,feedbackDown:`Needs improvement`,feedbackSaving:`Saving feedback…`,feedbackConflict:`The record changed. Review it before sending feedback again.`,timeUnknown:`Unknown time`},links:{profile:`View Agent profile`,memory:`View memory`}}},dh=[`zh-CN`,`en-US`],fh=`fuli.locale`;function ph(e){return typeof e==`string`&&dh.includes(e)}function mh(e,t=[]){if(ph(e))return e;for(let e of t){let t=_h(e);if(t)return t}return`en-US`}function hh(){if(typeof window>`u`)return null;try{return window.localStorage.getItem(fh)}catch{return null}}function gh(){return typeof navigator>`u`?[]:navigator.languages.length>0?navigator.languages:navigator.language?[navigator.language]:[]}function _h(e){let t=e.trim().toLowerCase().split(/[-_]/,1)[0];return t===`zh`?`zh-CN`:t===`en`?`en-US`:null}var vh={"zh-CN":{judgment:uh[`zh-CN`],agentPins:lh[`zh-CN`],ui:Um[`zh-CN`],overview:Wm[`zh-CN`],agentRedesign:Gm[`zh-CN`],agentProfiles:Km[`zh-CN`],attention:sh[`zh-CN`],roundtable:ch[`zh-CN`],employees:oh[`zh-CN`],about:Qm[`zh-CN`],common:qm[`zh-CN`],console:Jm[`zh-CN`],knowledge:{dialogs:Xm[`zh-CN`],domain:Ym[`zh-CN`],workspace:Zm[`zh-CN`]},pages:$m[`zh-CN`],preferences:eh[`zh-CN`],projects:th[`zh-CN`],projectAgents:nh[`zh-CN`],routes:rh[`zh-CN`],settings:ih[`zh-CN`],writingTaste:ah[`zh-CN`]},"en-US":{judgment:uh[`en-US`],agentPins:lh[`en-US`],ui:Um[`en-US`],overview:Wm[`en-US`],agentRedesign:Gm[`en-US`],agentProfiles:Km[`en-US`],attention:sh[`en-US`],roundtable:ch[`en-US`],employees:oh[`en-US`],about:Qm[`en-US`],common:qm[`en-US`],console:Jm[`en-US`],knowledge:{dialogs:Xm[`en-US`],domain:Ym[`en-US`],workspace:Zm[`en-US`]},pages:$m[`en-US`],preferences:eh[`en-US`],projects:th[`en-US`],projectAgents:nh[`en-US`],routes:rh[`en-US`],settings:ih[`en-US`],writingTaste:ah[`en-US`]}},yh=Am({legacy:!1,globalInjection:!0,locale:mh(hh(),gh()),fallbackLocale:`zh-CN`,messages:vh});function bh(){return mh(yh.global.locale.value)}function xh(e,t={}){if(yh.global.locale.value=e,typeof document<`u`&&(document.documentElement.lang=e),!(t.persist===!1||typeof window>`u`))try{window.localStorage.setItem(fh,e)}catch{}}function Sh(e,t){return t?yh.global.t(e,t):yh.global.t(e)}xh(bh(),{persist:!1});export{qt as $,js as A,Cr as B,pa as C,ic as D,ni as E,hr as F,je as G,fr as H,fa as I,tn as J,Zt as K,ma as L,Qi as M,Yi as N,_r as O,ls as P,an as Q,ca as R,ms as S,H as T,pr as U,br as V,Ae as W,Kt as X,Me as Y,Jt as Z,Rr as _,Sh as a,de as at,hs as b,yu as c,Ql as d,on as et,Jl as f,B as g,lu as h,xh as i,ge as it,Yn as j,gr as k,Yl as l,du as m,bh as n,gn as nt,uh as o,Te as ot,Gc as p,L as q,yh as r,un as rt,Il as s,dh as t,I as tt,Zl as u,rc as v,Ts as w,Ds as x,xs as y,ri as z};
|
|
10
|
+
Usability review`,preferencesPlaceholder:`One per line, used only to initialize collaboration.`,idLocked:`The Agent ID is stable after creation; projects are managed as separate assignments.`,allowListPlaceholder:`One real executor ID per line; availability is never inferred.`,required:`Agent ID, name, and responsibility are required.`,occupationEmojiInvalid:`Occupation emoji must contain only emoji characters.`,spaceUnavailable:`The current space is unavailable; the Agent cannot be saved.`,initialAssignmentReason:`Initial project assignment from the Agent directory`,projectUnavailable:`The selected project is no longer available. Choose another project.`,duplicate:`Capabilities and startup conventions cannot contain duplicates.`,saveFailed:`Could not save the project Agent.`},assignmentDialog:{assign:`Assign project`,end:`Unassign`,replace:`Replace`,assignTitle:`Assign project responsibility`,endTitle:`Unassign project`,replaceTitle:`Replace project Agent`,replacement:`Replace with`,replacementPlaceholder:`Select an existing Agent`,workKinds:`Work kinds`,workKindsPlaceholder:`One per line`,reasonPlaceholder:`Record why this assignment changed.`,required:`Responsibility and reason are required.`,replacementRequired:`Choose a replacement Agent.`,saveAssign:`Save assignment`,saveChange:`Save change`,saving:`Saving the Agent project assignment…`,saveFailed:`Could not save the project assignment.`}}},rh={"zh-CN":{overview:{title:`工作台`},preferences:{title:`偏好`,description:`全局与项目级的品味、个性和判断偏好。`},writingTaste:{title:`文风画像`},personalProjects:{title:`项目`,description:`本机私有项目、项目知识与按任务生效的协作偏好。`},projectAgents:{title:`Agents`},roundtable:{title:`圆桌`},employeeWorkbench:{title:`专属 Agent`},loadFailure:{title:`暂时无法打开页面`,resources:`页面文件加载失败,可能是界面刚更新。`,message:`页面没能加载。`,reload:`重新载入并打开`,dismiss:`留在当前页`},organizer:{title:`知识整理`},publicProjects:{title:`公共项目`,description:`发现、订阅和维护公共 Provider 上的项目。`},knowledge:{title:`知识`},about:{title:`关于`},settings:{title:`设置`},review:{title:`审核`,description:`个人发布确认与公共项目 Maintainer 审核。`},connections:{title:`连接`,description:`本地知识库状态、公共 Provider 与项目订阅。`}},"en-US":{overview:{title:`Workspace`},preferences:{title:`Preferences`,description:`Global and project taste, personality, and judgment preferences.`},writingTaste:{title:`Writing taste`},personalProjects:{title:`Projects`,description:`Private local projects, project knowledge, and task-scoped collaboration preferences.`},projectAgents:{title:`Agents`},roundtable:{title:`Roundtable`},employeeWorkbench:{title:`Specialist Agents`},loadFailure:{title:`This page could not open`,resources:`Page files could not load; the app may have just updated.`,message:`The page could not load.`,reload:`Reload and open`,dismiss:`Stay here`},organizer:{title:`Organize`},publicProjects:{title:`Public projects`,description:`Discover, subscribe to, and maintain projects on a public Provider.`},knowledge:{title:`Knowledge`},about:{title:`About`},settings:{title:`Settings`},review:{title:`Review`,description:`Personal publishing confirmation and public project Maintainer review.`},connections:{title:`Connections`,description:`Local knowledge status, public Providers, and project subscriptions.`}}},ih={"zh-CN":{aria:`设置`,connection:{title:`客户端接入`,description:`支持 MCP 工具调用的客户端均可尝试接入,无需指定模型。`,loading:`正在读取 MCP 接入配置…`,loadError:`暂时无法读取接入配置`,retry:`重试`,format:`配置格式`,formats:{standard:`通用 MCP`,vscode:`VS Code`,server:`仅服务配置`},copy:`复制 MCP 配置`,configuration:`MCP 接入配置`,copied:`已复制`,manual:`请选中下方配置手动复制。`,merge:`将 fuli 这一项合并到客户端的 MCP 设置中,保留已有服务。配置用于运行 FULI 的这台电脑。`,boundary:`通用接入提供工具与记忆;自动采集对话和唤醒会话需要客户端适配。`,guide:`接入说明`},peer:{title:`局域网圆桌(Beta)`,description:`在同一局域网的两台电脑之间,只向对方共享当前项目组长。配对、共享和撤销只能在本机完成。`,loading:`正在读取局域网圆桌…`,loadError:`暂时无法读取局域网圆桌`,retry:`重试`,off:`尚未配对。可以在这台电脑上主持,或粘贴另一台电脑的邀请。`,noAddress:`这台电脑没有可用的局域网地址。`,host:`在这台电脑上主持`,hostAddress:`本机地址`,hostName:`这台电脑的名称`,hostAction:`开始主持`,hosting:`正在开启局域网圆桌…`,join:`加入另一台电脑`,invitation:`邀请`,invitationPlaceholder:`粘贴 fuli-peer-invite:1:…`,joinName:`这台电脑的名称`,joinAction:`指纹一致,加入`,previewAction:`查看邀请`,previewing:`正在读取邀请…`,removalPending:`本机已停止共享。对方离线,恢复连接后会自动撤回配对。`,joining:`正在配对…`,fingerprint:`本机指纹`,coordinatorFingerprint:`对方指纹`,compare:`配对前请双方核对指纹。`,invite:`生成一次性邀请`,inviting:`正在生成邀请…`,inviteHint:`邀请十分钟内一次性有效。把邀请交给对方前,先核对指纹。`,copyInvite:`复制邀请`,copied:`已复制`,copyManual:`请选中下方邀请手动复制。`,shares:`共享项目组长`,sharesHint:`每个项目只共享当前组长;对方只能向该组长提问。成员任务仍由本机组长分派。交接组长后需重新共享,不会悄悄换成新人。`,noProjects:`没有可共享的项目。`,lead:`当前组长 {name}`,noLead:`这个项目还没有可用的组长`,clients:`可被唤醒的客户端`,folder:`本机项目文件夹(可选)`,folderHint:`只用于本机唤醒新会话,不会发给对方。`,leadChanged:`这个项目的组长已更换,取消勾选或重新保存后才会共享新的组长。`,leadUnavailable:`当前组长不可用,暂不向对方提供。`,saveShares:`保存共享`,savingShares:`正在保存共享项目组长…`,devices:`已配对设备`,online:`在线`,offline:`离线`,revoke:`撤销`,revoking:`正在撤销配对…`,disable:`关闭局域网圆桌`,disabling:`正在关闭局域网圆桌…`,disableHint:`关闭后停止监听、共享和信任已配对设备。`,clientsCodex:`Codex`,clientsClaude:`Claude Code`},loading:`正在读取运行设置…`,resources:{title:`资源占用`,loading:`正在读取内存与硬盘占用…`,memory:`内存`,disk:`硬盘`,available:`电脑可用 {value}`,partial:`部分组件暂时无法读取`,measuredAt:`内存更新于 {time}`,diskMeasuredAt:`硬盘更新于 {time}`,refresh:`刷新频率`,refreshUnit:`{seconds} 秒`,temporary:`其中 Neo4j 临时文件 {value}`,exclusionsContainer:`不含浏览器标签页及 Docker 共享虚拟机开销。`,exclusionsNative:`不含浏览器标签页内存。原生进程已计入。`,unavailable:`暂时无法获取资源数据`,components:{console:`管理服务`,personalProvider:`个人 Provider`,personalNeo4j:`个人 Neo4j`,workspaceProvider:`开发公共 Provider`,workspaceNeo4j:`开发公共 Neo4j`,application:`程序文件`,localData:`本地运行数据`,containerImages:`容器镜像`,containerWritable:`容器运行数据`,neo4jData:`Neo4j 数据`,neo4jLogs:`Neo4j 日志`}},ports:{title:`服务端口`,personal:`个人服务`,development:`公共服务`,developing:`开发中`,developmentMeta:`fuli-server 发布后,可配置已部署服务的域名。`,console:`管理界面`,personalProvider:`个人 Provider`,personalNeo4jHttp:`个人 Neo4j Browser`,personalNeo4jBolt:`个人 Neo4j Bolt`,workspaceProvider:`公共 Provider`,workspaceNeo4jHttp:`公共 Neo4j Browser`,workspaceNeo4jBolt:`公共 Neo4j Bolt`,active:`当前 {port}`},behavior:{title:`运行设置`,capture:`自动沉淀`,captureMeta:`把新的稳定会话知识写入本机`,agentAccess:`Agent 使用`,agentAccessMeta:`允许已连接的 Agent 调用 FULI`,lanAccess:`局域网访问`,lanAccessMeta:`允许同一可信网络中的设备访问管理界面`,runtimeMode:`图数据库运行方式`,runtimeModeMeta:`当前运行:{mode}`,runtimeRecommendation:`本机内存较小,推荐原生模式,避免虚拟机常驻内存`,runtimeModes:{native:`原生(低内存)`,container:`容器(兼容)`},language:`界面语言`,zh:`简体中文`,en:`English`},conversationLaunchers:{title:`会话打开方式`,enabled:`启用`,sourceId:`来源 ID · {id}`,idFormat:`可打开的 ID`,appName:`打开 App`,urlTemplate:`链接模板`,idFormats:{any:`任意非空 ID`,uuid:`仅 UUID`},idFormatMeta:`Codex 需要原生会话 UUID。`,applications:{codex:`Codex`,claude:`Claude`,claude_code:`Claude Code`,cursor:`Cursor`,gemini_cli:`Gemini CLI`,kiro:`Kiro`,other:`其他 Agent`}},save:`保存设置`,saving:`正在保存运行设置…`,saved:`设置已保存并生效`,savedShort:`已保存`,applying:`正在应用设置…`,applyRestored:`应用失败,已恢复原设置。`,applyFailed:`设置未能生效,请重试。`,applyTimeout:`暂时无法确认设置是否生效,请稍后刷新查看。`,applyUnavailable:`当前服务无法自动应用设置,请更新本地服务。`,loadError:`无法读取设置`,saveError:`无法保存设置`},"en-US":{connection:{title:`Client connection`,description:`Connect clients that support MCP tool calls. No specific model is required.`,loading:`Loading MCP connection configuration…`,loadError:`Connection configuration is unavailable`,retry:`Retry`,format:`Configuration format`,formats:{standard:`Standard MCP`,vscode:`VS Code`,server:`Server only`},copy:`Copy MCP configuration`,configuration:`MCP connection configuration`,copied:`Copied`,manual:`Select and copy the configuration manually.`,merge:`Merge the fuli entry into your client’s MCP settings and keep existing servers. This configuration is for the computer running FULI.`,boundary:`MCP provides tools and memory. Automatic conversation capture and wake/resume need a client adapter.`,guide:`Connection guide`},peer:{title:`LAN roundtable (Beta)`,description:`On the same LAN, share only each project’s current lead with another computer. Pairing, sharing and revoking stay on this device.`,loading:`Loading the LAN roundtable…`,loadError:`The LAN roundtable is unavailable`,retry:`Retry`,off:`Not paired yet. Host on this computer, or paste an invitation from another one.`,noAddress:`This computer has no usable LAN address.`,host:`Host on this computer`,hostAddress:`This computer’s address`,hostName:`Name of this computer`,hostAction:`Start hosting`,hosting:`Opening the LAN roundtable…`,join:`Join another computer`,invitation:`Invitation`,invitationPlaceholder:`Paste fuli-peer-invite:1:…`,joinName:`Name of this computer`,joinAction:`Fingerprints match · Join`,previewAction:`Review invitation`,previewing:`Reading invitation…`,removalPending:`Sharing has stopped on this device. Pairing will be removed when the coordinator is available.`,joining:`Pairing…`,fingerprint:`This device`,coordinatorFingerprint:`The other device`,compare:`Compare fingerprints before you share an invitation.`,invite:`Create a one-use invitation`,inviting:`Creating an invitation…`,inviteHint:`The invitation is valid once for ten minutes. Compare fingerprints before you send it.`,copyInvite:`Copy invitation`,copied:`Copied`,copyManual:`Select and copy the invitation manually.`,shares:`Shared project leads`,sharesHint:`Each project shares only its current lead. The other device can ask that lead, not members. Member work is still dispatched here. After a handoff, share again; the new lead is never substituted silently.`,noProjects:`No projects can be shared.`,lead:`Current lead {name}`,noLead:`This project has no available lead`,clients:`Clients that may be woken`,folder:`Local project folder (optional)`,folderHint:`Used only to start a new session on this computer. It is never sent to the other device.`,leadChanged:`This project’s lead changed. Uncheck or save again to share the new lead.`,leadUnavailable:`The current lead is unavailable and is not offered to the other device.`,saveShares:`Save sharing`,savingShares:`Saving shared project leads…`,devices:`Paired devices`,online:`Online`,offline:`Offline`,revoke:`Revoke`,revoking:`Revoking the device…`,disable:`Turn off the LAN roundtable`,disabling:`Turning off the LAN roundtable…`,disableHint:`This stops listening, sharing and trusting paired devices.`,clientsCodex:`Codex`,clientsClaude:`Claude Code`},aria:`Settings`,loading:`Loading runtime settings…`,resources:{title:`Resource usage`,loading:`Reading memory and disk usage…`,memory:`Memory`,disk:`Disk`,available:`{value} available on this device`,partial:`Some components are temporarily unavailable`,measuredAt:`Memory updated {time}`,diskMeasuredAt:`Disk updated {time}`,refresh:`Refresh interval`,refreshUnit:`{seconds} seconds`,temporary:`{value} is Neo4j temporary data`,exclusionsContainer:`Browser tabs and shared Docker VM overhead are excluded.`,exclusionsNative:`Browser-tab memory is excluded. Native processes are included.`,unavailable:`Resource data is temporarily unavailable`,components:{console:`Management service`,personalProvider:`Personal Provider`,personalNeo4j:`Personal Neo4j`,workspaceProvider:`Development public Provider`,workspaceNeo4j:`Development public Neo4j`,application:`Application files`,localData:`Local runtime data`,containerImages:`Container images`,containerWritable:`Container runtime data`,neo4jData:`Neo4j data`,neo4jLogs:`Neo4j logs`}},ports:{title:`Service ports`,personal:`Personal services`,development:`Public service`,developing:`In development`,developmentMeta:`Configure the deployed server domain after fuli-server is published.`,console:`Management UI`,personalProvider:`Personal Provider`,personalNeo4jHttp:`Personal Neo4j Browser`,personalNeo4jBolt:`Personal Neo4j Bolt`,workspaceProvider:`Public Provider`,workspaceNeo4jHttp:`Public Neo4j Browser`,workspaceNeo4jBolt:`Public Neo4j Bolt`,active:`Active: {port}`},behavior:{title:`Runtime settings`,capture:`Automatic capture`,captureMeta:`Write new, stable conversation knowledge to this device`,agentAccess:`Agent access`,agentAccessMeta:`Allow connected Agents to use FULI`,lanAccess:`LAN access`,lanAccessMeta:`Allow devices on the same trusted network to open the console`,runtimeMode:`Graph database runtime`,runtimeModeMeta:`Active: {mode}`,runtimeRecommendation:`Native mode is recommended on this low-memory device to avoid VM overhead`,runtimeModes:{native:`Native (low memory)`,container:`Container (compatible)`},language:`Interface language`,zh:`简体中文`,en:`English`},conversationLaunchers:{title:`Conversation openers`,enabled:`Enabled`,sourceId:`Source ID · {id}`,idFormat:`Allowed IDs`,appName:`Open with app`,urlTemplate:`URL template`,idFormats:{any:`Any non-empty ID`,uuid:`UUID only`},idFormatMeta:`Codex needs the native conversation UUID.`,applications:{codex:`Codex`,claude:`Claude`,claude_code:`Claude Code`,cursor:`Cursor`,gemini_cli:`Gemini CLI`,kiro:`Kiro`,other:`Other Agent`}},save:`Save settings`,saving:`Saving runtime settings…`,saved:`Settings saved and applied`,savedShort:`Saved`,applying:`Applying settings…`,applyRestored:`Could not apply settings. Previous settings were restored.`,applyFailed:`Settings could not be applied. Please retry.`,applyTimeout:`Could not confirm whether settings were applied. Refresh to check again.`,applyUnavailable:`This service cannot apply settings automatically. Update the local service.`,loadError:`Could not load settings`,saveError:`Could not save settings`}},ah={"zh-CN":{status:{collecting:`收集中`,preview_ready:`初稿已形成`,active:`已启用`},milestone:{aria:`文风画像成熟度`,collectingTitle:`文风画像`,previewTitle:`文风画像 · 初稿`,activeTitle:`文风画像 · 已形成`,rules:`{current}/{target} 条规则`,sessions:`{current}/{target} 次会话`,open:`查看`},page:{loading:`正在读取文风画像…`,back:`返回偏好`,collectingTitle:`文风画像收集中`,collectingCopy:`跨多个会话积累到足够证据,或你确认足够多的规则后生成。`,previewTitle:`文风画像初稿`,previewCopy:`已有重复证据,等你确认。`,activeTitle:`你的文风`,activeCopy:`Agent 写作时会遵循这些规则;当前请求优先。`,readinessAria:`文风画像生成条件`,rulesTitle:`当前规则`,rulesEmpty:`还没有识别到文风规则。`,profileUnavailable:`暂时无法读取文风画像。`,edit:`修改`,confirm:`确认`,conflict:`存在冲突`,evidence:`{evidence} 条证据`,sessions:`{sessions} 次会话`,globalScope:`个人全局`,projectScope:`仅 {project}`,updated:`更新于 {time}`,contexts:`适用:{contexts}`,agentPreviewTitle:`Agent 使用的规则`,showAgentPreview:`查看 Agent 规则`,hideAgentPreview:`收起 Agent 规则`},evidenceStatus:{Confirmed:`已确认`,Observed:`已观察`,"Working hypothesis":`工作假设`},criteria:{rules:`稳定规则`,evidence:`支持证据`,sessions:`独立会话`,days:`观察日期`,confirmed:`用户确认`,conflicts:`未解决冲突`,progress:`{current} / {target}`,conflictsProgress:`{current} 个`}},"en-US":{status:{collecting:`Collecting`,preview_ready:`Draft ready`,active:`Active`},milestone:{aria:`Writing taste readiness`,collectingTitle:`Writing taste`,previewTitle:`Writing taste · draft`,activeTitle:`Writing taste · ready`,rules:`{current}/{target} rules`,sessions:`{current}/{target} sessions`,open:`View`},page:{loading:`Loading writing preferences and rule evidence…`,back:`Back to preferences`,collectingTitle:`Still collecting writing preferences`,collectingCopy:`The profile appears after evidence spans multiple sessions and days, or after you directly confirm enough rules.`,previewTitle:`Writing-taste draft`,previewCopy:`These patterns have repeated evidence but still need your confirmation.`,activeTitle:`Your writing taste`,activeCopy:`Agents use confirmed and observed rules; the current request always wins.`,readinessAria:`Writing taste generation criteria`,rulesTitle:`Current rules`,rulesEmpty:`No writing-related preference has been identified yet.`,profileUnavailable:`Writing taste is temporarily unavailable.`,edit:`Edit`,confirm:`Confirm`,conflict:`Conflict`,evidence:`{evidence} evidence records`,sessions:`{sessions} sessions`,globalScope:`Personal global`,projectScope:`{project} only`,updated:`Updated {time}`,contexts:`Applies to: {contexts}`,agentPreviewTitle:`Rules used by Agents`,showAgentPreview:`View Agent rules`,hideAgentPreview:`Hide Agent rules`},evidenceStatus:{Confirmed:`Confirmed`,Observed:`Observed`,"Working hypothesis":`Working hypothesis`},criteria:{rules:`Stable rules`,evidence:`Supporting evidence`,sessions:`Independent sessions`,days:`Observation days`,confirmed:`User-confirmed`,conflicts:`Unresolved conflicts`,progress:`{current} / {target}`,conflictsProgress:`{current}`}}},oh={"zh-CN":{recruit:`聘请 Agent`,workbench:`Agent 工作台`,directory:`专属 Agent`,project:`分配到项目`,unassigned:`暂不分配`,choose:`选择专属 Agent`,capabilities:`擅长`,permissions:`项目权限`,boardRead:`读取所选项目的看板`,boardWrite:`创建、修改任务与状态`,noExecutor:`聘请不会启动模型或外部执行器。`,hostReady:`工作台已就绪 · 随 FULI 运行`,installRequired:`工作台尚未安装;聘请只创建 Agent 身份。`,installHelp:`构建 Agent 包后运行 fl employee install <目录>。`,recruitName:`聘请 {name}`,rehire:`恢复 {name}`,assign:`保存负责范围`,recruited:`已聘请`,recruiting:`正在保存负责范围…`,open:`打开工作台`,close:`关闭`,cancel:`取消`,retry:`重试`,loading:`正在读取 Agent 目录…`,manageProjects:`管理负责项目`,manageProjectsTitle:`管理 {name} 的项目`,loadingScope:`正在读取项目负责范围…`,loadingBoard:`正在读取任务看板…`,loadingTask:`正在读取任务详情…`,loadingShare:`正在读取项目分享状态…`,loadingReport:`正在读取公开报告…`,invalidScope:`所选项目不在 Jefa 的负责范围内,请检查项目链接。`,task:{create:`新建任务`,detail:`任务详情`,project:`所属项目`,chooseProject:`选择项目`,title:`任务名称`,summary:`任务说明`,priority:`优先级`,criteria:`验收条件(每行一条)`,tags:`标签(逗号分隔)`,save:`保存任务`,saving:`正在保存任务…`,reload:`重新读取`,priorities:{critical:`紧急`,high:`高`,medium:`中`,low:`低`}},share:{title:`对外报告`,projects:`分享项目`,scopeHint:`选择全部或部分项目,生成一个汇总报告链接。`,generate:`生成分享链接`,generating:`正在生成分享链接…`,revoking:`正在关闭分享…`,link:`分享链接`,copy:`复制链接`,copied:`已复制`,preview:`预览报告`,active:`已开放分享`,revoke:`关闭分享`,local:`当前地址只有本机能访问。`,loadFailed:`部分项目的分享状态读取失败,请重试。`,partial:`部分项目没能开启分享,请重试。`,copyFailed:`自动复制失败,请选中链接手动复制。`,unavailable:`报告链接无效、分享已关闭,或项目已不可访问。`,unavailableCount:`{count} 个项目已关闭分享或暂不可访问。`,readOnly:`只读报告`,disclosure:`只公开任务名称、优先级和状态。`},shareContent:{emptyTitle:`暂无可公开的任务`,emptyReport:`这 {count} 个项目还没有公开的任务。`,emptySelection:`所选项目暂无公开任务。`,publicCount:`报告将展示 {count} 条公开任务`,verifyContent:`生成时会校验公开内容,不会自动公开私有任务。`},allProjects:{option:`全部项目`,optionMeta:`{count} 个项目`,title:`任务看板`,projectFilter:`项目范围`,projectFilterHint:`只影响当前看板。`,search:`搜索任务`,searchPlaceholder:`搜索任务、项目或标签`,boardLabel:`任务看板`,partial:`已显示 {loaded}/{total} 个项目,{failed} 个项目读取失败。`,truncated:`有 {count} 个项目超过当前读取上限,暂未展示全部任务。`,empty:`所有项目都很清爽`,emptyHint:`当前负责的项目还没有任务。`,noProjectsVisible:`没有显示任何项目`,noProjectsVisibleHint:`重新勾选项目后,就能继续查看对应任务。`,showAllProjects:`显示全部项目`,noMatch:`没有匹配的任务`,noMatchHint:`换个关键词,或清空搜索后查看全部任务。`,columnEmpty:`暂无任务`,taskCount:`{count} 个任务`,openTask:`在 {project} 中查看任务:{task}`,dragHint:`拖动卡片更新状态;键盘:空格拿起,方向键移动,空格放下。`,dragTask:`移动任务:{task}`,saving:`正在保存任务状态…`,dragLifted:`已拿起“{task}”,当前位置:{status}。`,dragMoved:`已移动到:{status}。`,dragDropped:`已将“{task}”移动到:{status}。`,dragCancelled:`已取消移动。`,moveFailed:`任务移动失败,已恢复原状态:{error}`,refreshRequired:`任务版本信息缺失,请刷新看板后重试。`,status:{planned:`待办`,active:`进行中`,blocked:`阻塞`,review:`待确认`,done:`已完成`}},assignedCount:`负责 {count} 个项目`,noAssignedProjects:`尚未分配项目`,manageHint:`可同时负责多个项目。`,filterLabel:`筛选项目`,filterHint:`仅筛选 Agent 列表,不改变任何负责范围。`,filterEmpty:`未选择项目`,allProjectsFilter:`全部项目`,success:`{name} 已加入`,successUnassigned:`可以稍后为 Agent 分配项目。`,successMultiple:`现在负责 {count} 个项目。`,scopeSaved:`负责范围已保存`,scopeRemoved:`将移出 {count} 个项目,项目和任务数据会保留。`,reloadScope:`重新读取负责范围`,scope:{rule:`管理范围规则`,continuousAll:`全部项目 · 自动纳入`,onlySelected:`只管理所选项目`,allHint:`现在和以后的项目都由 {name} 管理;取消勾选即排除。`,selectedHint:`只管理下方勾选的项目,不自动纳入新项目。`,excludeHint:`取消勾选的项目不再经过这位 Agent。`,excludedCount:`已排除 {count} 个项目。`,successAll:`当前负责 {count} 个项目,以后新建的项目也会自动纳入。`,label:`负责项目`,all:`全部项目`,allSummary:`全部项目 · {count} 个`,selected:`已选 {count} 个项目`,search:`搜索项目`,invert:`反选`,multiple:`多选`,count:`已选 {selected} / 共 {total} 个项目`,done:`完成选择`,reset:`重置`,storageUnavailable:`浏览器无法保存筛选,重新打开后会丢失。`,noMatch:`没有匹配的项目`,empty:`暂无可选项目`,snapshotHint:`支持多选、全选后排除;新建项目需另行选择。`},titles:{heading:`会话标题`,mode:`整理方式`,style:`标题风格`,auto:`自动整理(客户端支持时)`,suggest:`只生成建议`,off:`不整理标题`,emoji:`Emoji + 类型`,text:`纯文字`,example:`格式示例`,exampleTask:`修复登录异常`,boundary:`参考任务优先级与类型;手动改过的标题不再覆盖。`},bole:{title:`团队`,allProjects:`全部项目与未归属`,viewLabel:`团队视图`,search:`搜索 Agent、任务或招募原因`,workFilter:`工作状态`,allWork:`全部状态`,withoutTask:`暂无任务`,allRoles:`全部角色`,clearFilters:`清空筛选`,resultCount:`{count} 条记录`,taskColumn:`当前任务`,projectsColumn:`所属项目`,moreProjects:`另 {count} 个项目`,noMatch:`没有匹配的记录,请调整筛选条件。`,overview:`人员概览`,loading:`正在读取团队成员、任务和招募记录…`,workingNow:`正在工作`,coveredProjects:`覆盖项目`,distribution:`人员分布`,currentWork:`团队成员`,recruitmentHistory:`Bole 工作记录`,noAgents:`还没有可展示的 Agent。`,noRecruitments:`还没有招募记录。`,idle:`暂无进行中的任务记录`,noProject:`未归属项目`,unknownTime:`时间未知`,taskLimit:`只统计最近 200 条任务。`,partialError:`部分人员信息暂时不可用,已保留能够读取的内容。`,types:{coordinator:`统筹 Agent`,durable:`固定 Agent`,hr:`AR Agent`,temporary:`临时 Agent`,other:`其他 Agent`},status:{awaiting_recruitment:`等待招募`,queued:`等待开始`,running:`进行中`,paused:`已暂停`,failed:`需要处理`,awaiting_review:`等待确认`,blocked:`已阻塞`}},createProject:`创建项目`,noProjects:`还没有项目,先聘请 Agent 或创建一个项目。`,noTemplates:`暂无可聘请的 Agent`,emptyWorkbench:`先选择要负责的项目`,unavailable:`这位专属 Agent 暂不可用。`,backToAgents:`返回项目 Agent`,loadError:`Agent 服务暂时不可用,请重试。`,errors:{runtime_unavailable:`工作台未安装或无法加载,请检查 Agent 包后重试。`,assignment_required:`这位 Agent 尚未获准管理此项目,请检查负责范围。`,project_not_found:`项目不可用,请选择有效项目。`,identity_conflict:`标识已被其他 Agent 使用,原有 Agent 未修改。`,reactivation_required:`这位 Agent 已停用,请明确恢复后再分配。`,assignment_scope_conflict:`负责范围已在别处改变。请重新读取,确认后再保存。`,assignment_update_incomplete:`负责范围没能全部保存,请刷新后核对。`}},"en-US":{recruit:`Hire an Agent`,workbench:`Agent workspace`,directory:`Specialist Agents`,project:`Assign to project`,unassigned:`Assign later`,choose:`Choose a specialist Agent`,capabilities:`Specialties`,permissions:`Project permissions`,boardRead:`Read the selected project board`,boardWrite:`Create and update tasks and status`,noExecutor:`Hiring does not start a model or external executor.`,hostReady:`Workbench ready · hosted by FULI`,installRequired:`Workspace not installed; hiring creates the Agent identity only.`,installHelp:`Build the Agent package, then run fl employee install <directory>.`,recruitName:`Hire {name}`,rehire:`Reactivate {name}`,assign:`Save project selection`,recruited:`Hired`,recruiting:`Saving project scope…`,open:`Open workspace`,close:`Close`,cancel:`Cancel`,retry:`Retry`,loading:`Reading Agent directory…`,manageProjects:`Manage assigned projects`,manageProjectsTitle:`Manage {name}’s projects`,loadingScope:`Reading assigned project scope…`,loadingBoard:`Reading the task board…`,loadingTask:`Reading task details…`,loadingShare:`Reading project sharing states…`,loadingReport:`Reading the public report…`,invalidScope:`The selected project is outside Jefa’s assigned scope. Check the project link.`,task:{create:`New task`,detail:`Task details`,project:`Project`,chooseProject:`Choose a project`,title:`Task name`,summary:`Description`,priority:`Priority`,criteria:`Acceptance criteria (one per line)`,tags:`Tags (comma-separated)`,save:`Save task`,saving:`Saving task…`,reload:`Reload`,priorities:{critical:`Critical`,high:`High`,medium:`Medium`,low:`Low`}},share:{title:`External report`,projects:`Projects to share`,scopeHint:`Choose all or selected projects for one report link.`,generate:`Create share link`,generating:`Creating share link…`,revoking:`Stopping sharing…`,link:`Share link`,copy:`Copy link`,copied:`Copied`,preview:`Preview report`,active:`Sharing enabled`,revoke:`Stop sharing`,local:`This address only works on this computer.`,loadFailed:`Some sharing states could not be loaded. Try again.`,partial:`Some projects could not be shared. Try again.`,copyFailed:`Could not copy automatically. Select and copy the link manually.`,unavailable:`The report link is invalid, sharing is disabled, or the projects are unavailable.`,unavailableCount:`{count} projects are unavailable or no longer shared.`,readOnly:`Read-only report`,disclosure:`Only task names, priorities, and status are public.`},shareContent:{emptyTitle:`No public tasks yet`,emptyReport:`These {count} projects have no public tasks yet.`,emptySelection:`The selected projects have no public tasks.`,publicCount:`The report will show {count} public tasks`,verifyContent:`Public content will be verified when generating. Private tasks will not be published automatically.`},allProjects:{option:`All projects`,optionMeta:`{count} projects`,title:`Task board`,projectFilter:`Project scope`,projectFilterHint:`Filters this board only.`,search:`Search tasks`,searchPlaceholder:`Search tasks, projects, or tags`,boardLabel:`Task board`,partial:`Showing {loaded}/{total} projects. {failed} failed to load.`,truncated:`{count} projects exceed the current loading limit; some tasks are not shown.`,empty:`All projects are clear`,emptyHint:`The assigned projects have no tasks yet.`,noProjectsVisible:`No projects shown`,noProjectsVisibleHint:`Select projects again to see their tasks.`,showAllProjects:`Show all projects`,noMatch:`No matching tasks`,noMatchHint:`Try another term, or clear search to see every task.`,columnEmpty:`No tasks`,taskCount:`{count} tasks`,openTask:`View task in {project}: {task}`,dragHint:`Drag cards to update status. Keyboard: Space to lift, arrows to move, Space to drop.`,dragTask:`Move task: {task}`,saving:`Saving task status…`,dragLifted:`Lifted “{task}” from {status}.`,dragMoved:`Moved to {status}.`,dragDropped:`Moved “{task}” to {status}.`,dragCancelled:`Move cancelled.`,moveFailed:`The task could not be moved and was restored: {error}`,refreshRequired:`The task version is missing. Refresh the board and try again.`,status:{planned:`Planned`,active:`In progress`,blocked:`Blocked`,review:`Review`,done:`Done`}},assignedCount:`Assigned to {count} projects`,noAssignedProjects:`No projects assigned`,manageHint:`Can manage several projects.`,filterLabel:`Filter projects`,filterHint:`Filters the Agent list only. Assignments stay unchanged.`,filterEmpty:`No projects selected`,allProjectsFilter:`All projects`,success:`{name} has joined`,successUnassigned:`You can assign this Agent to a project later.`,successMultiple:`Now assigned to {count} projects.`,scopeSaved:`Project selection saved`,scopeRemoved:`Will leave {count} projects. Their projects and tasks will be kept.`,reloadScope:`Reload project selection`,scope:{rule:`Management rule`,continuousAll:`All projects · automatic`,onlySelected:`Selected projects only`,allHint:`{name} manages current and future projects; uncheck one to exclude it.`,selectedHint:`Manage only checked projects. New projects are not included automatically.`,excludeHint:`Unchecked projects no longer go through this Agent.`,excludedCount:`{count} projects excluded.`,successAll:`Managing {count} current projects; future projects will be included automatically.`,label:`Assigned projects`,all:`All projects`,allSummary:`All projects · {count}`,selected:`{count} projects selected`,search:`Search projects`,invert:`Invert selection`,multiple:`Multiple`,count:`{selected} / {total} projects selected`,done:`Done`,reset:`Reset`,storageUnavailable:`This browser cannot save the filter; it resets on reopen.`,noMatch:`No matching projects`,empty:`No projects available`,snapshotHint:`Select multiple, or select all and exclude. New projects must be selected separately.`},titles:{heading:`Session titles`,mode:`Behavior`,style:`Title style`,auto:`Automatic when supported`,suggest:`Suggestions only`,off:`Leave titles unchanged`,emoji:`Emoji + type`,text:`Text only`,example:`Format example`,exampleTask:`Fix sign-in failure`,boundary:`Based on task priority and type; manually edited titles are left alone.`},bole:{title:`Team`,allProjects:`All projects & unassigned`,viewLabel:`Team views`,search:`Search Agents, tasks, or recruitment reasons`,workFilter:`Work status`,allWork:`All statuses`,withoutTask:`No current task`,allRoles:`All roles`,clearFilters:`Clear filters`,resultCount:`{count} records`,taskColumn:`Current task`,projectsColumn:`Projects`,moreProjects:`{count} more projects`,noMatch:`No matching records. Try adjusting the filters.`,overview:`People overview`,loading:`Reading team members, tasks, and recruitment records…`,workingNow:`Working now`,coveredProjects:`Projects covered`,distribution:`People distribution`,currentWork:`Team members`,recruitmentHistory:`Bole’s activity`,noAgents:`No Agents to show yet.`,noRecruitments:`No recruitment records yet.`,idle:`No ongoing task recorded`,noProject:`No project`,unknownTime:`Unknown time`,taskLimit:`Counts the latest 200 tasks only.`,partialError:`Some people data is temporarily unavailable. Available information is still shown.`,types:{coordinator:`Coordinator`,durable:`Durable Agent`,hr:`AR Agent`,temporary:`Temporary Agent`,other:`Other Agent`},status:{awaiting_recruitment:`Awaiting recruitment`,queued:`Queued`,running:`In progress`,paused:`Paused`,failed:`Needs attention`,awaiting_review:`Awaiting review`,blocked:`Blocked`}},createProject:`Create project`,noProjects:`No projects yet. Hire an Agent first or create a project.`,noTemplates:`No specialist Agents available`,emptyWorkbench:`Choose projects to manage`,unavailable:`This specialist Agent is unavailable.`,backToAgents:`Back to project Agents`,loadError:`Agent service is unavailable. Please retry.`,errors:{runtime_unavailable:`Workbench is not installed or could not load. Check its package and retry.`,assignment_required:`This Agent cannot manage this project yet. Check its assigned projects.`,project_not_found:`Project unavailable. Select an active project.`,identity_conflict:`Another Agent uses this identifier. The existing Agent was not modified.`,reactivation_required:`This Agent is inactive. Explicitly reactivate it before assigning.`,assignment_scope_conflict:`Project assignments changed elsewhere. Reload, review, and save again.`,assignment_update_incomplete:`Not everything was saved. Reload and check.`}}},sh={"zh-CN":{title:`待你处理`,count:`{count} 件事待你处理`,all:`全部 Agent`,refresh:`刷新`,close:`关闭`,loading:`正在读取待处理的 Agent 请求…`,loadError:`待办读取失败,请重试`,empty:`暂时没有需要你处理的事情`,response:`你的回复`,send:`提交回复`,sending:`正在提交 Agent 请求答复…`,more:`加载更多`,task:`查看 Agent 任务`,context:`背景与详情`,chooseReply:`选择回复`,other:`其他回复`,note:`补充说明(选填)`,placeholder:`写下你的想法…`,replyHint:`回复只记录你的决定,不会直接执行或授权。`,tooLong:`回复过长,请精简至 4096 字以内。`,queue:`待处理请求`,selectRequest:`选择请求`,agentFallback:`Agent`,projectFallback:`项目`,updated:`请求已更新,请重新确认回复。`,wrongSpace:`请求属于其他空间,请重新打开后回复。`,replies:{agree:`同意此方案`,decline:`暂不同意`,accept:`审核通过`,revise:`需要修改`,resolved:`已处理,可以继续`,clarify:`请补充信息`},displayName:`名字`,roleName:`岗位名称`,kinds:{question:`需要答复`,approval:`需要决定`,review:`需要验收`,permission:`需要权限`,blocked:`需要协助`}},"en-US":{title:`Needs you`,count:`{count} requests need you`,all:`All Agents`,refresh:`Refresh`,close:`Close`,loading:`Loading pending Agent requests…`,loadError:`Could not load requests. Try again`,empty:`Nothing needs your attention`,response:`Your reply`,send:`Reply and resolve`,sending:`Submitting the Agent request response…`,more:`Load more`,task:`View Agent tasks`,context:`Background & details`,chooseReply:`Choose a reply`,other:`Something else`,note:`Add a note (optional)`,placeholder:`Share your thoughts…`,replyHint:`Records your decision only; nothing is executed or granted.`,tooLong:`Shorten your reply to 4096 characters.`,queue:`Pending requests`,selectRequest:`Select a request`,agentFallback:`Agent`,projectFallback:`Project`,updated:`This request changed. Please review your reply.`,wrongSpace:`This request belongs to a different space. Reopen it before replying.`,replies:{agree:`Agree with this proposal`,decline:`Do not agree at this time`,accept:`Review passed`,revise:`Changes needed`,resolved:`Resolved, ready to continue`,clarify:`More information needed`},displayName:`Name`,roleName:`Role name`,kinds:{question:`Question`,approval:`Decision`,review:`Review`,permission:`Permission`,blocked:`Help needed`}}},ch={"zh-CN":{threads:`Agent 之间的对话`,empty:`还没有 Agent 之间的对话`,emptyHint:`Agent 在任意已接入的客户端里调用 message_agent,就会出现在这里。`,select:`选择一段对话查看`,loading:`正在读取 Agent 之间的对话…`,loadFailed:`对话读取失败`,retry:`重试`,messages:`{count} 条消息`,waiting:`等待回复`,to:`发给`,via:{resume:`唤醒原会话回答`,new:`新会话回答`,inbox:`在任务中回复`},status:{queued:`排队中,等对方下次开始任务时回复`,delivering:`正在唤醒对方…`,answered:`已回答`,sent:`已送达`,remoteQueued:`等待对方设备回复`,claimed:`对方正在接收`,running:`对方正在处理`,failed:`未送达`,cancelled:`已取消`,expired:`已过期`,unknown:`结果不明,可能已运行也可能没有`}},"en-US":{threads:`Agent conversations`,empty:`No Agent conversations yet`,emptyHint:`They appear here when an Agent calls message_agent in any connected client.`,select:`Select a conversation`,loading:`Loading Agent conversations…`,loadFailed:`Could not load conversations`,retry:`Retry`,messages:`{count} messages`,waiting:`Waiting for a reply`,to:`to`,via:{resume:`answered by waking its conversation`,new:`answered in a new session`,inbox:`replied during a task`},status:{queued:`Queued until the recipient starts its next task`,delivering:`Waking the recipient…`,answered:`Answered`,sent:`Delivered`,remoteQueued:`Waiting for the other device`,claimed:`Being received`,running:`In progress on the other device`,failed:`Not delivered`,cancelled:`Cancelled`,expired:`Expired`,unknown:`Unknown: it may or may not have run`}}},lh={"zh-CN":{navigation:{title:`pin`},pin:`pin`,unpin:`取消 pin`,loading:`正在读取 pin…`,saving:`正在保存 pin…`,loadError:`暂时无法读取 pin。`,saveError:`暂时无法保存 pin。`,conflictError:`pin 列表已更新,请重试。`,retry:`重试`},"en-US":{navigation:{title:`pin`},pin:`pin`,unpin:`unpin`,loading:`Reading pin…`,saving:`Saving pin…`,loadError:`pin is temporarily unavailable.`,saveError:`The pin could not be saved.`,conflictError:`The pin list changed. Try again.`,retry:`Retry`}},uh={"zh-CN":{settings:{title:`自主程度`,hint:`控制 Tonborg 如何分析请求,以及哪些结果需要你确认。`,project:`项目范围`,global:`所有项目`,inherited:`沿用全局策略`,override:`项目覆盖策略`,reset:`恢复全局策略`,resetTitle:`删除该项目的覆盖策略`,save:`保存策略`,undo:`撤销`,saved:`策略已保存。`,loading:`正在读取判断策略…`,saving:`正在保存判断策略…`,loadError:`暂时无法读取判断策略。`,saveError:`暂时无法保存判断策略。`,conflictError:`判断策略已更新,请重新检查后再保存。`,retry:`重试`},mode:{title:`自主程度`,manual:`我来确认`,manualHint:`只分析,不执行。`,shared:`共同决策`,sharedHint:`按已有确认处理常规事项,拿不准时问我。`,autonomous:`自主处理`,autonomousHint:`把常规审核和执行选择交给 Tonborg,必要时再找我。`},quality:{title:`质量偏好`,quality:`质量优先`,balanced:`平衡`,economy:`经济`},client:{title:`判断客户端`,codex:`Codex`,claude_code:`Claude Code`},workbench:{aria:`Tonborg 决策工作台`,title:`判断工作台`,subtitle:`查看近期判断并决定下一步。`,all:`全部`,human:`需要人工`,review:`运行一次判断`,reviewing:`正在分析待处理事项…`,loading:`正在读取近期判断…`,refresh:`刷新`,empty:`暂时没有判断记录。`,emptyHuman:`没有需要人工处理的判断。`,loadError:`暂时无法读取判断记录。`,reviewError:`判断请求暂时无法完成。`,retry:`重试`,target:`目标`,evidence:`依据`,execution:`执行状态`,policy:`策略`,session:`会话`,source:`来源`,selection:`推荐方案`,executor:`执行器`,model:`模型`,disposition:`建议动作`,actions:{continue_current:`继续当前会话`,reuse_conversation:`复用历史会话`,new_session:`新开会话`,delegate:`委派子 Agent`,ask_user:`请你决定`},details:`查看执行详情`,receipt:`执行回执`,recordError:`记录错误`,feedbackHistory:`反馈历史`,executionHistory:`执行历史`,detailsUnavailable:`详情暂不可用。`,kind:{review:`审阅`,routing:`执行选择`,acceptance:`任务验收`},outcome:{approve:`通过`,escalate:`需要确认`,recommend:`建议`,failed:`失败`},executionStatus:{not_applied:`尚未执行`,applied:`已执行`,stale:`已过期`,failed:`执行失败`},feedback:`反馈`,feedbackReason:`反馈原因(可选)`,feedbackReasonAdd:`添加反馈原因`,feedbackReasonSaved:`已保存反馈原因`,saveReason:`保存原因`,feedbackUp:`有帮助`,feedbackDown:`需要改进`,feedbackSaving:`正在保存反馈…`,feedbackConflict:`记录已更新,请重新查看后再反馈。`,timeUnknown:`时间未知`},links:{profile:`查看 Agent 资料`,memory:`查看记忆`}},"en-US":{settings:{title:`Judgment and autonomy`,hint:`Choose how Tonborg analyzes requests and which results need your confirmation.`,project:`Project scope`,global:`All projects`,inherited:`Using the global policy`,override:`Project override`,reset:`Use global policy`,resetTitle:`Remove this project override`,save:`Save policy`,undo:`Undo`,saved:`Policy saved.`,loading:`Reading judgment policy…`,saving:`Saving judgment policy…`,loadError:`The judgment policy is temporarily unavailable.`,saveError:`The judgment policy could not be saved.`,conflictError:`The judgment policy changed. Review it before saving again.`,retry:`Retry`},mode:{title:`Autonomy scope`,manual:`Manual`,manualHint:`Analyze only; do not apply changes.`,shared:`Shared`,sharedHint:`Apply safe and reversible items.`,autonomous:`Autonomous`,autonomousHint:`Handle additional routine items; risky actions always need you.`},quality:{title:`Quality preference`,quality:`Quality priority`,balanced:`Balanced`,economy:`Economy`},client:{title:`Judgment client`,codex:`Codex`,claude_code:`Claude Code`},workbench:{aria:`Tonborg decision workbench`,title:`Judgment workbench`,subtitle:`Review recent decisions and choose what happens next.`,all:`All`,human:`Human needed`,review:`Run a judgment review`,reviewing:`Analyzing pending items…`,loading:`Reading recent judgments…`,refresh:`Refresh`,empty:`There are no judgment records yet.`,emptyHuman:`No judgments need human attention.`,loadError:`Judgment records are temporarily unavailable.`,reviewError:`The judgment request could not be completed.`,retry:`Retry`,target:`Target`,evidence:`Evidence`,execution:`Execution`,policy:`Policy`,session:`Session`,source:`Source`,selection:`Recommended option`,executor:`Executor`,model:`Model`,disposition:`Suggested action`,actions:{continue_current:`Continue here`,reuse_conversation:`Reuse conversation`,new_session:`Start session`,delegate:`Delegate work`,ask_user:`Ask you`},details:`View execution details`,receipt:`Execution receipt`,recordError:`Record error`,feedbackHistory:`Feedback history`,executionHistory:`Execution history`,detailsUnavailable:`Details are temporarily unavailable.`,kind:{review:`Review`,routing:`Execution choice`,acceptance:`Task acceptance`},outcome:{approve:`Approved`,escalate:`Needs confirmation`,recommend:`Recommended`,failed:`Failed`},executionStatus:{not_applied:`Not applied`,applied:`Applied`,stale:`Stale`,failed:`Execution failed`},feedback:`Feedback`,feedbackReason:`Feedback reason (optional)`,feedbackReasonAdd:`Add feedback reason`,feedbackReasonSaved:`Feedback reason saved`,saveReason:`Save reason`,feedbackUp:`Helpful`,feedbackDown:`Needs improvement`,feedbackSaving:`Saving feedback…`,feedbackConflict:`The record changed. Review it before sending feedback again.`,timeUnknown:`Unknown time`},links:{profile:`View Agent profile`,memory:`View memory`}}},dh=[`zh-CN`,`en-US`],fh=`fuli.locale`;function ph(e){return typeof e==`string`&&dh.includes(e)}function mh(e,t=[]){if(ph(e))return e;for(let e of t){let t=_h(e);if(t)return t}return`en-US`}function hh(){if(typeof window>`u`)return null;try{return window.localStorage.getItem(fh)}catch{return null}}function gh(){return typeof navigator>`u`?[]:navigator.languages.length>0?navigator.languages:navigator.language?[navigator.language]:[]}function _h(e){let t=e.trim().toLowerCase().split(/[-_]/,1)[0];return t===`zh`?`zh-CN`:t===`en`?`en-US`:null}var vh={"zh-CN":{judgment:uh[`zh-CN`],agentPins:lh[`zh-CN`],ui:Um[`zh-CN`],overview:Wm[`zh-CN`],agentRedesign:Gm[`zh-CN`],agentProfiles:Km[`zh-CN`],attention:sh[`zh-CN`],roundtable:ch[`zh-CN`],employees:oh[`zh-CN`],about:Qm[`zh-CN`],common:qm[`zh-CN`],console:Jm[`zh-CN`],knowledge:{dialogs:Xm[`zh-CN`],domain:Ym[`zh-CN`],workspace:Zm[`zh-CN`]},pages:$m[`zh-CN`],preferences:eh[`zh-CN`],projects:th[`zh-CN`],projectAgents:nh[`zh-CN`],routes:rh[`zh-CN`],settings:ih[`zh-CN`],writingTaste:ah[`zh-CN`]},"en-US":{judgment:uh[`en-US`],agentPins:lh[`en-US`],ui:Um[`en-US`],overview:Wm[`en-US`],agentRedesign:Gm[`en-US`],agentProfiles:Km[`en-US`],attention:sh[`en-US`],roundtable:ch[`en-US`],employees:oh[`en-US`],about:Qm[`en-US`],common:qm[`en-US`],console:Jm[`en-US`],knowledge:{dialogs:Xm[`en-US`],domain:Ym[`en-US`],workspace:Zm[`en-US`]},pages:$m[`en-US`],preferences:eh[`en-US`],projects:th[`en-US`],projectAgents:nh[`en-US`],routes:rh[`en-US`],settings:ih[`en-US`],writingTaste:ah[`en-US`]}},yh=Am({legacy:!1,globalInjection:!0,locale:mh(hh(),gh()),fallbackLocale:`zh-CN`,messages:vh});function bh(){return mh(yh.global.locale.value)}function xh(e,t={}){if(yh.global.locale.value=e,typeof document<`u`&&(document.documentElement.lang=e),!(t.persist===!1||typeof window>`u`))try{window.localStorage.setItem(fh,e)}catch{}}function Sh(e,t){return t?yh.global.t(e,t):yh.global.t(e)}xh(bh(),{persist:!1});export{qt as $,js as A,Cr as B,pa as C,ic as D,ni as E,hr as F,je as G,fr as H,fa as I,tn as J,Zt as K,ma as L,Qi as M,Yi as N,_r as O,ls as P,an as Q,ca as R,ms as S,H as T,pr as U,br as V,Ae as W,Kt as X,Me as Y,Jt as Z,Rr as _,Sh as a,de as at,hs as b,yu as c,Ql as d,on as et,Jl as f,B as g,lu as h,xh as i,ge as it,Yn as j,gr as k,Yl as l,du as m,bh as n,gn as nt,uh as o,Te as ot,Gc as p,L as q,yh as r,un as rt,Il as s,dh as t,I as tt,Zl as u,rc as v,Ts as w,Ds as x,xs as y,ri as z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./i18n-
|
|
1
|
+
import{a as e}from"./i18n-B4Fp9Oa5.js";var t=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function n(n,r=18){let i=String(n??``).trim();if(!i)return e(`common.status.notRecorded`);if(i.length<=r)return i;if(t.test(i))return i.slice(0,8);let a=Math.max(7,Math.ceil((r-1)*.58)),o=Math.max(4,r-a-1);return`${i.slice(0,a)}…${i.slice(-o)}`}function r(e){let t=String(e??``).trim();return`${t} ${n(t)}`}function i(e){let t=e?.attributes?.projectId;return n(t||e?.id,t?26:18)}export{i as n,r,n as t};
|