fuli-context 0.9.0-beta.1 → 0.9.0-beta.2

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 CHANGED
@@ -59,7 +59,7 @@ For a one-off task, this source version also supports an isolated **temporary pr
59
59
  connected client to coordinate the task with Fuli even when no registered project matches. Fuli
60
60
  retains its task history and follows the existing Agent recruitment and executor permissions.
61
61
  Reading preferences alone creates nothing. An ambiguous project still needs a choice.
62
- This behavior is included in the `0.9.0-beta.1` prerelease.
62
+ This behavior is included in the `0.9.0-beta.2` prerelease.
63
63
 
64
64
  The Agent directory now explains the first-task entry, and task details distinguish assignment
65
65
  from actual worker reports. A completion table appears only after real execution is reported;
package/README.zh-CN.md CHANGED
@@ -47,7 +47,7 @@ fuli open
47
47
 
48
48
  临时任务也能交给 Agent:本次源码支持在没有匹配到已登记项目时,建立隔离的**临时项目**,
49
49
  继续用 Fuli 协调任务。任务历史会保留,Agent 招募与执行器授权沿用现有规则;
50
- 单纯读取偏好不会创建项目,多个候选项目仍需明确选择。此能力包含在 `0.9.0-beta.1` 预发布中。
50
+ 单纯读取偏好不会创建项目,多个候选项目仍需明确选择。此能力包含在 `0.9.0-beta.2` 预发布中。
51
51
 
52
52
  Agent 目录提供首次任务入口,任务详情会区分“已分配”和“收到工作进程报告”。
53
53
  只有上报真实执行后才有完成汇总;分配了 Agent、或仅完成普通本机对话,都不等于已运行工作进程。
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RoundtablesPage-642YtZBC.js","assets/i18n-CIIxzhPZ.js","assets/GrowthLoading-DIwqGFSc.js","assets/_plugin-vue_export-helper-BDNMzG2s.js","assets/GrowthLoading-B_Hh0CRS.css","assets/useApi-CROJJdhE-fcdVGInY.js","assets/vue-router-BUX6njIv.js","assets/copy-CX6pyzAG.js","assets/RoundtablesPage-DCbIBnBq.css","assets/SharedJefaReportPage-CNQDezJr.js","assets/shared-report-Cll2Yj8W.js","assets/client-DTQ_tUr2.js","assets/ProjectScopePicker-CZUMdyYz.js","assets/ProjectScopePicker-BvaGTMFx.css","assets/shared-report-ezeb8dW4.css","assets/SharedJefaReportPage-DXbj_JhO.css","assets/OverviewPage-VXMfcWFI.js","assets/console-CrhIK67Y.js","assets/paths-CDREouhi.js","assets/PersonalProfilePage-C1LBhcYu.js","assets/useModalDialog-B-45idX9.js","assets/SearchableSelect-Do6X3fXi.js","assets/KnowledgeInspector-yms1ysZ4.js","assets/model-CJsrDUNb.js","assets/conversation-launcher-settings-fUWCt3XG.js","assets/KnowledgeInspector--1NujtXW.css","assets/KnowledgeEditDialog-Degd9AGD.js","assets/identity-CdFITIOu.js","assets/KnowledgeEditDialog-D9NuRHvp.css","assets/personal-profile-graph-CQLOait6.js","assets/PersonalProfilePage-L8T5xMEC.css","assets/WritingTastePage-CAUvbDlL.js","assets/WritingTastePage-Bzg6AvnB.css","assets/PersonalProjectsPage-B5lV4ZJW.js","assets/KnowledgeWorkspace-BsF1X4Aq.js","assets/KnowledgeWorkspace-sb8OJ97I.css","assets/KnowledgeOrganizerPage-C64wNn8a.js","assets/KnowledgeOrganizerPage-h2iKvQpO.css","assets/AgentsDirectoryPage-BEJdvmX7.js","assets/AgentHand-CsMcNXUm.js","assets/AgentHand-D9sQu2vc.css","assets/profile-model-BQO4zNs9.js","assets/AgentName-BboCA-Fd.js","assets/AgentName-Cydd0UI4.css","assets/agent-profile.css_vue_type_style_index_0_src_true_lang-DHOcWSe_.js","assets/task-evidence-DTiPCs7r.js","assets/agent-profile-CdKOh5xw.css","assets/ProjectAgentFirstTask-DF-IvEqp.js","assets/ProjectAgentFirstTask-6afJ8HUe.css","assets/EmployeeRecruitDialog-DP_ktv3w.js","assets/catalog-JmKyJnKL.js","assets/EmployeeRecruitDialog-B59X3rOi.css","assets/AgentProfilePage-Dyux6qE3.js","assets/ProjectAgentsPage-CgL92gng.js","assets/ProjectAgentsPage-CoJ4qQlA.css","assets/EmployeeWorkbenchPage-CAt8lVnr.js","assets/EmployeeWorkbenchPage-CQwZnTA0.css","assets/employee-dialog-Bh5ccIbK.css","assets/PublicProjectsPage-e4CpxHk9.js","assets/KnowledgePage-BTFEXzgi.js","assets/ReviewPage-DugEaFvI.js","assets/ConnectionsPage-Dw_hK_EM.js","assets/ConnectionsPage-CBHAdZXT.css","assets/SettingsPage-wqYxDPyu.js","assets/SettingsPage-Brl-SL33.css","assets/AboutPage-u2Bv6cO-.js","assets/fuli-logo-Bu9WBuQe.js","assets/AboutPage-vYIBifKw.css","assets/NotFoundPage-DfaNTiD1.js"])))=>i.map(i=>d[i]);
2
- import{$ as e,A as t,B as n,C as r,F as i,H as a,L as o,M as s,N as c,T as l,V as u,Z as d,_ as f,a as p,at as m,b as h,d as g,g as _,h as v,j as y,m as b,nt as x,p as S,r as C,rt as w,s as T,v as E,w as D,x as O,y as k,z as A}from"./i18n-CIIxzhPZ.js";import{n as j,t as M}from"./console-CrhIK67Y.js";import{t as N}from"./GrowthLoading-DIwqGFSc.js";import{t as P}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{m as F}from"./useApi-CROJJdhE-fcdVGInY.js";import{i as I,n as L,r as R,t as z}from"./vue-router-BUX6njIv.js";import{t as B}from"./fuli-logo-Bu9WBuQe.js";import{n as V}from"./client-DTQ_tUr2.js";import{a as ee,n as te}from"./copy-CX6pyzAG.js";import{a as ne,s as H}from"./catalog-JmKyJnKL.js";import{i as U,n as W,r as G,t as K}from"./AgentHand-CsMcNXUm.js";import{n as re}from"./profile-model-BQO4zNs9.js";import{t as ie}from"./useModalDialog-B-45idX9.js";/* empty css */import{n as ae,t as oe}from"./paths-CDREouhi.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var q={name:`fuli-context`,version:`0.9.0-beta.1`,description:`Local-first collaboration relationship graph for AI agents.`,type:`module`,files:[`README.zh-CN.md`,`npm-shrinkwrap.json`,`src/`,`dist/web/`,`docs/external-knowledge-architecture.md`,`docs/public-personal-architecture.md`,`docs/project-agent-memory.md`,`docs/agent-conversations-and-collaboration.md`,`docs/employee-agents.md`,`docs/agent-interface-architecture.md`,`docs/roundtable-beta-testing.md`,`docs/roundtable-beta-validation.md`,`docs/roundtable-research.md`,`examples/external-knowledge/markdown-folder.mjs`,`graph-provider/Dockerfile`,`graph-provider/pyproject.toml`,`graph-provider/fuli_graph/*.py`,`graph-provider/fuli_graph/**/*.py`,`skills/`,`compose.graphiti.yml`],bin:{fl:`src/cli.js`,fuli:`src/cli.js`},keywords:[`ai-agent`,`mcp`,`context`,`knowledge-graph`,`local-first`,`codex`,`claude-code`],scripts:{mcp:`node src/mcp-server.js`,dev:`run-p dev:server dev:web`,"dev:server":`node src/server.js`,"dev:web":`vite`,build:`run-s typecheck:web build:web`,"build:web":`vite build`,"typecheck:web":`vue-tsc --noEmit -p tsconfig.app.json`,"test:node":`node --test`,"test:web":`vitest run --config vitest.config.ts`,"test:package":`node scripts/package-smoke.js`,"test:knowledge:live":`node acceptance/knowledge-live.js`,"test:external-knowledge:live":`node scripts/validate-external-knowledge-live.js`,start:`node src/server.js`,"graph:setup":`node src/graphiti/setup.js`,"graph:up":`docker compose -f compose.graphiti.yml up -d --build`,"graph:down":`docker compose -f compose.graphiti.yml down`,"test:structure":`node --test test/source-structure.test.js`,pretest:`npm run build:web`,test:`run-s typecheck:web test:node test:web`,prepack:`npm run build`,prepublishOnly:`npm test`},engines:{node:`>=24.12`},repository:{type:`git`,url:`git+https://github.com/JevonsCode/fuli.git`},homepage:`https://jevonscode.github.io/fuli/`,bugs:{url:`https://github.com/JevonsCode/fuli/issues`},publishConfig:{access:`public`},license:`Apache-2.0`,dependencies:{"@a2a-js/sdk":`1.3.0`,"@hono/node-server":`2.0.12`,"@modelcontextprotocol/sdk":`^1.31.0`,zod:`^4.4.3`},devDependencies:{"@types/d3":`^7.4.3`,"@types/node":`^24.13.3`,"@vitejs/plugin-vue":`^6.0.8`,"@vue/test-utils":`^2.4.11`,"brace-expansion":`5.0.12`,d3:`^7.9.0`,jsdom:`^29.1.1`,linkedom:`^0.18.12`,"npm-run-all2":`^9.0.2`,pinia:`^4.0.2`,typescript:`~6.0.0`,vite:`^8.1.5`,vitest:`^4.1.10`,vue:`^3.5.42`,"vue-i18n":`^11.4.8`,"vue-router":`^5.2.0`,"vue-tsc":`^3.3.8`},overrides:{"@modelcontextprotocol/sdk":{"@hono/node-server":`2.0.12`},"brace-expansion":`$brace-expansion`,"fast-uri":`3.1.8`,qs:`6.16.0`}}.version,se=[`aria-label`],ce={class:`brand-mark-wrap`},le=[`src`],ue={class:`brand-copy`},de={class:`brand-title-row`},fe={class:`brand-name`},pe=[`aria-label`,`aria-expanded`],me={class:`brand-version`},he={key:1,class:`brand-version`},ge={class:`brand-title-row`},_e={class:`brand-name`},ve={class:`brand-version`},ye=[`aria-label`],be=[`href`],xe=P(l({__name:`BrandEasterEgg`,setup(e){let n=d(null),r=d(null),i=d(0),a=d(!1),o=d(!1),l=d(!1),u=d(null),g=f(()=>u.value?.status===`ready`&&u.value.updateAvailable&&!!u.value.latestVersion),_=f(()=>u.value?.latestVersion??``),v=f(()=>u.value?.packageUrl??`https://www.npmjs.com/package/fuli-context`),S=new AbortController,C=!1;function T(){i.value+=1,a.value=!0}function D(){a.value=!1}function k(){g.value&&(l.value=!l.value)}function A(e){C=!1,o.value=!1,l.value&&!n.value?.contains(e.target)&&(l.value=!1)}function j(e){e.key===`Tab`&&(C=!0),e.key===`Escape`&&l.value&&(e.preventDefault(),l.value=!1,t(()=>r.value?.focus()))}function M(){o.value=C}function N(){o.value=!1}return s(()=>{window.addEventListener(`pointerdown`,A,!0),window.addEventListener(`keydown`,j,!0),V(`/api/system/version`,{signal:S.signal}).then(e=>{u.value=e}).catch(()=>{})}),y(()=>{S.abort(),window.removeEventListener(`pointerdown`,A,!0),window.removeEventListener(`keydown`,j,!0)}),(e,t)=>(c(),O(`div`,{ref_key:`root`,ref:n,class:w([`brand-block`,{"is-sparkling":a.value,"is-keyboard-focused":o.value}])},[E(`button`,{class:`brand-effect-button`,type:`button`,"aria-label":x(p)(`console.brandEffect.aria`),onClick:T,onFocus:M,onBlur:N},[E(`span`,ce,[E(`img`,{class:`brand-mark`,src:x(B),alt:``,"aria-hidden":`true`},null,8,le),a.value?(c(),O(`span`,{key:`orbit-${i.value}`,class:`brand-orbit`,"aria-hidden":`true`})):h(``,!0)])],40,se),E(`span`,ue,[E(`span`,de,[E(`span`,fe,m(x(p)(`common.brand`)),1),g.value?(c(),O(`button`,{key:0,ref_key:`versionButton`,ref:r,class:`brand-version-button`,type:`button`,"aria-label":x(p)(`console.update.aria`,{version:_.value}),"aria-expanded":l.value,"aria-controls":`brand-update-details`,onClick:k},[E(`span`,me,`v`+m(x(q)),1),t[0]||=E(`span`,{class:`brand-update-dot`,"aria-hidden":`true`},null,-1)],8,pe)):(c(),O(`span`,he,`v`+m(x(q)),1))]),t[1]||=E(`span`,{class:`brand-subtitle`},`Context Graph`,-1),a.value?(c(),O(`span`,{key:`copy-reflection-${i.value}`,class:`brand-copy-reflection`,"aria-hidden":`true`,onAnimationend:b(D,[`self`])},[E(`span`,ge,[E(`span`,_e,m(x(p)(`common.brand`)),1),E(`span`,ve,`v`+m(x(q)),1)])],32)):h(``,!0)]),l.value?(c(),O(`div`,{key:0,id:`brand-update-details`,class:`brand-update-popover`,role:`dialog`,"aria-label":x(p)(`console.update.title`,{version:_.value})},[E(`strong`,null,m(x(p)(`console.update.title`,{version:_.value})),1),E(`p`,null,m(x(p)(`console.update.copy`)),1),t[2]||=E(`code`,null,`fuli update --yes`,-1),E(`a`,{href:v.value,target:`_blank`,rel:`noopener noreferrer`},m(x(p)(`console.update.npmLink`)),9,be)],8,ye)):h(``,!0)],2))}}),[[`__scopeId`,`data-v-3ccab825`]]),J=e(null);function Se(e){let t=e.onError((t,n)=>{let r=e.resolve(n).href;!r.startsWith(`/`)||r.startsWith(`//`)||(J.value={href:r,resourceFailure:/dynamically imported module|module script|loading chunk|preload css|importing a module/i.test(String(t))})}),n=e.afterEach((e,t,n)=>{n||(J.value=null)});return()=>{t(),n()}}var Ce={key:0,class:`navigation-recovery`,role:`alert`},we=[`href`],Te=P(l({__name:`NavigationRecovery`,setup(e){return(e,t)=>x(J)?(c(),O(`div`,Ce,[E(`div`,null,[E(`strong`,null,m(x(p)(`routes.loadFailure.title`)),1),E(`p`,null,m(x(p)(x(J).resourceFailure?`routes.loadFailure.resources`:`routes.loadFailure.message`)),1)]),E(`a`,{href:x(J).href,class:`quiet-button`},m(x(p)(`routes.loadFailure.reload`)),9,we),E(`button`,{type:`button`,class:`navigation-recovery-dismiss`,onClick:t[0]||=e=>J.value=null},m(x(p)(`routes.loadFailure.dismiss`)),1)])):h(``,!0)}}),[[`__scopeId`,`data-v-83dee1c5`]]),Ee={class:`nav-section-label`},De={class:`employee-nav-mark`,"aria-hidden":`true`},Oe=[`src`],ke={class:`nav-copy`},Ae=P(l({__name:`EmployeeNavigation`,props:{personalSpaceId:{}},setup(e){let t=e;A(()=>t.personalSpaceId,e=>{H(e===`current`?``:e)},{immediate:!0});let n=f(()=>ne.value.filter(e=>e.agentId&&e.agentStatus===`active`&&(e.runtime||e.workbench?.kind===`native`)));return(t,a)=>n.value.length?(c(),O(v,{key:0},[E(`p`,Ee,m(x(p)(`employees.directory`)),1),(c(!0),O(v,null,i(n.value,t=>(c(),O(`div`,{key:t.id,class:`employee-nav-row`},[D(x(z),{to:x(re)(e.personalSpaceId,t.agentId),class:`space-nav-button employee-nav`,"active-class":`is-active`},{default:u(()=>[E(`span`,De,[x(U)(t.id)?(c(),O(`img`,{key:0,src:x(U)(t.id),alt:``},null,8,Oe)):(c(),O(v,{key:1},[r(m(t.name.slice(0,1)),1)],64))]),E(`span`,ke,[E(`strong`,null,m(t.name),1),E(`small`,null,m(t.role),1)])]),_:2},1032,[`to`]),D(x(z),{class:`employee-workbench-link`,to:`/employees/${encodeURIComponent(t.id)}`,"aria-label":`${t.name} · ${x(p)(`agentProfiles.workbench`)}`,title:x(p)(`agentProfiles.workbench`)},{default:u(()=>[...a[0]||=[E(`svg`,{viewBox:`0 0 20 20`,width:`16`,height:`16`,"aria-hidden":`true`},[E(`path`,{d:`M3 4h14v12H3zM3 8h14M8 8v8`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`})],-1)]]),_:1},8,[`to`,`aria-label`,`title`]),D(K,{"agent-id":t.agentId},null,8,[`agent-id`])]))),128))],64)):h(``,!0)}}),[[`__scopeId`,`data-v-8788995d`]]),je=[`title`],Me={class:`employee-dialog-shell`},Ne={id:`attention-title`},Pe=[`disabled`,`aria-label`],Fe={class:`employee-dialog-body`},Ie={class:`attention-toolbar`},Le=[`disabled`],Re={key:0,role:`alert`,class:`employee-dialog-error`},ze={key:1,role:`alert`,class:`employee-dialog-error`},Be={key:4},Ve={class:`attention-meta`},He={class:`attention-action`},Ue=[`href`],We=[`onSubmit`],Ge=[`for`],Ke=[`id`,`onUpdate:modelValue`,`disabled`],qe=[`disabled`],Je={key:1},Ye=[`disabled`],Xe=P(l({__name:`AgentAttentionCenter`,props:{personalSpaceId:{},projects:{}},setup(e){let t=e,n=G(),r=d({}),o=d(!1),l=d({}),u=d(``),S=d(``),C=f(()=>new Map(t.projects.map(e=>[e.project_id,e.profile.name]))),{dialogRef:w,initialFocusRef:T,onCancel:j,onKeydown:M}=ie(()=>n.open,()=>{u.value||(n.open=!1)});A(()=>t.personalSpaceId,e=>{r.value={},o.value=!1,l.value={},n.setSpace(e===`current`?``:e)},{immediate:!0}),A(()=>n.open,async e=>{if(!e)return;S.value=``;let t=n.spaceId;o.value=!0;try{let e=await V(`/api/project-agents?${new URLSearchParams({personalSpaceId:t})}`);t===n.spaceId&&(r.value=Object.fromEntries(e.map(e=>[e.agentId,e.profile.displayName||e.profile.name])))}catch{}finally{t===n.spaceId&&(o.value=!1)}});let P;function F(){document.visibilityState===`visible`&&!n.loading&&!n.open&&n.refresh()}s(()=>{P=setInterval(F,3e4),document.addEventListener(`visibilitychange`,F)}),y(()=>{clearInterval(P),document.removeEventListener(`visibilitychange`,F),n.setSpace(``)});async function I(e){if(!(u.value||!l.value[e.requestId]?.trim())){u.value=e.requestId,S.value=``;try{await n.respond(e,l.value[e.requestId].trim()),delete l.value[e.requestId]}catch(e){S.value=e instanceof Error?e.message:String(e),await n.refresh()}finally{u.value=``}}}return(e,t)=>(c(),O(v,null,[E(`button`,{class:`space-nav-button attention-nav`,type:`button`,onClick:t[0]||=e=>x(n).show()},[E(`span`,null,m(x(p)(`attention.title`)),1),D(K,{passive:``}),x(n).error?(c(),O(`span`,{key:0,title:x(p)(`attention.loadError`)},`!`,8,je)):h(``,!0)]),(c(),k(_,{to:`body`},[x(n).open?(c(),O(`dialog`,{key:0,ref_key:`dialogRef`,ref:w,class:`employee-dialog attention-dialog`,"aria-labelledby":`attention-title`,onCancel:t[6]||=(...e)=>x(j)&&x(j)(...e),onKeydown:t[7]||=(...e)=>x(M)&&x(M)(...e)},[E(`div`,Me,[E(`header`,null,[E(`h2`,Ne,m(x(n).agentId&&r.value[x(n).agentId]||x(p)(`attention.title`)),1),E(`button`,{ref_key:`initialFocusRef`,ref:T,type:`button`,disabled:!!u.value,"aria-label":x(p)(`attention.close`),onClick:t[1]||=e=>x(n).open=!1},`×`,8,Pe)]),E(`div`,Fe,[E(`div`,Ie,[x(n).agentId?(c(),O(`button`,{key:0,type:`button`,onClick:t[2]||=e=>x(n).show()},m(x(p)(`attention.all`)),1)):h(``,!0),E(`button`,{type:`button`,disabled:x(n).loading||!!u.value,onClick:t[3]||=e=>x(n).refresh()},m(x(p)(`attention.refresh`)),9,Le)]),x(n).error?(c(),O(`p`,Re,m(x(p)(`attention.loadError`))+` · `+m(x(n).error),1)):h(``,!0),S.value?(c(),O(`p`,ze,m(S.value),1)):h(``,!0),o.value?(c(),k(N,{key:2,variant:`inline`,label:x(p)(`attention.loadingAgents`)},null,8,[`label`])):h(``,!0),x(n).loading?(c(),k(N,{key:3,variant:`compact`,label:x(p)(`attention.loading`)},null,8,[`label`])):!x(n).items.length&&!x(n).error?(c(),O(`p`,Be,m(x(p)(`attention.empty`)),1)):h(``,!0),(c(!0),O(v,null,i(x(n).items,e=>(c(),O(`article`,{key:e.requestId,class:`attention-item`},[E(`p`,Ve,m(r.value[e.agentId]||e.agentId)+` · `+m(C.value.get(e.personalProjectId)||e.personalProjectId)+` · `+m(x(p)(`attention.kinds.${e.kind}`)),1),E(`h3`,null,m(e.title),1),E(`p`,null,m(e.detail),1),E(`p`,He,m(e.requestedAction),1),e.taskId?(c(),O(`a`,{key:0,href:x(W)(e),onClick:t[4]||=e=>x(n).open=!1},m(x(p)(`attention.task`)),9,Ue)):h(``,!0),E(`form`,{onSubmit:b(t=>I(e),[`prevent`])},[E(`label`,{for:`attention-${e.requestId}`},m(x(p)(`attention.response`)),9,Ge),a(E(`textarea`,{id:`attention-${e.requestId}`,"onUpdate:modelValue":t=>l.value[e.requestId]=t,rows:`2`,maxlength:`4096`,required:``,disabled:!!u.value},null,8,Ke),[[g,l.value[e.requestId]]]),E(`button`,{type:`submit`,class:`primary`,disabled:!!u.value||!l.value[e.requestId]?.trim()},[u.value===e.requestId?(c(),k(N,{key:0,variant:`inline`,label:x(p)(`attention.sending`)},null,8,[`label`])):(c(),O(`span`,Je,m(x(p)(`attention.send`)),1))],8,qe)],40,We)]))),128)),x(n).items.length<x(n).filteredTotal?(c(),O(`button`,{key:5,type:`button`,disabled:x(n).loading,onClick:t[5]||=e=>x(n).more()},m(x(p)(`attention.more`)),9,Ye)):h(``,!0)])])],544)):h(``,!0)]))],64))}}),[[`__scopeId`,`data-v-521df451`]]),Ze=[`routes.`,`common.`,`employees.`,`agentProfiles.`];function Y(e,t=``){let n=typeof e==`string`&&e?e:t;return Ze.some(e=>n.startsWith(e))?p(n):n}function X(e){if(typeof document>`u`)return;let t=Y(e,`routes.overview.title`);document.title=`${t} · ${p(`common.brand`)}`}var Qe={class:`app-shell`},$e=[`onKeydown`],et=[`aria-label`],tt={class:`nav-section-label`},nt={class:`nav-label`},rt={class:`nav-section-label nav-space-label`},it={class:`nav-copy`},at={class:`nav-copy`},ot={class:`nav-copy`},st={class:`nav-copy`},ct={class:`nav-copy`},lt={class:`nav-section-label nav-public-label`},ut={class:`nav-copy`},dt={class:`nav-section-label nav-tool-label`},ft={class:`nav-label`},pt={class:`nav-label`},mt={class:`nav-label`},ht={class:`nav-section-label nav-about-label`},gt={class:`nav-label`},_t={class:`nav-label`},vt={class:`sidebar-foot`},yt=[`aria-label`],bt={class:`runtime-status`},xt={class:`runtime-status`},St=[`aria-label`],Ct=[`inert`],wt=[`aria-expanded`],Tt={key:0,class:`workbench-host-label`},Et={key:1,class:`topbar-heading`},Dt={key:2,class:`topbar-actions`},Ot={key:0,class:`mode-chip`},kt=[`disabled`],At=[`disabled`],jt={key:1},Mt=[`aria-label`],Nt=P(l({__name:`ConsoleLayout`,setup(e){let i=M(),a=F(),l=d(!1),g=d(null),_=d(null),C=f(()=>i.activePersonalSpace?.id??`current`),T=f(()=>ae(C.value,`graph`)),j=f(()=>oe(`personal`,C.value,`directory`)),P=f(()=>Y(a.meta.title,`routes.overview.title`)),I=f(()=>a.meta.dedicatedWorkspace===!0),R=f(()=>i.publicRuntimeStatus===`ready`),B=f(()=>i.publicRuntimeStatus===`ready`?p(`console.services.publicReady`):i.publicRuntimeStatus===`error`?p(`console.services.publicError`):p(`console.services.publicOffline`)),V=f(()=>{if(i.publicRuntimeStatus===`ready`){let e=i.state?.capabilities;return e?.browsePublicProjects&&e?.subscribeProject&&!e?.publishProject&&!e?.submitKnowledge&&!e?.reviewProposals?p(`console.services.publicBrowseSubscribe`):p(`console.services.publicAvailable`)}return i.publicRuntimeStatus===`error`?p(`console.services.localUnaffected`):p(`console.services.localOnly`)}),ne=f(()=>i.state?.capabilities?.browsePublicProjects!==!1),H=f(()=>{let e=i.state?.capabilities;return e?.submitKnowledge!==!1||e?.reviewProposals===!0});s(()=>{i.runtimeStatus===`idle`&&i.refresh(),window.addEventListener(`resize`,U)}),y(()=>window.removeEventListener(`resize`,U));function U(){window.innerWidth>920&&(l.value=!1)}function W(e){if(!l.value||e.key!==`Tab`)return;let t=[...e.currentTarget.querySelectorAll(`button:not(:disabled), a[href], input:not(:disabled), [tabindex="0"]`)].filter(e=>e.getClientRects().length>0),n=t[0],r=t.at(-1);e.shiftKey&&document.activeElement===n?(e.preventDefault(),r?.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus())}n(()=>{X(a.meta.title)}),A(()=>a.fullPath,()=>{l.value=!1});async function G(){l.value=!0,await t(),_.value?.focus({preventScroll:!0})}async function K(){l.value=!1,await t(),g.value?.focus({preventScroll:!0})}return(e,t)=>(c(),O(`div`,Qe,[E(`aside`,{id:`console-primary-sidebar`,class:w([`sidebar`,{"is-mobile-open":l.value}]),onKeydown:[S(b(K,[`stop`]),[`esc`]),W]},[E(`button`,{ref_key:`mobileNavCloseRef`,ref:_,class:`mobile-nav-close quiet-button`,type:`button`,onClick:K},m(x(p)(`console.navigation.closeMenu`)),513),D(xe),E(`nav`,{class:`primary-nav`,"aria-label":x(p)(`console.navigation.aria`)},[E(`p`,tt,m(x(p)(`console.navigation.workspace`)),1),D(x(z),{to:`/`,"exact-active-class":`is-active`},{default:u(()=>[t[2]||=E(`span`,{class:`nav-icon nav-icon-overview`,"aria-hidden":`true`},null,-1),E(`span`,nt,m(x(p)(`console.navigation.overview`)),1)]),_:1}),E(`p`,rt,m(x(p)(`console.navigation.personalSpace`)),1),D(x(z),{class:`space-nav-button personal-profile-button`,to:`/preferences`,"active-class":`is-active`},{default:u(()=>[t[3]||=E(`span`,{class:`nav-icon nav-icon-personal-profile`,"aria-hidden":`true`},null,-1),E(`span`,it,[E(`strong`,null,m(x(p)(`console.navigation.preferences`)),1),E(`small`,null,m(x(p)(`console.navigation.preferencesMeta`)),1)])]),_:1}),D(x(z),{class:`space-nav-button knowledge-organizer-button`,to:`/organize`,"active-class":`is-active`},{default:u(()=>[t[4]||=E(`span`,{class:`nav-icon nav-icon-knowledge-organizer`,"aria-hidden":`true`},null,-1),E(`span`,at,[E(`strong`,null,m(x(p)(`console.navigation.organizer`)),1),E(`small`,null,m(x(p)(`console.navigation.organizerMeta`)),1)])]),_:1}),D(x(z),{class:`space-nav-button personal-space-button`,to:T.value,"active-class":`is-active`},{default:u(()=>[t[5]||=E(`span`,{class:`nav-icon nav-icon-personal-project`,"aria-hidden":`true`},null,-1),E(`span`,ot,[E(`strong`,null,m(x(p)(`console.navigation.personalProjects`)),1),E(`small`,null,m(x(p)(`console.navigation.personalProjectsMeta`)),1)])]),_:1},8,[`to`]),D(x(z),{class:`space-nav-button project-agents-button`,to:`/project-agents`,"active-class":`is-active`},{default:u(()=>[t[6]||=E(`span`,{class:`nav-icon nav-icon-project-agent`,"aria-hidden":`true`},null,-1),E(`span`,st,[E(`strong`,null,m(x(p)(`console.navigation.projectAgents`)),1),E(`small`,null,m(x(p)(`console.navigation.projectAgentsMeta`)),1)])]),_:1}),D(x(z),{class:`space-nav-button roundtables-button`,to:`/roundtables`,"active-class":`is-active`},{default:u(()=>[t[7]||=E(`span`,{class:`nav-icon nav-icon-project-agent`,"aria-hidden":`true`},null,-1),E(`span`,ct,[E(`strong`,null,m(x(te)(`Agent 圆桌`,`Agent Roundtable`)),1),E(`small`,null,m(x(te)(`讨论 · 分工 · 结果`,`Discuss · assign · deliver`)),1)])]),_:1}),ne.value?(c(),O(v,{key:0},[E(`p`,lt,m(x(p)(`console.navigation.publicSpace`)),1),D(x(z),{class:`space-nav-button public-space-button`,to:`/public-projects`,"active-class":`is-active`},{default:u(()=>[t[8]||=E(`span`,{class:`nav-icon nav-icon-public-project`,"aria-hidden":`true`},null,-1),E(`span`,ut,[E(`strong`,null,m(x(p)(`console.navigation.publicProjects`)),1),E(`small`,null,m(x(p)(`console.navigation.publicProjectsMeta`)),1)])]),_:1})],64)):h(``,!0),D(Ae,{"personal-space-id":C.value},null,8,[`personal-space-id`]),D(Xe,{"personal-space-id":C.value,projects:x(i).state?.personalProjects??[]},null,8,[`personal-space-id`,`projects`]),E(`p`,dt,m(x(p)(`console.navigation.governance`)),1),D(x(z),{to:j.value,"active-class":`is-active`},{default:u(()=>[t[9]||=E(`span`,{class:`nav-icon nav-icon-knowledge-graph`,"aria-hidden":`true`},null,-1),E(`span`,ft,m(x(p)(`console.navigation.knowledge`)),1)]),_:1},8,[`to`]),H.value?(c(),k(x(z),{key:1,to:`/review`,"active-class":`is-active`},{default:u(()=>[t[10]||=E(`span`,{class:`nav-icon nav-icon-review`,"aria-hidden":`true`},null,-1),E(`span`,pt,m(x(p)(`console.navigation.review`)),1)]),_:1})):h(``,!0),D(x(z),{to:`/connections`,"active-class":`is-active`},{default:u(()=>[t[11]||=E(`span`,{class:`nav-icon nav-icon-connections`,"aria-hidden":`true`},null,-1),E(`span`,mt,m(x(p)(`console.navigation.connections`)),1)]),_:1}),E(`p`,ht,m(x(p)(`console.navigation.aboutSection`)),1),D(x(z),{to:`/settings`,"active-class":`is-active`},{default:u(()=>[t[12]||=E(`span`,{class:`nav-icon nav-icon-settings`,"aria-hidden":`true`},null,-1),E(`span`,gt,m(x(p)(`console.navigation.settings`)),1)]),_:1}),D(x(z),{to:`/about`,"active-class":`is-active`},{default:u(()=>[t[13]||=E(`span`,{class:`nav-icon nav-icon-about`,"aria-hidden":`true`},null,-1),E(`span`,_t,m(x(p)(`console.navigation.about`)),1)]),_:1})],8,et),E(`div`,vt,[E(`div`,{class:`service-runtime-list`,"aria-label":x(p)(`console.services.aria`)},[E(`div`,bt,[E(`span`,{class:w([`status-dot`,x(i).runtimeStatus])},null,2),E(`div`,null,[E(`strong`,null,m(x(i).runtimeStatus===`ready`?x(p)(`console.services.localReady`):x(i).runtimeStatus===`error`?x(p)(`console.services.localError`):x(p)(`console.services.localConnecting`)),1),t[14]||=E(`small`,null,`Graphiti / Neo4j`,-1)])]),E(`div`,xt,[E(`span`,{class:w([`status-dot`,x(i).publicRuntimeStatus])},null,2),E(`div`,null,[E(`strong`,null,m(B.value),1),E(`small`,null,m(V.value),1)])])],8,yt)])],42,$e),l.value?(c(),O(`button`,{key:0,class:`mobile-nav-backdrop`,type:`button`,tabindex:`-1`,"aria-label":x(p)(`console.navigation.closeMenu`),onClick:K},null,8,St)):h(``,!0),E(`main`,{class:`workspace`,inert:l.value||void 0},[E(`header`,{class:w([`topbar`,{"topbar--workbench":I.value}])},[E(`button`,{ref_key:`mobileNavToggleRef`,ref:g,class:`mobile-nav-toggle quiet-button`,type:`button`,"aria-controls":`console-primary-sidebar`,"aria-expanded":l.value,onClick:G},[t[15]||=E(`span`,{class:`mobile-nav-icon`,"aria-hidden":`true`},null,-1),r(` `+m(x(p)(`console.navigation.openMenu`)),1)],8,wt),I.value?(c(),O(`span`,Tt,`FULI`)):(c(),O(`div`,Et,[E(`h2`,null,m(P.value),1)])),I.value?h(``,!0):(c(),O(`div`,Dt,[R.value?(c(),O(`span`,Ot,m(x(p)(`console.publicReady`)),1)):h(``,!0),x(a).name===`settings`?(c(),O(`button`,{key:1,class:`settings-save-button`,disabled:x(i).settingsSaving,form:`settings-form`,type:`submit`},m(x(p)(`settings.save`)),9,kt)):h(``,!0),D(ee),E(`button`,{class:`quiet-button`,type:`button`,disabled:x(i).runtimeStatus===`loading`,onClick:t[0]||=(...e)=>x(i).refresh&&x(i).refresh(...e)},[x(i).runtimeStatus===`loading`?(c(),k(N,{key:0,variant:`inline`,label:x(p)(`common.status.loadingConsole`)},null,8,[`label`])):(c(),O(`span`,jt,m(x(p)(`common.actions.refresh`)),1))],8,At)]))],2),D(Te),x(i).feedback?(c(),O(`div`,{key:0,class:w([`feedback feedback-message`,{success:x(i).feedback.tone===`success`}]),role:`status`,"aria-live":`polite`},[E(`span`,null,m(x(i).feedback.message),1),E(`button`,{class:`feedback-dismiss`,type:`button`,"aria-label":x(p)(`common.actions.close`),onClick:t[1]||=(...e)=>x(i).clearFeedback&&x(i).clearFeedback(...e)},`×`,8,Mt)],2)):h(``,!0),D(x(L),null,{default:u(({Component:e})=>[(c(),k(o(e)))]),_:1})],8,Ct)]))}}),[[`__scopeId`,`data-v-a0fe6da2`]]),Pt=l({__name:`App`,setup(e){let t=F();return(e,n)=>x(t).meta.publicReport?(c(),k(x(L),{key:0})):(c(),k(Nt,{key:1}))}}),Ft=`modulepreload`,It=function(e){return`/`+e},Lt={},Z=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=It(t,n),t=s(t),t in Lt)return;Lt[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Ft,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function Rt(e){let t=e.match(/^#\/knowledge\/([^/?#]+)\/([^/?#]+)\/(entity|relationship)\/([^/?#]+)(?:\?([^#]*))?$/);if(!t)return null;let[,n,r,i,a,o]=t;return`/knowledge/${n}/${r}/directory/${i}/${a}${o?`?${o}`:``}`}var Q=R({history:I(`/`),routes:[{path:`/roundtables`,name:`roundtables`,component:()=>Z(()=>import(`./RoundtablesPage-642YtZBC.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8])),meta:{publicReport:!0,title:`Agent Roundtable`}},{path:`/roundtables/:roomId`,name:`roundtable-room`,component:()=>Z(()=>import(`./RoundtablesPage-642YtZBC.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8])),meta:{publicReport:!0,title:`Agent Roundtable`}},{path:`/roundtables/:spaceId/:roomId`,name:`roundtable-project-room`,component:()=>Z(()=>import(`./RoundtablesPage-642YtZBC.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8])),meta:{publicReport:!0,title:`Agent Roundtable`}},{path:`/reports/jefa`,name:`shared-jefa-report`,component:()=>Z(()=>import(`./SharedJefaReportPage-CNQDezJr.js`),__vite__mapDeps([9,1,2,3,4,5,10,11,12,13,14,15])),meta:{publicReport:!0,title:`employees.share.title`}},{path:`/`,name:`overview`,component:()=>Z(()=>import(`./OverviewPage-VXMfcWFI.js`),__vite__mapDeps([16,1,17,11,6,5,18])),meta:{eyebrow:``,title:`routes.overview.title`}},{path:`/preferences`,name:`personal-profile`,component:()=>Z(()=>import(`./PersonalProfilePage-C1LBhcYu.js`),__vite__mapDeps([19,1,17,11,2,3,4,6,5,20,21,22,23,24,25,26,27,28,29,30])),meta:{eyebrow:`PERSONAL LENS`,title:`routes.preferences.title`,description:`routes.preferences.description`}},{path:`/preferences/writing`,name:`writing-taste`,component:()=>Z(()=>import(`./WritingTastePage-CAUvbDlL.js`),__vite__mapDeps([31,1,17,11,2,3,4,6,5,26,20,21,27,23,28,29,32])),meta:{eyebrow:``,title:`routes.writingTaste.title`}},{path:`/personal/:spaceId/projects/:projectId/:mode/:itemKind/:itemId`,name:`personal-project-item`,component:()=>Z(()=>import(`./PersonalProjectsPage-B5lV4ZJW.js`),__vite__mapDeps([33,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/personal/:spaceId/projects/:mode/:itemKind/:itemId`,name:`personal-projects-item`,component:()=>Z(()=>import(`./PersonalProjectsPage-B5lV4ZJW.js`),__vite__mapDeps([33,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:mode`,name:`personal-projects`,component:()=>Z(()=>import(`./PersonalProjectsPage-B5lV4ZJW.js`),__vite__mapDeps([33,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:projectId/:mode`,name:`personal-project`,component:()=>Z(()=>import(`./PersonalProjectsPage-B5lV4ZJW.js`),__vite__mapDeps([33,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/organize`,name:`knowledge-organizer`,component:()=>Z(()=>import(`./KnowledgeOrganizerPage-C64wNn8a.js`),__vite__mapDeps([36,1,17,11,2,3,4,20,21,27,22,23,24,25,26,28,37])),meta:{eyebrow:`KNOWLEDGE CLASSIFICATION`,title:`routes.organizer.title`}},{path:`/project-agents`,name:`project-agents`,component:()=>Z(()=>import(`./AgentsDirectoryPage-BEJdvmX7.js`),__vite__mapDeps([38,1,17,11,2,3,4,5,6,39,40,41,42,43,44,45,46,47,18,48,12,13,49,50,20,21,51])),meta:{eyebrow:``,title:`routes.projectAgents.title`}},{path:`/agents/:spaceId/:agentId`,name:`agent-profile`,component:()=>Z(()=>import(`./AgentProfilePage-Dyux6qE3.js`),__vite__mapDeps([52,1,17,11,2,3,4,5,6,50,41,42,43,45,44,46])),meta:{eyebrow:``,title:`agentProfiles.profile`}},{path:`/project-agents/manage`,name:`agent-management`,component:()=>Z(()=>import(`./ProjectAgentsPage-CgL92gng.js`),__vite__mapDeps([53,1,17,11,2,3,4,5,6,50,39,40,20,45,47,18,48,12,13,21,49,51,54])),meta:{eyebrow:``,title:`agentProfiles.advanced`}},{path:`/employees/:templateId`,name:`employee-workbench`,component:()=>Z(()=>import(`./EmployeeWorkbenchPage-CAt8lVnr.js`),__vite__mapDeps([55,1,17,11,2,3,4,5,6,50,39,40,41,20,42,43,12,13,49,18,21,51,10,14,56,57])),meta:{eyebrow:``,title:`routes.employeeWorkbench.title`,dedicatedWorkspace:!0}},{path:`/public-projects`,name:`public-projects`,component:()=>Z(()=>import(`./PublicProjectsPage-e4CpxHk9.js`),__vite__mapDeps([58,1,17,11,2,3,4,5,20,18,21,27])),meta:{eyebrow:`PUBLIC PROJECTS`,title:`routes.publicProjects.title`,description:`routes.publicProjects.description`}},{path:`/knowledge`,name:`knowledge-default`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode/:itemKind/:itemId`,name:`project-knowledge-item`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode/:itemKind/:itemId`,name:`knowledge-item`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode`,name:`project-knowledge`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode`,name:`knowledge`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/review`,name:`review`,component:()=>Z(()=>import(`./ReviewPage-DugEaFvI.js`),__vite__mapDeps([60,1,17,11,2,3,4,21,27,23])),meta:{eyebrow:`REVIEW WORKSPACE`,title:`routes.review.title`,description:`routes.review.description`}},{path:`/connections`,name:`connections`,component:()=>Z(()=>import(`./ConnectionsPage-Dw_hK_EM.js`),__vite__mapDeps([61,1,17,11,2,3,4,21,27,62])),meta:{eyebrow:`SERVICE CONNECTIONS`,title:`routes.connections.title`,description:`routes.connections.description`}},{path:`/settings`,name:`settings`,component:()=>Z(()=>import(`./SettingsPage-wqYxDPyu.js`),__vite__mapDeps([63,1,17,11,2,3,4,21,24,64])),meta:{eyebrow:``,title:`routes.settings.title`}},{path:`/about`,name:`about`,component:()=>Z(()=>import(`./AboutPage-u2Bv6cO-.js`),__vite__mapDeps([65,1,3,66,67])),meta:{eyebrow:`FULI`,title:`routes.about.title`}},{path:`/:pathMatch(.*)*`,name:`not-found`,component:()=>Z(()=>import(`./NotFoundPage-DfaNTiD1.js`),__vite__mapDeps([68,1,6,5])),meta:{title:`common.errors.pageNotFound`}}],scrollBehavior:(e,t,n)=>n??(e.path!==t.path&&{top:0})});Se(Q),Q.beforeEach(e=>e.path!==`/`||typeof window>`u`?!0:Rt(window.location.hash)??!0),Q.afterEach(e=>{X(e.meta.title)});var $=T(Pt);$.use(j()),$.use(C),$.use(Q),await Q.isReady().catch(()=>void 0),$.mount(`#app`);
2
+ import{$ as e,A as t,B as n,C as r,F as i,H as a,L as o,M as s,N as c,T as l,V as u,Z as d,_ as f,a as p,at as m,b as h,d as g,g as _,h as v,j as y,m as b,nt as x,p as S,r as C,rt as w,s as T,v as E,w as D,x as O,y as k,z as A}from"./i18n-CIIxzhPZ.js";import{n as j,t as M}from"./console-CrhIK67Y.js";import{t as N}from"./GrowthLoading-DIwqGFSc.js";import{t as P}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{m as F}from"./useApi-CROJJdhE-fcdVGInY.js";import{i as I,n as L,r as R,t as z}from"./vue-router-BUX6njIv.js";import{t as B}from"./fuli-logo-Bu9WBuQe.js";import{n as V}from"./client-DTQ_tUr2.js";import{a as ee,n as te}from"./copy-CX6pyzAG.js";import{a as ne,s as H}from"./catalog-JmKyJnKL.js";import{i as U,n as W,r as G,t as K}from"./AgentHand-CsMcNXUm.js";import{n as re}from"./profile-model-BQO4zNs9.js";import{t as ie}from"./useModalDialog-B-45idX9.js";/* empty css */import{n as ae,t as oe}from"./paths-CDREouhi.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var q={name:`fuli-context`,version:`0.9.0-beta.2`,description:`Local-first collaboration relationship graph for AI agents.`,type:`module`,files:[`README.zh-CN.md`,`npm-shrinkwrap.json`,`src/`,`dist/web/`,`docs/external-knowledge-architecture.md`,`docs/public-personal-architecture.md`,`docs/project-agent-memory.md`,`docs/agent-conversations-and-collaboration.md`,`docs/employee-agents.md`,`docs/agent-interface-architecture.md`,`docs/roundtable-beta-testing.md`,`docs/roundtable-beta-validation.md`,`docs/roundtable-research.md`,`examples/external-knowledge/markdown-folder.mjs`,`graph-provider/Dockerfile`,`graph-provider/pyproject.toml`,`graph-provider/fuli_graph/*.py`,`graph-provider/fuli_graph/**/*.py`,`skills/`,`compose.graphiti.yml`],bin:{fl:`src/cli.js`,fuli:`src/cli.js`},keywords:[`ai-agent`,`mcp`,`context`,`knowledge-graph`,`local-first`,`codex`,`claude-code`],scripts:{mcp:`node src/mcp-server.js`,dev:`run-p dev:server dev:web`,"dev:server":`node src/server.js`,"dev:web":`vite`,build:`run-s typecheck:web build:web`,"build:web":`vite build`,"typecheck:web":`vue-tsc --noEmit -p tsconfig.app.json`,"test:node":`node --test`,"test:web":`vitest run --config vitest.config.ts`,"test:package":`node scripts/package-smoke.js`,"test:knowledge:live":`node acceptance/knowledge-live.js`,"test:external-knowledge:live":`node scripts/validate-external-knowledge-live.js`,start:`node src/server.js`,"graph:setup":`node src/graphiti/setup.js`,"graph:up":`docker compose -f compose.graphiti.yml up -d --build`,"graph:down":`docker compose -f compose.graphiti.yml down`,"test:structure":`node --test test/source-structure.test.js`,pretest:`npm run build:web`,test:`run-s typecheck:web test:node test:web`,prepack:`npm run build`,prepublishOnly:`npm test`},engines:{node:`>=24.12`},repository:{type:`git`,url:`git+https://github.com/JevonsCode/fuli.git`},homepage:`https://jevonscode.github.io/fuli/`,bugs:{url:`https://github.com/JevonsCode/fuli/issues`},publishConfig:{access:`public`},license:`Apache-2.0`,dependencies:{"@a2a-js/sdk":`1.3.0`,"@hono/node-server":`2.0.12`,"@modelcontextprotocol/sdk":`^1.31.0`,zod:`^4.4.3`},devDependencies:{"@types/d3":`^7.4.3`,"@types/node":`^24.13.3`,"@vitejs/plugin-vue":`^6.0.8`,"@vue/test-utils":`^2.4.11`,"brace-expansion":`5.0.12`,d3:`^7.9.0`,jsdom:`^29.1.1`,linkedom:`^0.18.12`,"npm-run-all2":`^9.0.2`,pinia:`^4.0.2`,typescript:`~6.0.0`,vite:`^8.1.5`,vitest:`^4.1.10`,vue:`^3.5.42`,"vue-i18n":`^11.4.8`,"vue-router":`^5.2.0`,"vue-tsc":`^3.3.8`},overrides:{"@modelcontextprotocol/sdk":{"@hono/node-server":`2.0.12`},"brace-expansion":`$brace-expansion`,"fast-uri":`3.1.8`,qs:`6.16.0`}}.version,se=[`aria-label`],ce={class:`brand-mark-wrap`},le=[`src`],ue={class:`brand-copy`},de={class:`brand-title-row`},fe={class:`brand-name`},pe=[`aria-label`,`aria-expanded`],me={class:`brand-version`},he={key:1,class:`brand-version`},ge={class:`brand-title-row`},_e={class:`brand-name`},ve={class:`brand-version`},ye=[`aria-label`],be=[`href`],xe=P(l({__name:`BrandEasterEgg`,setup(e){let n=d(null),r=d(null),i=d(0),a=d(!1),o=d(!1),l=d(!1),u=d(null),g=f(()=>u.value?.status===`ready`&&u.value.updateAvailable&&!!u.value.latestVersion),_=f(()=>u.value?.latestVersion??``),v=f(()=>u.value?.packageUrl??`https://www.npmjs.com/package/fuli-context`),S=new AbortController,C=!1;function T(){i.value+=1,a.value=!0}function D(){a.value=!1}function k(){g.value&&(l.value=!l.value)}function A(e){C=!1,o.value=!1,l.value&&!n.value?.contains(e.target)&&(l.value=!1)}function j(e){e.key===`Tab`&&(C=!0),e.key===`Escape`&&l.value&&(e.preventDefault(),l.value=!1,t(()=>r.value?.focus()))}function M(){o.value=C}function N(){o.value=!1}return s(()=>{window.addEventListener(`pointerdown`,A,!0),window.addEventListener(`keydown`,j,!0),V(`/api/system/version`,{signal:S.signal}).then(e=>{u.value=e}).catch(()=>{})}),y(()=>{S.abort(),window.removeEventListener(`pointerdown`,A,!0),window.removeEventListener(`keydown`,j,!0)}),(e,t)=>(c(),O(`div`,{ref_key:`root`,ref:n,class:w([`brand-block`,{"is-sparkling":a.value,"is-keyboard-focused":o.value}])},[E(`button`,{class:`brand-effect-button`,type:`button`,"aria-label":x(p)(`console.brandEffect.aria`),onClick:T,onFocus:M,onBlur:N},[E(`span`,ce,[E(`img`,{class:`brand-mark`,src:x(B),alt:``,"aria-hidden":`true`},null,8,le),a.value?(c(),O(`span`,{key:`orbit-${i.value}`,class:`brand-orbit`,"aria-hidden":`true`})):h(``,!0)])],40,se),E(`span`,ue,[E(`span`,de,[E(`span`,fe,m(x(p)(`common.brand`)),1),g.value?(c(),O(`button`,{key:0,ref_key:`versionButton`,ref:r,class:`brand-version-button`,type:`button`,"aria-label":x(p)(`console.update.aria`,{version:_.value}),"aria-expanded":l.value,"aria-controls":`brand-update-details`,onClick:k},[E(`span`,me,`v`+m(x(q)),1),t[0]||=E(`span`,{class:`brand-update-dot`,"aria-hidden":`true`},null,-1)],8,pe)):(c(),O(`span`,he,`v`+m(x(q)),1))]),t[1]||=E(`span`,{class:`brand-subtitle`},`Context Graph`,-1),a.value?(c(),O(`span`,{key:`copy-reflection-${i.value}`,class:`brand-copy-reflection`,"aria-hidden":`true`,onAnimationend:b(D,[`self`])},[E(`span`,ge,[E(`span`,_e,m(x(p)(`common.brand`)),1),E(`span`,ve,`v`+m(x(q)),1)])],32)):h(``,!0)]),l.value?(c(),O(`div`,{key:0,id:`brand-update-details`,class:`brand-update-popover`,role:`dialog`,"aria-label":x(p)(`console.update.title`,{version:_.value})},[E(`strong`,null,m(x(p)(`console.update.title`,{version:_.value})),1),E(`p`,null,m(x(p)(`console.update.copy`)),1),t[2]||=E(`code`,null,`fuli update --yes`,-1),E(`a`,{href:v.value,target:`_blank`,rel:`noopener noreferrer`},m(x(p)(`console.update.npmLink`)),9,be)],8,ye)):h(``,!0)],2))}}),[[`__scopeId`,`data-v-3ccab825`]]),J=e(null);function Se(e){let t=e.onError((t,n)=>{let r=e.resolve(n).href;!r.startsWith(`/`)||r.startsWith(`//`)||(J.value={href:r,resourceFailure:/dynamically imported module|module script|loading chunk|preload css|importing a module/i.test(String(t))})}),n=e.afterEach((e,t,n)=>{n||(J.value=null)});return()=>{t(),n()}}var Ce={key:0,class:`navigation-recovery`,role:`alert`},we=[`href`],Te=P(l({__name:`NavigationRecovery`,setup(e){return(e,t)=>x(J)?(c(),O(`div`,Ce,[E(`div`,null,[E(`strong`,null,m(x(p)(`routes.loadFailure.title`)),1),E(`p`,null,m(x(p)(x(J).resourceFailure?`routes.loadFailure.resources`:`routes.loadFailure.message`)),1)]),E(`a`,{href:x(J).href,class:`quiet-button`},m(x(p)(`routes.loadFailure.reload`)),9,we),E(`button`,{type:`button`,class:`navigation-recovery-dismiss`,onClick:t[0]||=e=>J.value=null},m(x(p)(`routes.loadFailure.dismiss`)),1)])):h(``,!0)}}),[[`__scopeId`,`data-v-83dee1c5`]]),Ee={class:`nav-section-label`},De={class:`employee-nav-mark`,"aria-hidden":`true`},Oe=[`src`],ke={class:`nav-copy`},Ae=P(l({__name:`EmployeeNavigation`,props:{personalSpaceId:{}},setup(e){let t=e;A(()=>t.personalSpaceId,e=>{H(e===`current`?``:e)},{immediate:!0});let n=f(()=>ne.value.filter(e=>e.agentId&&e.agentStatus===`active`&&(e.runtime||e.workbench?.kind===`native`)));return(t,a)=>n.value.length?(c(),O(v,{key:0},[E(`p`,Ee,m(x(p)(`employees.directory`)),1),(c(!0),O(v,null,i(n.value,t=>(c(),O(`div`,{key:t.id,class:`employee-nav-row`},[D(x(z),{to:x(re)(e.personalSpaceId,t.agentId),class:`space-nav-button employee-nav`,"active-class":`is-active`},{default:u(()=>[E(`span`,De,[x(U)(t.id)?(c(),O(`img`,{key:0,src:x(U)(t.id),alt:``},null,8,Oe)):(c(),O(v,{key:1},[r(m(t.name.slice(0,1)),1)],64))]),E(`span`,ke,[E(`strong`,null,m(t.name),1),E(`small`,null,m(t.role),1)])]),_:2},1032,[`to`]),D(x(z),{class:`employee-workbench-link`,to:`/employees/${encodeURIComponent(t.id)}`,"aria-label":`${t.name} · ${x(p)(`agentProfiles.workbench`)}`,title:x(p)(`agentProfiles.workbench`)},{default:u(()=>[...a[0]||=[E(`svg`,{viewBox:`0 0 20 20`,width:`16`,height:`16`,"aria-hidden":`true`},[E(`path`,{d:`M3 4h14v12H3zM3 8h14M8 8v8`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`})],-1)]]),_:1},8,[`to`,`aria-label`,`title`]),D(K,{"agent-id":t.agentId},null,8,[`agent-id`])]))),128))],64)):h(``,!0)}}),[[`__scopeId`,`data-v-8788995d`]]),je=[`title`],Me={class:`employee-dialog-shell`},Ne={id:`attention-title`},Pe=[`disabled`,`aria-label`],Fe={class:`employee-dialog-body`},Ie={class:`attention-toolbar`},Le=[`disabled`],Re={key:0,role:`alert`,class:`employee-dialog-error`},ze={key:1,role:`alert`,class:`employee-dialog-error`},Be={key:4},Ve={class:`attention-meta`},He={class:`attention-action`},Ue=[`href`],We=[`onSubmit`],Ge=[`for`],Ke=[`id`,`onUpdate:modelValue`,`disabled`],qe=[`disabled`],Je={key:1},Ye=[`disabled`],Xe=P(l({__name:`AgentAttentionCenter`,props:{personalSpaceId:{},projects:{}},setup(e){let t=e,n=G(),r=d({}),o=d(!1),l=d({}),u=d(``),S=d(``),C=f(()=>new Map(t.projects.map(e=>[e.project_id,e.profile.name]))),{dialogRef:w,initialFocusRef:T,onCancel:j,onKeydown:M}=ie(()=>n.open,()=>{u.value||(n.open=!1)});A(()=>t.personalSpaceId,e=>{r.value={},o.value=!1,l.value={},n.setSpace(e===`current`?``:e)},{immediate:!0}),A(()=>n.open,async e=>{if(!e)return;S.value=``;let t=n.spaceId;o.value=!0;try{let e=await V(`/api/project-agents?${new URLSearchParams({personalSpaceId:t})}`);t===n.spaceId&&(r.value=Object.fromEntries(e.map(e=>[e.agentId,e.profile.displayName||e.profile.name])))}catch{}finally{t===n.spaceId&&(o.value=!1)}});let P;function F(){document.visibilityState===`visible`&&!n.loading&&!n.open&&n.refresh()}s(()=>{P=setInterval(F,3e4),document.addEventListener(`visibilitychange`,F)}),y(()=>{clearInterval(P),document.removeEventListener(`visibilitychange`,F),n.setSpace(``)});async function I(e){if(!(u.value||!l.value[e.requestId]?.trim())){u.value=e.requestId,S.value=``;try{await n.respond(e,l.value[e.requestId].trim()),delete l.value[e.requestId]}catch(e){S.value=e instanceof Error?e.message:String(e),await n.refresh()}finally{u.value=``}}}return(e,t)=>(c(),O(v,null,[E(`button`,{class:`space-nav-button attention-nav`,type:`button`,onClick:t[0]||=e=>x(n).show()},[E(`span`,null,m(x(p)(`attention.title`)),1),D(K,{passive:``}),x(n).error?(c(),O(`span`,{key:0,title:x(p)(`attention.loadError`)},`!`,8,je)):h(``,!0)]),(c(),k(_,{to:`body`},[x(n).open?(c(),O(`dialog`,{key:0,ref_key:`dialogRef`,ref:w,class:`employee-dialog attention-dialog`,"aria-labelledby":`attention-title`,onCancel:t[6]||=(...e)=>x(j)&&x(j)(...e),onKeydown:t[7]||=(...e)=>x(M)&&x(M)(...e)},[E(`div`,Me,[E(`header`,null,[E(`h2`,Ne,m(x(n).agentId&&r.value[x(n).agentId]||x(p)(`attention.title`)),1),E(`button`,{ref_key:`initialFocusRef`,ref:T,type:`button`,disabled:!!u.value,"aria-label":x(p)(`attention.close`),onClick:t[1]||=e=>x(n).open=!1},`×`,8,Pe)]),E(`div`,Fe,[E(`div`,Ie,[x(n).agentId?(c(),O(`button`,{key:0,type:`button`,onClick:t[2]||=e=>x(n).show()},m(x(p)(`attention.all`)),1)):h(``,!0),E(`button`,{type:`button`,disabled:x(n).loading||!!u.value,onClick:t[3]||=e=>x(n).refresh()},m(x(p)(`attention.refresh`)),9,Le)]),x(n).error?(c(),O(`p`,Re,m(x(p)(`attention.loadError`))+` · `+m(x(n).error),1)):h(``,!0),S.value?(c(),O(`p`,ze,m(S.value),1)):h(``,!0),o.value?(c(),k(N,{key:2,variant:`inline`,label:x(p)(`attention.loadingAgents`)},null,8,[`label`])):h(``,!0),x(n).loading?(c(),k(N,{key:3,variant:`compact`,label:x(p)(`attention.loading`)},null,8,[`label`])):!x(n).items.length&&!x(n).error?(c(),O(`p`,Be,m(x(p)(`attention.empty`)),1)):h(``,!0),(c(!0),O(v,null,i(x(n).items,e=>(c(),O(`article`,{key:e.requestId,class:`attention-item`},[E(`p`,Ve,m(r.value[e.agentId]||e.agentId)+` · `+m(C.value.get(e.personalProjectId)||e.personalProjectId)+` · `+m(x(p)(`attention.kinds.${e.kind}`)),1),E(`h3`,null,m(e.title),1),E(`p`,null,m(e.detail),1),E(`p`,He,m(e.requestedAction),1),e.taskId?(c(),O(`a`,{key:0,href:x(W)(e),onClick:t[4]||=e=>x(n).open=!1},m(x(p)(`attention.task`)),9,Ue)):h(``,!0),E(`form`,{onSubmit:b(t=>I(e),[`prevent`])},[E(`label`,{for:`attention-${e.requestId}`},m(x(p)(`attention.response`)),9,Ge),a(E(`textarea`,{id:`attention-${e.requestId}`,"onUpdate:modelValue":t=>l.value[e.requestId]=t,rows:`2`,maxlength:`4096`,required:``,disabled:!!u.value},null,8,Ke),[[g,l.value[e.requestId]]]),E(`button`,{type:`submit`,class:`primary`,disabled:!!u.value||!l.value[e.requestId]?.trim()},[u.value===e.requestId?(c(),k(N,{key:0,variant:`inline`,label:x(p)(`attention.sending`)},null,8,[`label`])):(c(),O(`span`,Je,m(x(p)(`attention.send`)),1))],8,qe)],40,We)]))),128)),x(n).items.length<x(n).filteredTotal?(c(),O(`button`,{key:5,type:`button`,disabled:x(n).loading,onClick:t[5]||=e=>x(n).more()},m(x(p)(`attention.more`)),9,Ye)):h(``,!0)])])],544)):h(``,!0)]))],64))}}),[[`__scopeId`,`data-v-521df451`]]),Ze=[`routes.`,`common.`,`employees.`,`agentProfiles.`];function Y(e,t=``){let n=typeof e==`string`&&e?e:t;return Ze.some(e=>n.startsWith(e))?p(n):n}function X(e){if(typeof document>`u`)return;let t=Y(e,`routes.overview.title`);document.title=`${t} · ${p(`common.brand`)}`}var Qe={class:`app-shell`},$e=[`onKeydown`],et=[`aria-label`],tt={class:`nav-section-label`},nt={class:`nav-label`},rt={class:`nav-section-label nav-space-label`},it={class:`nav-copy`},at={class:`nav-copy`},ot={class:`nav-copy`},st={class:`nav-copy`},ct={class:`nav-copy`},lt={class:`nav-section-label nav-public-label`},ut={class:`nav-copy`},dt={class:`nav-section-label nav-tool-label`},ft={class:`nav-label`},pt={class:`nav-label`},mt={class:`nav-label`},ht={class:`nav-section-label nav-about-label`},gt={class:`nav-label`},_t={class:`nav-label`},vt={class:`sidebar-foot`},yt=[`aria-label`],bt={class:`runtime-status`},xt={class:`runtime-status`},St=[`aria-label`],Ct=[`inert`],wt=[`aria-expanded`],Tt={key:0,class:`workbench-host-label`},Et={key:1,class:`topbar-heading`},Dt={key:2,class:`topbar-actions`},Ot={key:0,class:`mode-chip`},kt=[`disabled`],At=[`disabled`],jt={key:1},Mt=[`aria-label`],Nt=P(l({__name:`ConsoleLayout`,setup(e){let i=M(),a=F(),l=d(!1),g=d(null),_=d(null),C=f(()=>i.activePersonalSpace?.id??`current`),T=f(()=>ae(C.value,`graph`)),j=f(()=>oe(`personal`,C.value,`directory`)),P=f(()=>Y(a.meta.title,`routes.overview.title`)),I=f(()=>a.meta.dedicatedWorkspace===!0),R=f(()=>i.publicRuntimeStatus===`ready`),B=f(()=>i.publicRuntimeStatus===`ready`?p(`console.services.publicReady`):i.publicRuntimeStatus===`error`?p(`console.services.publicError`):p(`console.services.publicOffline`)),V=f(()=>{if(i.publicRuntimeStatus===`ready`){let e=i.state?.capabilities;return e?.browsePublicProjects&&e?.subscribeProject&&!e?.publishProject&&!e?.submitKnowledge&&!e?.reviewProposals?p(`console.services.publicBrowseSubscribe`):p(`console.services.publicAvailable`)}return i.publicRuntimeStatus===`error`?p(`console.services.localUnaffected`):p(`console.services.localOnly`)}),ne=f(()=>i.state?.capabilities?.browsePublicProjects!==!1),H=f(()=>{let e=i.state?.capabilities;return e?.submitKnowledge!==!1||e?.reviewProposals===!0});s(()=>{i.runtimeStatus===`idle`&&i.refresh(),window.addEventListener(`resize`,U)}),y(()=>window.removeEventListener(`resize`,U));function U(){window.innerWidth>920&&(l.value=!1)}function W(e){if(!l.value||e.key!==`Tab`)return;let t=[...e.currentTarget.querySelectorAll(`button:not(:disabled), a[href], input:not(:disabled), [tabindex="0"]`)].filter(e=>e.getClientRects().length>0),n=t[0],r=t.at(-1);e.shiftKey&&document.activeElement===n?(e.preventDefault(),r?.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus())}n(()=>{X(a.meta.title)}),A(()=>a.fullPath,()=>{l.value=!1});async function G(){l.value=!0,await t(),_.value?.focus({preventScroll:!0})}async function K(){l.value=!1,await t(),g.value?.focus({preventScroll:!0})}return(e,t)=>(c(),O(`div`,Qe,[E(`aside`,{id:`console-primary-sidebar`,class:w([`sidebar`,{"is-mobile-open":l.value}]),onKeydown:[S(b(K,[`stop`]),[`esc`]),W]},[E(`button`,{ref_key:`mobileNavCloseRef`,ref:_,class:`mobile-nav-close quiet-button`,type:`button`,onClick:K},m(x(p)(`console.navigation.closeMenu`)),513),D(xe),E(`nav`,{class:`primary-nav`,"aria-label":x(p)(`console.navigation.aria`)},[E(`p`,tt,m(x(p)(`console.navigation.workspace`)),1),D(x(z),{to:`/`,"exact-active-class":`is-active`},{default:u(()=>[t[2]||=E(`span`,{class:`nav-icon nav-icon-overview`,"aria-hidden":`true`},null,-1),E(`span`,nt,m(x(p)(`console.navigation.overview`)),1)]),_:1}),E(`p`,rt,m(x(p)(`console.navigation.personalSpace`)),1),D(x(z),{class:`space-nav-button personal-profile-button`,to:`/preferences`,"active-class":`is-active`},{default:u(()=>[t[3]||=E(`span`,{class:`nav-icon nav-icon-personal-profile`,"aria-hidden":`true`},null,-1),E(`span`,it,[E(`strong`,null,m(x(p)(`console.navigation.preferences`)),1),E(`small`,null,m(x(p)(`console.navigation.preferencesMeta`)),1)])]),_:1}),D(x(z),{class:`space-nav-button knowledge-organizer-button`,to:`/organize`,"active-class":`is-active`},{default:u(()=>[t[4]||=E(`span`,{class:`nav-icon nav-icon-knowledge-organizer`,"aria-hidden":`true`},null,-1),E(`span`,at,[E(`strong`,null,m(x(p)(`console.navigation.organizer`)),1),E(`small`,null,m(x(p)(`console.navigation.organizerMeta`)),1)])]),_:1}),D(x(z),{class:`space-nav-button personal-space-button`,to:T.value,"active-class":`is-active`},{default:u(()=>[t[5]||=E(`span`,{class:`nav-icon nav-icon-personal-project`,"aria-hidden":`true`},null,-1),E(`span`,ot,[E(`strong`,null,m(x(p)(`console.navigation.personalProjects`)),1),E(`small`,null,m(x(p)(`console.navigation.personalProjectsMeta`)),1)])]),_:1},8,[`to`]),D(x(z),{class:`space-nav-button project-agents-button`,to:`/project-agents`,"active-class":`is-active`},{default:u(()=>[t[6]||=E(`span`,{class:`nav-icon nav-icon-project-agent`,"aria-hidden":`true`},null,-1),E(`span`,st,[E(`strong`,null,m(x(p)(`console.navigation.projectAgents`)),1),E(`small`,null,m(x(p)(`console.navigation.projectAgentsMeta`)),1)])]),_:1}),D(x(z),{class:`space-nav-button roundtables-button`,to:`/roundtables`,"active-class":`is-active`},{default:u(()=>[t[7]||=E(`span`,{class:`nav-icon nav-icon-project-agent`,"aria-hidden":`true`},null,-1),E(`span`,ct,[E(`strong`,null,m(x(te)(`Agent 圆桌`,`Agent Roundtable`)),1),E(`small`,null,m(x(te)(`讨论 · 分工 · 结果`,`Discuss · assign · deliver`)),1)])]),_:1}),ne.value?(c(),O(v,{key:0},[E(`p`,lt,m(x(p)(`console.navigation.publicSpace`)),1),D(x(z),{class:`space-nav-button public-space-button`,to:`/public-projects`,"active-class":`is-active`},{default:u(()=>[t[8]||=E(`span`,{class:`nav-icon nav-icon-public-project`,"aria-hidden":`true`},null,-1),E(`span`,ut,[E(`strong`,null,m(x(p)(`console.navigation.publicProjects`)),1),E(`small`,null,m(x(p)(`console.navigation.publicProjectsMeta`)),1)])]),_:1})],64)):h(``,!0),D(Ae,{"personal-space-id":C.value},null,8,[`personal-space-id`]),D(Xe,{"personal-space-id":C.value,projects:x(i).state?.personalProjects??[]},null,8,[`personal-space-id`,`projects`]),E(`p`,dt,m(x(p)(`console.navigation.governance`)),1),D(x(z),{to:j.value,"active-class":`is-active`},{default:u(()=>[t[9]||=E(`span`,{class:`nav-icon nav-icon-knowledge-graph`,"aria-hidden":`true`},null,-1),E(`span`,ft,m(x(p)(`console.navigation.knowledge`)),1)]),_:1},8,[`to`]),H.value?(c(),k(x(z),{key:1,to:`/review`,"active-class":`is-active`},{default:u(()=>[t[10]||=E(`span`,{class:`nav-icon nav-icon-review`,"aria-hidden":`true`},null,-1),E(`span`,pt,m(x(p)(`console.navigation.review`)),1)]),_:1})):h(``,!0),D(x(z),{to:`/connections`,"active-class":`is-active`},{default:u(()=>[t[11]||=E(`span`,{class:`nav-icon nav-icon-connections`,"aria-hidden":`true`},null,-1),E(`span`,mt,m(x(p)(`console.navigation.connections`)),1)]),_:1}),E(`p`,ht,m(x(p)(`console.navigation.aboutSection`)),1),D(x(z),{to:`/settings`,"active-class":`is-active`},{default:u(()=>[t[12]||=E(`span`,{class:`nav-icon nav-icon-settings`,"aria-hidden":`true`},null,-1),E(`span`,gt,m(x(p)(`console.navigation.settings`)),1)]),_:1}),D(x(z),{to:`/about`,"active-class":`is-active`},{default:u(()=>[t[13]||=E(`span`,{class:`nav-icon nav-icon-about`,"aria-hidden":`true`},null,-1),E(`span`,_t,m(x(p)(`console.navigation.about`)),1)]),_:1})],8,et),E(`div`,vt,[E(`div`,{class:`service-runtime-list`,"aria-label":x(p)(`console.services.aria`)},[E(`div`,bt,[E(`span`,{class:w([`status-dot`,x(i).runtimeStatus])},null,2),E(`div`,null,[E(`strong`,null,m(x(i).runtimeStatus===`ready`?x(p)(`console.services.localReady`):x(i).runtimeStatus===`error`?x(p)(`console.services.localError`):x(p)(`console.services.localConnecting`)),1),t[14]||=E(`small`,null,`Graphiti / Neo4j`,-1)])]),E(`div`,xt,[E(`span`,{class:w([`status-dot`,x(i).publicRuntimeStatus])},null,2),E(`div`,null,[E(`strong`,null,m(B.value),1),E(`small`,null,m(V.value),1)])])],8,yt)])],42,$e),l.value?(c(),O(`button`,{key:0,class:`mobile-nav-backdrop`,type:`button`,tabindex:`-1`,"aria-label":x(p)(`console.navigation.closeMenu`),onClick:K},null,8,St)):h(``,!0),E(`main`,{class:`workspace`,inert:l.value||void 0},[E(`header`,{class:w([`topbar`,{"topbar--workbench":I.value}])},[E(`button`,{ref_key:`mobileNavToggleRef`,ref:g,class:`mobile-nav-toggle quiet-button`,type:`button`,"aria-controls":`console-primary-sidebar`,"aria-expanded":l.value,onClick:G},[t[15]||=E(`span`,{class:`mobile-nav-icon`,"aria-hidden":`true`},null,-1),r(` `+m(x(p)(`console.navigation.openMenu`)),1)],8,wt),I.value?(c(),O(`span`,Tt,`FULI`)):(c(),O(`div`,Et,[E(`h2`,null,m(P.value),1)])),I.value?h(``,!0):(c(),O(`div`,Dt,[R.value?(c(),O(`span`,Ot,m(x(p)(`console.publicReady`)),1)):h(``,!0),x(a).name===`settings`?(c(),O(`button`,{key:1,class:`settings-save-button`,disabled:x(i).settingsSaving,form:`settings-form`,type:`submit`},m(x(p)(`settings.save`)),9,kt)):h(``,!0),D(ee),E(`button`,{class:`quiet-button`,type:`button`,disabled:x(i).runtimeStatus===`loading`,onClick:t[0]||=(...e)=>x(i).refresh&&x(i).refresh(...e)},[x(i).runtimeStatus===`loading`?(c(),k(N,{key:0,variant:`inline`,label:x(p)(`common.status.loadingConsole`)},null,8,[`label`])):(c(),O(`span`,jt,m(x(p)(`common.actions.refresh`)),1))],8,At)]))],2),D(Te),x(i).feedback?(c(),O(`div`,{key:0,class:w([`feedback feedback-message`,{success:x(i).feedback.tone===`success`}]),role:`status`,"aria-live":`polite`},[E(`span`,null,m(x(i).feedback.message),1),E(`button`,{class:`feedback-dismiss`,type:`button`,"aria-label":x(p)(`common.actions.close`),onClick:t[1]||=(...e)=>x(i).clearFeedback&&x(i).clearFeedback(...e)},`×`,8,Mt)],2)):h(``,!0),D(x(L),null,{default:u(({Component:e})=>[(c(),k(o(e)))]),_:1})],8,Ct)]))}}),[[`__scopeId`,`data-v-a0fe6da2`]]),Pt=l({__name:`App`,setup(e){let t=F();return(e,n)=>x(t).meta.publicReport?(c(),k(x(L),{key:0})):(c(),k(Nt,{key:1}))}}),Ft=`modulepreload`,It=function(e){return`/`+e},Lt={},Z=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=It(t,n),t=s(t),t in Lt)return;Lt[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Ft,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function Rt(e){let t=e.match(/^#\/knowledge\/([^/?#]+)\/([^/?#]+)\/(entity|relationship)\/([^/?#]+)(?:\?([^#]*))?$/);if(!t)return null;let[,n,r,i,a,o]=t;return`/knowledge/${n}/${r}/directory/${i}/${a}${o?`?${o}`:``}`}var Q=R({history:I(`/`),routes:[{path:`/roundtables`,name:`roundtables`,component:()=>Z(()=>import(`./RoundtablesPage-642YtZBC.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8])),meta:{publicReport:!0,title:`Agent Roundtable`}},{path:`/roundtables/:roomId`,name:`roundtable-room`,component:()=>Z(()=>import(`./RoundtablesPage-642YtZBC.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8])),meta:{publicReport:!0,title:`Agent Roundtable`}},{path:`/roundtables/:spaceId/:roomId`,name:`roundtable-project-room`,component:()=>Z(()=>import(`./RoundtablesPage-642YtZBC.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8])),meta:{publicReport:!0,title:`Agent Roundtable`}},{path:`/reports/jefa`,name:`shared-jefa-report`,component:()=>Z(()=>import(`./SharedJefaReportPage-CNQDezJr.js`),__vite__mapDeps([9,1,2,3,4,5,10,11,12,13,14,15])),meta:{publicReport:!0,title:`employees.share.title`}},{path:`/`,name:`overview`,component:()=>Z(()=>import(`./OverviewPage-VXMfcWFI.js`),__vite__mapDeps([16,1,17,11,6,5,18])),meta:{eyebrow:``,title:`routes.overview.title`}},{path:`/preferences`,name:`personal-profile`,component:()=>Z(()=>import(`./PersonalProfilePage-C1LBhcYu.js`),__vite__mapDeps([19,1,17,11,2,3,4,6,5,20,21,22,23,24,25,26,27,28,29,30])),meta:{eyebrow:`PERSONAL LENS`,title:`routes.preferences.title`,description:`routes.preferences.description`}},{path:`/preferences/writing`,name:`writing-taste`,component:()=>Z(()=>import(`./WritingTastePage-CAUvbDlL.js`),__vite__mapDeps([31,1,17,11,2,3,4,6,5,26,20,21,27,23,28,29,32])),meta:{eyebrow:``,title:`routes.writingTaste.title`}},{path:`/personal/:spaceId/projects/:projectId/:mode/:itemKind/:itemId`,name:`personal-project-item`,component:()=>Z(()=>import(`./PersonalProjectsPage-B5lV4ZJW.js`),__vite__mapDeps([33,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/personal/:spaceId/projects/:mode/:itemKind/:itemId`,name:`personal-projects-item`,component:()=>Z(()=>import(`./PersonalProjectsPage-B5lV4ZJW.js`),__vite__mapDeps([33,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:mode`,name:`personal-projects`,component:()=>Z(()=>import(`./PersonalProjectsPage-B5lV4ZJW.js`),__vite__mapDeps([33,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:projectId/:mode`,name:`personal-project`,component:()=>Z(()=>import(`./PersonalProjectsPage-B5lV4ZJW.js`),__vite__mapDeps([33,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/organize`,name:`knowledge-organizer`,component:()=>Z(()=>import(`./KnowledgeOrganizerPage-C64wNn8a.js`),__vite__mapDeps([36,1,17,11,2,3,4,20,21,27,22,23,24,25,26,28,37])),meta:{eyebrow:`KNOWLEDGE CLASSIFICATION`,title:`routes.organizer.title`}},{path:`/project-agents`,name:`project-agents`,component:()=>Z(()=>import(`./AgentsDirectoryPage-BEJdvmX7.js`),__vite__mapDeps([38,1,17,11,2,3,4,5,6,39,40,41,42,43,44,45,46,47,18,48,12,13,49,50,20,21,51])),meta:{eyebrow:``,title:`routes.projectAgents.title`}},{path:`/agents/:spaceId/:agentId`,name:`agent-profile`,component:()=>Z(()=>import(`./AgentProfilePage-Dyux6qE3.js`),__vite__mapDeps([52,1,17,11,2,3,4,5,6,50,41,42,43,45,44,46])),meta:{eyebrow:``,title:`agentProfiles.profile`}},{path:`/project-agents/manage`,name:`agent-management`,component:()=>Z(()=>import(`./ProjectAgentsPage-CgL92gng.js`),__vite__mapDeps([53,1,17,11,2,3,4,5,6,50,39,40,20,45,47,18,48,12,13,21,49,51,54])),meta:{eyebrow:``,title:`agentProfiles.advanced`}},{path:`/employees/:templateId`,name:`employee-workbench`,component:()=>Z(()=>import(`./EmployeeWorkbenchPage-CAt8lVnr.js`),__vite__mapDeps([55,1,17,11,2,3,4,5,6,50,39,40,41,20,42,43,12,13,49,18,21,51,10,14,56,57])),meta:{eyebrow:``,title:`routes.employeeWorkbench.title`,dedicatedWorkspace:!0}},{path:`/public-projects`,name:`public-projects`,component:()=>Z(()=>import(`./PublicProjectsPage-e4CpxHk9.js`),__vite__mapDeps([58,1,17,11,2,3,4,5,20,18,21,27])),meta:{eyebrow:`PUBLIC PROJECTS`,title:`routes.publicProjects.title`,description:`routes.publicProjects.description`}},{path:`/knowledge`,name:`knowledge-default`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode/:itemKind/:itemId`,name:`project-knowledge-item`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode/:itemKind/:itemId`,name:`knowledge-item`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode`,name:`project-knowledge`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode`,name:`knowledge`,component:()=>Z(()=>import(`./KnowledgePage-BTFEXzgi.js`),__vite__mapDeps([59,1,34,17,11,2,3,4,5,6,20,18,21,27,22,23,24,25,26,28,35])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/review`,name:`review`,component:()=>Z(()=>import(`./ReviewPage-DugEaFvI.js`),__vite__mapDeps([60,1,17,11,2,3,4,21,27,23])),meta:{eyebrow:`REVIEW WORKSPACE`,title:`routes.review.title`,description:`routes.review.description`}},{path:`/connections`,name:`connections`,component:()=>Z(()=>import(`./ConnectionsPage-Dw_hK_EM.js`),__vite__mapDeps([61,1,17,11,2,3,4,21,27,62])),meta:{eyebrow:`SERVICE CONNECTIONS`,title:`routes.connections.title`,description:`routes.connections.description`}},{path:`/settings`,name:`settings`,component:()=>Z(()=>import(`./SettingsPage-wqYxDPyu.js`),__vite__mapDeps([63,1,17,11,2,3,4,21,24,64])),meta:{eyebrow:``,title:`routes.settings.title`}},{path:`/about`,name:`about`,component:()=>Z(()=>import(`./AboutPage-u2Bv6cO-.js`),__vite__mapDeps([65,1,3,66,67])),meta:{eyebrow:`FULI`,title:`routes.about.title`}},{path:`/:pathMatch(.*)*`,name:`not-found`,component:()=>Z(()=>import(`./NotFoundPage-DfaNTiD1.js`),__vite__mapDeps([68,1,6,5])),meta:{title:`common.errors.pageNotFound`}}],scrollBehavior:(e,t,n)=>n??(e.path!==t.path&&{top:0})});Se(Q),Q.beforeEach(e=>e.path!==`/`||typeof window>`u`?!0:Rt(window.location.hash)??!0),Q.afterEach(e=>{X(e.meta.title)});var $=T(Pt);$.use(j()),$.use(C),$.use(Q),await Q.isReady().catch(()=>void 0),$.mount(`#app`);
@@ -9,7 +9,7 @@
9
9
  />
10
10
  <link rel="icon" type="image/png" href="/assets/fuli-logo-ER1wQ8Kk.png" />
11
11
  <title>复利 · Context Graph</title>
12
- <script type="module" crossorigin src="/assets/index-DMoxVzDU.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-Dsgn8o4-.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/assets/i18n-CIIxzhPZ.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/client-DTQ_tUr2.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/console-CrhIK67Y.js">
@@ -5,9 +5,9 @@
5
5
 
6
6
  ## CI 与发布前检查
7
7
 
8
- 最终功能源码为 [`e87637f`](https://github.com/JevonsCode/fuli/commit/e87637f5c23db29c70a4d5d55594a6ff5db577a2),
8
+ Beta.1 的圆桌功能源码为 [`e87637f`](https://github.com/JevonsCode/fuli/commit/e87637f5c23db29c70a4d5d55594a6ff5db577a2),
9
9
  [对应 CI](https://github.com/JevonsCode/fuli/actions/runs/37918728225) 已成功结束,包含共享阶段提示和 Pi 结果边界修复。
10
- 下列数字属于该提交。随后仅更新验证文档;后续功能修改需要重新验证,发布工作流也再次执行检查。
10
+ 下列数字属于该提交。Beta.1 发布时再次通过完整检查;Beta.2 补齐安装后发现的 CLI 帮助问题,其 CI 与发布工作流再次验证,不能用本表代替后续检查。
11
11
 
12
12
  | 检查 | 结果 | 证据范围 |
13
13
  | --- | --- | --- |
@@ -25,6 +25,14 @@ Linux CI 已通过;Windows 完整套件尚未全部通过,环境差异继续
25
25
  Pi 的新增 post-format 路径与共享阶段提示修复已完成独立复审:圆桌回归 87/87、Pi 专项检查 20/20 通过,未发现尚未解决的 P1/P2。真实 Pi grep 工具验证了配置继承导致的越界及其修复;失败状态、产物引用、分歧、取消和上下文预算分别核对。模型正文可靠性仍为试验范围。当前 CI、审查和真实 CLI 证据不自动覆盖后续功能修改,
26
26
  GitHub prerelease、npm beta dist-tag、registry / tarball 和官网部署也需分别确认。
27
27
 
28
+ ### 发布后安装检查
29
+
30
+ `0.9.0-beta.1` 的公共 npm 包已实际安装到独立临时目录,403 个发布文件的 tarball 完整性验证通过,SHA-1 与发布回执一致:`4943d5b9acbfdce698635b7f487cf6034171ca1a`。Pi 适配器、结果整理器、共享阶段提示和协调端模块均能加载,生产 UI 与验证文档包含在包中。官网已上线圆桌版图,两个版本固定的文档链接返回 HTTP 200,400px 视口未出现横向溢出。
31
+
32
+ 该 registry 包的界面也已在实际浏览器验收:中英文切换、无项目草案创建、Codex / Pi 席位、Pi 的 32K 模型输入、凭据隐藏及确认停止均完成,页面显示 `owner_stopped` / 已停止。测试没有启动模型,没有生成实际运行回执;使用的是隔离测试数据,没有修改用户长期数据。
33
+
34
+ 安装后发现 `fl roundtable worker --help` 被当成未知参数,顶层帮助也漏列 Pi;Beta.2 修复这一入口问题,并重新执行 CLI 回归与发布检查。发布包、运行界面和模型执行各自核验,帮助输出不能算模型执行证据。
35
+
28
36
  ## 真实本机 Codex 圆桌
29
37
 
30
38
  本地回执 `output-roundtable-cli-live-verified.json` 的核验时间为 `2026-10-09T09:20:13.155Z`,
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "fuli-context",
3
- "version": "0.9.0-beta.1",
3
+ "version": "0.9.0-beta.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "fuli-context",
9
- "version": "0.9.0-beta.1",
9
+ "version": "0.9.0-beta.2",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@a2a-js/sdk": "1.3.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fuli-context",
3
- "version": "0.9.0-beta.1",
3
+ "version": "0.9.0-beta.2",
4
4
  "description": "Local-first collaboration relationship graph for AI agents.",
5
5
  "type": "module",
6
6
  "files": [
@@ -13,7 +13,7 @@ General:
13
13
 
14
14
  Local service:
15
15
  roundtable serve [--port PORT] [--data-dir DIR] [--public-url HTTPS_URL]
16
- roundtable worker --url URL --room ID --runtime codex|claude-code|grok|a2a [--workspace DIR] [--allow-write]
16
+ roundtable worker --url URL --room ID --runtime codex|claude-code|pi|grok|a2a [--workspace DIR] [--allow-write] [--model MODEL]
17
17
  start [--port PORT] [--open] [--lan|--no-lan] [--rebuild] [--data-dir DIR] [--personal-space NAME] (checks Agent setup)
18
18
  stop [--data-dir DIR]
19
19
  restart [--port PORT] [--open] [--lan|--no-lan] [--rebuild] [--data-dir DIR] [--personal-space NAME]
@@ -5,19 +5,39 @@ import { resolveSetupPaths } from '../setup/paths.js';
5
5
  import { createRoundtableServer } from '../roundtables/server.js';
6
6
  import { runRoundtableWorker } from '../roundtables/worker.js';
7
7
 
8
+ const SERVE_USAGE = 'fl roundtable serve [--data-dir DIR] [--port PORT] [--host HOST] [--public-url HTTPS_URL]';
9
+ const WORKER_USAGE = 'fl roundtable worker --url URL --room ID --runtime codex|claude-code|pi|grok|a2a [--workspace DIR] [--allow-write] [--model MODEL] [--a2a-url HTTPS_URL] [--once] [--allow-http]';
10
+
11
+ function printRoundtableHelp(action) {
12
+ if (action === 'serve') {
13
+ console.log(`${SERVE_USAGE}\n\nDefaults: --port 3738, --host 127.0.0.1.\nOwner console remains local; expose only /roundtable-peer/ through your HTTPS proxy.\n--help, -h Show server help without starting a coordinator.`);
14
+ } else if (action === 'worker') {
15
+ console.log(`${WORKER_USAGE}\n\nSeat secret: FULI_ROUNDTABLE_TOKEN environment variable.\nPi uses local Ollama; select an installed model with --model.\n--once runs one available turn. --allow-http explicitly permits a remote HTTP coordinator.\n--help, -h Show worker help without joining or running a model.`);
16
+ } else {
17
+ console.log(`${SERVE_USAGE}\n${WORKER_USAGE}\n\nfl roundtable <serve|worker> --help Show command-specific options.\n--help, -h Show Roundtable help.\nSeat secret: FULI_ROUNDTABLE_TOKEN environment variable. Pi uses local Ollama; select an installed model with --model.\nOwner console remains local; expose only /roundtable-peer/ through your HTTPS proxy.`);
18
+ }
19
+ }
20
+
8
21
  export async function runRoundtableCommand(args, { env = process.env } = {}) {
9
22
  const [action, ...options] = args;
10
- if (!action || ['--help', '-h'].includes(action)) {
11
- console.log('fl roundtable serve [--data-dir DIR] [--port 3738] [--host 127.0.0.1] [--public-url HTTPS_URL]\nfl roundtable worker --url URL --room ID --runtime codex|claude-code|pi|grok|a2a [--workspace DIR] [--allow-write] [--model MODEL] [--a2a-url HTTPS_URL]\nSeat secret: FULI_ROUNDTABLE_TOKEN environment variable. Pi uses local Ollama; select an installed model with --model. Owner console remains local; expose only /roundtable-peer/ through your HTTPS proxy.'); return;
23
+ if (!action) {
24
+ printRoundtableHelp(); return;
12
25
  }
13
- const allowed = new Set(['--data-dir', '--port', '--host', '--public-url', '--url', '--room', '--runtime', '--workspace', '--model', '--a2a-url', '--allow-write', '--once', '--allow-http']);
14
- const flags = new Set(['--allow-write', '--once', '--allow-http']);
26
+ const topLevelHelp = ['--help', '-h'].includes(action);
27
+ const optionArgs = topLevelHelp ? args : options;
28
+ const allowed = new Set(['--data-dir', '--port', '--host', '--public-url', '--url', '--room', '--runtime', '--workspace', '--model', '--a2a-url', '--allow-write', '--once', '--allow-http', '--help', '-h']);
29
+ const flags = new Set(['--allow-write', '--once', '--allow-http', '--help', '-h']);
15
30
  const values = {};
16
- for (let index = 0; index < options.length; index++) {
17
- const name = options[index];
18
- if (!allowed.has(name) || Object.hasOwn(values, name)) throw new TypeError(`Unknown or duplicate Roundtable option ${name}`);
19
- if (flags.has(name)) values[name] = true;
20
- else { const value = options[++index]; if (!value || value.startsWith('--')) throw new TypeError(`Missing ${name}`); values[name] = value; }
31
+ for (let index = 0; index < optionArgs.length; index++) {
32
+ const name = optionArgs[index];
33
+ const key = name === '-h' ? '--help' : name;
34
+ if (!allowed.has(name) || Object.hasOwn(values, key)) throw new TypeError(`Unknown or duplicate Roundtable option ${name}`);
35
+ if (flags.has(name)) values[key] = true;
36
+ else { const value = optionArgs[++index]; if (!value || value.startsWith('--') || value === '-h') throw new TypeError(`Missing ${name}`); values[key] = value; }
37
+ }
38
+ if (values['--help']) {
39
+ if (!topLevelHelp && !['serve', 'worker'].includes(action)) throw new TypeError('Roundtable action must be serve or worker');
40
+ printRoundtableHelp(topLevelHelp ? undefined : action); return;
21
41
  }
22
42
  if (action === 'serve') {
23
43
  const port = Number(values['--port'] ?? 3738);