fuli-context 0.20.0-beta.2 → 0.20.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/README.md +81 -22
  2. package/README.zh-CN.md +26 -12
  3. package/dist/web/assets/AboutPage-BkpqvBhp.css +1 -0
  4. package/dist/web/assets/AboutPage-BmX7l4yh.js +1 -0
  5. package/dist/web/assets/AgentName-DeHNVQ-r.js +1 -0
  6. package/dist/web/assets/AgentProfilePage-0ksQ58aV.css +1 -0
  7. package/dist/web/assets/AgentProfilePage-DbzxN3rz.js +1 -0
  8. package/dist/web/assets/AgentsDirectoryPage-DnvNg4s-.js +1 -0
  9. package/dist/web/assets/AgentsDirectoryPage-DoOXStj-.css +1 -0
  10. package/dist/web/assets/ConnectionsPage-C_-t36vt.js +1 -0
  11. package/dist/web/assets/CreateProjectDialog-78Sz76lL.js +2 -0
  12. package/dist/web/assets/CreateProjectDialog-t947qHxl.css +1 -0
  13. package/dist/web/assets/EmployeeRecruitDialog-BPT132zr.css +1 -0
  14. package/dist/web/assets/EmployeeRecruitDialog-CbakSlIK.js +1 -0
  15. package/dist/web/assets/EmployeeWorkbenchPage-BFSzzB5b.css +1 -0
  16. package/dist/web/assets/EmployeeWorkbenchPage-CZb36N9r.js +3 -0
  17. package/dist/web/assets/InboxPage-Bsa1NRSD.js +4 -0
  18. package/dist/web/assets/InboxPage-DiIA1trj.css +1 -0
  19. package/dist/web/assets/KnowledgeEditDialog-BXS3rlWg.css +1 -0
  20. package/dist/web/assets/KnowledgeEditDialog-CSjtslJS.js +1 -0
  21. package/dist/web/assets/KnowledgeInspector-DB9USgC0.js +1 -0
  22. package/dist/web/assets/KnowledgeInspector-DaknAv7P.css +1 -0
  23. package/dist/web/assets/KnowledgeOrganizerPage-CxICN_0p.css +1 -0
  24. package/dist/web/assets/KnowledgeOrganizerPage-DEucKWd7.js +1 -0
  25. package/dist/web/assets/KnowledgePage-tLziTkSU.js +1 -0
  26. package/dist/web/assets/KnowledgeWorkspace-B7ZiPf6n.js +4 -0
  27. package/dist/web/assets/KnowledgeWorkspace-BY_OoTDG.css +1 -0
  28. package/dist/web/assets/NotFoundPage-XPalsChA.js +1 -0
  29. package/dist/web/assets/OccupationsPage-BRdGXQ2P.js +1 -0
  30. package/dist/web/assets/OccupationsPage-BXCJPqBB.css +1 -0
  31. package/dist/web/assets/OverviewPage-C7OJfsL0.css +1 -0
  32. package/dist/web/assets/OverviewPage-x0ExTLqh.js +2 -0
  33. package/dist/web/assets/PersonalProfilePage-Cl2EQuuO.js +1 -0
  34. package/dist/web/assets/PersonalProfilePage-bKUVSOge.css +1 -0
  35. package/dist/web/assets/PersonalProjectsPage-C7k2sBQN.css +1 -0
  36. package/dist/web/assets/PersonalProjectsPage-Dh44vNQk.js +1 -0
  37. package/dist/web/assets/ProjectAgentFirstTask-BVNcBsw9.js +1 -0
  38. package/dist/web/assets/ProjectAgentFirstTask-D1RrWjaX.css +1 -0
  39. package/dist/web/assets/ProjectAgentsPage-BBo_ALw_.js +12 -0
  40. package/dist/web/assets/ProjectAgentsPage-DdooNyYs.css +1 -0
  41. package/dist/web/assets/ProjectScopePicker-CNN_sGrN.js +1 -0
  42. package/dist/web/assets/PublicProjectsPage-BEyOXwu-.js +1 -0
  43. package/dist/web/assets/PublicProjectsPage-DlmcjqGj.css +1 -0
  44. package/dist/web/assets/RoundtablesPage-CdfpgOnb.js +1 -0
  45. package/dist/web/assets/RoundtablesPage-ftnoDxpL.css +1 -0
  46. package/dist/web/assets/SettingsPage-CfyHImb3.css +1 -0
  47. package/dist/web/assets/SettingsPage-DdWrf4wR.js +1 -0
  48. package/dist/web/assets/SharedJefaReportPage-B5vPQ7QK.js +1 -0
  49. package/dist/web/assets/TaskExecutionPlan-BFVcb7KN.css +1 -0
  50. package/dist/web/assets/TaskExecutionPlan-CFM_14VC.js +2 -0
  51. package/dist/web/assets/TaskSchedulesPage-CISJAYZy.js +1 -0
  52. package/dist/web/assets/TaskSchedulesPage-fNCG8EWD.css +1 -0
  53. package/dist/web/assets/TextField-BVqz0DTp.js +1 -0
  54. package/dist/web/assets/UiDialog-CIyDfEYh.js +1 -0
  55. package/dist/web/assets/UiDisclosure-BIE3uXrx.js +1 -0
  56. package/dist/web/assets/UiIcon-EWCwhyKc.css +1 -0
  57. package/dist/web/assets/UiIcon-INPsGFvz.js +1 -0
  58. package/dist/web/assets/UiIconButton-CSFA7F4B.css +1 -0
  59. package/dist/web/assets/UiIconButton-w6pfBSda.js +1 -0
  60. package/dist/web/assets/UiSegmented-wN76K7F9.js +1 -0
  61. package/dist/web/assets/UiSelect-BaVTdhtR.js +1 -0
  62. package/dist/web/assets/UiSelect-CiSPw-7k.css +1 -0
  63. package/dist/web/assets/UiToggle-B2sPCVZe.css +1 -0
  64. package/dist/web/assets/UiToggle-Cs1CZzk6.js +1 -0
  65. package/dist/web/assets/UnassignedConversationsPanel-0y0YliA_.js +1 -0
  66. package/dist/web/assets/VirtualDirectoryList-nAWaJ2eM.js +1 -0
  67. package/dist/web/assets/Workbench3D-BxpszsXO.css +1 -0
  68. package/dist/web/assets/Workbench3D-CYCi_MRp.js +2 -0
  69. package/dist/web/assets/WritingTastePage-B9nMV49S.css +1 -0
  70. package/dist/web/assets/WritingTastePage-DfTuTJx2.js +1 -0
  71. package/dist/web/assets/agent-identity-color-RqpT7gtx.js +1 -0
  72. package/dist/web/assets/agent-occupation-Bke7eg11.js +1 -0
  73. package/dist/web/assets/agent-pins-DrG1uUDt.js +1 -0
  74. package/dist/web/assets/agent-profile-CU4YqRz_.css +1 -0
  75. package/dist/web/assets/agent-work-summary-C53Zfzk5.js +1 -0
  76. package/dist/web/assets/astro-avatar-GADWtfJX.webp +0 -0
  77. package/dist/web/assets/attention-store-Bg-rVsgG.js +1 -0
  78. package/dist/web/assets/{avatars-z6ANYG_r.js → avatars-CUyfvsKO.js} +1 -1
  79. package/dist/web/assets/catalog-CmHt1ONG.js +1 -0
  80. package/dist/web/assets/client-B_QrPkEy.css +1 -0
  81. package/dist/web/assets/client-DBYe0KzE.js +1 -0
  82. package/dist/web/assets/console-2nhA6IaV.js +1 -0
  83. package/dist/web/assets/conversation-launcher-settings-txCBZEle.js +1 -0
  84. package/dist/web/assets/date-time-DBa_h9cD.js +1 -0
  85. package/dist/web/assets/design-lab-ClOnEnF7.js +1 -0
  86. package/dist/web/assets/galaxy-scene-7sJk1pHo.js +1 -0
  87. package/dist/web/assets/i18n-DAeCdA8L.js +10 -0
  88. package/dist/web/assets/{identity-CAQk8V-Q.js → identity-bmKz-BGh.js} +1 -1
  89. package/dist/web/assets/index-DsqCEnEC.css +1 -0
  90. package/dist/web/assets/index-YZYwAHdd.js +2 -0
  91. package/dist/web/assets/judgment-types-C2vHfclm.js +1 -0
  92. package/dist/web/assets/layout-DCeMsVR8.js +1 -0
  93. package/dist/web/assets/model-VWzF8pT3.js +1 -0
  94. package/dist/web/assets/motion-preference-D3Aq7THt.js +1 -0
  95. package/dist/web/assets/occupation-catalog-DnevywIk.js +1 -0
  96. package/dist/web/assets/office-scene-CbmeA3ZZ.js +1 -0
  97. package/dist/web/assets/personal-profile-graph-CyRXX8b0.js +1 -0
  98. package/dist/web/assets/preload-helper-Czpn1I53.js +1 -0
  99. package/dist/web/assets/project-origin-KvE_J110.js +1 -0
  100. package/dist/web/assets/project-team-api-CXPeakuM.js +1 -0
  101. package/dist/web/assets/shared-report-BxeCmoU_.js +1 -0
  102. package/dist/web/assets/shared-report-NXHxLp5x.css +1 -0
  103. package/dist/web/assets/stage-CWdBY1y-.js +1 -0
  104. package/dist/web/assets/stage-D1RyodHo.js +3835 -0
  105. package/dist/web/assets/task-labels-C4t6U38E.js +1 -0
  106. package/dist/web/assets/task-updates-ChvjLQXV.js +1 -0
  107. package/dist/web/assets/ui-WHqcW6KK.js +1 -0
  108. package/dist/web/assets/ui-gkBKztsv.css +1 -0
  109. package/dist/web/assets/useAgentRecords-DotFATN2.js +1 -0
  110. package/dist/web/assets/{useApi-CROJJdhE-sOV3uq1T.js → useApi-CROJJdhE-BJn8l1Cb.js} +1 -1
  111. package/dist/web/assets/vue-router-YsTpOqqM.js +1 -0
  112. package/dist/web/assets/workbench-model-D9ytk327.js +1 -0
  113. package/dist/web/index.html +28 -19
  114. package/docs/agent-conversations-and-collaboration.md +6 -0
  115. package/docs/agent-interface-architecture.md +10 -0
  116. package/docs/agent-roundtable.md +42 -1
  117. package/docs/client-connections.md +158 -110
  118. package/docs/employee-agents.md +7 -3
  119. package/docs/project-agent-memory.md +24 -8
  120. package/graph-provider/fuli_graph/agent_confirmation_progress.py +58 -0
  121. package/graph-provider/fuli_graph/agent_conversation_models.py +1 -0
  122. package/graph-provider/fuli_graph/agent_conversation_routes.py +20 -0
  123. package/graph-provider/fuli_graph/app.py +8 -1
  124. package/graph-provider/fuli_graph/collaboration_context.py +48 -15
  125. package/graph-provider/fuli_graph/config.py +2 -0
  126. package/graph-provider/fuli_graph/conversation_context.py +74 -41
  127. package/graph-provider/fuli_graph/conversation_triage_models.py +35 -0
  128. package/graph-provider/fuli_graph/default_project_lead.py +3 -3
  129. package/graph-provider/fuli_graph/graph_models.py +26 -3
  130. package/graph-provider/fuli_graph/graph_query.py +36 -15
  131. package/graph-provider/fuli_graph/knowledge_search.py +3 -0
  132. package/graph-provider/fuli_graph/knowledge_weight.py +40 -0
  133. package/graph-provider/fuli_graph/knowledge_weight_models.py +9 -0
  134. package/graph-provider/fuli_graph/migrate_lead_occupation.py +165 -0
  135. package/graph-provider/fuli_graph/model_validation.py +10 -0
  136. package/graph-provider/fuli_graph/models.py +44 -3
  137. package/graph-provider/fuli_graph/occupation_catalog.py +116 -0
  138. package/graph-provider/fuli_graph/occupation_routes.py +25 -0
  139. package/graph-provider/fuli_graph/personal_global_preferences.py +6 -10
  140. package/graph-provider/fuli_graph/preference_conflicts.py +38 -0
  141. package/graph-provider/fuli_graph/project_agent_attention_models.py +7 -0
  142. package/graph-provider/fuli_graph/project_agent_coordination_models.py +57 -5
  143. package/graph-provider/fuli_graph/project_agent_delegations.py +129 -13
  144. package/graph-provider/fuli_graph/project_agent_executor_models.py +9 -18
  145. package/graph-provider/fuli_graph/project_agent_hierarchy.py +98 -0
  146. package/graph-provider/fuli_graph/project_agent_memory_routes.py +13 -1
  147. package/graph-provider/fuli_graph/project_agent_models.py +6 -1
  148. package/graph-provider/fuli_graph/project_agent_occupation_models.py +36 -0
  149. package/graph-provider/fuli_graph/project_agent_recruitment_occupation.py +74 -0
  150. package/graph-provider/fuli_graph/project_agent_recruitment_values.py +10 -1
  151. package/graph-provider/fuli_graph/project_agent_remote_origins.py +24 -11
  152. package/graph-provider/fuli_graph/project_agent_routes.py +40 -1
  153. package/graph-provider/fuli_graph/project_agent_task_models.py +31 -17
  154. package/graph-provider/fuli_graph/project_agent_worker_access.py +229 -0
  155. package/graph-provider/fuli_graph/project_agent_worker_models.py +59 -0
  156. package/graph-provider/fuli_graph/project_agent_worker_routes.py +88 -0
  157. package/graph-provider/fuli_graph/project_brief.py +46 -0
  158. package/graph-provider/fuli_graph/project_memory_usage.py +175 -0
  159. package/graph-provider/fuli_graph/project_memory_usage_projection.py +35 -0
  160. package/graph-provider/fuli_graph/project_memory_usage_routes.py +26 -0
  161. package/graph-provider/fuli_graph/provider_values.py +5 -0
  162. package/graph-provider/fuli_graph/runtime.py +6 -0
  163. package/graph-provider/fuli_graph/search_projection.py +6 -27
  164. package/graph-provider/fuli_graph/staffing_demand.py +74 -0
  165. package/graph-provider/fuli_graph/store.py +10 -0
  166. package/graph-provider/fuli_graph/store_agent_conversations.py +88 -16
  167. package/graph-provider/fuli_graph/store_conversation_triage.py +85 -0
  168. package/graph-provider/fuli_graph/store_knowledge.py +21 -6
  169. package/graph-provider/fuli_graph/store_occupation_catalog.py +142 -0
  170. package/graph-provider/fuli_graph/store_project_agent_attention.py +3 -0
  171. package/graph-provider/fuli_graph/store_project_agent_context.py +5 -2
  172. package/graph-provider/fuli_graph/store_project_agent_coordination_policy.py +19 -1
  173. package/graph-provider/fuli_graph/store_project_agent_executor_routing.py +1 -1
  174. package/graph-provider/fuli_graph/store_project_agent_executors.py +1 -1
  175. package/graph-provider/fuli_graph/store_project_agent_occupation.py +75 -0
  176. package/graph-provider/fuli_graph/store_project_agent_pages.py +84 -0
  177. package/graph-provider/fuli_graph/store_project_agent_task_activity.py +31 -1
  178. package/graph-provider/fuli_graph/store_project_agent_task_persistence.py +3 -1
  179. package/graph-provider/fuli_graph/store_project_agent_task_reads.py +15 -1
  180. package/graph-provider/fuli_graph/store_project_agent_task_recruitment.py +80 -137
  181. package/graph-provider/fuli_graph/store_project_agent_task_staffing.py +32 -7
  182. package/graph-provider/fuli_graph/store_project_agent_tasks.py +42 -4
  183. package/graph-provider/fuli_graph/store_project_agent_worker_runs.py +355 -0
  184. package/graph-provider/fuli_graph/store_project_agents.py +87 -3
  185. package/graph-provider/fuli_graph/store_projects.py +16 -1
  186. package/graph-provider/fuli_graph/store_recruitment_fulfillment.py +95 -0
  187. package/graph-provider/fuli_graph/store_task_contexts.py +189 -33
  188. package/graph-provider/fuli_graph/store_transcript_recovery.py +54 -0
  189. package/graph-provider/fuli_graph/system_agents.py +34 -3
  190. package/graph-provider/fuli_graph/task_activity_origin.py +70 -0
  191. package/graph-provider/fuli_graph/task_context_adoption.py +8 -5
  192. package/graph-provider/fuli_graph/task_context_auto_close.py +54 -0
  193. package/graph-provider/fuli_graph/task_context_coordination.py +114 -0
  194. package/graph-provider/fuli_graph/task_context_models.py +75 -1
  195. package/graph-provider/fuli_graph/task_context_routes.py +11 -1
  196. package/graph-provider/fuli_graph/task_participant_running.py +15 -0
  197. package/graph-provider/fuli_graph/task_worker_attribution.py +102 -0
  198. package/graph-provider/fuli_graph/worker_run_execution.py +48 -0
  199. package/graph-provider/fuli_graph/workflow_candidates.py +4 -9
  200. package/graph-provider/pyproject.toml +1 -1
  201. package/npm-shrinkwrap.json +85 -2
  202. package/package.json +5 -1
  203. package/skills/capturing-session-knowledge/SKILL.md +13 -355
  204. package/skills/capturing-session-knowledge/references/capture.md +145 -0
  205. package/skills/capturing-session-knowledge/references/coordination.md +70 -0
  206. package/skills/capturing-session-knowledge/references/retrieval.md +153 -0
  207. package/src/adaptive-runtime/graph-services.js +8 -34
  208. package/src/adaptive-runtime/settings.js +1 -8
  209. package/src/agent-peer/chat-coordinator.js +104 -0
  210. package/src/agent-peer/chat-port.js +78 -0
  211. package/src/agent-peer/coordinator-http.js +10 -0
  212. package/src/agent-peer/coordinator-service.js +25 -8
  213. package/src/agent-peer/coordinator-store.js +26 -6
  214. package/src/agent-peer/node-store.js +12 -6
  215. package/src/agent-peer/origin-proof.js +6 -4
  216. package/src/agent-peer/peer-port.js +30 -13
  217. package/src/agent-peer/peer-runtime.js +22 -11
  218. package/src/agent-peer/peer-transport.js +1 -1
  219. package/src/agent-peer/protocol.js +16 -2
  220. package/src/agent-peer/runner.js +18 -9
  221. package/src/agent-roundtable/attention-inbox-store.js +37 -0
  222. package/src/agent-roundtable/attention-inbox.js +48 -0
  223. package/src/agent-roundtable/chat-contract.js +49 -0
  224. package/src/agent-roundtable/chat-notifications.js +53 -0
  225. package/src/agent-roundtable/chat-service.js +132 -0
  226. package/src/agent-roundtable/chat-snapshot.js +52 -0
  227. package/src/agent-roundtable/chat-store.js +108 -0
  228. package/src/agent-roundtable/chat-updates.js +28 -0
  229. package/src/agent-roundtable/chat-wait.js +32 -0
  230. package/src/agent-roundtable/chat-wake.js +53 -0
  231. package/src/agent-roundtable/chat.js +98 -0
  232. package/src/agent-roundtable/discovery.js +12 -0
  233. package/src/agent-roundtable/http.js +30 -0
  234. package/src/agent-roundtable/memory-observation.js +25 -0
  235. package/src/agent-roundtable/project-target.js +43 -0
  236. package/src/agent-roundtable/service.js +183 -35
  237. package/src/agent-roundtable/store.js +102 -7
  238. package/src/agent-roundtable/task-context.js +109 -0
  239. package/src/agent-roundtable/tools.js +19 -5
  240. package/src/agent-roundtable/wake.js +106 -18
  241. package/src/agent-tools/agent-attention-definitions.js +5 -4
  242. package/src/agent-tools/agent-collaboration-definitions.js +6 -2
  243. package/src/agent-tools/checkpoint-definitions.js +30 -0
  244. package/src/agent-tools/employee-definitions.js +5 -4
  245. package/src/agent-tools/graph-definitions.js +51 -47
  246. package/src/agent-tools/graph-handlers.js +15 -6
  247. package/src/agent-tools/interface-catalog.js +18 -4
  248. package/src/agent-tools/interface-definitions.js +12 -3
  249. package/src/agent-tools/knowledge-usage-definitions.js +21 -0
  250. package/src/agent-tools/project-agent-definitions.js +14 -4
  251. package/src/agent-tools/project-agent-memory-definitions.js +2 -2
  252. package/src/agent-tools/schema.js +4 -0
  253. package/src/agent-tools/task-preference-definitions.js +13 -0
  254. package/src/agent-tools/task-run-definitions.js +11 -0
  255. package/src/agent-tools/task-schedule-definitions.js +15 -0
  256. package/src/agents/claude-code/host-notification.js +64 -0
  257. package/src/agents/claude-code/lifecycle-hook.js +36 -56
  258. package/src/agents/claude-code/native-session.js +9 -0
  259. package/src/agents/claude-code/preference-evidence.js +28 -0
  260. package/src/agents/claude-code/wake.js +1 -0
  261. package/src/agents/codex/acp-process.js +244 -0
  262. package/src/agents/codex/acp-session.js +190 -0
  263. package/src/agents/codex/acp-worker.js +54 -0
  264. package/src/agents/codex/lifecycle-hook.js +58 -63
  265. package/src/agents/codex/lifecycle-hooks.js +22 -5
  266. package/src/agents/codex/mcp-context.js +16 -0
  267. package/src/agents/codex/preference-evidence.js +21 -0
  268. package/src/agents/codex/token-usage.js +14 -2
  269. package/src/agents/codex/wake.js +7 -3
  270. package/src/agents/cursor/lifecycle-hook.js +6 -16
  271. package/src/agents/identity-receipt.js +74 -10
  272. package/src/agents/lifecycle-input.js +20 -0
  273. package/src/agents/lifecycle-message.js +4 -0
  274. package/src/agents/native-mcp-context.js +9 -0
  275. package/src/agents/native-session-env.js +10 -0
  276. package/src/agents/preference-evidence.js +21 -0
  277. package/src/agents/system-prompt.js +11 -0
  278. package/src/app/agent-request-context.js +14 -1
  279. package/src/app/application-error.js +4 -1
  280. package/src/backup/graph-census.js +57 -0
  281. package/src/backup/identity-reconciliation.js +15 -39
  282. package/src/backup/runtime-adapters.js +64 -27
  283. package/src/backup/runtime-migration.js +88 -0
  284. package/src/cli/command-registry.js +4 -1
  285. package/src/cli/connect-command.js +1 -1
  286. package/src/cli/graph-data-command.js +25 -4
  287. package/src/cli/graph-migrate-command.js +107 -0
  288. package/src/cli/local-runtime-command.js +1 -4
  289. package/src/cli/local-runtime-control.js +27 -0
  290. package/src/cli/mcp-command.js +33 -1
  291. package/src/cli/native-runtime-command.js +44 -0
  292. package/src/cli/remote-mcp-command.js +7 -0
  293. package/src/cli/setup-command.js +12 -22
  294. package/src/cli/terminal-io.js +17 -0
  295. package/src/cli/uninstall-command.js +17 -15
  296. package/src/cli/update-command.js +12 -20
  297. package/src/cli/update-installation.js +3 -3
  298. package/src/cli/worker-command.js +80 -0
  299. package/src/cli/workspace-connection-command.js +1 -4
  300. package/src/cli.js +11 -10
  301. package/src/conversations/capture-window.js +44 -0
  302. package/src/conversations/entry-rules.js +59 -0
  303. package/src/conversations/fallback-transcript-boundary.js +48 -0
  304. package/src/conversations/human-interaction.js +9 -0
  305. package/src/conversations/preference-evidence.js +88 -0
  306. package/src/conversations/preference-lifecycle.js +32 -0
  307. package/src/conversations/preference-session.js +119 -0
  308. package/src/conversations/preference-snapshot.js +93 -0
  309. package/src/conversations/preference-view.js +31 -0
  310. package/src/conversations/stop-auto-close.js +28 -0
  311. package/src/conversations/sync-transcript.js +21 -8
  312. package/src/conversations/task-context-view.js +123 -36
  313. package/src/conversations/transcript-append.js +38 -0
  314. package/src/conversations/transcript-guard-lock.js +59 -0
  315. package/src/conversations/transcript-guard.js +45 -17
  316. package/src/conversations/transcript-lifecycle.js +60 -0
  317. package/src/conversations/transcript-reader.js +24 -3
  318. package/src/desktop/windows-command-options.js +19 -0
  319. package/src/desktop/windows-controller.js +160 -0
  320. package/src/desktop/windows-install.js +55 -0
  321. package/src/desktop/windows-installation-context.js +49 -0
  322. package/src/desktop/windows-installation-switch.js +140 -0
  323. package/src/desktop/windows-installation.js +246 -0
  324. package/src/desktop/windows-rollback-command.js +24 -0
  325. package/src/desktop/windows-rollback.js +69 -0
  326. package/src/desktop/windows-uninstall-command.js +27 -0
  327. package/src/desktop/windows-uninstall.js +94 -0
  328. package/src/desktop/windows-update-command.js +29 -0
  329. package/src/desktop/windows-update-lock.js +38 -0
  330. package/src/desktop/windows-update-runtime.js +57 -0
  331. package/src/desktop/windows-update.js +92 -0
  332. package/src/employees/catalog/assistant.json +26 -0
  333. package/src/employees/manifest.js +2 -2
  334. package/src/employees/recruitment.js +5 -2
  335. package/src/external-knowledge/conflict-policy.js +1 -5
  336. package/src/external-knowledge/connected-search.js +3 -23
  337. package/src/external-knowledge/connectors/custom.js +1 -12
  338. package/src/external-knowledge/connectors/feishu.js +13 -44
  339. package/src/external-knowledge/connectors/mcp.js +2 -22
  340. package/src/external-knowledge/connectors/notion.js +6 -47
  341. package/src/external-knowledge/connectors/response-values.js +34 -0
  342. package/src/external-knowledge/connectors/retrieval-api.js +2 -32
  343. package/src/external-knowledge/document-mapping.js +1 -7
  344. package/src/external-knowledge/service.js +1 -14
  345. package/src/graphiti/agent-attention.js +35 -2
  346. package/src/graphiti/agent-collaboration.js +69 -21
  347. package/src/graphiti/agent-conversations.js +26 -20
  348. package/src/graphiti/agent-knowledge-workflows.js +124 -52
  349. package/src/graphiti/capture-policy.js +23 -0
  350. package/src/graphiti/checkpoint-human-interaction.js +16 -0
  351. package/src/graphiti/collaboration-preference-projection.js +5 -4
  352. package/src/graphiti/collaboration-preference-workflow.js +66 -29
  353. package/src/graphiti/conversation-triage.js +99 -0
  354. package/src/graphiti/execution-mode.js +27 -0
  355. package/src/graphiti/federated-application.js +62 -203
  356. package/src/graphiti/federated-search.js +186 -0
  357. package/src/graphiti/knowledge-provider-mapping.js +8 -0
  358. package/src/graphiti/knowledge-result-budget.js +188 -0
  359. package/src/graphiti/occupation-catalog.js +7 -0
  360. package/src/graphiti/occupation-staffing.js +21 -0
  361. package/src/graphiti/project-agent-control-plane.js +49 -4
  362. package/src/graphiti/project-agent-mapping.js +31 -30
  363. package/src/graphiti/project-agent-memory.js +1 -1
  364. package/src/graphiti/project-agent-run-control.js +64 -0
  365. package/src/graphiti/project-agent-task-entry.js +45 -19
  366. package/src/graphiti/project-agent-team-context.js +9 -5
  367. package/src/graphiti/project-agent-workflows.js +47 -7
  368. package/src/graphiti/project-brief.js +49 -0
  369. package/src/graphiti/project-memory-usage.js +44 -0
  370. package/src/graphiti/project-profile-mapping.js +1 -0
  371. package/src/graphiti/project-team-hierarchy.js +27 -0
  372. package/src/graphiti/project-team-view.js +14 -1
  373. package/src/graphiti/provider-client.js +165 -11
  374. package/src/graphiti/repository-project-registration.js +9 -2
  375. package/src/graphiti/runtime-config.js +19 -8
  376. package/src/graphiti/setup.js +2 -2
  377. package/src/graphiti/task-activity-origin.js +8 -0
  378. package/src/graphiti/task-agent-assignment.js +49 -0
  379. package/src/graphiti/task-collaboration-attribution.js +25 -0
  380. package/src/graphiti/task-entry-activity-origin.js +9 -0
  381. package/src/graphiti/task-entry-preferences.js +42 -28
  382. package/src/graphiti/task-entry-project-mention.js +113 -0
  383. package/src/graphiti/task-entry-project-scope.js +19 -16
  384. package/src/graphiti/task-experiences.js +53 -0
  385. package/src/graphiti/task-knowledge-recall.js +46 -9
  386. package/src/graphiti/task-knowledge-routing.js +130 -0
  387. package/src/graphiti/task-preference-pages.js +91 -0
  388. package/src/graphiti/task-preference-reader.js +118 -0
  389. package/src/graphiti/task-remember.js +100 -0
  390. package/src/graphiti/user-taste-skill.js +4 -15
  391. package/src/graphiti/worker-descriptor.js +42 -0
  392. package/src/graphiti/worker-plan-host.js +92 -0
  393. package/src/graphiti/worker-run-host.js +276 -0
  394. package/src/graphiti/worker-run-view.js +25 -0
  395. package/src/graphiti/worker-task-context.js +154 -0
  396. package/src/graphiti/workflow-observation.js +3 -13
  397. package/src/graphiti/writing-taste-profile.js +4 -15
  398. package/src/http/api-router.js +11 -0
  399. package/src/http/error-mapping.js +4 -0
  400. package/src/http/graph-api-router.js +60 -0
  401. package/src/http/occupation-api-router.js +19 -0
  402. package/src/http/request-policy.js +1 -1
  403. package/src/http/task-events-api-router.js +29 -2
  404. package/src/http/task-schedules-api-router.js +31 -0
  405. package/src/judgment/conversation.js +12 -0
  406. package/src/judgment/engine.js +15 -9
  407. package/src/judgment/routing.js +1 -0
  408. package/src/judgment/service.js +11 -1
  409. package/src/local-runtime/lifecycle.js +20 -15
  410. package/src/local-runtime/processes.js +19 -0
  411. package/src/local-runtime/provider-readiness.js +41 -0
  412. package/src/mcp/chat-listing.js +37 -0
  413. package/src/mcp/context-resources.js +13 -4
  414. package/src/mcp/create-mcp-server.js +138 -35
  415. package/src/mcp/direct-call.js +3 -5
  416. package/src/mcp/instructions.js +15 -1
  417. package/src/mcp/preference-delivery.js +70 -0
  418. package/src/mcp/process-registry.js +65 -0
  419. package/src/mcp/provider-task-context-registry.js +64 -4
  420. package/src/mcp/runtime.js +15 -3
  421. package/src/mcp/session-id.js +7 -0
  422. package/src/mcp/tool-annotations.js +5 -1
  423. package/src/mcp/tool-profiles.js +5 -19
  424. package/src/mcp/tool-result.js +69 -9
  425. package/src/native-runtime/java-runtime.js +47 -0
  426. package/src/native-runtime/macos-ports.js +41 -0
  427. package/src/native-runtime/neo4j-asset-state.js +101 -0
  428. package/src/native-runtime/neo4j-install.js +84 -0
  429. package/src/native-runtime/neo4j-lifecycle.js +151 -0
  430. package/src/native-runtime/neo4j-store-formats.js +36 -0
  431. package/src/native-runtime/runtime.js +246 -146
  432. package/src/native-runtime/windows-assets.js +70 -0
  433. package/src/native-runtime/windows-job-process.cs +169 -0
  434. package/src/native-runtime/windows-job-process.js +110 -0
  435. package/src/native-runtime/windows-processes.js +289 -0
  436. package/src/notifications/needs-person.js +75 -0
  437. package/src/publication/canonical-json.js +13 -7
  438. package/src/server/worker-plan-runtime.js +49 -0
  439. package/src/server.js +18 -3
  440. package/src/setup/agent-installation-status.js +9 -101
  441. package/src/setup/agents/adapter-contract.js +47 -0
  442. package/src/setup/agents/claude-code/adapter.test.js +34 -0
  443. package/src/setup/agents/claude-code/index.js +35 -0
  444. package/src/setup/agents/claude-desktop/adapter.test.js +34 -0
  445. package/src/setup/agents/claude-desktop/index.js +22 -0
  446. package/src/setup/agents/codex/adapter.test.js +34 -0
  447. package/src/setup/agents/codex/index.js +47 -0
  448. package/src/setup/agents/config-directory.js +7 -0
  449. package/src/setup/agents/cursor/adapter.test.js +50 -0
  450. package/src/setup/agents/cursor/index.js +35 -0
  451. package/src/setup/agents/gemini/adapter.test.js +32 -0
  452. package/src/setup/agents/gemini/index.js +14 -0
  453. package/src/setup/agents/json-mcp.js +66 -0
  454. package/src/setup/agents/kiro/adapter.test.js +12 -0
  455. package/src/setup/agents/kiro/index.js +14 -0
  456. package/src/setup/agents/opencode/adapter.test.js +39 -0
  457. package/src/setup/agents/opencode/index.js +19 -0
  458. package/src/setup/agents/qwen-code/adapter.test.js +14 -0
  459. package/src/setup/agents/qwen-code/index.js +14 -0
  460. package/src/setup/agents/registration.js +13 -0
  461. package/src/setup/agents/registry.js +15 -0
  462. package/src/setup/agents.js +13 -122
  463. package/src/setup/claude-code-config.js +18 -18
  464. package/src/setup/claude-desktop-config.js +9 -11
  465. package/src/setup/client-connection.js +1 -1
  466. package/src/setup/codex-bootstrap.js +10 -29
  467. package/src/setup/codex-config.js +59 -26
  468. package/src/setup/container-runtime.js +28 -29
  469. package/src/setup/cursor-config.js +10 -11
  470. package/src/setup/graph-runtime.js +18 -48
  471. package/src/setup/install-agent.js +77 -0
  472. package/src/setup/paths.js +8 -1
  473. package/src/setup/setup.js +17 -36
  474. package/src/setup/uninstall.js +13 -1
  475. package/src/storage/json-file.js +7 -1
  476. package/src/system/client-connection-install.js +27 -0
  477. package/src/system/client-connection-status.js +5 -3
  478. package/src/system/main-module.js +16 -0
  479. package/src/system/open-without-following.js +38 -0
  480. package/src/system/platform-path.js +8 -0
  481. package/src/system/runtime-settings.js +12 -7
  482. package/src/system/settings-apply.js +2 -6
  483. package/src/system/settings-guide.js +85 -0
  484. package/src/system/system-service.js +6 -2
  485. package/src/task-schedules/scheduler.js +32 -0
  486. package/src/task-schedules/service.js +174 -0
  487. package/src/task-schedules/store.js +92 -0
  488. package/src/text/single-line.js +4 -0
  489. package/src/validation/values.js +44 -0
  490. package/dist/web/assets/AboutPage-DC3Eu95G.js +0 -1
  491. package/dist/web/assets/AboutPage-c4dQpUiP.css +0 -1
  492. package/dist/web/assets/AgentHand-Bex3jrOr.js +0 -1
  493. package/dist/web/assets/AgentHand-Y83Oo36U.css +0 -1
  494. package/dist/web/assets/AgentName-E3TrVNIR.js +0 -1
  495. package/dist/web/assets/AgentProfilePage-pHzDx457.js +0 -1
  496. package/dist/web/assets/AgentsDirectoryPage-itsP9chX.js +0 -1
  497. package/dist/web/assets/AgentsDirectoryPage-kc3EgeGO.css +0 -1
  498. package/dist/web/assets/ConnectionsPage-D0L5VcbN.js +0 -1
  499. package/dist/web/assets/EmployeeRecruitDialog-CVbqCzHb.css +0 -1
  500. package/dist/web/assets/EmployeeRecruitDialog-DcYqq75q.js +0 -1
  501. package/dist/web/assets/EmployeeWorkbenchPage-BDN6whBV.js +0 -3
  502. package/dist/web/assets/EmployeeWorkbenchPage-BQes4L1f.css +0 -1
  503. package/dist/web/assets/KnowledgeEditDialog-BnFbCSK7.js +0 -1
  504. package/dist/web/assets/KnowledgeEditDialog-hT9znkoe.css +0 -1
  505. package/dist/web/assets/KnowledgeInspector-u0HypEW7.js +0 -1
  506. package/dist/web/assets/KnowledgeOrganizerPage-B3GoSV-E.js +0 -1
  507. package/dist/web/assets/KnowledgeOrganizerPage-ccgscrPd.css +0 -1
  508. package/dist/web/assets/KnowledgePage-DrRnvfrO.js +0 -1
  509. package/dist/web/assets/KnowledgeWorkspace-D4a7FcAb.css +0 -1
  510. package/dist/web/assets/KnowledgeWorkspace-_wWZQw_h.js +0 -4
  511. package/dist/web/assets/NotFoundPage-BcPx7tfG.js +0 -1
  512. package/dist/web/assets/OverviewPage-8LBN8Shi.css +0 -1
  513. package/dist/web/assets/OverviewPage-C2jrJWDc.js +0 -1
  514. package/dist/web/assets/PersonalProfilePage-B0_zIINs.css +0 -1
  515. package/dist/web/assets/PersonalProfilePage-DkOcops6.js +0 -1
  516. package/dist/web/assets/PersonalProjectsPage-uJXnueKw.js +0 -1
  517. package/dist/web/assets/ProjectAgentFirstTask-Bi1ZsTC1.css +0 -1
  518. package/dist/web/assets/ProjectAgentFirstTask-Cwto-bOU.js +0 -1
  519. package/dist/web/assets/ProjectAgentsPage-DDuhJnAH.js +0 -12
  520. package/dist/web/assets/ProjectAgentsPage-VYiEOpFJ.css +0 -1
  521. package/dist/web/assets/ProjectScopePicker-Bc7A6Rdj.js +0 -1
  522. package/dist/web/assets/PublicProjectsPage-DKamXDV9.css +0 -1
  523. package/dist/web/assets/PublicProjectsPage-KvmU4tDo.js +0 -1
  524. package/dist/web/assets/ReviewPage-BfKG8Hgw.js +0 -1
  525. package/dist/web/assets/RoundtablesPage-Drou-B81.css +0 -1
  526. package/dist/web/assets/RoundtablesPage-IXKQq62P.js +0 -1
  527. package/dist/web/assets/SettingsPage-6FZ7_3-X.css +0 -1
  528. package/dist/web/assets/SettingsPage-Clhe1bei.js +0 -1
  529. package/dist/web/assets/SharedJefaReportPage-B55966fF.js +0 -1
  530. package/dist/web/assets/TaskExecutionPlan-BuEIInIV.css +0 -1
  531. package/dist/web/assets/TaskExecutionPlan-ZoOE8Ltc.js +0 -2
  532. package/dist/web/assets/UiButton-DYcQLYXP.js +0 -1
  533. package/dist/web/assets/UiDialog-D70VuNpZ.js +0 -1
  534. package/dist/web/assets/UiDisclosure-CaeBp1mn.js +0 -1
  535. package/dist/web/assets/UiSegmented-DpXRULl-.js +0 -1
  536. package/dist/web/assets/UiSelect-Alpe2iY3.js +0 -1
  537. package/dist/web/assets/UiSelect-Bv6R0yr1.css +0 -1
  538. package/dist/web/assets/WritingTastePage-B_zYD1df.css +0 -1
  539. package/dist/web/assets/WritingTastePage-BwNCyys9.js +0 -1
  540. package/dist/web/assets/agent-pins-DbcPCnxU.js +0 -1
  541. package/dist/web/assets/agent-profile-DTn-2VAG.css +0 -1
  542. package/dist/web/assets/agent-work-summary-DRJy9v48.js +0 -1
  543. package/dist/web/assets/attention-store-AfhjzTC5.js +0 -1
  544. package/dist/web/assets/catalog-ykylXINx.js +0 -1
  545. package/dist/web/assets/client-CIuQ1icy.css +0 -1
  546. package/dist/web/assets/client-mT6kHxUd.js +0 -1
  547. package/dist/web/assets/console-CDOkjZU8.js +0 -1
  548. package/dist/web/assets/conversation-launcher-settings-CJfHOqqX.js +0 -1
  549. package/dist/web/assets/i18n-DUTWmrzf.js +0 -10
  550. package/dist/web/assets/index-DsExj49_.css +0 -1
  551. package/dist/web/assets/index-pO9miMus.js +0 -5
  552. package/dist/web/assets/judgment-types-aERVgHxJ.js +0 -1
  553. package/dist/web/assets/model-DiN6uWZA.js +0 -1
  554. package/dist/web/assets/personal-profile-graph-C6IZoTJK.js +0 -1
  555. package/dist/web/assets/project-team-api-B3dwwoUU.js +0 -1
  556. package/dist/web/assets/shared-report-CGlCpmNd.css +0 -1
  557. package/dist/web/assets/shared-report-n864kqhr.js +0 -1
  558. package/dist/web/assets/useAgentRoster-BF8eZGbq.js +0 -1
  559. package/dist/web/assets/vue-router-CBdnor1K.js +0 -1
  560. /package/dist/web/assets/{ConnectionsPage-CM9C-zEI.css → TextField-CM9C-zEI.css} +0 -0
  561. /package/dist/web/assets/{KnowledgeInspector-pgDELOEf.css → VirtualDirectoryList-pgDELOEf.css} +0 -0
package/README.md CHANGED
@@ -14,7 +14,20 @@
14
14
  <a href="LICENSE"><img src="https://img.shields.io/npm/l/fuli-context?style=flat" alt="license" /></a>
15
15
  </p>
16
16
 
17
- **Switch AI tools. Keep your agent.**
17
+ **Switch AI tools. Keep yourself**
18
+
19
+ Fuli (复利) is Chinese for **compound interest**: returns that generate further returns.
20
+
21
+ Fuli exists to preserve your own taste, personality, and judgment as you work with AI.
22
+ We believe people should no longer be tied to doing everything themselves. You should
23
+ be free to make decisions, come up with ideas, and take a break.
24
+
25
+ Fuli works with Codex, Claude Code, and other agent clients that support MCP and Skills.
26
+ Connect supported clients to the same Fuli data and continue with the same agent,
27
+ carrying forward its recorded work and relevant context.
28
+
29
+ As AI learns to take on more of the work, Fuli helps you make the transition while
30
+ keeping your own judgment at the center.
18
31
 
19
32
  Fuli is a collaboration layer for long-lived agents across MCP-compatible AI clients. Connect
20
33
  your tools to the same accessible Fuli data, select the same agent, and continue with its identity,
@@ -49,7 +62,19 @@ Explore the [product website](https://有点.意思.com/fuli/).
49
62
 
50
63
  ## Start here
51
64
 
52
- With Node.js 24.12+ and Docker Compose v2 available, run:
65
+ Install Fuli, connect a client, and run one actual tool call to verify the connection. See
66
+ [Installation](#installation) for full requirements and [client connections](docs/client-connections.md)
67
+ for configuration formats, Hooks, and troubleshooting.
68
+
69
+ Humans retain login, Hook trust, and manual review. **Settings showing `Connected` (`connected`)
70
+ only means the current Fuli entry is present in the client's configuration file — it does not prove
71
+ that the client loaded the MCP process, that a Hook delivered context, or that a tool call
72
+ succeeded.**
73
+
74
+ ### 1. Install
75
+
76
+ With Node.js 24.12+ and Docker Compose v2 available (default container mode; see
77
+ [Installation](#installation) for macOS/Linux native mode), run:
53
78
 
54
79
  ```bash
55
80
  npm install --global fuli-context
@@ -57,24 +82,44 @@ fuli setup
57
82
  fuli open
58
83
  ```
59
84
 
60
- The setup wizard shows its plan before changing your environment. See [Installation](#installation)
61
- for requirements and the macOS/Linux native runtime option.
62
-
63
- To try a cross-tool handoff, ask for a task inside a project directory (Fuli registers the project and
64
- staffs a lead agent), complete it through one connected client, then use the agent's continuation instruction in another client connected
65
- to the same data. Check whether it recovers the correct project and prior work, and asks for
66
- missing context rather than inventing it. See [Agent conversations and collaboration](docs/agent-conversations-and-collaboration.md)
67
- for supported adapters and boundaries.
68
-
69
- For a one-off task, this source version also supports an isolated **temporary project**: ask the
70
- connected client to coordinate the task with Fuli even when no registered project matches. Fuli
71
- retains its task history and follows the existing Agent recruitment and executor permissions.
72
- Reading preferences alone creates nothing. An ambiguous project still needs a choice.
73
- This behavior is available in the stable release.
74
-
75
- The Agent directory now explains the first-task entry, and task details distinguish assignment
76
- from actual worker reports. A completion table appears only after real execution is reported;
77
- an assigned Agent or an ordinary local conversation alone is not worker evidence.
85
+ The setup wizard shows its plan before changing your environment.
86
+
87
+ ### 2. Connect a client
88
+
89
+ - **Detected Codex, Claude Code, Cursor, or Claude Desktop:** `fuli setup` writes the MCP entry and
90
+ supported Hooks/Skills. Quit and reopen apps that read MCP configuration only at launch, then open
91
+ a new task. Codex Hook trust requires manual `/hooks` review in Codex.
92
+ - **Other MCP clients:** run `fuli connect` (or open **Settings → Client connection** in the
93
+ console), merge the `fuli` entry into the client's MCP configuration while keeping other servers,
94
+ and reload or trust the server in that client. `fuli connect` prints JSON only.
95
+
96
+ ### 3. First actual tool call and verification
97
+
98
+ 1. Run `fuli status` and confirm the management UI and personal graph are ready (default
99
+ `http://127.0.0.1:2727`).
100
+ 2. Confirm Fuli tools appear in the client and **make one actual tool call** inside a project
101
+ directory (for example, ask the Agent to load project collaboration preferences or coordinate a
102
+ small task). Verify that Fuli resolves the right project (or registers/staffs a lead Agent) and
103
+ asks for missing context rather than inventing it.
104
+ 3. Optional cross-tool handoff: use the Agent's continuation instruction in another client
105
+ connected to the same data and verify that it recovers the same Agent, project, and prior work.
106
+ See [Agent conversations and collaboration](docs/agent-conversations-and-collaboration.md).
107
+
108
+ For a one-off task, this source version also supports an isolated **temporary project** when no
109
+ registered project matches; reading preferences alone creates nothing, and an ambiguous project
110
+ still needs a choice. Fuli retains its task history and follows the existing Agent recruitment and
111
+ executor permissions. The Agent directory explains the first-task entry, and task details show a
112
+ completion table only after real worker execution is reported — an assigned Agent or an ordinary
113
+ local conversation alone is not worker evidence.
114
+
115
+ ### 4. Troubleshooting
116
+
117
+ If setup, client detection, or tool calls fail, see
118
+ [Common failure recovery](docs/client-connections.md#common-failure-recovery). Use
119
+ `fuli setup --yes --connected-only` only to refresh clients that still have an existing Fuli MCP
120
+ entry (**Connected** / `connected` or **Configuration changed** / `changed` in Settings); clients
121
+ showing **Skills only** (`skills_left`), **Removed** (`removed`), **Not connected**
122
+ (`not_connected`), or newly installed clients without a Fuli MCP entry require a full `fuli setup`.
78
123
 
79
124
  [How it works](#philosophy) · [Installation](#installation) ·
80
125
  [Agent roles and teams](docs/employee-agents.md) ·
@@ -553,6 +598,7 @@ system locale. User data such as paths and space names is displayed unchanged.
553
598
  | `fuli open [--data-dir DIR]` | Open the current management UI in the default browser |
554
599
  | `fuli graph export --output DIR [--mode container\|native]` | Export graph data as a checksummed, copyable offline bundle |
555
600
  | `fuli graph import --input DIR [--target-mode container\|native] [--yes]` | Verify and replace target graph data, preserving an automatic pre-import rollback bundle |
601
+ | `fuli graph migrate --to native [--yes]` | Move a container graph to native mode, accepted only when node and relationship counts match |
556
602
  | `fuli update [setup options]` | Update the npm package and refresh local integrations |
557
603
  | `fuli uninstall [--yes] [--data-dir DIR]` | Remove agent integrations and services while preserving knowledge data and Neo4j volumes |
558
604
 
@@ -669,6 +715,18 @@ fuli setup --yes --runtime-mode native --memory-profile low --adaptive-memory
669
715
  fuli graph import --target-mode native --input "$HOME/Backups/fuli-container" --yes
670
716
  ```
671
717
 
718
+ Or run the same steps as one command, from a package that has the native runtime (on Windows the
719
+ installed Fuli desktop package):
720
+
721
+ ```bash
722
+ fuli graph migrate --to native
723
+ ```
724
+
725
+ It stops the running console, counts and exports the container graph, sets up native mode, imports,
726
+ and accepts the result only when every label and relationship-type count matches. On any failure it
727
+ switches back to container mode. The container volume is only read and is left stopped, never removed.
728
+ Client integrations are not changed.
729
+
672
730
  Swap `container` and `native` for the reverse direction. Export briefly stops the source database
673
731
  and resumes only services that were actually running beforehand. Import validates the manifest and
674
732
  every dump's SHA-256 before stopping the target. It preserves the old target under `backups/graph`
@@ -699,8 +757,9 @@ refreshes only clients with an existing Fuli MCP entry. Existing knowledge, conf
699
757
  and Neo4j volumes remain intact. Reuse any custom setup options during updates.
700
758
 
701
759
  Reconnect Fuli in already-open clients, or restart those clients and open a new task, to load the
702
- new MCP process. To repair existing integrations without upgrading, run
703
- `fuli setup --yes --connected-only`. Use normal `fuli setup` to connect a new client.
760
+ new MCP process. To repair existing integrations that still have a Fuli MCP entry without upgrading,
761
+ run `fuli setup --yes --connected-only`. Clients that are `skills-only`, `removed`, or newly added
762
+ (no Fuli MCP entry) require a full `fuli setup`.
704
763
 
705
764
  Uninstall:
706
765
 
package/README.zh-CN.md CHANGED
@@ -37,7 +37,14 @@ AI 负责检索、提醒、归纳和执行;人始终保留最终判断权。
37
37
 
38
38
  ## 先用起来
39
39
 
40
- 准备好 Node.js 24.12+ 和 Docker Compose v2 后,运行:
40
+ 安装 Fuli、接入客户端,并通过一次实际工具调用完成验证。完整要求见[安装](#安装);配置格式、Hook 与排错见
41
+ [客户端接入(英文)](docs/client-connections.md)。
42
+
43
+ 登录、Hook 信任与人工审核仍由人确认。**“设置 → 客户端接入”显示 `已接入`(`connected`)仅代表客户端配置文件中已有当前版本的 Fuli 条目,不代表客户端进程已加载该 MCP、Hook 已送达上下文或工具已成功调用。**
44
+
45
+ ### 1. 安装
46
+
47
+ 在具备 Node.js 24.12+ 和 Docker Compose v2 的环境下(默认容器模式;macOS / Linux 原生模式见[安装](#安装)),运行:
41
48
 
42
49
  ```bash
43
50
  npm install --global fuli-context
@@ -45,18 +52,26 @@ fuli setup
45
52
  fuli open
46
53
  ```
47
54
 
48
- 设置向导会先展示计划,再修改环境。完整要求与 macOS / Linux 原生运行方式见[安装](#安装)。
55
+ 设置向导会先展示计划,再修改环境。
56
+
57
+ ### 2. 接入客户端
58
+
59
+ - **已检测到 Codex、Claude Code、Cursor 或 Claude 桌面版:** `fuli setup` 会写入 MCP 配置及支持的
60
+ Hook / Skills。只在启动时读取配置的应用须退出重开,重连后新建任务;Codex Hook 信任须在 Codex 的 `/hooks` 中人工审阅。
61
+ - **其他 MCP 客户端:** 运行 `fuli connect`(或打开控制台 **设置 → 客户端接入**),将 `fuli` 条目合并到客户端 MCP 配置并保留其他服务器,再按该客户端要求重载或信任连接。`fuli connect` 只打印 JSON。
62
+
63
+ ### 3. 首次实际工具调用与验证
64
+
65
+ 1. 运行 `fuli status`,确认管理界面与个人图谱就绪(默认 `http://127.0.0.1:2727`)。
66
+ 2. 在客户端中确认 Fuli 工具已出现,并在项目目录里**发起一次实际工具调用**(例如让 Agent 读取当前项目协作偏好或协调一个小任务),检查它是否找对项目(或登记项目并安排负责 Agent),且在缺少信息时如实询问而非编造。
67
+ 3. 可选的跨工具接续:把这位 Agent 的接续指令带到连接同一份数据的另一客户端,验证它能否恢复同一位 Agent、项目和上次工作。支持范围见[Agent 对话与协作说明](docs/agent-conversations-and-collaboration.md)。
49
68
 
50
- 第一次可以试一次跨工具接续:在项目目录里提一个需求(Fuli 会登记项目并安排负责 Agent),在一个已接入客户端完成任务,
51
- 再把这位 Agent 的接续指令带到连接同一份数据的另一客户端。检查它是否找对项目、恢复上次的工作,
52
- 并在缺少信息时如实说明。支持范围见[Agent 对话与协作说明](docs/agent-conversations-and-collaboration.md)。
69
+ 临时任务也能交给 Agent:本次源码支持在没有匹配到已登记项目时建立隔离的**临时项目**;单纯读取偏好不会创建项目,多个候选项目仍需明确选择。Fuli 会保留其任务历史,并遵循既有的 Agent 招募与执行器权限。Agent 目录提供首次任务入口,任务详情只有在收到真实执行报告后才展示完成汇总——仅分配了 Agent 或普通本机对话都不等于工作进程证据。
53
70
 
54
- 临时任务也能交给 Agent:本次源码支持在没有匹配到已登记项目时,建立隔离的**临时项目**,
55
- 继续用 Fuli 协调任务。任务历史会保留,Agent 招募与执行器授权沿用现有规则;
56
- 单纯读取偏好不会创建项目,多个候选项目仍需明确选择。此能力已包含在正式版中。
71
+ ### 4. 排错与恢复
57
72
 
58
- Agent 目录提供首次任务入口,任务详情会区分“已分配”和“收到工作进程报告”。
59
- 只有上报真实执行后才有完成汇总;分配了 Agent、或仅完成普通本机对话,都不等于已运行工作进程。
73
+ 若安装、客户端检测或工具调用失败,见[常见失败与恢复(英文)](docs/client-connections.md#common-failure-recovery)。
74
+ `fuli setup --yes --connected-only` 仅用于刷新仍保留 Fuli MCP 条目的客户端(“设置”页显示**已接入** / `connected` 或**配置有变化** / `changed`);显示**只剩技能文件**(`skills_left`)、**已移除**(`removed`)、**未接入**(`not_connected`)或新安装的客户端(无 Fuli MCP 条目)须运行完整的 `fuli setup`。
60
75
 
61
76
  [工作原理](#项目理念) · [安装](#安装) · [Agent 角色与团队](docs/employee-agents.md) ·
62
77
  [跨客户端验收](acceptance/cross-client-handoff.md) · [参与贡献](CONTRIBUTING.md) ·
@@ -618,8 +633,7 @@ fuli update
618
633
  相同选项。
619
634
 
620
635
  已打开的客户端需要重新连接 Fuli MCP,或重启客户端后新建任务,才能加载新进程。
621
- 只需修复已有接入时,运行 `fuli setup --yes --connected-only`;接入新客户端仍使用普通
622
- `fuli setup`。
636
+ 只需修复仍保留 Fuli MCP 条目的已有接入时,运行 `fuli setup --yes --connected-only`;仅剩 Skills(`skills-only`)、已移除(`removed`)或新接入的客户端(无 Fuli MCP 条目)须运行完整的 `fuli setup`。
623
637
 
624
638
  卸载:
625
639
 
@@ -0,0 +1 @@
1
+ .about-section-heading[data-v-99ca5811]{border-bottom:1px solid var(--color-border);padding-bottom:24px}.about-section-heading h2[data-v-99ca5811]{color:var(--color-ink);letter-spacing:-.02em;margin:0;font-size:clamp(20px,2.6vw,26px);font-weight:650;line-height:1.25}.about-section-heading p[data-v-99ca5811]{max-width:680px;color:var(--color-muted);margin-top:8px;font-size:14px;line-height:1.65}.label-dimension-strip[data-v-e657da2b]{border-block:1px solid var(--color-border);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.label-dimension-strip article[data-v-e657da2b]{grid-template-columns:22px minmax(0,1fr);gap:11px;min-width:0;padding:16px 18px;display:grid}.label-dimension-strip article+article[data-v-e657da2b]{border-left:1px solid var(--color-border)}.label-dimension-strip i[data-v-e657da2b]{border:1px solid var(--color-border-strong);border-radius:6px;width:22px;height:22px;position:relative}.label-dimension-strip i[data-v-e657da2b]:before,.label-dimension-strip i[data-v-e657da2b]:after{content:"";position:absolute}.label-dimension-strip [data-dimension=profile] i[data-v-e657da2b]:before{border:1.5px solid var(--color-muted);border-radius:50%;inset:5px}.label-dimension-strip [data-dimension=profile] i[data-v-e657da2b]:after{background:var(--color-danger);border-radius:50%;width:4px;height:4px;top:2px;right:2px}.label-dimension-strip [data-dimension=origin] i[data-v-e657da2b]:before{border-right:1px solid var(--color-muted);border-bottom:1px solid var(--color-muted);inset:4px}.label-dimension-strip [data-dimension=origin] i[data-v-e657da2b]:after{background:var(--color-muted);border-radius:50%;width:5px;height:5px;top:4px;right:4px}.label-dimension-strip [data-dimension=confirmation] i[data-v-e657da2b]:before{border-left:2px solid var(--color-muted);border-bottom:2px solid var(--color-muted);width:11px;height:6px;top:5px;left:5px;transform:rotate(-45deg)}.label-dimension-strip dl[data-v-e657da2b],.label-dimension-strip dt[data-v-e657da2b],.label-dimension-strip dd[data-v-e657da2b]{margin:0}.label-dimension-strip dt[data-v-e657da2b]{color:var(--color-ink);font-size:12px;font-weight:680}.label-dimension-strip dd[data-v-e657da2b]{color:var(--color-muted);margin-top:3px;font-size:12px;line-height:1.45}.label-dimension-strip small[data-v-e657da2b]{color:var(--color-muted);margin-top:5px;font-size:12px;line-height:1.4;display:block}.label-guide-sheet[data-v-e657da2b]{gap:42px;margin-top:40px;display:grid}.label-guide-section[data-v-e657da2b]{border-top:1px solid var(--color-border);grid-template-columns:148px minmax(0,1fr);gap:26px;padding-top:28px;display:grid}.label-guide-section>header[data-v-e657da2b]{grid-template-columns:26px minmax(0,1fr);align-content:start;gap:9px;display:grid}.label-guide-section>header>span[data-v-e657da2b]{color:var(--color-accent);letter-spacing:.06em;font-size:12px;font-weight:650}.label-guide-section h3[data-v-e657da2b]{color:var(--color-ink);margin:0;font-size:15px;font-weight:650}.label-guide-section header p[data-v-e657da2b]{color:var(--color-muted);margin-top:5px;font-size:12px;line-height:1.45}.label-definition-list[data-v-e657da2b]{margin:0;display:grid}.label-definition-row[data-v-e657da2b]{grid-template-columns:116px minmax(0,1fr);align-items:start;gap:16px;padding:13px 0;display:grid}.label-definition-row+.label-definition-row[data-v-e657da2b]{border-top:1px solid var(--color-border)}.label-definition-row dt[data-v-e657da2b],.label-definition-row dd[data-v-e657da2b]{margin:0}.label-token[data-v-e657da2b]{--token:var(--color-faint);border:1px solid var(--color-border);border-radius:var(--radius-pill);width:max-content;max-width:100%;height:24px;color:var(--color-ink-soft);background:var(--color-surface);white-space:nowrap;align-items:center;gap:6px;padding:0 10px 0 8px;font-size:12px;font-weight:500;line-height:1;display:inline-flex}.label-token[data-v-e657da2b]:before{background:var(--token);content:"";border-radius:50%;flex:none;width:6px;height:6px}.profile-token[data-kind=taste][data-v-e657da2b]{--token:var(--aspect-taste)}.profile-token[data-kind=personality][data-v-e657da2b]{--token:var(--aspect-personality)}.profile-token[data-kind=judgment][data-v-e657da2b]{--token:var(--aspect-judgment)}.origin-token[data-v-e657da2b]{--token:var(--color-ink-soft)}.status-token[data-status=pending][data-v-e657da2b]{--token:var(--color-warning)}.status-token[data-status=agent-confirmed][data-v-e657da2b]{--token:var(--color-accent-line)}.status-token[data-status=confirmed][data-v-e657da2b]{--token:var(--color-success)}.label-definition-row strong[data-v-e657da2b]{color:var(--color-ink);font-size:13px;font-weight:650}.label-definition-row p[data-v-e657da2b]{color:var(--color-muted);margin-top:5px;font-size:12px;line-height:1.6}.quadrant-explainer[data-v-e657da2b]{grid-template-rows:auto 28px auto;grid-template-columns:36px minmax(0,1fr);display:grid}.quadrant-y-axis[data-v-e657da2b]{color:var(--color-muted);flex-direction:column;grid-row:1;justify-content:space-between;align-items:center;padding:3px 0;font-size:12px;display:flex}.quadrant-y-axis strong[data-v-e657da2b]{color:var(--color-muted);letter-spacing:.08em;text-orientation:upright;writing-mode:vertical-rl;font-size:12px;font-weight:650}.quadrant-grid[data-v-e657da2b]{border:1px solid var(--color-border);border-radius:var(--radius-control);grid-template-columns:repeat(2,minmax(0,1fr));display:grid;overflow:hidden}.quadrant-grid article[data-v-e657da2b]{background:0 0;min-height:108px;padding:13px 15px}.quadrant-grid article[data-v-e657da2b]:nth-child(2n){border-left:1px solid var(--color-border)}.quadrant-grid article[data-v-e657da2b]:nth-child(n+3){border-top:1px solid var(--color-border)}.quadrant-grid span[data-v-e657da2b]{color:var(--color-muted);font-size:12px}.quadrant-grid strong[data-v-e657da2b]{color:var(--color-ink);margin-top:6px;font-size:13px;font-weight:650;display:block}.quadrant-grid p[data-v-e657da2b]{max-width:340px;color:var(--color-muted);margin-top:5px;font-size:12px;line-height:1.5}.quadrant-x-axis[data-v-e657da2b]{color:var(--color-muted);grid-area:2/2;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;font-size:12px;display:grid}.quadrant-x-axis span[data-v-e657da2b]:last-child{text-align:right}.quadrant-x-axis strong[data-v-e657da2b]{color:var(--color-muted);letter-spacing:.08em;font-size:12px;font-weight:650}.quadrant-notes[data-v-e657da2b]{flex-wrap:wrap;grid-area:3/2;gap:6px 20px;padding-top:8px;display:flex}.quadrant-notes p[data-v-e657da2b],.status-boundaries p[data-v-e657da2b]{color:var(--color-muted);font-size:12px;line-height:1.5}.status-table-wrap[data-v-e657da2b]{min-width:0}.status-definition-table[data-v-e657da2b]{border-collapse:collapse;width:100%}.status-definition-table th[data-v-e657da2b],.status-definition-table td[data-v-e657da2b]{border-bottom:1px solid var(--color-border);color:var(--color-muted);text-align:left;vertical-align:top;padding:13px 12px;font-size:12px;line-height:1.55}.status-definition-table thead th[data-v-e657da2b]{color:var(--color-muted);padding-top:0;font-size:12px;font-weight:650}.status-definition-table tbody th[data-v-e657da2b]{padding-left:0}.status-definition-table tbody td[data-v-e657da2b]:last-child{padding-right:0}.status-definition-table td strong[data-v-e657da2b]{color:var(--color-ink);font-size:12px;font-weight:620}.status-boundaries[data-v-e657da2b]{flex-wrap:wrap;gap:6px 20px;padding-top:12px;display:flex}.label-example[data-v-e657da2b]{border-top:1px solid var(--color-border);grid-template-columns:minmax(180px,.8fr) auto minmax(200px,1fr);align-items:center;gap:18px;padding:20px 0 0;display:grid}.label-example>div[data-v-e657da2b]:first-child{gap:4px;display:grid}.label-example>div:first-child span[data-v-e657da2b]{color:var(--color-muted);letter-spacing:.08em;text-transform:uppercase;font-size:12px}.label-example>div:first-child strong[data-v-e657da2b]{color:var(--color-ink);font-size:12px;font-weight:620}.label-example-tags[data-v-e657da2b]{flex-wrap:wrap;justify-content:center;gap:6px;display:flex}.label-example>p[data-v-e657da2b]{color:var(--color-muted);font-size:12px;line-height:1.5}.label-all-note[data-v-e657da2b]{color:var(--color-muted);margin:0;font-size:12px;line-height:1.5}@media (width<=720px){.label-dimension-strip[data-v-e657da2b]{grid-template-columns:1fr}.label-dimension-strip article+article[data-v-e657da2b]{border-top:1px solid var(--color-border);border-left:0}.label-guide-sheet[data-v-e657da2b]{gap:34px;margin-top:32px}.label-guide-section[data-v-e657da2b]{grid-template-columns:1fr;gap:16px}.status-definition-table thead[data-v-e657da2b]{display:none}.status-definition-table[data-v-e657da2b],.status-definition-table tbody[data-v-e657da2b],.status-definition-table tr[data-v-e657da2b],.status-definition-table th[data-v-e657da2b],.status-definition-table td[data-v-e657da2b]{display:block}.status-definition-table tbody tr[data-v-e657da2b]{padding:15px 0}.status-definition-table tbody tr+tr[data-v-e657da2b]{border-top:1px solid var(--color-border)}.status-definition-table tbody th[data-v-e657da2b],.status-definition-table tbody td[data-v-e657da2b]{border:0;padding:0}.status-definition-table tbody td[data-v-e657da2b]{margin-top:9px}.status-definition-table tbody td[data-v-e657da2b]:before{color:var(--color-muted);content:attr(data-label);margin-bottom:2px;font-size:12px;font-weight:650;display:block}.label-example[data-v-e657da2b]{grid-template-columns:1fr;gap:12px}.label-example-tags[data-v-e657da2b]{justify-content:flex-start}}.open-source-credits[data-v-c9330c37]{min-width:0}.credit-grid[data-v-c9330c37]{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:24px 0 0;padding:0;list-style:none;display:grid}.credit-grid>li[data-v-c9330c37]{display:flex}.credit-card[data-v-c9330c37]{border:1px solid var(--color-border);border-radius:var(--radius-card);background:var(--color-surface);min-height:84px;color:inherit;transition:border-color var(--motion-fast), transform var(--motion-fast) var(--motion-ease);flex:1;grid-template-columns:44px minmax(0,1fr);align-items:center;gap:12px;padding:16px;text-decoration:none;display:grid;position:relative}.credit-card[data-v-c9330c37]:hover{border-color:var(--color-border-strong);transform:translateY(-2px)}.credit-card[data-v-c9330c37]:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.credit-mark[data-v-c9330c37]{background:var(--color-surface-subtle);border-radius:12px;place-items:center;width:44px;height:44px;display:grid}.credit-mark img[data-v-c9330c37]{object-fit:contain;width:30px;height:30px}.credit-mark.is-fallback[data-v-c9330c37]{color:var(--color-accent);background:var(--color-accent-soft);font-size:18px;font-weight:700}.credit-copy[data-v-c9330c37]{gap:3px;min-width:0;display:grid}.credit-copy strong[data-v-c9330c37],.credit-copy small[data-v-c9330c37]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.credit-copy strong[data-v-c9330c37]{color:var(--color-ink);font-size:14px;font-weight:650;line-height:1.3}.credit-copy small[data-v-c9330c37]{color:var(--color-muted);font-size:12px;line-height:1.4}.credit-arrow[data-v-c9330c37]{color:var(--color-accent);opacity:0;transition:opacity var(--motion-fast);font-size:13px;position:absolute;top:10px;right:12px}.credit-card:hover .credit-arrow[data-v-c9330c37],.credit-card:focus-visible .credit-arrow[data-v-c9330c37]{opacity:1}.credit-source-note[data-v-c9330c37]{color:var(--color-muted);margin-top:18px;font-size:12px;line-height:1.55}.fuli-finale[data-v-c9330c37]{border-top:1px solid var(--color-border);text-align:center;justify-items:center;gap:16px;margin-top:88px;padding-top:72px;display:grid}.finale-logo-plate[data-v-c9330c37]{background:var(--color-surface-subtle);border-radius:50%;place-items:center;width:72px;height:72px;display:grid}.finale-logo-plate img[data-v-c9330c37]{object-fit:contain;width:50px;height:50px}.finale-brand[data-v-c9330c37]{gap:4px;display:grid}.finale-brand strong[data-v-c9330c37]{color:var(--color-ink);letter-spacing:-.03em;font-size:24px;font-weight:650}.finale-brand span[data-v-c9330c37]{color:var(--color-muted);letter-spacing:.08em;text-transform:uppercase;font-size:12px}.fuli-finale>p[data-v-c9330c37]{max-width:420px;color:var(--color-muted);font-size:14px;line-height:1.65}.finale-site-link[data-v-c9330c37]{border-bottom:1px solid var(--color-accent);color:var(--color-accent);margin-top:4px;padding-bottom:4px;font-size:13px;text-decoration:none}.finale-site-link[data-v-c9330c37]:hover{border-color:var(--color-accent-hover);color:var(--color-accent-hover)}.finale-site-link[data-v-c9330c37]:focus-visible{outline:2px solid var(--color-accent);outline-offset:5px}@media (width<=980px){.credit-grid[data-v-c9330c37]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (prefers-reduced-motion:reduce){.credit-card[data-v-c9330c37]:hover{transform:none}}:root[data-motion=reduced] .credit-card[data-v-c9330c37]:hover{transform:none}@media (width<=680px){.credit-grid[data-v-c9330c37]{grid-template-columns:1fr}.credits-heading[data-v-c9330c37]{gap:12px}.fuli-finale[data-v-c9330c37]{margin-top:64px;padding-top:56px}}.product-principles[data-v-caaf4c60]{min-width:0}.principle-sequence[data-v-caaf4c60]{display:grid}.principle-sequence article[data-v-caaf4c60]{border-bottom:1px solid var(--color-border);grid-template-columns:34px minmax(0,1fr);align-content:start;gap:16px;padding:22px 0;display:grid}.principle-sequence article>span[data-v-caaf4c60]{color:var(--color-accent);letter-spacing:.06em;padding-top:3px;font-size:12px;font-weight:650}.principle-sequence h3[data-v-caaf4c60],.principle-boundaries h4[data-v-caaf4c60]{color:var(--color-ink);margin:0;font-size:15px;font-weight:680}.principle-sequence p[data-v-caaf4c60],.principle-boundaries p[data-v-caaf4c60]{color:var(--color-muted);margin-top:9px;font-size:13px;line-height:1.7}.principle-boundaries[data-v-caaf4c60]{padding-top:30px}.principle-boundaries>h3[data-v-caaf4c60]{color:var(--color-ink);margin:0;font-size:14px;font-weight:650}.principle-boundaries>div[data-v-caaf4c60]{grid-template-columns:repeat(3,minmax(0,1fr));margin-top:18px;display:grid}.principle-boundaries article[data-v-caaf4c60]{min-width:0;padding:0 20px}.principle-boundaries article[data-v-caaf4c60]:first-child{padding-left:0}.principle-boundaries article[data-v-caaf4c60]:last-child{padding-right:0}.principle-boundaries article+article[data-v-caaf4c60]{border-left:1px solid var(--color-border)}.principle-boundaries i[data-v-caaf4c60]{border:1.5px solid var(--color-muted);border-radius:50%;width:8px;height:8px;margin-bottom:12px;display:inline-block}.principle-boundaries i[data-boundary=authority][data-v-caaf4c60]{border-radius:2px}.principle-boundaries i[data-boundary=scope][data-v-caaf4c60]{border-radius:1px;transform:rotate(45deg)}@media (width<=680px){.principle-sequence article[data-v-caaf4c60]{gap:12px;padding:20px 0}.principle-boundaries>div[data-v-caaf4c60]{grid-template-columns:1fr;gap:20px}.principle-boundaries article[data-v-caaf4c60]{padding:0}.principle-boundaries article+article[data-v-caaf4c60]{border-top:1px solid var(--color-border);border-left:0;padding-top:20px}}.about-view[data-v-91d4f5d4]{min-height:0;color:var(--color-ink);background:var(--color-bg);flex:auto;padding:clamp(40px,6vw,72px) 28px 96px}.about-content[data-v-91d4f5d4]{gap:72px;width:min(760px,100%);margin:0 auto;display:grid}.about-opening[data-v-91d4f5d4]{border-bottom:1px solid var(--color-border);text-align:center;justify-items:center;gap:20px;padding:8px 0 56px;display:grid}.about-brand-lockup[data-v-91d4f5d4]{justify-items:center;gap:11px;display:grid}.about-logo-plate[data-v-91d4f5d4]{background:var(--color-surface-subtle);border-radius:50%;place-items:center;width:68px;height:68px;display:grid}.about-logo-plate img[data-v-91d4f5d4]{object-fit:contain;width:48px;height:48px}.about-brand-name[data-v-91d4f5d4]{color:var(--color-ink);letter-spacing:-.02em;font-size:18px;font-weight:700}.about-opening-claim[data-v-91d4f5d4]{max-width:660px;color:var(--color-ink);letter-spacing:-.035em;text-wrap:balance;font-size:clamp(26px,4.2vw,36px);font-weight:650;line-height:1.18}.about-opening-copy[data-v-91d4f5d4]{max-width:620px;color:var(--color-muted);font-size:15px;line-height:1.8}.about-labels-section[data-v-91d4f5d4]{gap:32px;display:grid}@media (width<=680px){.about-view[data-v-91d4f5d4]{padding:32px 20px 64px}.about-content[data-v-91d4f5d4]{gap:56px}.about-opening[data-v-91d4f5d4]{padding-bottom:44px}.about-opening-copy[data-v-91d4f5d4]{font-size:14px}}
@@ -0,0 +1 @@
1
+ import{B as e,C as t,E as n,H as r,O as i,T as a,_ as o,b as s,dt as c,ft as l,it as u,mt as d,o as f,y as p}from"./i18n-DAeCdA8L.js";import{t as m}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as h}from"./fuli-logo-Bu9WBuQe.js";var g={class:`about-section-heading`},ee=[`id`],_=m(i({__name:`AboutSectionHeading`,props:{titleId:{},title:{},description:{}},setup(n){return(r,i)=>(e(),t(`header`,g,[s(`h2`,{id:n.titleId},d(n.title),9,ee),s(`p`,null,d(n.description),1)]))}}),[[`__scopeId`,`data-v-99ca5811`]]),v=[`aria-label`],y={class:`label-dimension-strip`},b=[`data-dimension`],x={class:`label-guide-sheet`},S={class:`label-guide-section profile-guide`},C={class:`label-definition-list`},w=[`data-kind`],T={class:`label-guide-section quadrant-guide`},E={class:`quadrant-explainer`},D={class:`quadrant-y-axis`,"aria-hidden":`true`},O=[`aria-label`],k=[`data-quadrant`],A={class:`quadrant-x-axis`,"aria-hidden":`true`},j={class:`quadrant-notes`},M={class:`label-guide-section confirmation-guide`},N={class:`status-table-wrap`},P={class:`status-definition-table`},F={scope:`col`},I={scope:`col`},L={scope:`col`},R={scope:`row`},z=[`data-status`],B=[`data-label`],V=[`data-label`],H={class:`status-boundaries`},U={class:`label-example`},W={class:`label-example-tags`,"aria-hidden":`true`},te={class:`label-token profile-token`,"data-kind":`taste`},G={class:`label-token origin-token`},K={class:`label-token status-token`,"data-status":`confirmed`},q={class:`label-all-note`},J=m(i({__name:`LabelGuide`,setup(n){let i=p(()=>[{key:`profile`,title:f(`about.dimensions.profile.title`),question:f(`about.dimensions.profile.question`),timing:f(`about.dimensions.profile.timing`)},{key:`origin`,title:f(`about.dimensions.origin.title`),question:f(`about.dimensions.origin.question`),timing:f(`about.dimensions.origin.timing`)},{key:`confirmation`,title:f(`about.dimensions.confirmation.title`),question:f(`about.dimensions.confirmation.question`),timing:f(`about.dimensions.confirmation.timing`)}]),l=p(()=>[{key:`taste`,label:f(`about.profiles.taste.label`),short:f(`about.profiles.taste.short`),description:f(`about.profiles.taste.description`)},{key:`personality`,label:f(`about.profiles.personality.label`),short:f(`about.profiles.personality.short`),description:f(`about.profiles.personality.description`)},{key:`judgment`,label:f(`about.profiles.judgment.label`),short:f(`about.profiles.judgment.short`),description:f(`about.profiles.judgment.description`)}]),u=p(()=>[{key:`known-unknown`,label:f(`about.quadrants.knownUnknown.label`),coordinate:f(`about.quadrants.knownUnknown.coordinate`),description:f(`about.quadrants.knownUnknown.description`)},{key:`known-known`,label:f(`about.quadrants.knownKnown.label`),coordinate:f(`about.quadrants.knownKnown.coordinate`),description:f(`about.quadrants.knownKnown.description`)},{key:`unknown-unknown`,label:f(`about.quadrants.unknownUnknown.label`),coordinate:f(`about.quadrants.unknownUnknown.coordinate`),description:f(`about.quadrants.unknownUnknown.description`)},{key:`unknown-known`,label:f(`about.quadrants.unknownKnown.label`),coordinate:f(`about.quadrants.unknownKnown.coordinate`),description:f(`about.quadrants.unknownKnown.description`)}]),m=p(()=>[{key:`pending`,label:f(`about.statuses.pending.label`),description:f(`about.statuses.pending.description`),rule:f(`about.statuses.pending.rule`)},{key:`agent-confirmed`,label:f(`about.statuses.agentConfirmed.label`),description:f(`about.statuses.agentConfirmed.description`),rule:f(`about.statuses.agentConfirmed.rule`)},{key:`confirmed`,label:f(`about.statuses.confirmed.label`),description:f(`about.statuses.confirmed.description`),rule:f(`about.statuses.confirmed.rule`)}]);return(n,p)=>(e(),t(`section`,{class:`label-guide`,"aria-label":c(f)(`about.labelsAria`)},[s(`div`,y,[(e(!0),t(o,null,r(i.value,n=>(e(),t(`article`,{key:n.key,"data-dimension":n.key},[p[0]||=s(`i`,{"aria-hidden":`true`},null,-1),s(`dl`,null,[s(`dt`,null,d(n.title),1),s(`dd`,null,[a(d(n.question)+` `,1),s(`small`,null,d(n.timing),1)])])],8,b))),128))]),s(`div`,x,[s(`section`,S,[s(`header`,null,[s(`span`,null,d(c(f)(`about.sections.profile.index`)),1),s(`div`,null,[s(`h3`,null,d(c(f)(`about.sections.profile.title`)),1),s(`p`,null,d(c(f)(`about.sections.profile.meta`)),1)])]),s(`dl`,C,[(e(!0),t(o,null,r(l.value,n=>(e(),t(`div`,{key:n.key,class:`label-definition-row`},[s(`dt`,null,[s(`span`,{class:`label-token profile-token`,"data-kind":n.key},d(n.label),9,w)]),s(`dd`,null,[s(`strong`,null,d(n.short),1),s(`p`,null,d(n.description),1)])]))),128))])]),s(`section`,T,[s(`header`,null,[s(`span`,null,d(c(f)(`about.sections.origin.index`)),1),s(`div`,null,[s(`h3`,null,d(c(f)(`about.sections.origin.title`)),1),s(`p`,null,d(c(f)(`about.sections.origin.meta`)),1)])]),s(`div`,E,[s(`div`,D,[s(`span`,null,d(c(f)(`about.quadrants.aware`)),1),s(`strong`,null,d(c(f)(`about.quadrants.awareness`)),1),s(`span`,null,d(c(f)(`about.quadrants.unaware`)),1)]),s(`div`,{class:`quadrant-grid`,role:`group`,"aria-label":c(f)(`about.sections.origin.title`)},[(e(!0),t(o,null,r(u.value,n=>(e(),t(`article`,{key:n.key,"data-quadrant":n.key},[s(`span`,null,d(n.coordinate),1),s(`strong`,null,d(n.label),1),s(`p`,null,d(n.description),1)],8,k))),128))],8,O),s(`div`,A,[s(`span`,null,d(c(f)(`about.quadrants.unmastered`)),1),s(`strong`,null,d(c(f)(`about.quadrants.mastery`)),1),s(`span`,null,d(c(f)(`about.quadrants.mastered`)),1)]),s(`div`,j,[s(`p`,null,d(c(f)(`about.quadrants.immutable`)),1),s(`p`,null,d(c(f)(`about.quadrants.unclassified`)),1)])])]),s(`section`,M,[s(`header`,null,[s(`span`,null,d(c(f)(`about.sections.confirmation.index`)),1),s(`div`,null,[s(`h3`,null,d(c(f)(`about.sections.confirmation.title`)),1),s(`p`,null,d(c(f)(`about.sections.confirmation.meta`)),1)])]),s(`div`,N,[s(`table`,P,[s(`thead`,null,[s(`tr`,null,[s(`th`,F,d(c(f)(`about.sections.confirmation.title`)),1),s(`th`,I,d(c(f)(`about.statuses.descriptionHeader`)),1),s(`th`,L,d(c(f)(`about.statuses.entryCondition`)),1)])]),s(`tbody`,null,[(e(!0),t(o,null,r(m.value,n=>(e(),t(`tr`,{key:n.key,class:`status-definition-row`},[s(`th`,R,[s(`span`,{class:`label-token status-token`,"data-status":n.key},d(n.label),9,z)]),s(`td`,{"data-label":c(f)(`about.statuses.descriptionHeader`)},d(n.description),9,B),s(`td`,{"data-label":c(f)(`about.statuses.entryCondition`)},[s(`strong`,null,d(n.rule),1)],8,V)]))),128))])]),s(`div`,H,[s(`p`,null,d(c(f)(`about.statuses.usageBoundary`)),1),s(`p`,null,d(c(f)(`about.statuses.resetBoundary`)),1)])])]),s(`section`,U,[s(`div`,null,[s(`span`,null,d(c(f)(`about.example.title`)),1),s(`strong`,null,d(c(f)(`about.example.item`)),1)]),s(`div`,W,[s(`span`,te,d(c(f)(`about.example.profile`)),1),s(`span`,G,d(c(f)(`about.example.origin`)),1),s(`span`,K,d(c(f)(`about.example.status`)),1)]),s(`p`,null,d(c(f)(`about.example.description`)),1)]),s(`p`,q,d(c(f)(`about.allFilter`)),1)])],8,v))}}),[[`__scopeId`,`data-v-e657da2b`]]),Y={class:`open-source-credits`,"aria-labelledby":`credits-title`},X={class:`credit-grid`},Z=[`href`,`data-credit`],Q=[`src`,`onError`],ne={key:1,"aria-hidden":`true`},re={class:`credit-copy`},ie=[`title`],ae={class:`credit-source-note`},oe={class:`fuli-finale`},se={class:`finale-logo-plate`},ce=[`src`],le={class:`finale-brand`},ue={class:`finale-site-link`,"data-testid":`about-website-link`,href:`https://xn--8ovp9s.xn--m8txu.com/fuli/`,target:`_blank`,rel:`noreferrer`},de=m(i({__name:`OpenSourceCredits`,setup(i){let a=u(new Set),m=p(()=>[{name:`Vue.js`,role:f(`about.credits.roles.vue`),url:`https://vuejs.org/`,logo:`https://raw.githubusercontent.com/vuejs/docs/main/src/public/logo.svg`},{name:`Vite`,role:f(`about.credits.roles.vite`),url:`https://vite.dev/`,logo:`https://raw.githubusercontent.com/vitejs/vite/main/docs/public/logo-without-border.svg`},{name:`Pinia`,role:f(`about.credits.roles.pinia`),url:`https://pinia.vuejs.org/`,logo:`https://raw.githubusercontent.com/vuejs/pinia/v4/packages/docs/public/logo.svg`},{name:`D3.js`,role:f(`about.credits.roles.d3`),url:`https://d3js.org/`,logo:`https://raw.githubusercontent.com/d3/d3-logo/master/d3.svg`},{name:`Vitest`,role:f(`about.credits.roles.vitest`),url:`https://vitest.dev/`,logo:`https://raw.githubusercontent.com/vitest-dev/vitest/main/docs/public/logo-without-border.svg`},{name:`Hono`,role:f(`about.credits.roles.hono`),url:`https://hono.dev/`,logo:`https://raw.githubusercontent.com/honojs/website/main/public/images/logo.svg`},{name:`Neo4j`,role:f(`about.credits.roles.neo4j`),url:`https://neo4j.com/`,logo:`https://avatars.githubusercontent.com/u/201120?v=4`},{name:`Zod`,role:f(`about.credits.roles.zod`),url:`https://zod.dev/`,logo:`https://raw.githubusercontent.com/colinhacks/zod/main/packages/docs/public/logo/logo_square.png`},{name:`FastAPI`,role:f(`about.credits.roles.fastapi`),url:`https://fastapi.tiangolo.com/`,logo:`https://raw.githubusercontent.com/fastapi/fastapi/master/docs/en/docs/img/favicon.png`},{name:`Graphiti`,role:f(`about.credits.roles.graphiti`),url:`https://github.com/getzep/graphiti`,logo:`https://avatars.githubusercontent.com/u/132832125?s=128&v=4`},{name:`MCP`,role:f(`about.credits.roles.mcp`),url:`https://modelcontextprotocol.io/`,logo:`https://raw.githubusercontent.com/modelcontextprotocol/docs/main/favicon.svg`}]);return(i,u)=>(e(),t(`section`,Y,[n(_,{"title-id":`credits-title`,title:c(f)(`about.credits.title`),description:c(f)(`about.credits.description`)},null,8,[`title`,`description`]),s(`ul`,X,[(e(!0),t(o,null,r(m.value,n=>(e(),t(`li`,{key:n.name},[s(`a`,{class:`credit-card`,href:n.url,target:`_blank`,rel:`noreferrer`,"data-credit":n.name},[s(`span`,{class:l([`credit-mark`,{"is-fallback":a.has(n.name)}])},[a.has(n.name)?(e(),t(`span`,ne,d(n.name.charAt(0)),1)):(e(),t(`img`,{key:0,src:n.logo,alt:``,loading:`lazy`,referrerpolicy:`no-referrer`,onError:e=>a.add(n.name)},null,40,Q))],2),s(`span`,re,[s(`strong`,{title:n.name},d(n.name),9,ie),s(`small`,null,d(n.role),1)]),u[0]||=s(`span`,{class:`credit-arrow`,"aria-hidden":`true`},`↗`,-1)],8,Z)]))),128))]),s(`p`,ae,d(c(f)(`about.credits.sourceNote`)),1),s(`footer`,oe,[s(`span`,se,[s(`img`,{src:c(h),alt:``,"aria-hidden":`true`},null,8,ce)]),s(`div`,le,[s(`strong`,null,d(c(f)(`common.brand`)),1),u[1]||=s(`span`,null,`Context Graph`,-1)]),s(`p`,null,d(c(f)(`about.credits.finale`)),1),s(`a`,ue,d(c(f)(`about.credits.website`)),1)])]))}}),[[`__scopeId`,`data-v-c9330c37`]]),fe={class:`product-principles`,"aria-labelledby":`principles-title`},pe={class:`principle-sequence`},me={class:`principle-boundaries`},he=[`data-boundary`],ge=m(i({__name:`ProductPrinciples`,setup(i){let a=p(()=>[{key:`capture`,index:f(`about.philosophy.capture.index`),title:f(`about.philosophy.capture.title`),description:f(`about.philosophy.capture.description`)},{key:`project`,index:f(`about.philosophy.project.index`),title:f(`about.philosophy.project.title`),description:f(`about.philosophy.project.description`)},{key:`review`,index:f(`about.philosophy.review.index`),title:f(`about.philosophy.review.title`),description:f(`about.philosophy.review.description`)},{key:`reuse`,index:f(`about.philosophy.reuse.index`),title:f(`about.philosophy.reuse.title`),description:f(`about.philosophy.reuse.description`)}]),l=p(()=>[{key:`local`,title:f(`about.philosophy.local.title`),description:f(`about.philosophy.local.description`)},{key:`authority`,title:f(`about.philosophy.authority.title`),description:f(`about.philosophy.authority.description`)},{key:`scope`,title:f(`about.philosophy.scope.title`),description:f(`about.philosophy.scope.description`)}]);return(i,u)=>(e(),t(`section`,fe,[n(_,{"title-id":`principles-title`,title:c(f)(`about.philosophy.sectionTitle`),description:c(f)(`about.philosophy.support`)},null,8,[`title`,`description`]),s(`div`,pe,[(e(!0),t(o,null,r(a.value,n=>(e(),t(`article`,{key:n.key},[s(`span`,null,d(n.index),1),s(`div`,null,[s(`h3`,null,d(n.title),1),s(`p`,null,d(n.description),1)])]))),128))]),s(`div`,me,[s(`h3`,null,d(c(f)(`about.philosophy.boundariesTitle`)),1),s(`div`,null,[(e(!0),t(o,null,r(l.value,n=>(e(),t(`article`,{key:n.key},[s(`i`,{"data-boundary":n.key,"aria-hidden":`true`},null,8,he),s(`h4`,null,d(n.title),1),s(`p`,null,d(n.description),1)]))),128))])])]))}}),[[`__scopeId`,`data-v-caaf4c60`]]),_e=[`aria-label`],ve={class:`about-content`},ye={class:`about-opening`},be={class:`about-brand-lockup`},$={class:`about-logo-plate`},xe=[`src`],Se={class:`about-brand-name`},Ce={class:`about-opening-claim`},we={class:`about-opening-copy`},Te={class:`about-labels-section`,"aria-labelledby":`about-labels-title`},Ee=m(i({__name:`AboutPage`,setup(r){return(r,i)=>(e(),t(`section`,{class:`view about-view`,"aria-label":c(f)(`about.aria`)},[s(`div`,ve,[s(`header`,ye,[s(`div`,be,[s(`span`,$,[s(`img`,{"data-testid":`about-opening-logo`,src:c(h),alt:``,"aria-hidden":`true`},null,8,xe)]),s(`span`,Se,d(c(f)(`common.brand`)),1)]),s(`p`,Ce,d(c(f)(`about.philosophy.title`)),1),s(`p`,we,d(c(f)(`about.philosophy.intro`)),1)]),n(ge),s(`section`,Te,[n(_,{"title-id":`about-labels-title`,title:c(f)(`about.labelsIntro.title`),description:c(f)(`about.labelsIntro.description`)},null,8,[`title`,`description`]),n(J)]),n(de)])],8,_e))}}),[[`__scopeId`,`data-v-91d4f5d4`]]);export{Ee as default};
@@ -0,0 +1 @@
1
+ import{B as e,O as t,T as n,X as r,dt as i,mt as a,x as o}from"./i18n-DAeCdA8L.js";import{t as s}from"./vue-router-YsTpOqqM.js";import{t as c}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as l}from"./profile-model-BQO4zNs9.js";var u=c(t({__name:`AgentName`,props:{spaceId:{},agentId:{},name:{}},setup(t){return(c,u)=>(e(),o(i(s),{class:`agent-name-link`,to:i(l)(t.spaceId,t.agentId)},{default:r(()=>[n(a(t.name),1)]),_:1},8,[`to`]))}}),[[`__scopeId`,`data-v-4c868995`]]);export{u as t};
@@ -0,0 +1 @@
1
+ .activity-origin-badge[data-v-8e8c076b]{color:var(--color-muted);background:var(--color-surface-subtle)}.agent-occupation-editor[data-v-acfb86ae]{gap:var(--space-3,12px);display:grid}.agent-occupation-editor h3[data-v-acfb86ae],.agent-occupation-editor p[data-v-acfb86ae]{margin:0}.agent-occupation-tags[data-v-acfb86ae]{border:0;flex-wrap:wrap;gap:6px;margin:0;padding:0;display:flex}.agent-occupation-tags legend[data-v-acfb86ae]{margin-bottom:6px;padding:0;font-weight:600}.agent-occupation-tags button[aria-pressed=true][data-v-acfb86ae]{color:var(--color-accent);border-color:var(--color-accent);background:var(--color-accent-soft)}.agent-occupation-editor .primary-button[data-v-acfb86ae]{justify-self:start}.occupation-chip[data-v-6314de26]{border:1px solid var(--color-border);border-radius:var(--radius-pill);height:24px;color:var(--color-ink-soft);background:var(--color-surface);font:inherit;cursor:pointer;align-items:center;padding:0 10px;font-size:12px;display:inline-flex}.occupation-chip.is-main[data-v-6314de26]{border-color:var(--color-accent-line);color:var(--color-accent);background:var(--color-accent-soft)}.occupation-chip[data-v-6314de26]:hover{border-color:var(--color-border-strong)}.occupation-chip[data-v-6314de26]:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.occupation-chip-detail[data-v-6314de26]{gap:6px;max-width:280px;display:grid}.occupation-chip-detail strong[data-v-6314de26]{font-size:14px}.occupation-chip-detail p[data-v-6314de26]{color:var(--color-ink-soft);margin:0;font-size:13px;line-height:1.6}.occupation-chip-detail small[data-v-6314de26]{color:var(--color-faint);font-size:12px}.occupation-chip-detail a[data-v-6314de26]{color:var(--color-accent);font-size:12px}.agent-portrait.agent-identity[data-v-e79efe2b]{color:var(--agent-identity,var(--color-accent));background:var(--agent-identity-soft,var(--color-accent-soft))}.agent-portrait.agent-identity[data-v-e79efe2b]:has(img){box-shadow:0 0 0 2px var(--agent-identity,transparent)}
@@ -0,0 +1 @@
1
+ import{B as e,C as t,E as n,H as r,J as i,O as a,P as o,R as s,S as c,T as l,X as u,Z as d,_ as f,b as p,dt as m,ft as h,g,m as _,mt as v,o as y,ot as b,p as x,pt as S,x as C,y as w}from"./i18n-DAeCdA8L.js";import{n as T,t as E}from"./console-2nhA6IaV.js";import{m as D}from"./useApi-CROJJdhE-BJn8l1Cb.js";import{t as O}from"./vue-router-YsTpOqqM.js";import{o as k,r as A,s as j}from"./client-DBYe0KzE.js";import{t as M}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{r as N}from"./ui-WHqcW6KK.js";import{t as ee}from"./UiSelect-BaVTdhtR.js";import{t as P}from"./avatars-CUyfvsKO.js";import{t as F}from"./agent-identity-color-RqpT7gtx.js";import{a as I,r as te,t as L}from"./profile-model-BQO4zNs9.js";import{a as ne,h as R,l as re,n as ie}from"./task-evidence-i9SDhd3E.js";import{n as ae}from"./useAgentRecords-DotFATN2.js";import{n as oe}from"./paths-CDREouhi.js";import{t as se}from"./UiDisclosure-BIE3uXrx.js";import{t as ce}from"./AgentName-DeHNVQ-r.js";import{i as le,n as z,t as ue}from"./occupation-catalog-DnevywIk.js";import{i as B,n as V,r as H,t as U}from"./agent-occupation-Bke7eg11.js";import{n as de,t as fe}from"./TaskExecutionPlan-CFM_14VC.js";import{a as pe,i as me,n as he}from"./agent-work-summary-C53Zfzk5.js";import{a as ge,s as _e}from"./catalog-CmHt1ONG.js";import{t as ve}from"./project-team-api-CXPeakuM.js";/* empty css */var W=[`title`],ye=M(a({__name:`ActivityOriginBadge`,props:{origin:{}},setup(n){return(r,i)=>n.origin?.kind===`ai_internal`?(e(),t(`span`,{key:0,class:`ui-badge activity-origin-badge`,"data-activity-origin":``,title:m(y)(`agentProfiles.activityOrigin.sources.${n.origin.source}`)},v(m(y)(`agentProfiles.activityOrigin.label`,{purpose:m(y)(`agentProfiles.activityOrigin.purposes.${n.origin.purpose}`)})),9,W)):c(``,!0)}}),[[`__scopeId`,`data-v-8e8c076b`]]),G={key:1,class:`agent-locked-platforms`},K={key:2,class:`agent-platform-field`},q=[`disabled`,`placeholder`],J=[`onUpdate:modelValue`,`disabled`],Y={key:3,role:`alert`},X={key:4,role:`status`},be=a({__name:`AgentProfileSettings`,props:{agent:{}},emits:[`saved`],setup(a,{emit:o}){let s=a,h=o,_=b([]),S=b(!1),E=b(!1),D=b(``),O=b(!1),M=``,N=b(``),P=b(``),F=b({judgment:``,taste:``,personality:``}),I=w(()=>s.agent.profile.executorPolicy?.mode===`locked`),te=w(()=>{let e=s.agent.profile.executorPolicy;return(e?.lockedExecutorIds?.length?e.lockedExecutorIds:(e?.allowList??[]).map(e=>e.executorId)).map(e=>_.value.find(t=>t.executorId===e)?.displayName||e)}),L=w(()=>_.value.filter(e=>e.registrationStatus===`registered`&&e.permissionStatus===`authorized`&&e.preflightStatus===`passed`&&e.workspacePermission&&e.healthStatus!==`unhealthy`&&(!e.healthRequired||e.healthStatus===`healthy`))),ne=w(()=>[{value:``,label:y(`agentProfiles.automatic`)},...N.value&&!L.value.some(e=>e.executorId===N.value)?[{value:N.value,label:y(`agentProfiles.platformUnavailable`),disabled:!0}]:[],...L.value.map(e=>({value:e.executorId,label:e.displayName||e.executorId}))]),R=0;i(()=>`${s.agent.personalSpaceId}/${s.agent.agentId}`,async()=>{let e=s.agent,t=++R;P.value=e.profile.expectations??``,F.value={judgment:``,taste:``,personality:``,...e.profile.character},N.value=e.profile.executorPolicy?.preferredExecutorIds?.[0]??``,M=N.value,D.value=``,O.value=!1,E.value=!1,S.value=!0,_.value=[];try{let n=await A(`/api/executors?${new URLSearchParams({personalSpaceId:e.personalSpaceId})}`);t===R&&(_.value=Array.isArray(n)?n:n.executors)}catch{t===R&&(D.value=y(`agentProfiles.platformUnavailable`))}finally{t===R&&(S.value=!1)}},{immediate:!0});async function re(){if(E.value)return;let e=R,t=s.agent;E.value=!0,D.value=``,O.value=!1;let n=t.profile.executorPolicy;try{let r=await k(`/api/project-agents`,{personalSpaceId:t.personalSpaceId,personalProjectId:t.personalProjectId??null,agentId:t.agentId,profile:{...t.profile,character:{...F.value},expectations:P.value,executorPolicy:I.value||N.value===M?n:{...n,mode:`flexible`,preferredExecutorIds:N.value?[N.value]:[]}}});e===R&&(M=N.value,h(`saved`,r),O.value=!0)}catch(t){e===R&&(D.value=t instanceof Error?t.message:y(`agentProfiles.saveError`))}finally{e===R&&(E.value=!1)}}return(i,a)=>(e(),t(`form`,{class:`agent-simple-settings`,onSubmit:g(re,[`prevent`])},[p(`h3`,null,v(m(y)(`agentProfiles.settings`)),1),S.value?(e(),C(j,{key:0,variant:`compact`,label:m(y)(`agentProfiles.settingsLoading`)},null,8,[`label`])):I.value?(e(),t(`div`,G,[p(`h4`,null,v(m(y)(`agentProfiles.platform`)),1),p(`p`,null,v(te.value.join(` · `)||m(y)(`agentProfiles.platformUnavailable`)),1),p(`small`,null,v(m(y)(`agentProfiles.locked`)),1)])):(e(),t(`div`,K,[n(ee,{modelValue:N.value,"onUpdate:modelValue":a[0]||=e=>N.value=e,field:``,label:m(y)(`agentProfiles.platform`),options:ne.value,disabled:I.value||E.value},null,8,[`modelValue`,`label`,`options`,`disabled`]),p(`small`,null,v(m(y)(I.value?`agentProfiles.locked`:`agentProfiles.platformHint`)),1)])),p(`label`,null,[l(v(m(y)(`agentProfiles.expectations`)),1),d(p(`textarea`,{"onUpdate:modelValue":a[1]||=e=>P.value=e,rows:`3`,maxlength:`4096`,disabled:E.value,placeholder:m(y)(`agentProfiles.expectationsPlaceholder`)},null,8,q),[[x,P.value]])]),p(`details`,null,[p(`summary`,null,v(m(y)(`agentProfiles.editCharacter`)),1),(e(),t(f,null,r([`judgment`,`taste`,`personality`],e=>p(`label`,{key:e},[l(v(m(y)(`agentProfiles.${e}`)),1),d(p(`textarea`,{"onUpdate:modelValue":t=>F.value[e]=t,rows:`2`,maxlength:`2048`,disabled:E.value},null,8,J),[[x,F.value[e]]])])),64))]),D.value?(e(),t(`p`,Y,v(D.value),1)):c(``,!0),O.value?(e(),t(`p`,X,v(m(y)(`agentProfiles.saved`)),1)):c(``,!0),n(T,{size:`sm`,variant:`primary`,disabled:E.value||S.value,type:`submit`},{default:u(()=>[E.value?(e(),C(j,{key:0,variant:`inline`,label:m(y)(`agentProfiles.saving`)},null,8,[`label`])):(e(),t(f,{key:1},[l(v(m(y)(`agentProfiles.save`)),1)],64))]),_:1},8,[`disabled`])],32))}}),xe={key:0,class:`agent-occupation-editor`,"data-occupation-locked":``},Se={class:`ui-meta`},Ce={class:`ui-meta`},Z=[`disabled`],we={class:`ui-meta`},Te={key:0,class:`agent-occupation-main`},Ee={key:0,role:`alert`},De={key:1,role:`status`},Oe=M(a({__name:`AgentOccupationEditor`,props:{agent:{}},emits:[`saved`],setup(a,{emit:o}){let s=a,d=o,h=b(``),_=b([]),x=b(!1),S=b(``),E=b(!1);i(()=>s.agent.occupation,e=>{h.value=e?.role??``,_.value=(e?.tags??[]).filter(t=>t!==e?.role)},{immediate:!0}),i(h,e=>{e&&(_.value=_.value.filter(t=>t!==e))});let D=le(w(()=>s.agent.personalSpaceId)),O=w(()=>{let e=D.active.value.map(e=>e.key),t=[s.agent.occupation?.role,...s.agent.occupation?.tags??[]].filter(e=>!!e);return[...new Set([...e.length?e:U,...t])]}),k=e=>{let t=z(e);return t?ue(t):void 0},A=w(()=>[{value:``,label:y(`agentRedesign.occupation.none`)},...O.value.map(e=>({value:e,label:V(e)}))]);function M(e){E.value=!1,_.value=_.value.includes(e)?_.value.filter(t=>t!==e):[..._.value,e]}async function N(){x.value=!0,S.value=``,E.value=!1;try{let e=await B(s.agent.personalSpaceId,s.agent.agentId,{role:h.value||null,tags:_.value});d(`saved`,e),E.value=!0}catch(e){S.value=e instanceof Error?e.message:y(`agentRedesign.occupation.saveError`)}finally{x.value=!1}}return(i,o)=>a.agent.occupationLocked?(e(),t(`section`,xe,[p(`h3`,null,v(m(y)(`agentRedesign.occupation.title`)),1),p(`p`,Se,v(m(y)(`agentRedesign.occupation.locked`,{occupation:m(H)(a.agent.occupation).join(` · `)||m(y)(`agentRedesign.occupation.none`)})),1)])):(e(),t(`form`,{key:1,class:`agent-occupation-editor`,"data-occupation-editor":``,onSubmit:g(N,[`prevent`])},[p(`h3`,null,v(m(y)(`agentRedesign.occupation.title`)),1),p(`p`,Ce,v(m(y)(`agentRedesign.occupation.note`)),1),n(ee,{modelValue:h.value,"onUpdate:modelValue":[o[0]||=e=>h.value=e,o[1]||=e=>E.value=!1],field:``,label:m(y)(`agentRedesign.occupation.role`),options:A.value,disabled:x.value},null,8,[`modelValue`,`label`,`options`,`disabled`]),p(`fieldset`,{class:`agent-occupation-tags`,disabled:x.value},[p(`legend`,null,[l(v(m(y)(`agentRedesign.occupation.tags`))+` `,1),p(`small`,we,v(m(y)(`agentRedesign.occupation.tagsHint`)),1)]),(e(!0),t(f,null,r(O.value,n=>(e(),C(T,{size:`sm`,variant:`ghost`,key:n,"data-occupation-tag":n,"aria-pressed":_.value.includes(n),disabled:n===h.value||!_.value.includes(n)&&_.value.length>=m(5),title:n===h.value?m(y)(`agentRedesign.occupation.isMainRole`):k(n),onClick:e=>M(n)},{default:u(()=>[l(v(m(V)(n)),1),n===h.value?(e(),t(`small`,Te,` · `+v(m(y)(`agentRedesign.occupation.mainRoleShort`)),1)):c(``,!0)]),_:2},1032,[`data-occupation-tag`,`aria-pressed`,`disabled`,`title`,`onClick`]))),128))],8,Z),S.value?(e(),t(`p`,Ee,v(S.value),1)):c(``,!0),E.value?(e(),t(`p`,De,v(m(y)(`agentRedesign.occupation.saved`)),1)):c(``,!0),n(T,{size:`sm`,variant:`primary`,type:`submit`,disabled:x.value},{default:u(()=>[x.value?(e(),C(j,{key:0,variant:`inline`,label:m(y)(`agentRedesign.occupation.saving`)},null,8,[`label`])):(e(),t(f,{key:1},[l(v(m(y)(`agentRedesign.occupation.save`)),1)],64))]),_:1},8,[`disabled`])],32))}}),[[`__scopeId`,`data-v-acfb86ae`]]),Q=[`aria-expanded`,`data-occupation`],ke={class:`occupation-chip-detail`,"data-occupation-detail":``},Ae={key:0},je=M(a({__name:`OccupationChip`,props:{occupationKey:{},main:{type:Boolean}},setup(r){let i=r,a=b(null),o=w(()=>z(i.occupationKey)),s=w(()=>V(i.occupationKey));function d(e){a.value=e.currentTarget.getBoundingClientRect()}return(i,g)=>(e(),t(f,null,[p(`button`,{type:`button`,class:h([`occupation-chip`,{"is-main":r.main}]),"aria-expanded":!!a.value,"data-occupation":r.occupationKey,onClick:d},v(s.value),11,Q),n(m(N),{open:!!a.value,anchor:a.value,label:s.value,onClose:g[1]||=e=>a.value=null},{default:u(()=>[p(`div`,ke,[p(`strong`,null,v(s.value),1),p(`p`,null,v(o.value?m(ue)(o.value):m(y)(`occupations.noDescription`)),1),o.value?(e(),t(`small`,Ae,v(m(y)(`occupations.agentCount`,{count:o.value.agent_count})),1)):c(``,!0),n(m(O),{to:`/project-agents/occupations`,onClick:g[0]||=e=>a.value=null},{default:u(()=>[l(v(m(y)(`occupations.manage`)),1)]),_:1})])]),_:1},8,[`open`,`anchor`,`label`])],64))}}),[[`__scopeId`,`data-v-6314de26`]]),Me=[`aria-label`],Ne={key:1,class:`ui-card ui-empty agent-profile-empty`,role:`alert`},Pe={key:2,class:`ui-card ui-empty agent-profile-empty`},Fe={class:`ui-card agent-resume-header`},Ie=[`src`],Le={class:`agent-resume-intro`},Re={class:`agent-resume-name-row`},ze={key:0,class:`ui-badge fla-employee-number`},Be={class:`agent-resume-occupation`,"data-profile-occupation":``},Ve={key:1,class:`ui-meta`},He={class:`agent-resume-meta`},Ue={class:`agent-profile-actions`},We={key:1,class:`agent-profile-refresh-status`,role:`status`},Ge=[`aria-label`],Ke=[`id`,`aria-selected`,`aria-controls`,`tabindex`,`onClick`,`onKeydown`],qe={key:5,class:`agent-profile-partial`,role:`status`},Je=[`aria-hidden`],Ye={class:`agent-profile-primary-grid`},Xe={class:`ui-card agent-resume-section agent-current-work-section`},Ze={class:`agent-section-heading`},Qe={key:0},$e={key:0,class:`agent-current-work-list`},et={class:`ui-badge`},tt={key:1,class:`agent-muted`},nt={key:2,class:`agent-muted`},rt={class:`ui-card agent-resume-section agent-projects-section`},it={class:`agent-section-heading`},at={class:`agent-resume-list agent-current-project-list`},ot={key:0,class:`agent-project-responsibility`},st={class:`agent-resume-list`},ct={key:0,class:`agent-project-responsibility`},lt={key:1,class:`agent-muted`},ut=[`aria-hidden`],dt={class:`ui-card agent-resume-section`},ft={key:0,class:`ui-disclosure`,open:``},pt={class:`agent-resume-list`},mt={key:1,class:`agent-muted`},ht={class:`ui-card agent-resume-section`},gt={class:`agent-muted`},_t={class:`agent-work-timeline`},vt={class:`agent-section-heading`},yt={key:0},bt={key:0},xt={key:0},St={key:0,class:`agent-muted`},Ct=[`aria-hidden`],wt={class:`ui-card agent-resume-section`},Tt={class:`agent-character`},Et={key:0,class:`agent-expectation`},Dt={class:`agent-strengths`},Ot={class:`agent-inline-skills`},kt={key:0},At=[`aria-hidden`],jt={class:`ui-card agent-resume-section`},Mt={class:`agent-section-heading`},Nt={key:0,role:`status`},Pt={key:0,class:`agent-org-lead-unavailable`,role:`status`},Ft={key:1,class:`agent-org-lead`},It={key:2,class:`agent-org-reporting`},Lt={key:3,class:`agent-org-members`},Rt={key:2,class:`agent-muted`},zt={key:0,class:`agent-muted`},Bt={class:`ui-card agent-resume-section`},Vt={class:`agent-collaborators`},Ht={key:0,class:`agent-muted`},Ut=[`aria-hidden`],Wt={class:`ui-card agent-resume-section`},Gt=[`aria-hidden`],Kt={class:`ui-card agent-resume-section agent-management-card`},qt={class:`agent-muted`},Jt={class:`agent-profile-management-links`},Yt=M(a({__name:`AgentProfilePage`,setup(a){let g=D(),x=E(),k=w(()=>x.activePersonalSpace?.id??``),M=w(()=>g.params.spaceId===k.value?String(g.params.agentId??``):``),N=ae(k,w(()=>M.value?[M.value]:[])),{loading:ee,error:z}=N,ue=()=>N.load({force:!0}),B=w(()=>M.value?N.records.value[M.value]:void 0),V=w(()=>(x.state?.personalProjects??[]).filter(e=>e.personal_space_id===k.value)),H=e=>V.value.find(t=>t.project_id===e)?.profile.name||e,U=b([]),W=b(void 0),G=b([]),K=b(!1),q=b(!1),J=b(!1),Y=b(`overview`),X=w(()=>{let e=[{id:`overview`,label:y(`agentProfiles.working`)},{id:`history`,label:y(`agentProfiles.experience`)},{id:`style`,label:y(`agentProfiles.about`)},{id:`collaborators`,label:y(`agentProfiles.collaborators`)},{id:`management`,label:y(`agentProfiles.advanced`)}];return B.value?.memoryScope===`reviewed_agent`&&e.splice(4,0,{id:`conversations`,label:y(`projectAgents.conversations.title`)}),e}),xe=w(()=>B.value?te(B.value.agentId,U.value):[]),Se=ae(k,w(()=>xe.value.map(e=>e.agentId))),Ce=e=>{let t=Se.records.value[e];return t?L(t):e},Z=w(()=>B.value?I({...B.value,assignments:W.value??B.value.assignments}):[]),we=w(()=>V.value.filter(e=>Z.value.includes(e.project_id)).map(e=>({id:e.project_id,name:e.profile.name}))),Te=w(()=>Z.value.slice(0,4)),Ee=w(()=>Z.value.slice(4)),De=w(()=>(W.value??[]).filter(e=>e.status!==`active`)),Q=w(()=>U.value.filter(e=>pe.has(e.status)).slice(0,6)),ke=w(()=>{let e=B.value?.occupation;return e?[...new Set([...e.role?[e.role]:[],...e.tags])]:[]});le(w(()=>B.value?.personalSpaceId??``));let Ae=w(()=>ge.value.find(e=>e.agentId===B.value?.agentId)),Yt=w(()=>Ae.value?.id===`bole`),$=e=>e&&!Number.isNaN(Date.parse(e))?new Date(e).toLocaleDateString():y(`agentProfiles.timeUnknown`),Xt=e=>{let t=W.value?.find(t=>t.personalProjectId===e&&t.status===`active`)?.responsibility?.trim(),n=B.value?.profile.responsibility.trim();return t&&t!==n?t:``},Zt=w(()=>{let e=`agentRedesign.projects.more`,t=y(e,{count:Z.value.length});return t===e?`All projects (${Z.value.length})`:t}),Qt=0;i(()=>B.value?`${B.value.personalSpaceId}/${B.value.agentId}`:``,async()=>{let e=B.value,t=++Qt;if(U.value=[],W.value=void 0,G.value=[],q.value=!1,K.value=!1,J.value=!1,Y.value=`overview`,!e)return;_e(e.personalSpaceId),K.value=!0,W.value=e.assignments;let n=new URLSearchParams({personalSpaceId:e.personalSpaceId,agentId:e.agentId}),r=new URLSearchParams({personalSpaceId:e.personalSpaceId,agentId:e.agentId}),i=await Promise.allSettled([A(`/api/project-agent-tasks?${n}&limit=200`),A(`/api/project-agent-assignments?${r}`)]);if(t!==Qt)return;let[a,o]=i;if(a.status===`fulfilled`){let t=a.value,n=R(t);q.value=!he(t),U.value=ie(Array.isArray(t)?t:n.tasks??n.items).map(re).filter(t=>!!(t&&(!t.personalSpaceId||t.personalSpaceId===e.personalSpaceId)&&me(t,e.agentId))).sort((e,t)=>(t.updatedAt??t.createdAt??``).localeCompare(e.updatedAt??e.createdAt??``))}else q.value=!0;if(o.status===`fulfilled`){let t=o.value,n=R(t);W.value=ie(Array.isArray(t)?t:n.assignments??n.items).map(t=>ne(t,e)).filter(t=>!!(t&&t.agentId===e.agentId&&t.personalSpaceId===e.personalSpaceId))}else q.value=!0;let s=I({...e,assignments:W.value??e.assignments}),c=await Promise.all(s.map(async t=>{try{return{projectId:t,view:await ve(e.personalSpaceId,t),error:!1}}catch{return{projectId:t,view:null,error:!0}}}));t===Qt&&(G.value=c,K.value=!1)},{immediate:!0});function $t(e){B.value&&N.put(M.value,{...B.value,...e})}function en(e){Y.value=e}function tn(e,t){let n=e.key;if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(n))return;let r=e.currentTarget;e.preventDefault();let i=X.value.length,a=n===`Home`?0:n===`End`?i-1:(t+(n===`ArrowRight`?1:-1)+i)%i,s=X.value[a];s&&(en(s.id),o(()=>{let e=(r?.closest(`[role="tablist"]`))?.querySelectorAll(`[role="tab"]`)[a];e?.focus(),e?.scrollIntoView?.({block:`nearest`,inline:`nearest`})}))}return s(()=>{x.runtimeStatus===`idle`&&x.refresh()}),(i,a)=>(e(),t(`section`,{class:`view agent-profile-page`,"aria-label":m(y)(`agentProfiles.profile`)},[n(m(O),{class:`agent-profile-back`,to:`/project-agents`},{default:u(()=>[l(` ← `+v(m(y)(`agentProfiles.back`)),1)]),_:1}),(m(ee)||m(x).runtimeStatus===`loading`)&&!B.value?(e(),C(j,{key:0,label:m(y)(`agentProfiles.loading`)},null,8,[`label`])):(m(z)||m(x).runtimeStatus===`error`)&&!B.value?(e(),t(`div`,Ne,[p(`p`,null,v(m(z)||m(y)(`agentProfiles.loadError`)),1),n(T,{size:`sm`,variant:`ghost`,onClick:a[0]||=e=>m(x).state?ue():m(x).refresh()},{default:u(()=>[l(v(m(y)(`agentProfiles.retry`)),1)]),_:1})])):B.value?(e(),t(f,{key:3},[p(`header`,Fe,[p(`span`,{class:`agent-portrait agent-identity`,style:S(m(F)(B.value.agentId)),"aria-hidden":`true`},[m(P)(B.value.agentId)?(e(),t(`img`,{key:0,src:m(P)(B.value.agentId),alt:``},null,8,Ie)):(e(),t(f,{key:1},[l(v(B.value.profile.occupationEmoji||m(L)(B.value).slice(0,1)),1)],64))],4),p(`div`,Le,[p(`div`,Re,[p(`h1`,null,v(m(L)(B.value)),1),B.value.employeeNumber?(e(),t(`span`,ze,`FLA `+v(B.value.employeeNumber),1)):c(``,!0),p(`span`,{class:h([`ui-badge agent-profile-membership`,`is-${B.value.profile.status}`])},v(m(y)(`projectAgents.status.${B.value.profile.status}`)),3)]),p(`p`,Be,[ke.value.length?(e(!0),t(f,{key:0},r(ke.value,(t,n)=>(e(),C(je,{key:t,"occupation-key":t,main:n===0&&!!B.value.occupation?.role},null,8,[`occupation-key`,`main`]))),128)):(e(),t(`span`,Ve,v(m(y)(`agentRedesign.occupation.notSet`)),1))]),p(`p`,null,v(B.value.profile.responsibility),1),p(`div`,He,[p(`span`,null,v(m(y)(B.value.recruitedAt?`agentProfiles.joined`:`agentProfiles.created`))+` · `+v($(B.value.recruitedAt||B.value.createdAt)),1)])]),p(`div`,Ue,[Ae.value?(e(),C(m(O),{key:0,class:`quiet-button`,to:`/employees/${encodeURIComponent(Ae.value.id)}`},{default:u(()=>[l(v(m(y)(`agentProfiles.workbench`)),1)]),_:1},8,[`to`])):c(``,!0),n(T,{size:`sm`,variant:`ghost`,"aria-expanded":J.value,onClick:a[1]||=e=>J.value=!J.value},{default:u(()=>[l(v(m(y)(`agentProfiles.settings`)),1)]),_:1},8,[`aria-expanded`]),Yt.value?c(``,!0):(e(),C(m(O),{key:1,class:`quiet-button`,to:{path:`/employees/bole`,query:{q:m(L)(B.value)}}},{default:u(()=>[l(v(m(y)(`agentProfiles.askHR`)),1)]),_:1},8,[`to`]))])]),m(ee)||m(x).runtimeStatus===`loading`?(e(),C(j,{key:0,variant:`compact`,label:m(y)(`agentProfiles.loading`)},null,8,[`label`])):c(``,!0),m(z)?(e(),t(`p`,We,v(m(z)),1)):c(``,!0),J.value?(e(),C(be,{key:B.value.agentId,agent:B.value,onSaved:$t},null,8,[`agent`])):c(``,!0),J.value&&B.value.profile.status!==`archived`?(e(),C(Oe,{key:`occupation-${B.value.agentId}`,agent:B.value,onSaved:$t},null,8,[`agent`])):c(``,!0),K.value?(e(),C(j,{key:4,variant:`compact`,label:m(y)(`agentProfiles.detailLoading`)},null,8,[`label`])):c(``,!0),p(`nav`,{class:`agent-profile-tabs`,role:`tablist`,"aria-label":m(y)(`agentProfiles.profile`)},[(e(!0),t(f,null,r(X.value,n=>(e(),t(`button`,{id:`agent-tab-${n.id}`,key:n.id,class:`agent-profile-tab`,type:`button`,role:`tab`,"aria-selected":Y.value===n.id,"aria-controls":`agent-panel-${n.id}`,tabindex:Y.value===n.id?0:-1,onClick:e=>en(n.id),onKeydown:e=>tn(e,X.value.findIndex(e=>e.id===n.id))},v(n.label),41,Ke))),128))],8,Ge),q.value?(e(),t(`p`,qe,v(m(y)(`agentProfiles.partial`)),1)):c(``,!0),d(p(`section`,{id:`agent-panel-overview`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-overview`,"aria-hidden":Y.value!==`overview`,tabindex:`0`},[p(`div`,Ye,[p(`section`,Xe,[p(`div`,Ze,[p(`h2`,null,v(m(y)(`agentProfiles.working`)),1),Q.value.length?(e(),t(`span`,Qe,v(Q.value.length),1)):c(``,!0)]),Q.value.length?(e(),t(`ul`,$e,[(e(!0),t(f,null,r(Q.value,r=>(e(),t(`li`,{key:r.taskId},[n(m(O),{to:{path:`/project-agents/manage`,query:{agent:B.value.agentId,task:r.taskId}}},{default:u(()=>[l(v(r.title),1)]),_:2},1032,[`to`]),p(`span`,et,v(m(y)(`projectAgents.taskStatus.${r.status}`)),1),n(ye,{origin:r.activityOrigin},null,8,[`origin`]),n(fe,{task:r,"personal-space-id":k.value,active:Y.value===`overview`},null,8,[`task`,`personal-space-id`,`active`])]))),128))])):!K.value&&!q.value?(e(),t(`p`,tt,v(m(y)(`agentProfiles.idle`)),1)):K.value?c(``,!0):(e(),t(`p`,nt,v(m(y)(`agentProfiles.partial`)),1))]),p(`section`,rt,[p(`div`,it,[p(`h2`,null,v(m(y)(`agentProfiles.projects`)),1),p(`span`,null,v(Z.value.length),1)]),p(`ul`,at,[(e(!0),t(f,null,r(Te.value,r=>(e(),t(`li`,{key:r,class:`agent-project-item`},[p(`h3`,null,[n(m(O),{class:`agent-project-link`,to:m(oe)(k.value,`overview`,r)},{default:u(()=>[l(v(H(r)),1)]),_:2},1032,[`to`])]),Xt(r)?(e(),t(`p`,ot,v(Xt(r)),1)):c(``,!0)]))),128))]),Ee.value.length?(e(),C(se,{key:0,class:`agent-project-overflow`,title:Zt.value},{default:u(()=>[p(`ul`,st,[(e(!0),t(f,null,r(Ee.value,r=>(e(),t(`li`,{key:r,class:`agent-project-item`},[p(`h3`,null,[n(m(O),{class:`agent-project-link`,to:m(oe)(k.value,`overview`,r)},{default:u(()=>[l(v(H(r)),1)]),_:2},1032,[`to`])]),Xt(r)?(e(),t(`p`,ct,v(Xt(r)),1)):c(``,!0)]))),128))])]),_:1},8,[`title`])):c(``,!0),!K.value&&!Z.value.length?(e(),t(`p`,lt,v(m(y)(`agentProfiles.noProject`)),1)):c(``,!0)])])],8,Je),[[_,Y.value===`overview`]]),d(p(`section`,{id:`agent-panel-history`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-history`,"aria-hidden":Y.value!==`history`,tabindex:`0`},[p(`section`,dt,[p(`h2`,null,v(m(y)(`agentProfiles.projects`)),1),De.value.length?(e(),t(`details`,ft,[p(`summary`,null,v(m(y)(`agentProfiles.projectHistory`)),1),p(`ul`,pt,[(e(!0),t(f,null,r(De.value,r=>(e(),t(`li`,{key:r.assignmentId},[p(`h3`,null,[n(m(O),{class:`agent-project-link`,to:m(oe)(k.value,`overview`,r.personalProjectId)},{default:u(()=>[l(v(H(r.personalProjectId)),1)]),_:2},1032,[`to`])]),p(`p`,null,v(r.responsibility),1),p(`small`,null,v($(r.assignedAt))+` – `+v($(r.endedAt)),1)]))),128))])])):K.value?c(``,!0):(e(),t(`p`,mt,v(m(y)(`agentProfiles.noProject`)),1))]),p(`section`,ht,[p(`h2`,null,v(m(y)(`agentProfiles.experience`)),1),p(`p`,gt,v(m(y)(`agentProfiles.recent`)),1),p(`ol`,_t,[(e(!0),t(f,null,r(U.value.slice(0,12),r=>(e(),t(`li`,{key:r.taskId},[p(`div`,vt,[n(m(O),{to:{path:`/project-agents/manage`,query:{agent:B.value.agentId,task:r.taskId}}},{default:u(()=>[l(v(r.title),1)]),_:2},1032,[`to`]),p(`span`,null,v(m(y)(`projectAgents.taskStatus.${r.status}`)),1),n(ye,{origin:r.activityOrigin},null,8,[`origin`])]),r.resultSummary?(e(),t(`p`,yt,v(r.resultSummary),1)):c(``,!0),p(`small`,null,v($(r.completedAt||r.updatedAt||r.createdAt)),1)]))),128)),B.value.recruitedAt||B.value.recruitmentReason?(e(),t(`li`,bt,[p(`h3`,null,v(m(y)(`agentProfiles.recruitment`)),1),B.value.recruitmentReason?(e(),t(`p`,xt,v(B.value.recruitmentReason),1)):c(``,!0),p(`small`,null,v($(B.value.recruitedAt)),1)])):c(``,!0)]),!K.value&&!U.value.length&&!B.value.recruitmentReason&&!B.value.recruitedAt?(e(),t(`p`,St,v(m(y)(`agentProfiles.noExperience`)),1)):c(``,!0)])],8,ut),[[_,Y.value===`history`]]),d(p(`section`,{id:`agent-panel-style`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-style`,"aria-hidden":Y.value!==`style`,tabindex:`0`},[p(`section`,wt,[p(`h2`,null,v(m(y)(`agentProfiles.about`)),1),p(`div`,Tt,[(e(),t(f,null,r([`judgment`,`taste`,`personality`],e=>p(`div`,{key:e},[p(`h3`,null,v(m(y)(`agentProfiles.${e}`)),1),p(`p`,{class:h({"agent-muted":!B.value.profile.character?.[e]})},v(B.value.profile.character?.[e]||m(y)(`agentProfiles.characterEmpty`)),3)])),64))]),B.value.profile.expectations?(e(),t(`p`,Et,[p(`strong`,null,v(m(y)(`agentProfiles.expectations`)),1),l(` `+v(B.value.profile.expectations),1)])):c(``,!0),p(`div`,Dt,[p(`h3`,null,v(m(y)(`agentProfiles.strengths`)),1),p(`div`,Ot,[(e(!0),t(f,null,r(B.value.profile.capabilities,n=>(e(),t(`span`,{key:n},v(n),1))),128)),B.value.profile.capabilities.length?c(``,!0):(e(),t(`span`,kt,v(m(y)(`agentProfiles.noSkills`)),1))])])])],8,Ct),[[_,Y.value===`style`]]),d(p(`section`,{id:`agent-panel-collaborators`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-collaborators`,"aria-hidden":Y.value!==`collaborators`,tabindex:`0`},[p(`section`,jt,[p(`div`,Mt,[p(`h2`,null,v(m(y)(`agentProfiles.organization`)),1),Yt.value?c(``,!0):(e(),C(m(O),{key:0,to:{path:`/employees/bole`,query:{q:m(L)(B.value)}}},{default:u(()=>[l(v(m(y)(`agentProfiles.hr`)),1)]),_:1},8,[`to`]))]),(e(!0),t(f,null,r(G.value,i=>(e(),t(`div`,{key:i.projectId,class:`agent-organization`},[p(`h3`,null,v(H(i.projectId)),1),i.error?(e(),t(`p`,Nt,v(m(y)(`agentProfiles.teamUnavailable`)),1)):i.view&&(i.view.lead||i.view.unavailableLead||i.view.members.length)?(e(),t(f,{key:1},[i.view.unavailableLead?(e(),t(`p`,Pt,v(i.view.unavailableLead.name?m(y)(`agentProfiles.leadUnavailable`,{name:i.view.unavailableLead.name}):m(y)(`agentProfiles.leadUnavailableUnnamed`)),1)):c(``,!0),i.view.lead?(e(),t(`div`,Ft,[p(`span`,null,v(m(y)(`agentProfiles.lead`)),1),n(ce,{"space-id":k.value,"agent-id":i.view.lead.agentId,name:i.view.lead.name},null,8,[`space-id`,`agent-id`,`name`])])):c(``,!0),i.view.lead?(e(),t(`p`,It,v(m(y)(`agentProfiles.reporting`)),1)):c(``,!0),i.view.members.length?(e(),t(`div`,Lt,[p(`span`,null,v(m(y)(`agentProfiles.teammates`)),1),p(`ul`,null,[(e(!0),t(f,null,r(i.view.members,r=>(e(),t(`li`,{key:r.agentId},[n(ce,{"space-id":k.value,"agent-id":r.agentId,name:r.name},null,8,[`space-id`,`agent-id`,`name`])]))),128))])])):c(``,!0)],64)):(e(),t(`p`,Rt,v(m(y)(`agentProfiles.teamUnset`)),1))]))),128)),!K.value&&!G.value.length?(e(),t(`p`,zt,v(m(y)(`agentProfiles.noProject`)),1)):c(``,!0)]),p(`section`,Bt,[p(`h2`,null,v(m(y)(`agentProfiles.collaborators`)),1),p(`ul`,Vt,[(e(!0),t(f,null,r(xe.value,r=>(e(),t(`li`,{key:r.agentId},[n(ce,{"space-id":k.value,"agent-id":r.agentId,name:Ce(r.agentId)},null,8,[`space-id`,`agent-id`,`name`]),p(`span`,null,v(m(y)(`agentProfiles.sharedTasks`,{count:r.count})),1)]))),128))]),!K.value&&!xe.value.length?(e(),t(`p`,Ht,v(m(y)(`agentProfiles.noCollaborators`)),1)):c(``,!0)])],8,At),[[_,Y.value===`collaborators`]]),B.value.memoryScope===`reviewed_agent`?d((e(),t(`section`,{key:6,id:`agent-panel-conversations`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-conversations`,"aria-hidden":Y.value!==`conversations`,tabindex:`0`},[p(`section`,Wt,[(e(),C(de,{key:B.value.agentId,"personal-space-id":k.value,"agent-id":B.value.agentId,projects:we.value},null,8,[`personal-space-id`,`agent-id`,`projects`]))])],8,Ut)),[[_,Y.value===`conversations`]]):c(``,!0),d(p(`section`,{id:`agent-panel-management`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-management`,"aria-hidden":Y.value!==`management`,tabindex:`0`},[p(`section`,Kt,[p(`h2`,null,v(m(y)(`agentProfiles.advanced`)),1),p(`p`,qt,v(m(y)(`agentProfiles.locked`)),1),p(`div`,Jt,[n(m(O),{class:`quiet-button`,"data-open-management":``,to:{path:`/project-agents/manage`,query:{agent:B.value.agentId}}},{default:u(()=>[l(v(m(y)(`agentProfiles.openManagement`)),1)]),_:1},8,[`to`])])])],8,Gt),[[_,Y.value===`management`]])],64)):(e(),t(`p`,Pe,v(m(y)(`agentProfiles.unavailable`)),1))],8,Me))}}),[[`__scopeId`,`data-v-e79efe2b`]]);export{Yt as default};
@@ -0,0 +1 @@
1
+ import{B as e,C as t,E as n,H as r,I as i,J as a,M as o,N as s,O as c,P as l,R as u,S as d,T as f,U as p,X as m,Z as h,_ as g,b as _,dt as v,ft as y,g as b,h as x,m as S,mt as C,n as ee,o as w,ot as T,p as E,pt as te,q as ne,x as D,y as O}from"./i18n-DAeCdA8L.js";import{n as k,t as re}from"./console-2nhA6IaV.js";import{h as ie,m as ae}from"./useApi-CROJJdhE-BJn8l1Cb.js";import{a as A,t as j}from"./vue-router-YsTpOqqM.js";import{r as M,s as N}from"./client-DBYe0KzE.js";import{t as P}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{i as oe,n as se}from"./agent-pins-DrG1uUDt.js";import{t as ce}from"./UiIconButton-w6pfBSda.js";import{t as le}from"./UiSegmented-wN76K7F9.js";import{t as F}from"./UiSelect-BaVTdhtR.js";import{t as I}from"./avatars-CUyfvsKO.js";import{t as ue}from"./agent-identity-color-RqpT7gtx.js";import{a as de,i as fe,n as pe,t as L}from"./profile-model-BQO4zNs9.js";import{h as me}from"./task-evidence-i9SDhd3E.js";import{t as he}from"./useAgentRecords-DotFATN2.js";import{n as R}from"./paths-CDREouhi.js";import{t as z}from"./AgentName-DeHNVQ-r.js";import{r as B}from"./agent-occupation-Bke7eg11.js";import{i as ge,n as _e}from"./project-origin-KvE_J110.js";import{n as V,r as H,s as U,t as W}from"./agent-work-summary-C53Zfzk5.js";import{a as ve,s as G}from"./catalog-CmHt1ONG.js";import{t as K}from"./project-team-api-CXPeakuM.js";/* empty css */import{t as ye}from"./UnassignedConversationsPanel-0y0YliA_.js";import{n as be,t as xe}from"./EmployeeRecruitDialog-CbakSlIK.js";import{t as Se}from"./ProjectAgentFirstTask-BVNcBsw9.js";function Ce(e,t=Date.now()){return`-${Math.floor(t%e)}ms`}var we=[`aria-label`,`title`],Te=P(c({__name:`BackToTop`,props:{scroller:{},threshold:{default:600}},setup(n){let r=n,o=T(!1);function s(){o.value=(r.scroller?.scrollTop??0)>r.threshold}a(()=>r.scroller,(e,t)=>{t?.removeEventListener(`scroll`,s),e?.addEventListener(`scroll`,s,{passive:!0}),s()},{immediate:!0}),i(()=>r.scroller?.removeEventListener(`scroll`,s));function c(){r.scroller&&(r.scroller.scrollTop=0),s()}return(n,r)=>o.value?(e(),t(`button`,{key:0,type:`button`,class:`back-to-top`,"data-back-to-top":``,"aria-label":v(w)(`ui.backToTop`),title:v(w)(`ui.backToTop`),onClick:c},[...r[0]||=[_(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,"aria-hidden":`true`},[_(`path`,{d:`M6 15l6-6 6 6`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.2`,"stroke-linecap":`round`,"stroke-linejoin":`round`})],-1)]],8,we)):d(``,!0)}}),[[`__scopeId`,`data-v-dceeb77d`]]);function Ee(e,t,n=600){let r=T(!1),o=null;function s(){o?.disconnect(),o=null}return a([e,t],([e,t])=>{s(),r.value=!1,!(!e||typeof IntersectionObserver>`u`)&&(o=new IntersectionObserver(e=>{r.value=e.some(e=>e.isIntersecting)},{root:t,rootMargin:`0px 0px ${n}px 0px`}),o.observe(e))},{immediate:!0,flush:`post`}),i(s),r}var q=new Map;function De(e,t,n){let r=!1;A(()=>{e.value&&q.set(t,e.value.scrollTop)}),a(n,async n=>{if(!n||r)return;r=!0;let i=q.get(t);q.delete(t),i!==void 0&&(await l(),e.value&&(e.value.scrollTop=i))},{immediate:!0})}var Oe=[`all`,`active`,`inactive`,`archived`],ke=[`agents`,`projects`],J=[`q`,`project`,`status`,`view`];function Y(e){return(Array.isArray(e)?e:[e]).filter(e=>typeof e==`string`&&e!==``)}function Ae(e,t,n){return e.includes(t??``)?t:n}function je(e){return{search:Y(e.q)[0]??``,projects:[...new Set(Y(e.project))],status:Ae(Oe,Y(e.status)[0],`all`),view:Ae(ke,Y(e.view)[0],`agents`)}}function Me(e,t){let n=Object.fromEntries(Object.entries(e).filter(([e])=>!J.includes(e))),r=t.search.trim();return r&&(n.q=r),t.projects.length&&(n.project=[...t.projects]),t.status!==`all`&&(n.status=t.status),t.view!==`agents`&&(n.view=t.view),n}function Ne(e,t){return e.search.trim()===t.search.trim()&&e.status===t.status&&e.view===t.view&&e.projects.length===t.projects.length&&e.projects.every((e,n)=>e===t.projects[n])}var Pe=new Set([`loading`,`unreported`,`unavailable`]);function Fe(e,t,n,r,i=[],a=!1){let o=new Set(r.filter(e=>!i.length||i.includes(e))),s=new Map,c=e=>{let t=s.get(e);return t||(t={projectId:e,agentIds:[],runningCount:0,unknownCount:0},s.set(e,t)),t};if(typeof a==`boolean`?a:a?.includeEmpty)for(let e of r)o.has(e)&&c(e);for(let r of e){let e=t(r).filter(e=>o.has(e)),i=n(r);for(let t of e){let e=c(t);e.agentIds.push(r),i===`running`&&(e.runningCount+=1),(!i||Pe.has(i))&&(e.unknownCount+=1)}}let l=new Map(r.map((e,t)=>[e,t]));return[...s.values()].sort((e,t)=>(l.get(e.projectId)??2**53-1)-(l.get(t.projectId)??2**53-1)||e.projectId.localeCompare(t.projectId))}var Ie=[`data-directory-project`],Le=[`aria-expanded`,`aria-controls`],Re={class:`directory-project-heading`},X={class:`directory-project-name`},ze={key:0,class:`ui-meta directory-project-purpose`,"data-project-purpose":``},Be={class:`ui-meta directory-project-summary`},Ve={class:`directory-project-header-lead`,"data-project-header-lead":``},He={key:0,class:`directory-project-occupations`,"data-project-member-occupations":``},Ue={class:`ui-meta directory-project-counts`},Z=[`id`],We={key:0,class:`directory-project-lead`,"data-project-lead":``},Ge={key:1,role:`alert`},Ke={key:2},qe={class:`ui-meta`},Je={key:3,class:`ui-meta`},Ye=c({__name:`DirectoryProjectGroup`,props:o({spaceId:{},projectId:{},name:{},purpose:{},agents:{},count:{},runningCount:{},unknownCount:{}},{expanded:{type:Boolean,default:!1},expandedModifiers:{}}),emits:[`update:expanded`],setup(r){let i=r,o=ne(r,`expanded`),s=T(null),c=T(!1),l=T(!1),u=0,h=O(()=>`directory-project-${i.projectId??`unassigned`}`),y=O(()=>i.projectId&&i.spaceId?R(i.spaceId,`overview`,i.projectId):null),b=O(()=>{if(s.value?.lead?.name)return s.value.lead.name;let e=(i.agents??[]).find(e=>e.occupation?.role===`lead`||e.profile.agentType===`coordinator`);return e?e.profile.displayName||e.profile.name:null}),x=O(()=>{let e=new Set,t=[];for(let n of i.agents??[]){let r=B(n.occupation)[0];if(!r)continue;let i=n.profile.occupationEmoji?.trim(),a=i?`${i} ${r}`:r;e.has(a)||(e.add(a),t.push(a))}return t});async function S(){if(!i.projectId||!i.spaceId)return;let e=++u;c.value=!0,l.value=!1;try{let t=await K(i.spaceId,i.projectId);e===u&&(s.value=t)}catch{e===u&&(l.value=!0)}finally{e===u&&(c.value=!1)}}return a(()=>[i.spaceId,i.projectId],()=>{u+=1,s.value=null,c.value=!1,l.value=!1,o.value&&S()}),a(o,e=>{e&&!s.value&&!c.value&&S()},{immediate:!0}),(i,a)=>(e(),t(`section`,{class:`directory-project`,"data-directory-project":r.projectId??``},[_(`button`,{type:`button`,class:`directory-project-toggle`,"aria-expanded":o.value,"aria-controls":h.value,onClick:a[0]||=e=>o.value=!o.value},[_(`span`,Re,[_(`span`,X,C(r.name),1),r.purpose?(e(),t(`span`,ze,C(r.purpose),1)):d(``,!0)]),_(`span`,Be,[_(`span`,Ve,C(b.value?v(w)(`agentRedesign.projectView.lead`,{name:b.value}):v(w)(`agentRedesign.projectView.leadUnset`)),1),x.value.length?(e(),t(`span`,He,` · `+C(x.value.join(` · `)),1)):d(``,!0)]),_(`span`,Ue,[f(C(v(w)(`agentRedesign.projectView.members`,{count:r.count}))+` `,1),r.runningCount?(e(),t(g,{key:0},[f(` · `+C(v(w)(`agentRedesign.projectView.running`,{count:r.runningCount})),1)],64)):d(``,!0),r.unknownCount?(e(),t(g,{key:1},[f(` · `+C(v(w)(`agentRedesign.projectView.unknown`,{count:r.unknownCount})),1)],64)):d(``,!0)]),a[1]||=_(`svg`,{class:`directory-project-chevron`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[_(`path`,{d:`m6 9 6 6 6-6`})],-1)],8,Le),o.value?(e(),t(`div`,{key:0,id:h.value,class:`directory-project-body`},[r.projectId?(e(),t(`div`,We,[c.value?(e(),D(N,{key:0,variant:`inline`,label:v(w)(`agentRedesign.projectView.loadingLead`)},null,8,[`label`])):l.value?(e(),t(`p`,Ge,[f(C(v(w)(`agentRedesign.projectView.leadFailed`))+` `,1),n(k,{size:`sm`,variant:`ghost`,onClick:S},{default:m(()=>[f(C(v(w)(`agentProfiles.retry`)),1)]),_:1})])):s.value?.lead?(e(),t(`p`,Ke,[_(`span`,qe,C(v(w)(`projects.overview.lead`)),1),n(z,{"space-id":r.spaceId,"agent-id":s.value.lead.agentId,name:s.value.lead.name},null,8,[`space-id`,`agent-id`,`name`])])):s.value?(e(),t(`p`,Je,C(s.value.status===`lead_unavailable`?v(w)(`projects.overview.leadUnavailableUnnamed`):v(w)(`projects.overview.noLead`)),1)):d(``,!0),y.value?(e(),D(v(j),{key:4,class:`quiet-button`,to:y.value},{default:m(()=>[f(C(v(w)(`agentRedesign.projectView.openProject`)),1)]),_:1},8,[`to`])):d(``,!0)])):d(``,!0),p(i.$slots,`default`)],8,Z)):d(``,!0)],8,Ie))}}),Xe={viewBox:`0 0 1024 1024`,width:`18`,height:`18`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`},Ze=[`d`],Q=`M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3a33.23 33.23 0 0 0-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 0 0-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8zM666.2 549.3l-24.5 24.5 3.8 34.4a259.92 259.92 0 0 1-30.4 153.9L262 408.8c12.9-7.1 26.3-13.1 40.3-17.9 27.2-9.4 55.7-14.1 84.7-14.1 9.6 0 19.3.5 28.9 1.6l34.4 3.8 24.5-24.5L608.5 224 800 415.5 666.2 549.3z`,$=`M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3-15.4 12.3-16.6 35.4-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 0 0-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8z`,Qe=c({__name:`PinIcon`,props:{filled:{type:Boolean,default:!1}},setup(n){return(r,i)=>(e(),t(`svg`,Xe,[_(`path`,{d:n.filled?$:Q},null,8,Ze)]))}}),$e=T(Date.now()),et=0,tt;function nt(e=6e4){return et+=1,tt||=($e.value=Date.now(),setInterval(()=>{$e.value=Date.now()},e)),i(()=>{--et,!et&&tt&&(clearInterval(tt),tt=void 0)}),$e}var rt=6e4,it=60*rt,at=24*it;function ot(e,t,n=Date.now()){let r=e?Date.parse(e):NaN;if(Number.isNaN(r)||r>n)return null;let i=n-r,[a,o]=i<it?[`minute`,rt]:i<2*at?[`hour`,it]:[`day`,at];return new Intl.NumberFormat(t,{style:`unit`,unit:a,unitDisplay:`long`}).format(Math.max(1,Math.floor(i/o)))}var st=[[`second`,60],[`minute`,60],[`hour`,24],[`day`,30],[`month`,12],[`year`,1/0]];function ct(e,t,n=Date.now()){let r=e?Date.parse(e):NaN;if(Number.isNaN(r))return null;let i=Math.round((r-n)/1e3),a=new Intl.RelativeTimeFormat(t,{numeric:`auto`});for(let[e,t]of st){if(Math.abs(i)<t)return a.format(i,e);i=Math.round(i/t)}return null}function lt(e){if(!e)return null;let t=e.reason;switch(e.status){case`blocked`:return t?w(`agentRedesign.statusDetail.blocked`,{reason:t}):w(`agentRedesign.statusDetail.blockedUnrecorded`);case`awaiting_review`:return t?w(`agentRedesign.statusDetail.review`,{reason:t}):w(`agentRedesign.statusDetail.reviewUnrecorded`);case`paused`:return t?w(`agentRedesign.statusDetail.paused`,{reason:t}):w(`agentRedesign.statusDetail.pausedUnrecorded`);case`queued`:return w(`agentRedesign.statusDetail.queued`);case`awaiting_recruitment`:return w(`agentRedesign.statusDetail.recruitment`);case`unreported`:return w(e.source===`roster`?`agentRedesign.statusDetail.unreportedRoster`:`agentRedesign.statusDetail.unreportedTasks`);case`unavailable`:return w(`agentRedesign.statusDetail.unavailable`);default:return null}}var ut={class:`ui-card agent-card`},dt={class:`agent-card-topline`},ft=[`src`],pt={class:`agent-directory-name`},mt={key:0,class:`ui-badge fla-employee-number`},ht={key:1,class:`ui-badge ui-badge--accent agent-card-role`},gt=[`title`],_t=[`data-membership-status`],vt=[`data-work-status`,`aria-label`],yt={class:`agent-card-work-status-text`},bt=[`aria-label`,`aria-pressed`,`title`,`disabled`],xt={key:0,class:`agent-card-current`,"data-current-task":``},St={class:`agent-card-current-label`},Ct=[`title`],wt=[`title`],Tt=[`title`],Et=[`title`],Dt={key:2,class:`agent-inline-skills`},Ot={class:`agent-card-meta`},kt={class:`agent-card-projects`},At={key:0,class:`agent-card-project-list`},jt=[`title`],Mt={key:0,class:`ui-badge agent-card-project-count`},Nt={key:1,class:`ui-badge`},Pt={key:2,class:`agent-card-no-project`},Ft=2400,It=P(c({__name:`AgentCard`,props:{agent:{},spaceId:{},projectNames:{},managesAllProjects:{type:Boolean},entry:{},pinned:{type:Boolean},pinPending:{type:Boolean}},emits:[`toggle-pin`],setup(i,{emit:a}){let o=i,s=a,c=O(()=>L(o.agent)),l=Ce(Ft),u=O(()=>de(o.agent)),p=O(()=>u.value.slice(0,2).map(e=>o.projectNames?.[e]||e)),h=O(()=>Math.max(u.value.length-2,0)),x=O(()=>o.agent.profile.capabilities.slice(0,3)),S=O(()=>`is-${o.agent.profile.status}`),T=O(()=>w(`projectAgents.status.${o.agent.profile.status}`)),E=O(()=>o.entry?.status??`unreported`),ne=O(()=>o.entry?.title??w(`agentRedesign.workbench.titleNotLoaded`)),k=O(()=>ct(o.entry?.lastUpdateAt,ee())),re=nt(),ie=O(()=>E.value===`running`?ot(o.entry?.runningSince,ee(),re.value):null),ae=O(()=>({path:`/project-agents/manage`,query:{agent:o.agent.agentId,task:o.entry?.taskId??``}})),A=O(()=>lt(o.entry)),M=O(()=>B(o.agent.occupation)),P=O(()=>`is-${E.value}`),oe=O(()=>({coordinator:w(`agentProfiles.roles.projectManager`),hr:w(`agentProfiles.roles.hr`)})[o.agent.profile.agentType]??``);function ce(e,t,n){let r=w(e,n);return r===e?t:r}let le=O(()=>ce(`agentRedesign.membershipStatus`,`Member · ${T.value}`,{status:T.value})),F=O(()=>{let e={awaiting_recruitment:`Awaiting recruitment`,queued:`Queued`,running:`Running`,paused:`Paused`,awaiting_review:`Awaiting review`,blocked:`Blocked`,none:w(`agentProfiles.idle`),loading:`Loading work status`,unreported:`Partial status`,unavailable:`Unavailable`,ended:`Ended`}[E.value];return ce(`agentRedesign.workStatus.${E.value}`,e??`Work status unavailable`)}),fe=O(()=>o.pinPending?se(`saving`,`Saving Agent pin…`):o.pinned?se(`unpin`,`Unpin Agent`):se(`pin`,`Pin Agent`));function me(){s(`toggle-pin`,!o.pinned)}return(a,o)=>(e(),t(`article`,ut,[_(`div`,dt,[_(`span`,{class:y([`agent-portrait small agent-card-identity`,{"is-working":E.value===`running`}]),style:te([v(ue)(i.agent.agentId),{"--working-phase":v(l)}]),"aria-hidden":`true`,"data-card-portrait":``},[v(I)(i.agent.agentId)?(e(),t(`img`,{key:0,src:v(I)(i.agent.agentId),alt:``},null,8,ft)):(e(),t(g,{key:1},[f(C(i.agent.profile.occupationEmoji||c.value.slice(0,1)),1)],64))],6),_(`div`,pt,[n(v(j),{to:v(pe)(i.spaceId,i.agent.agentId),"aria-label":`${c.value} · ${v(w)(`agentProfiles.profile`)}`},{default:m(()=>[f(C(c.value),1)]),_:1},8,[`to`,`aria-label`]),i.agent.employeeNumber?(e(),t(`span`,mt,`FLA `+C(i.agent.employeeNumber),1)):d(``,!0),oe.value?(e(),t(`span`,ht,C(oe.value),1)):d(``,!0),M.value.length?(e(),t(`span`,{key:2,class:`agent-card-occupation`,"data-occupation":``,title:v(w)(`agentRedesign.occupation.title`)},C(M.value.join(` · `)),9,gt)):d(``,!0),n(be,{"agent-id":i.agent.agentId},null,8,[`agent-id`])]),i.agent.profile.status===`active`?d(``,!0):(e(),t(`span`,{key:0,class:y([`ui-badge agent-card-status agent-card-membership-status`,S.value]),"data-membership-status":i.agent.profile.status},C(le.value),11,_t)),E.value!==`ended`&&(i.agent.profile.status===`active`||![`none`,`loading`].includes(E.value))?(e(),t(`span`,{key:1,class:y([`agent-card-work-status`,P.value]),"data-work-status":E.value,"aria-label":`${v(w)(`agentRedesign.workStatus.label`)} · ${F.value}`},[_(`span`,yt,C(F.value),1)],10,vt)):d(``,!0),_(`button`,{class:`agent-card-pin quiet-button`,"data-agent-pin-toggle":``,type:`button`,"aria-label":`${fe.value} · ${c.value}`,"aria-pressed":!!i.pinned,title:fe.value,disabled:i.pinPending,onClick:b(me,[`stop`])},[i.pinPending?(e(),D(N,{key:0,variant:`inline`,label:fe.value},null,8,[`label`])):(e(),D(Qe,{key:1,filled:i.pinned},null,8,[`filled`]))],8,bt)]),i.entry?.taskId?(e(),t(`p`,xt,[_(`span`,St,C(v(w)(`agentRedesign.workbench.current`)),1),n(v(j),{class:y([`agent-card-current-task`,{"is-unloaded":!i.entry.title}]),to:ae.value},{default:m(()=>[f(C(ne.value),1)]),_:1},8,[`to`,`class`]),E.value===`running`?(e(),t(`span`,{key:0,class:`agent-card-last-update`,title:i.entry.runningSince??void 0,"data-running-since":``},C(ie.value?v(w)(`agentRedesign.workbench.runningFor`,{duration:ie.value}):v(w)(`agentRedesign.workbench.runningForUnknown`)),9,Ct)):(e(),t(`span`,{key:1,class:`agent-card-last-update`,title:i.entry.lastUpdateAt??void 0,"data-last-update":``},C(k.value?v(w)(`agentRedesign.workbench.lastUpdate`,{time:k.value}):v(w)(`agentRedesign.workbench.lastUpdateUnknown`)),9,wt))])):d(``,!0),A.value?(e(),t(`p`,{key:1,class:y([`agent-card-status-detail`,P.value]),title:A.value,"data-status-detail":``},C(A.value),11,Tt)):d(``,!0),_(`p`,{class:`agent-card-responsibility`,"data-agent-summary":``,title:v(w)(`agentRedesign.workbench.responsibility`)},C(i.agent.profile.responsibility),9,Et),x.value.length?(e(),t(`div`,Dt,[(e(!0),t(g,null,r(x.value,n=>(e(),t(`span`,{key:n},C(n),1))),128))])):d(``,!0),_(`div`,Ot,[_(`div`,kt,[p.value.length?(e(),t(`div`,At,[(e(!0),t(g,null,r(p.value,n=>(e(),t(`span`,{key:n,class:`ui-badge agent-card-project-badge`,title:n},C(n),9,jt))),128)),h.value?(e(),t(`span`,Mt,` +`+C(h.value),1)):d(``,!0)])):i.managesAllProjects?(e(),t(`span`,Nt,C(v(w)(`agentProfiles.allProjects`)),1)):(e(),t(`span`,Pt,C(v(w)(`agentProfiles.noProject`)),1))]),n(v(j),{class:`agent-directory-open`,to:v(pe)(i.spaceId,i.agent.agentId),"aria-label":`${c.value} · ${v(w)(`agentProfiles.profile`)}`},{default:m(()=>[f(C(v(w)(`agentProfiles.profile`))+` → `,1)]),_:1},8,[`to`,`aria-label`])])]))}}),[[`__scopeId`,`data-v-310201de`]]),Lt=new Map,Rt=()=>({agents:[],phase:`open`,cursor:null,complete:!1});function zt(e,t){let n=T([]),r=T(!1),i=T(``),o=T(!1),s=Rt(),c=``,l=0;function u(e){s=e,n.value=e.agents,o.value=e.complete}function d(){l+=1,c=`${e.value}\n${t.value}`,r.value=!1,i.value=``;let n=Lt.get(c);return u(n??Rt()),n?Promise.resolve():f()}async function f(){let n=e.value;if(!n||r.value||s.complete)return;let a=l,o=s,d=new URLSearchParams({personalSpaceId:n,limit:`50`});t.value!==`all`&&d.set(`status`,t.value),o.phase===`open`&&d.set(`work`,`open`),o.cursor&&d.set(`cursor`,o.cursor),r.value=!0,i.value=``;let p=!1;try{let e=await M(`/api/project-agent-pages?${d}`);if(a!==l)return;let t=me(e),r=typeof t.nextCursor==`string`&&t.nextCursor?t.nextCursor:null,i=t.complete===!0;if(!i&&!r)throw Error(w(`agentProfiles.pageBroken`));let s=new Set(o.agents.map(e=>e.agentId)),f=he(e,n).filter(e=>s.has(e.agentId)?!1:(s.add(e.agentId),!0)),m={agents:[...o.agents,...f],phase:i?`all`:o.phase,cursor:i?null:r,complete:i&&o.phase===`all`};Lt.set(c,m),u(m),p=o.phase===`open`&&i&&m.agents.length<50}catch(e){a===l&&(i.value=e instanceof Error?e.message:w(`agentProfiles.loadError`))}finally{a===l&&(r.value=!1)}p&&a===l&&await f()}function p(){return Lt.delete(c),d()}return a([e,t],d,{immediate:!0}),{agents:n,loading:r,error:i,complete:o,loadMore:f,reload:p}}var Bt={running:0,awaiting_review:1,blocked:2,paused:3,queued:4,awaiting_recruitment:5,loading:6,unreported:6,unavailable:6,none:7,ended:8},Vt=new Set([`blocked`,`awaiting_review`,`paused`]);function Ht(e){return W.includes(e)}function Ut(e,t){let n={};for(let r of U(e,t))n[r.taskId]={taskId:r.taskId,title:r.title,updatedAt:r.updatedAt??null,participantUpdatedAt:Object.fromEntries(r.participants.map(e=>[e.agentId,e.updatedAt??null])),summary:r.resultSummary?.trim()||null};return n}function Wt(e,t){return e?e.status:t===`loading`?`loading`:t===`error`?`unavailable`:t===`incomplete`?`unreported`:`none`}function Gt(e){return e===`idle`?`none`:e===`ended`?`ended`:Ht(e)?e:`unreported`}function Kt(e,t){let n=typeof e.workStatus==`string`,r=n?Gt(e.workStatus):Wt(t.summary,t.summaryState),i=Ht(r)?n?e.currentTaskId??null:t.summary?.taskId??null:null,a=i?t.tasks?.[i]:void 0,o=a?.title??(i&&t.summary?.taskId===i?t.summary.title:null),s=a?a.participantUpdatedAt[e.agentId]??a.updatedAt:null;return{status:r,source:n?`roster`:t.summary?`tasks`:`unknown`,taskId:i,title:o,lastUpdateAt:s,reason:Vt.has(r)?a?.summary??null:null,runningSince:n&&r===`running`?e.currentTaskRunningSince??null:null}}function qt(e){let t=e?Date.parse(e):NaN;return Number.isNaN(t)?null:t}function Jt(e,t){let n=Bt[e.entry.status]-Bt[t.entry.status];if(n)return n;let r=qt(e.entry.lastUpdateAt),i=qt(t.entry.lastUpdateAt);return r===i?e.name.localeCompare(t.name):r===null?1:i===null?-1:i-r}function Yt(e){let t=T({}),n=T({}),r=T(!1),i=T(``),o=T(`idle`),s=new Map,c=0;async function l(){let a=++c,l=e.value;if(i.value=``,!l){t.value={},n.value={},r.value=!1,o.value=`idle`;return}let u=s.get(l);u?(t.value=u.summaries,n.value=u.tasks):(Object.keys(t.value).length||Object.keys(n.value).length)&&(t.value={},n.value={}),r.value=!0,o.value=`loading`;try{let r=await M(`/api/project-agent-tasks?${new URLSearchParams({personalSpaceId:l,limit:`200`})}`);if(a!==c||e.value!==l)return;let i={summaries:H(r,l),tasks:Ut(r,l)};s.set(l,i),t.value=i.summaries,n.value=i.tasks,o.value=V(r)?`ready`:`incomplete`}catch(t){if(a!==c||e.value!==l)return;i.value=t instanceof Error?t.message:w(`agentProfiles.loadError`),o.value=`error`}finally{a===c&&e.value===l&&(r.value=!1)}}return a(e,l,{immediate:!0}),{summaries:t,tasks:n,loading:r,error:i,state:o,load:l}}function Xt(e,t,n){let r=T([]);a(n,()=>{r.value=[]}),a([e,t],([e,t])=>{t&&e.length&&!r.value.length&&(r.value=[...e])},{immediate:!0});let i=O(()=>{if(!r.value.length)return e.value;let t=new Map(r.value.map((e,t)=>[e,t]));return[...e.value.filter(e=>t.has(e)).sort((e,n)=>t.get(e)-t.get(n)),...e.value.filter(e=>!t.has(e))]});function o(){r.value=[...e.value]}return{order:i,apply:o}}var Zt=[`src`],Qt=P(c({__name:`EmployeeWorkbenchLinks`,props:{personalSpaceId:{}},setup(n){let i=n;a(()=>i.personalSpaceId,e=>{G(e===`current`?``:e)},{immediate:!0});let o=O(()=>ve.value.filter(e=>e.agentId&&e.agentStatus===`active`&&(e.runtime||e.workbench?.kind===`native`)));return(n,i)=>(e(!0),t(g,null,r(o.value,n=>(e(),D(v(j),{key:n.id,class:`ui-button employee-workbench-link`,to:`/employees/${encodeURIComponent(n.id)}`,title:v(w)(`agentProfiles.workbench`)},{default:m(()=>[v(I)(n.id)?(e(),t(`img`,{key:0,src:v(I)(n.id),alt:``,"aria-hidden":`true`},null,8,Zt)):d(``,!0),f(` `+C(n.name)+` · `+C(n.role),1)]),_:2},1032,[`to`,`title`]))),128))}}),[[`__scopeId`,`data-v-4906fde1`]]),$t=[`aria-label`],en={class:`ui-toolbar agents-directory-heading`},tn={key:0,class:`agents-directory-count`},nn={key:1,class:`agents-directory-count`,"aria-hidden":`true`},rn={class:`agent-profile-actions`},an={key:0,class:`agent-directory-pin-error`,role:`alert`},on={key:2,class:`agent-directory-work-error`,role:`status`},sn={class:`ui-toolbar agents-directory-filters`},cn={key:0,class:`agents-directory-search`},ln={class:`ui-sr-only`},un=[`placeholder`],dn={key:4,role:`alert`,class:`ui-card ui-empty agent-profile-empty`},fn={key:5,class:`agents-directory-partial`,role:`status`},pn={key:6,class:`ui-card ui-empty agent-profile-empty`},mn={key:7,class:`agents-directory-reorder`,role:`status`},hn={key:8,class:`agents-directory-grid`},gn={key:9,class:`agents-directory-projects`},_n={class:`agents-directory-grid`},vn={key:1,class:`agents-directory-more-error`,role:`alert`},yn=P(c({__name:`AgentsDirectoryPage`,setup(i){let o=re(),c=ae(),p=ie(),y=O(()=>o.activePersonalSpace?.id??``),b=oe(y),te=b.agentIds,ne=b.savingAgentId,A=b.error,j=O(()=>se(`retry`,`Retry`)),{summaries:M,tasks:P,loading:I,error:ue,state:me,load:he}=Yt(y),R=je(c.query),z=T(R.search),B=T(R.status),V=T(R.projects),H=T(R.view),{agents:U,loading:W,error:G,complete:K,loadMore:be,reload:Ce}=zt(y,B),we=O(()=>W.value&&!U.value.length),q=O(()=>!K.value&&U.value.length>0),Oe=O(()=>!!(z.value.trim()||V.value.length)),ke=T({}),J=T(null),Y=T(null),Ae=Ee(Y,J),Pe=T(!1),Ie=O(()=>ve.value.some(e=>!e.fixed)),Le=e=>ve.value.some(t=>t.agentId===e&&t.management?.mode===`all`),Re=O(()=>(o.state?.personalProjects??[]).filter(e=>e.personal_space_id===y.value)),X=O(()=>Re.value.filter(e=>_e(e))),ze=O(()=>new Map(X.value.map(e=>[e.project_id,e]))),Be=O(()=>X.value.map(e=>({value:e.project_id,label:e.profile.name}))),Ve=O(()=>Object.fromEntries(Re.value.map(e=>[e.project_id,ge(e)]))),He=O(()=>[{value:`all`,label:w(`agentProfiles.allStatus`)},...[`active`,`inactive`,`archived`].map(e=>({value:e,label:w(`projectAgents.status.${e}`)}))]),Ue=e=>(B.value===`all`||e.profile.status===B.value)&&(!V.value.length||de(e).some(e=>V.value.includes(e)))&&fe([L(e),e.employeeNumber?`FLA ${e.employeeNumber}`:``,e.profile.responsibility,...e.profile.capabilities,...de(e).map(e=>Ve.value[e]||e)].join(` `),z.value),Z=O(()=>we.value||I.value||o.runtimeStatus===`loading`),We=O(()=>Object.fromEntries(U.value.map(e=>[e.agentId,Kt(e,{summary:M.value[e.agentId],summaryState:me.value,tasks:P.value})]))),Ge=O(()=>new Map(U.value.map(e=>[e.agentId,e]))),Ke=O(()=>U.value.map(e=>({agent:e,entry:We.value[e.agentId],name:L(e)})).sort(Jt).map(e=>e.agent.agentId)),qe=Xt(Ke,O(()=>!Z.value),y),Je=e=>e.map(e=>Ge.value.get(e)).filter(e=>e&&Ue(e)),Xe=T(`recent`),Ze=O(()=>[{value:`recent`,label:w(`agentProfiles.sort.recent`)},{value:`name`,label:w(`agentProfiles.sort.name`)}]),Q=O(()=>{let e=Je(qe.order.value);return Xe.value===`name`?[...e].sort((e,t)=>L(e).localeCompare(L(t),ee())):e}),$=T(!1),Qe=T(null);async function $e(){$.value=!0,await l(),Qe.value?.focus()}let et=O(()=>[{value:`agents`,label:w(`agentRedesign.projectView.agents`)},{value:`projects`,label:w(`agentRedesign.projectView.projects`)}]),tt=O(()=>Fe(Q.value.map(e=>e.agentId),e=>de(Ge.value.get(e)),e=>We.value[e]?.status,X.value.map(e=>e.project_id),V.value,{includeEmpty:!z.value.trim()}).map(e=>({...e,key:e.projectId,name:Ve.value[e.projectId]||e.projectId,purpose:ze.value.get(e.projectId)?.profile.purpose??null,agents:e.agentIds.map(e=>Ge.value.get(e))}))),nt=e=>({agent:e,spaceId:y.value,projectNames:Ve.value,managesAllProjects:Le(e.agentId),entry:We.value[e.agentId],pinned:te.value.includes(e.agentId),pinPending:ne.value===e.agentId}),rt=O(()=>Je(Ke.value).some((e,t)=>e.agentId!==Q.value[t]?.agentId));async function it(e,t){await b.setPinned(e,t)}u(()=>{o.runtimeStatus===`idle`&&o.refresh()});let at=()=>({search:z.value,projects:V.value,status:B.value,view:H.value});a(()=>c.query,e=>{let t=je(e);z.value=t.search,V.value=t.projects,B.value=t.status,H.value=t.view}),a([z,B,V,H],()=>{Ne(je(c.query),at())||p.replace({query:Me(c.query,at())})},{deep:!0}),De(J,`agents-directory`,O(()=>Q.value.length>0)),a([y,()=>c.query.agent],([e,t])=>{if(e&&typeof t==`string`){let{agent:n,...r}=c.query;p.replace({path:typeof c.query.task==`string`?`/project-agents/manage`:pe(e,t),query:typeof c.query.task==`string`?c.query:r})}},{immediate:!0}),a(y,(e,t)=>{t&&(z.value=``,V.value=[],B.value=`all`,ke.value={})});async function ot(e){Pe.value=!1,await p.push(pe(y.value,e.agent.agentId))}a([Ae,W,G,K],()=>{Ae.value&&!W.value&&!G.value&&!K.value&&be()});async function st(){o.state||await o.refresh(),await Promise.allSettled([Ce(),he()])}function ct(e){o.rememberPersonalProject(e)}return(i,a)=>(e(),t(`section`,{ref_key:`scroller`,ref:J,class:`view agents-directory`,"aria-label":v(w)(`agentProfiles.title`)},[_(`header`,en,[!Z.value||v(U).length?(e(),t(`p`,tn,C(v(w)(q.value?`agentProfiles.membersLoaded`:`agentProfiles.members`,{count:v(U).length})),1)):(e(),t(`span`,nn,`\xA0`)),_(`div`,rn,[Z.value&&v(U).length?(e(),D(N,{key:0,variant:`inline`,label:v(w)(`agentRedesign.refreshing`)},null,8,[`label`])):d(``,!0),n(Qt,{"personal-space-id":y.value||`current`},null,8,[`personal-space-id`]),Ie.value?(e(),D(k,{key:1,size:`sm`,variant:`primary`,disabled:!y.value,onClick:a[0]||=e=>Pe.value=!0},{default:m(()=>[f(C(v(w)(`employees.recruit`)),1)]),_:1},8,[`disabled`])):d(``,!0)])]),v(A)?(e(),t(`p`,an,[_(`span`,null,C(v(A)),1),n(k,{size:`sm`,variant:`ghost`,onClick:a[1]||=e=>v(b).load({force:!0})},{default:m(()=>[f(C(j.value),1)]),_:1})])):d(``,!0),!Z.value&&!v(G)&&v(o).runtimeStatus===`ready`&&!X.value.length?(e(),D(Se,{key:1,"personal-space-id":y.value},null,8,[`personal-space-id`])):d(``,!0),v(ue)?(e(),t(`p`,on,[_(`span`,null,C(v(w)(`agentRedesign.workStatus.refreshError`)),1),n(k,{size:`sm`,variant:`ghost`,onClick:v(he)},{default:m(()=>[f(C(v(w)(`agentProfiles.retry`)),1)]),_:1},8,[`onClick`])])):d(``,!0),_(`div`,sn,[n(F,{modelValue:V.value,"onUpdate:modelValue":a[2]||=e=>V.value=e,class:`agents-directory-select`,multiple:``,options:Be.value,label:v(w)(`employees.filterLabel`),placeholder:v(w)(`employees.allProjectsFilter`)},null,8,[`modelValue`,`options`,`label`,`placeholder`]),n(F,{modelValue:B.value,"onUpdate:modelValue":a[3]||=e=>B.value=e,class:`agents-directory-select`,options:He.value,label:v(w)(`projectAgents.fields.status`)},null,8,[`modelValue`,`options`,`label`]),n(F,{modelValue:Xe.value,"onUpdate:modelValue":a[4]||=e=>Xe.value=e,class:`agents-directory-select`,"data-directory-sort":``,options:Ze.value,label:v(w)(`agentProfiles.sort.label`)},null,8,[`modelValue`,`options`,`label`]),n(le,{modelValue:H.value,"onUpdate:modelValue":a[5]||=e=>H.value=e,class:`agents-directory-view`,"data-directory-view":``,options:et.value,label:v(w)(`agentRedesign.projectView.label`)},null,8,[`modelValue`,`options`,`label`]),$.value||z.value?(e(),t(`label`,cn,[_(`span`,ln,C(v(w)(`agentProfiles.search`)),1),h(_(`input`,{ref_key:`searchInput`,ref:Qe,"onUpdate:modelValue":a[6]||=e=>z.value=e,type:`search`,maxlength:`160`,placeholder:v(w)(`agentProfiles.search`),onFocus:a[7]||=e=>$.value=!0,onBlur:a[8]||=e=>$.value=!1,onKeydown:a[9]||=x(e=>{z.value=``,$.value=!1},[`esc`])},null,40,un),[[E,z.value]])])):(e(),D(ce,{key:1,icon:`search`,label:v(w)(`agentProfiles.search`),"data-directory-search":``,onClick:$e},null,8,[`label`]))]),Z.value&&!v(U).length?(e(),D(N,{key:3,label:v(w)(`agentProfiles.loading`)},null,8,[`label`])):d(``,!0),v(G)&&!v(U).length||v(o).runtimeStatus===`error`?h((e(),t(`div`,dn,[_(`p`,null,C(!v(U).length&&v(G)||v(w)(`agentProfiles.loadError`)),1),n(k,{size:`sm`,variant:`ghost`,onClick:st},{default:m(()=>[f(C(v(w)(`agentProfiles.retry`)),1)]),_:1})],512)),[[S,!Z.value||v(U).length===0]]):d(``,!0),q.value?(e(),t(`p`,fn,C(v(w)(Oe.value?`agentProfiles.partialFilter`:`agentProfiles.partialRoster`,{count:v(U).length})),1)):d(``,!0),!Z.value&&v(K)&&!Q.value.length&&H.value===`agents`&&!v(G)&&v(o).runtimeStatus!==`error`?(e(),t(`p`,pn,C(v(w)(v(U).length?`agentProfiles.noMatch`:`agentProfiles.noAgents`)),1)):d(``,!0),rt.value&&!Z.value?(e(),t(`p`,mn,[_(`span`,null,C(v(w)(`agentRedesign.workbench.reorderHint`)),1),n(k,{size:`sm`,variant:`ghost`,"data-workbench-reorder":``,onClick:a[10]||=e=>v(qe).apply()},{default:m(()=>[f(C(v(w)(`agentRedesign.workbench.reorder`)),1)]),_:1})])):d(``,!0),Q.value.length&&H.value===`agents`?(e(),t(`ul`,hn,[(e(!0),t(g,null,r(Q.value,r=>(e(),t(`li`,{key:r.agentId},[n(It,s({ref_for:!0},nt(r),{onTogglePin:e=>it(r.agentId,e)}),null,16,[`onTogglePin`])]))),128))])):H.value===`projects`?(e(),t(`div`,gn,[n(ye,{"space-id":y.value,"formal-projects":X.value,"existing-project-ids":Re.value.map(e=>e.project_id),onProjectCreated:ct},null,8,[`space-id`,`formal-projects`,`existing-project-ids`]),(e(!0),t(g,null,r(tt.value,i=>(e(),D(Ye,{key:i.key,expanded:ke.value[i.key],"onUpdate:expanded":e=>ke.value[i.key]=e,"space-id":y.value,"project-id":i.projectId,name:i.name,purpose:i.purpose,agents:i.agents,count:i.agents.length,"running-count":i.runningCount,"unknown-count":i.unknownCount},{default:m(()=>[_(`ul`,_n,[(e(!0),t(g,null,r(i.agents,r=>(e(),t(`li`,{key:r.agentId},[n(It,s({ref_for:!0},nt(r),{onTogglePin:e=>it(r.agentId,e)}),null,16,[`onTogglePin`])]))),128))])]),_:2},1032,[`expanded`,`onUpdate:expanded`,`space-id`,`project-id`,`name`,`purpose`,`agents`,`count`,`running-count`,`unknown-count`]))),128))])):d(``,!0),v(U).length&&!v(K)?(e(),t(`div`,{key:10,ref_key:`rosterEnd`,ref:Y,class:`agents-directory-more`},[v(W)?(e(),D(N,{key:0,variant:`inline`,label:v(w)(`agentProfiles.loadingMore`)},null,8,[`label`])):v(G)?(e(),t(`p`,vn,[_(`span`,null,C(v(w)(`agentProfiles.loadMoreError`))+` `+C(v(G)),1),n(k,{size:`sm`,variant:`ghost`,"data-roster-retry":``,onClick:v(be)},{default:m(()=>[f(C(v(w)(`agentProfiles.retry`)),1)]),_:1},8,[`onClick`])])):(e(),D(k,{key:2,size:`sm`,variant:`ghost`,"data-roster-more":``,onClick:v(be)},{default:m(()=>[f(C(v(w)(`agentProfiles.loadMore`)),1)]),_:1},8,[`onClick`]))],512)):d(``,!0),n(Te,{scroller:J.value},null,8,[`scroller`]),n(xe,{open:Pe.value,"personal-space-id":y.value,projects:X.value,"default-project-ids":V.value??[],onClose:a[11]||=e=>Pe.value=!1,onRecruited:ot},null,8,[`open`,`personal-space-id`,`projects`,`default-project-ids`])],8,$t))}}),[[`__scopeId`,`data-v-59b90cb4`]]);export{yn as default};
@@ -0,0 +1 @@
1
+ .back-to-top[data-v-dceeb77d]{z-index:2;border:1px solid var(--color-border);width:40px;height:40px;color:var(--color-ink);background:var(--color-surface);box-shadow:var(--shadow-md);cursor:pointer;transition:transform var(--motion-fast) var(--motion-ease), color var(--motion-fast);border-radius:50%;place-items:center;margin:16px 0 0 auto;padding:0;display:grid;position:sticky;bottom:16px}.back-to-top[data-v-dceeb77d]:hover{color:var(--color-accent);transform:translateY(-2px)}.back-to-top[data-v-dceeb77d]:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.agent-card-pin[data-v-310201de]{width:var(--control-height-sm);min-height:var(--control-height-sm);color:var(--color-muted);flex:none;padding:0}.agent-card-pin[data-v-310201de]:hover:not(:disabled),.agent-card-pin[aria-pressed=true][data-v-310201de]{color:var(--color-accent)}.agent-card-pin[aria-pressed=true][data-v-310201de]{border-color:var(--color-accent-line);background:var(--color-accent-soft)}.agent-card-pin svg[data-v-310201de]{width:18px;height:18px}.agent-card-projects[data-v-310201de]{flex:1}.agent-card-project-list .agent-card-project-badge[data-v-310201de]{box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%;display:block;overflow:hidden}.agent-card-pin[data-v-310201de] .growth-loading--inline{justify-content:center;width:100%}.agent-card-pin[data-v-310201de] .growth-loading__label{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.employee-workbench-link img[data-v-4906fde1]{object-fit:cover;border-radius:5px;width:18px;height:18px}.agent-directory-pin-error[data-v-59b90cb4]{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);font-size:13px;display:flex}.agent-directory-pin-error .quiet-button[data-v-59b90cb4]{min-height:var(--control-height-sm);padding:4px 9px;font-size:12px}
@@ -0,0 +1 @@
1
+ import{B as e,C as t,E as n,H as r,I as i,J as a,O as ee,R as te,S as o,T as s,X as c,_ as l,b as u,dt as d,g as ne,it as re,mt as f,n as ie,o as p,ot as m,x as h,y as g}from"./i18n-DAeCdA8L.js";import{n as _,t as ae}from"./console-2nhA6IaV.js";import{a as v,i as oe,n as se,r as y,s as b}from"./client-DBYe0KzE.js";import{t as x}from"./UiSelect-BaVTdhtR.js";import{t as S}from"./UiDisclosure-BIE3uXrx.js";import{t as C}from"./TextField-BVqz0DTp.js";import{r as ce,t as le}from"./identity-bmKz-BGh.js";var ue={class:`view connections-view`},de=[`aria-label`],fe=[`data-status`],pe={class:`service-state`},me=[`data-status`],he={class:`connection-title-row`},ge={class:`service-state`},_e={class:`external-knowledge-section`},ve={class:`section-title section-title-with-help`},ye=[`href`,`aria-label`,`title`],be={class:`external-binding-count`},xe={class:`external-binding-list`},Se=[`data-status`],Ce={class:`external-binding-copy`},we={class:`external-binding-targets`},Te=[`data-status`],Ee={key:0},De={key:1},Oe={class:`external-binding-actions`},ke={key:0,class:`external-binding-editor`},Ae={class:`external-target-mode-list`},je={class:`external-binding-editor-actions`},Me={key:0,class:`compact-empty`},Ne={class:`wide-field`},Pe={class:`trusted-code-badge`},Fe={class:`section-title section-title-with-help`},Ie=[`href`,`aria-label`,`title`],Le={class:`conflict-policy-controls`},Re={key:2,role:`alert`},ze={key:1,class:`connection-subscriptions`},Be={class:`section-title`},Ve={class:`subscription-list`},He={key:0,class:`empty-state`},w=ee({__name:`ConnectionsPage`,setup(ee){let w=ae(),T=m(``),E=m(!1),D=m(``),O=m([]),k=m([]),A=m(!1),j=m(!1),M=m(``),N=m(null),P=m([]),F=m({}),I=m(``),L=m(`ask_human`),R=m(!1),z=m(!1),B=m(!1),V=`ask_human`,H=0,U=null,W=re({name:``,connectorType:`mcp`,mode:`hybrid`,personalProjectIds:[],mcpTransport:`http`,mcpUrl:``,mcpCommand:``,mcpArgs:``,mcpTokenEnv:``,mcpResourcePrefix:``,notionTokenEnv:``,notionPageIds:``,notionDataSourceIds:``,feishuTokenEnv:``,feishuRegion:`cn`,feishuSpaceId:``,feishuRootNodeToken:``,feishuNodeTokens:``,feishuWebBaseUrl:``,retrievalUrl:``,retrievalTokenEnv:``,retrievalKnowledgeIds:``,retrievalScoreThreshold:`0.5`,customModule:``,customEnvironmentNames:``,customSourceJson:`{}`}),Ue=g(()=>w.state?.providers?.personal?.status===`ready`),We=g(()=>w.state?.providers?.workspaces??[]),Ge=g(()=>We.value.filter(({status:e})=>e===`ready`).length),Ke=g(()=>{let e=w.state?.capabilities,t=[e?.browsePublicProjects?p(`pages.connections.publicCapability.discovery`):null,e?.subscribeProject?p(`pages.connections.publicCapability.subscription`):null,e?.publishProject?p(`pages.connections.publicCapability.publishing`):null,e?.submitKnowledge?p(`pages.connections.publicCapability.contribution`):null,e?.reviewProposals?p(`pages.connections.publicCapability.review`):null].filter(e=>!!e);return t.length?new Intl.ListFormat(ie(),{style:`long`,type:`conjunction`}).format(t):p(`pages.connections.notAvailable`)}),G=g(()=>w.state?.subscriptions??[]),K=g(()=>w.state?.personalProjects??[]),qe=g(()=>Dt(`connect-external-knowledge`)),Je=g(()=>Dt(`external-knowledge-conflict-policy`)),Ye=g(()=>new Set(G.value.map(({provider_url:e,project_id:t})=>`${e}::${t}`))),Xe=g(()=>(w.state?.projects??[]).filter(e=>!Ye.value.has(rt(e)))),Ze=g(()=>Xe.value.map(e=>({value:rt(e),label:e.name,meta:`#${le(e.id,26)}`,search:ce(e.id)}))),Qe=g(()=>O.value.map(e=>({value:e.type,label:e.name,meta:e.description}))),q=g(()=>K.value.map(e=>({value:e.project_id,label:e.profile.name,meta:`#${le(e.project_id,26)}`,search:ce(e.project_id)}))),$e=g(()=>[{value:`hybrid`,label:p(`pages.connections.mode.hybrid`),disabled:!Y(W.connectorType,`hybrid`)},{value:`mirror`,label:p(`pages.connections.mode.mirror`),disabled:!Y(W.connectorType,`mirror`)},{value:`live`,label:p(`pages.connections.mode.live`),disabled:!Y(W.connectorType,`live`)}]),et=g(()=>[{value:`http`,label:`Streamable HTTP`},{value:`stdio`,label:`stdio`}]),tt=g(()=>[{value:`cn`,label:`Feishu`},{value:`global`,label:`Lark`}]),nt=g(()=>[{value:`ask_human`,label:p(`pages.connections.askHuman`)},{value:`agent_decide`,label:p(`pages.connections.agentDecide`)}]);a(K,e=>{let t=new Set(e.map(({project_id:e})=>e)),n=e[0]?.project_id??``;W.personalProjectIds=W.personalProjectIds.filter(e=>t.has(e)),!W.personalProjectIds.length&&n&&(W.personalProjectIds=[n]),P.value=P.value.filter(e=>t.has(e)),t.has(I.value)||(I.value=n)},{immediate:!0}),a(()=>[w.activePersonalSpace?.id,I.value],()=>void _t(),{immediate:!0,flush:`sync`}),a(()=>W.connectorType,e=>{Y(e,W.mode)||(W.mode=bt(e))}),te(()=>void J()),i(()=>{H+=1,U?.abort()});function rt(e){return`${e.providerUrl}::${e.id}`}async function it(){let e=w.activePersonalSpace?.id,t=Xe.value.find(e=>rt(e)===T.value);if(!(!e||!t||E.value)){E.value=!0,D.value=`pages.connections.subscribing`;try{await v(`/api/subscriptions`,{personalSpaceId:e,projectId:t.id,providerUrl:t.providerUrl,projectName:t.name}),T.value=``,w.notify(p(`pages.connections.subscribed`,{name:t.name})),D.value=`pages.connections.loadingSubscriptions`,await w.refresh()}catch(e){w.reportError(e)}finally{E.value=!1}}}async function at(e){let t=w.activePersonalSpace?.id;if(!(!t||E.value)){E.value=!0,D.value=`pages.connections.unsubscribing`;try{let n=new URLSearchParams({personalSpaceId:t,providerUrl:e.provider_url});await se(`/api/subscriptions/${encodeURIComponent(e.project_id)}?${n}`),w.notify(p(`pages.connections.unsubscribed`,{name:e.project_name??e.project_id})),D.value=`pages.connections.loadingSubscriptions`,await w.refresh()}catch(e){w.reportError(e)}finally{E.value=!1}}}async function J(){j.value=!0;try{let[e,t]=await Promise.all([y(`/api/external-knowledge/connectors`),y(`/api/external-knowledge/bindings`)]);O.value=e,k.value=t}catch(e){w.reportError(e)}finally{j.value=!1}}async function ot(){let e=w.activePersonalSpace?.id;if(!(!e||!W.personalProjectIds.length||A.value)){A.value=!0,M.value=`pages.connections.creatingBinding`;try{let{connectorConfig:t,source:n}=st();await v(`/api/external-knowledge/bindings`,{name:W.name.trim(),connectorType:W.connectorType,connectorConfig:t,source:n,targets:W.personalProjectIds.map(t=>({personalSpaceId:e,personalProjectId:t,mode:W.mode}))}),w.notify(p(`pages.connections.externalCreated`,{name:W.name.trim()})),W.name=``,await J()}catch(e){w.reportError(e)}finally{A.value=!1}}}function st(){if(W.connectorType===`notion`)return{connectorConfig:{tokenEnv:$(W.notionTokenEnv,`Notion token env`)},source:{pageIds:Z(W.notionPageIds),dataSourceIds:Z(W.notionDataSourceIds)}};if(W.connectorType===`feishu`)return{connectorConfig:{accessTokenEnv:$(W.feishuTokenEnv,`Feishu token env`),region:W.feishuRegion},source:Q({spaceId:W.feishuSpaceId.trim(),rootNodeToken:W.feishuRootNodeToken.trim(),nodeTokens:Z(W.feishuNodeTokens),webBaseUrl:W.feishuWebBaseUrl.trim()})};if(W.connectorType===`retrieval_api`){let e=Number(W.retrievalScoreThreshold);if(!Number.isFinite(e)||e<0||e>1)throw TypeError(p(`pages.connections.scoreThresholdInvalid`));return{connectorConfig:Q({url:$(W.retrievalUrl,`Retrieval API URL`),tokenEnv:W.retrievalTokenEnv.trim(),scoreThreshold:e}),source:{knowledgeIds:Et(W.retrievalKnowledgeIds,`Knowledge IDs`)}}}if(W.connectorType===`custom`){let e=JSON.parse(W.customSourceJson);if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(p(`pages.connections.customSourceObject`));return{connectorConfig:{module:$(W.customModule,`Custom connector module`),environmentNames:Z(W.customEnvironmentNames)},source:e}}return{connectorConfig:W.mcpTransport===`stdio`?Q({transport:`stdio`,command:W.mcpCommand.trim(),args:Z(W.mcpArgs)}):Q({transport:`http`,url:$(W.mcpUrl,`MCP URL`),tokenEnv:W.mcpTokenEnv.trim()}),source:Q({resourceUriPrefix:W.mcpResourcePrefix.trim()})}}async function ct(e){await ut(e,`check`)}async function lt(e){await ut(e,`sync`)}async function ut(e,t){if(!A.value){A.value=!0,M.value=t===`sync`?`pages.connections.syncingBinding`:`pages.connections.checkingBinding`;try{let n=await v(`/api/external-knowledge/bindings/${encodeURIComponent(e.id)}/${t}`,{});w.notify(p(t===`sync`&&n.skippedCredentials?`pages.connections.externalSyncedWithSkipped`:t===`sync`?`pages.connections.externalSynced`:`pages.connections.externalChecked`,{name:e.name,count:n.skippedCredentials??0})),await J()}catch(e){w.reportError(e)}finally{A.value=!1}}}async function dt(e){if(!A.value){A.value=!0,M.value=`pages.connections.disconnectingBinding`;try{await se(`/api/external-knowledge/bindings/${encodeURIComponent(e.id)}`),w.notify(p(`pages.connections.externalDeleted`,{name:e.name})),await J()}catch(e){w.reportError(e)}finally{A.value=!1}}}function ft(e){let t=X(e);N.value=e.id,P.value=t.map(({personalProjectId:e})=>e),F.value=Object.fromEntries(t.map(({personalProjectId:e,mode:t})=>[e,t]))}function pt(){N.value=null,P.value=[],F.value={}}function mt(e){let t=k.value.find(({id:e})=>e===N.value);if(!t)return;let n=F.value,r=bt(t.connectorType);F.value=Object.fromEntries(e.map(e=>[e,n[e]??t.mode??r]))}function ht(e,t){F.value={...F.value,[e]:t}}async function gt(e){let t=w.activePersonalSpace?.id;if(!(!t||!P.value.length||A.value)){A.value=!0,M.value=`pages.connections.savingBindingTargets`;try{await oe(`/api/external-knowledge/bindings/${encodeURIComponent(e.id)}/targets`,{expectedTargetsVersion:e.targetsVersion,targets:P.value.map(n=>({personalSpaceId:t,personalProjectId:n,mode:F.value[n]??e.mode}))}),w.notify(p(`pages.connections.projectsUpdated`,{name:e.name})),pt(),await J()}catch(e){w.reportError(e)}finally{A.value=!1}}}async function _t(){let e=++H;if(U?.abort(),U=null,L.value=`ask_human`,B.value=!1,z.value=!1,!w.activePersonalSpace?.id||!I.value)return;let t=new AbortController;U=t,z.value=!0;try{let n=await y(`/api/external-knowledge/conflict-policy?${new URLSearchParams({personalProjectId:I.value})}`,{signal:t.signal});if(e!==H)return;L.value=n.mode,V=n.mode}catch{if(e!==H)return;B.value=!0}finally{e===H&&(z.value=!1,U=null)}}async function vt(){let e=w.activePersonalSpace?.id;if(!e||!I.value||R.value||z.value||B.value)return;let t=H;R.value=!0;try{let n=await oe(`/api/external-knowledge/conflict-policy?${new URLSearchParams({personalProjectId:I.value})}`,{personalSpaceId:e,personalProjectId:I.value,mode:L.value});if(t!==H)return;L.value=n.mode,V=n.mode,w.notify(p(`pages.connections.conflictSaved`))}catch(e){if(t!==H)return;L.value=V,w.reportError(e)}finally{R.value=!1}}function yt(e){return O.value.find(t=>t.type===e)?.name??e}function Y(e,t){let n=O.value.find(t=>t.type===e)?.capabilities;return!n?.length||(t===`live`||t===`hybrid`?n.includes(`retrieve`):!0)&&(t===`mirror`||t===`hybrid`?n.includes(`sync`):!0)}function bt(e){return[`hybrid`,`mirror`,`live`].find(t=>Y(e,t))??`live`}function xt(e){return[`hybrid`,`mirror`,`live`].map(t=>({value:t,label:p(`pages.connections.mode.${t}`),disabled:!Y(e,t)}))}function X(e){return e.targets?.length?e.targets:[{id:e.id,...e.target,mode:e.mode,status:e.status,sync:e.sync}]}function St(e){return X(e).some(({mode:e})=>e!==`live`)}function Ct(e){return K.value.find(({project_id:t})=>t===e)?.profile.name??e}function wt(e){return X(e).find(({sync:e})=>e?.error)?.sync?.error??e.sync?.error}function Tt(e){return X(e).reduce((e,t)=>e+(t.sync?.skippedCredentials??0),0)}function Z(e){return[...new Set(e.split(`,`).map(e=>e.trim()).filter(Boolean))]}function Et(e,t){let n=Z(e);if(!n.length)throw TypeError(`${t} is required`);return n}function Q(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==``&&(!Array.isArray(e)||e.length>0)))}function $(e,t){if(!e.trim())throw TypeError(`${t} is required`);return e.trim()}function Dt(e){return`https://github.com/JevonsCode/fuli/blob/main/${ie()===`zh-CN`?`README.zh-CN.md`:`README.md`}#${e}`}return(i,a)=>(e(),t(`section`,ue,[u(`div`,{class:`service-connection-grid`,"aria-label":d(p)(`pages.connections.statusAria`)},[u(`article`,{class:`service-connection-card`,"data-status":Ue.value?`ready`:`error`},[u(`header`,null,[a[30]||=u(`span`,{class:`service-connection-icon local`,"aria-hidden":`true`},[u(`span`,{class:`nav-icon nav-icon-personal-project`})],-1),u(`div`,null,[u(`h3`,null,f(d(p)(`pages.connections.localGraphiti`)),1)]),u(`span`,pe,f(Ue.value?d(p)(`common.status.connected`):d(p)(`common.status.connectionError`)),1)]),n(S,{title:d(p)(`ui.connectionDetails`)},{default:c(()=>[u(`dl`,null,[u(`div`,null,[u(`dt`,null,f(d(p)(`pages.connections.storage`)),1),a[31]||=u(`dd`,null,`Neo4j`,-1)]),u(`div`,null,[u(`dt`,null,f(d(p)(`pages.connections.purpose`)),1),u(`dd`,null,f(d(p)(`pages.connections.localPurpose`)),1)])])]),_:1},8,[`title`])],8,fe),u(`article`,{class:`service-connection-card`,"data-status":d(w).publicRuntimeStatus},[u(`header`,null,[a[33]||=u(`span`,{class:`service-connection-icon public`,"aria-hidden":`true`},[u(`span`,{class:`nav-icon nav-icon-public-project`})],-1),u(`div`,he,[u(`h3`,null,f(d(p)(`pages.connections.publicService`)),1),a[32]||=u(`span`,{class:`feature-badge beta`},`BETA`,-1)]),u(`span`,ge,f(d(w).publicRuntimeStatus===`ready`?d(p)(`common.status.connected`):d(w).publicRuntimeStatus===`error`?d(p)(`common.status.connectionError`):d(p)(`common.status.notConnected`)),1)]),u(`dl`,null,[u(`div`,null,[u(`dt`,null,f(d(p)(`pages.connections.currentStatus`)),1),u(`dd`,null,f(d(w).publicRuntimeStatus===`ready`?d(p)(`pages.connections.sharedServicesReady`,{count:Ge.value||We.value.length}):d(p)(`pages.connections.notAvailable`)),1)]),u(`div`,null,[u(`dt`,null,f(d(p)(`pages.connections.purpose`)),1),u(`dd`,null,f(Ke.value),1)])])],8,me)],8,de),u(`section`,_e,[u(`div`,ve,[u(`h3`,null,f(d(p)(`pages.connections.externalTitle`)),1),u(`a`,{class:`section-help-link`,"data-testid":`external-knowledge-help`,href:qe.value,"aria-label":d(p)(`pages.connections.externalHelp`),title:d(p)(`pages.connections.externalHelp`),target:`_blank`,rel:`noreferrer`},`?`,8,ye),u(`span`,be,f(d(p)(`pages.connections.bindingCount`,{count:k.value.length})),1)]),j.value||A.value?(e(),h(b,{key:0,variant:`compact`,label:d(p)(j.value?`pages.connections.loadingBindings`:M.value)},null,8,[`label`])):o(``,!0),u(`div`,xe,[(e(!0),t(l,null,r(k.value,i=>(e(),t(`article`,{key:i.id,class:`external-binding-row`,"data-status":i.status},[a[34]||=u(`i`,{"aria-hidden":`true`},null,-1),u(`div`,Ce,[u(`strong`,null,f(i.name),1),u(`span`,null,f(yt(i.connectorType)),1),u(`div`,we,[u(`b`,null,f(d(p)(`pages.connections.boundTo`)),1),(e(!0),t(l,null,r(X(i),n=>(e(),t(`span`,{key:n.id,class:`external-binding-target-chip`,"data-status":n.status},f(Ct(n.personalProjectId))+` · `+f(d(p)(`pages.connections.mode.${n.mode}`)),9,Te))),128))]),wt(i)?(e(),t(`small`,Ee,f(wt(i)),1)):Tt(i)?(e(),t(`small`,De,f(d(p)(`pages.connections.credentialsSkipped`,{count:Tt(i)})),1)):o(``,!0)]),u(`div`,Oe,[n(_,{size:`sm`,variant:`ghost`,disabled:A.value,onClick:e=>ct(i)},{default:c(()=>[s(f(d(p)(`pages.connections.check`)),1)]),_:1},8,[`disabled`,`onClick`]),n(_,{size:`sm`,variant:`ghost`,class:`external-sync-action`,disabled:A.value||!St(i),onClick:e=>lt(i)},{default:c(()=>[s(f(d(p)(`pages.connections.sync`)),1)]),_:1},8,[`disabled`,`onClick`]),n(_,{size:`sm`,variant:`ghost`,disabled:A.value,onClick:e=>ft(i)},{default:c(()=>[s(f(d(p)(`pages.connections.manageProjects`)),1)]),_:1},8,[`disabled`,`onClick`]),n(_,{size:`sm`,variant:`danger`,disabled:A.value,onClick:e=>dt(i)},{default:c(()=>[s(f(d(p)(`pages.connections.disconnect`)),1)]),_:1},8,[`disabled`,`onClick`])]),N.value===i.id?(e(),t(`div`,ke,[u(`label`,null,[u(`span`,null,f(d(p)(`pages.connections.targetProjects`)),1),n(x,{multiple:``,modelValue:P.value,"onUpdate:modelValue":a[0]||=e=>P.value=e,"control-id":`external-projects-${i.id}`,label:d(p)(`pages.connections.targetProjects`),options:q.value,disabled:A.value,required:``,searchable:``,onChange:mt},null,8,[`modelValue`,`control-id`,`label`,`options`,`disabled`])]),u(`div`,Ae,[(e(!0),t(l,null,r(P.value,r=>(e(),t(`div`,{key:r,class:`external-target-mode-row`},[u(`span`,null,f(Ct(r)),1),n(x,{"model-value":F.value[r]??i.mode,"control-id":`external-target-mode-${i.id}-${r}`,label:d(p)(`pages.connections.bindingMode`),options:xt(i.connectorType),disabled:A.value,"onUpdate:modelValue":e=>ht(r,e)},null,8,[`model-value`,`control-id`,`label`,`options`,`disabled`,`onUpdate:modelValue`])]))),128))]),u(`div`,je,[n(_,{size:`sm`,variant:`ghost`,disabled:A.value,onClick:pt},{default:c(()=>[s(f(d(p)(`common.actions.cancel`)),1)]),_:1},8,[`disabled`]),n(_,{size:`sm`,variant:`primary`,disabled:A.value||!P.value.length,onClick:e=>gt(i)},{default:c(()=>[s(f(d(p)(`pages.connections.saveProjects`)),1)]),_:1},8,[`disabled`,`onClick`])])])):o(``,!0)],8,Se))),128)),!j.value&&!k.value.length?(e(),t(`div`,Me,f(d(p)(`pages.connections.noExternalBindings`)),1)):o(``,!0)]),n(S,{title:d(p)(`pages.connections.connect`),open:!k.value.length},{default:c(()=>[u(`form`,{class:`external-binding-form`,onSubmit:ne(ot,[`prevent`])},[n(C,{modelValue:W.name,"onUpdate:modelValue":a[1]||=e=>W.name=e,label:d(p)(`pages.connections.bindingName`),"data-testid":`external-name`,required:``},null,8,[`modelValue`,`label`]),u(`label`,null,[u(`span`,null,f(d(p)(`pages.connections.connector`)),1),n(x,{modelValue:W.connectorType,"onUpdate:modelValue":a[2]||=e=>W.connectorType=e,"control-id":`external-connector`,label:d(p)(`pages.connections.connector`),options:Qe.value,disabled:A.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),u(`label`,null,[u(`span`,null,f(d(p)(`pages.connections.targetProjects`)),1),n(x,{multiple:``,modelValue:W.personalProjectIds,"onUpdate:modelValue":a[3]||=e=>W.personalProjectIds=e,"control-id":`external-projects`,label:d(p)(`pages.connections.targetProjects`),options:q.value,disabled:A.value,required:``,searchable:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),u(`label`,null,[u(`span`,null,f(d(p)(`pages.connections.bindingMode`)),1),n(x,{modelValue:W.mode,"onUpdate:modelValue":a[4]||=e=>W.mode=e,"control-id":`external-binding-mode`,label:d(p)(`pages.connections.bindingMode`),options:$e.value,disabled:A.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),W.connectorType===`mcp`?(e(),t(l,{key:0},[u(`label`,null,[u(`span`,null,f(d(p)(`pages.connections.transport`)),1),n(x,{modelValue:W.mcpTransport,"onUpdate:modelValue":a[5]||=e=>W.mcpTransport=e,"control-id":`external-mcp-transport`,label:d(p)(`pages.connections.transport`),options:et.value,disabled:A.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),W.mcpTransport===`http`?(e(),h(C,{key:0,modelValue:W.mcpUrl,"onUpdate:modelValue":a[6]||=e=>W.mcpUrl=e,label:`MCP URL`,"data-testid":`mcp-url`,type:`url`,required:``},null,8,[`modelValue`])):(e(),h(C,{key:1,modelValue:W.mcpCommand,"onUpdate:modelValue":a[7]||=e=>W.mcpCommand=e,label:d(p)(`pages.connections.command`),required:``},null,8,[`modelValue`,`label`])),W.mcpTransport===`stdio`?(e(),h(C,{key:2,modelValue:W.mcpArgs,"onUpdate:modelValue":a[8]||=e=>W.mcpArgs=e,label:d(p)(`pages.connections.arguments`)},null,8,[`modelValue`,`label`])):(e(),h(C,{key:3,modelValue:W.mcpTokenEnv,"onUpdate:modelValue":a[9]||=e=>W.mcpTokenEnv=e,label:d(p)(`pages.connections.tokenEnv`),"data-testid":`mcp-token-env`},null,8,[`modelValue`,`label`])),n(C,{modelValue:W.mcpResourcePrefix,"onUpdate:modelValue":a[10]||=e=>W.mcpResourcePrefix=e,label:d(p)(`pages.connections.resourcePrefix`),"data-testid":`mcp-resource-prefix`},null,8,[`modelValue`,`label`])],64)):W.connectorType===`notion`?(e(),t(l,{key:1},[n(C,{modelValue:W.notionTokenEnv,"onUpdate:modelValue":a[11]||=e=>W.notionTokenEnv=e,label:d(p)(`pages.connections.tokenEnv`),required:``},null,8,[`modelValue`,`label`]),n(C,{modelValue:W.notionPageIds,"onUpdate:modelValue":a[12]||=e=>W.notionPageIds=e,label:`Page IDs`},null,8,[`modelValue`]),n(C,{modelValue:W.notionDataSourceIds,"onUpdate:modelValue":a[13]||=e=>W.notionDataSourceIds=e,label:`Data Source IDs`},null,8,[`modelValue`])],64)):W.connectorType===`feishu`?(e(),t(l,{key:2},[n(C,{modelValue:W.feishuTokenEnv,"onUpdate:modelValue":a[14]||=e=>W.feishuTokenEnv=e,label:d(p)(`pages.connections.tokenEnv`),required:``},null,8,[`modelValue`,`label`]),u(`label`,null,[u(`span`,null,f(d(p)(`pages.connections.region`)),1),n(x,{modelValue:W.feishuRegion,"onUpdate:modelValue":a[15]||=e=>W.feishuRegion=e,"control-id":`external-feishu-region`,label:d(p)(`pages.connections.region`),options:tt.value,disabled:A.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),n(C,{modelValue:W.feishuSpaceId,"onUpdate:modelValue":a[16]||=e=>W.feishuSpaceId=e,label:`Space ID`},null,8,[`modelValue`]),n(C,{modelValue:W.feishuRootNodeToken,"onUpdate:modelValue":a[17]||=e=>W.feishuRootNodeToken=e,label:`Root Node Token`},null,8,[`modelValue`]),n(C,{modelValue:W.feishuNodeTokens,"onUpdate:modelValue":a[18]||=e=>W.feishuNodeTokens=e,label:`Node Tokens`},null,8,[`modelValue`]),n(C,{modelValue:W.feishuWebBaseUrl,"onUpdate:modelValue":a[19]||=e=>W.feishuWebBaseUrl=e,label:`Web URL`,type:`url`},null,8,[`modelValue`])],64)):W.connectorType===`retrieval_api`?(e(),t(l,{key:3},[n(C,{modelValue:W.retrievalUrl,"onUpdate:modelValue":a[20]||=e=>W.retrievalUrl=e,label:d(p)(`pages.connections.retrievalUrl`),type:`url`,required:``},null,8,[`modelValue`,`label`]),n(C,{modelValue:W.retrievalTokenEnv,"onUpdate:modelValue":a[21]||=e=>W.retrievalTokenEnv=e,label:d(p)(`pages.connections.tokenEnv`)},null,8,[`modelValue`,`label`]),n(C,{modelValue:W.retrievalKnowledgeIds,"onUpdate:modelValue":a[22]||=e=>W.retrievalKnowledgeIds=e,label:d(p)(`pages.connections.knowledgeIds`),required:``},null,8,[`modelValue`,`label`]),n(C,{modelValue:W.retrievalScoreThreshold,"onUpdate:modelValue":a[23]||=e=>W.retrievalScoreThreshold=e,label:d(p)(`pages.connections.scoreThreshold`),inputmode:`decimal`,required:``},null,8,[`modelValue`,`label`])],64)):(e(),t(l,{key:4},[n(C,{modelValue:W.customModule,"onUpdate:modelValue":a[24]||=e=>W.customModule=e,label:d(p)(`pages.connections.module`),required:``},null,8,[`modelValue`,`label`]),n(C,{modelValue:W.customEnvironmentNames,"onUpdate:modelValue":a[25]||=e=>W.customEnvironmentNames=e,label:d(p)(`pages.connections.environmentNames`)},null,8,[`modelValue`,`label`]),u(`div`,Ne,[n(C,{modelValue:W.customSourceJson,"onUpdate:modelValue":a[26]||=e=>W.customSourceJson=e,label:d(p)(`pages.connections.sourceJson`),multiline:``,required:``},null,8,[`modelValue`,`label`])]),u(`span`,Pe,f(d(p)(`pages.connections.trustedCode`)),1)],64)),n(_,{variant:`primary`,class:`external-create-action`,type:`submit`,disabled:A.value||!K.value.length||!W.personalProjectIds.length},{default:c(()=>[a[35]||=u(`span`,{class:`external-create-action-icon`,"aria-hidden":`true`},null,-1),u(`span`,null,f(d(p)(`pages.connections.connect`)),1)]),_:1},8,[`disabled`])],32)]),_:1},8,[`title`,`open`])]),K.value.length?(e(),h(S,{key:0,class:`conflict-policy-section`,open:B.value,title:d(p)(`pages.connections.conflictTitle`)},{default:c(()=>[u(`div`,Fe,[u(`a`,{class:`section-help-link`,"data-testid":`conflict-policy-help`,href:Je.value,"aria-label":d(p)(`pages.connections.conflictHelp`),title:d(p)(`pages.connections.conflictHelp`),target:`_blank`,rel:`noreferrer`},`?`,8,Ie)]),u(`div`,Le,[u(`label`,null,[u(`span`,null,f(d(p)(`pages.connections.targetProject`)),1),n(x,{modelValue:I.value,"onUpdate:modelValue":a[27]||=e=>I.value=e,"control-id":`external-conflict-project`,label:d(p)(`pages.connections.targetProject`),options:q.value,disabled:R.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),u(`label`,null,[u(`span`,null,f(d(p)(`pages.connections.conflictAction`)),1),n(x,{modelValue:L.value,"onUpdate:modelValue":a[28]||=e=>L.value=e,"control-id":`external-conflict-mode`,label:d(p)(`pages.connections.conflictAction`),options:nt.value,disabled:R.value||z.value||B.value||!I.value,required:``,onChange:vt},null,8,[`modelValue`,`label`,`options`,`disabled`])])]),z.value?(e(),h(b,{key:0,variant:`compact`,label:d(p)(`pages.connections.loadingConflictPolicy`)},null,8,[`label`])):o(``,!0),R.value?(e(),h(b,{key:1,variant:`inline`,label:d(p)(`pages.connections.savingConflictPolicy`)},null,8,[`label`])):B.value?(e(),t(`div`,Re,[u(`p`,null,f(d(p)(`common.errors.loadFailed`)),1),n(_,{size:`sm`,onClick:_t},{default:c(()=>[s(f(d(p)(`common.actions.retry`)),1)]),_:1})])):o(``,!0)]),_:1},8,[`open`,`title`])):o(``,!0),d(w).state?.capabilities?.subscribeProject?(e(),t(`section`,ze,[u(`div`,Be,[u(`h3`,null,[s(f(d(p)(`pages.connections.subscriptionsTitle`))+` `,1),a[36]||=u(`span`,{class:`feature-badge beta`},`BETA`,-1)])]),E.value?(e(),h(b,{key:0,variant:`inline`,label:d(p)(D.value)},null,8,[`label`])):o(``,!0),u(`div`,Ve,[(e(!0),t(l,null,r(G.value,r=>(e(),t(`div`,{key:`${r.provider_url}:${r.project_id}`,class:`subscription-row`},[a[37]||=u(`span`,null,`↗`,-1),u(`div`,null,[u(`strong`,null,f(r.project_name??r.project_id),1),u(`span`,null,f(d(p)(`pages.connections.sharedProject`)),1)]),n(_,{size:`sm`,class:`subscription-action`,disabled:E.value,onClick:e=>at(r)},{default:c(()=>[s(f(d(p)(`pages.connections.unsubscribe`)),1)]),_:1},8,[`disabled`,`onClick`])]))),128)),G.value.length?o(``,!0):(e(),t(`div`,He,f(d(p)(`pages.connections.noSubscriptions`)),1))]),u(`form`,{class:`subscription-form`,onSubmit:ne(it,[`prevent`])},[n(x,{modelValue:T.value,"onUpdate:modelValue":a[29]||=e=>T.value=e,options:Ze.value,label:d(p)(`pages.connections.sharedProjectLabel`),placeholder:d(p)(`pages.connections.choosePublicProject`),searchable:``,required:``,disabled:E.value},null,8,[`modelValue`,`options`,`label`,`placeholder`,`disabled`]),n(_,{variant:`primary`,type:`submit`,disabled:E.value||!T.value||!d(w).activePersonalSpace},{default:c(()=>[s(f(d(p)(`pages.connections.subscribe`)),1)]),_:1},8,[`disabled`])],32)])):o(``,!0)]))}});export{w as default};
@@ -0,0 +1,2 @@
1
+ import{B as e,C as t,E as n,J as r,O as i,S as a,T as o,X as s,Z as c,b as l,dt as u,mt as d,o as f,ot as p,p as m,x as h,y as g}from"./i18n-DAeCdA8L.js";import{n as _}from"./console-2nhA6IaV.js";import{o as v,t as y}from"./client-DBYe0KzE.js";import{t as b}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as x}from"./UiDialog-CIyDfEYh.js";function S(e,t){let n=e.normalize(`NFKC`).toLocaleLowerCase().replace(/[^\p{L}\p{N}]+/gu,`-`).replace(/^-+|-+$/g,``).slice(0,120)||`project`,r=new Set(t);if(!r.has(n))return n;for(let e=2;;e+=1){let t=`${n}-${e}`;if(!r.has(t))return t}}function C(e){return[...new Set(e.split(`
2
+ `).map(e=>e.trim()).filter(Boolean))].slice(0,64)}function w(e,t,n){let r=n.source.trim();return v(`/api/personal-projects`,{personalSpaceId:e,projectId:t,createOnly:!0,profile:{name:n.name.trim(),purpose:n.purpose.trim()||null,scope:n.includes.trim()||null,lifecycle:`active`,boundaries:C(n.excludes),sources:r?[{key:`source-1`,kind:`other`,title:r,uri:r,sensitivity:`normal`}]:[]}})}var T={class:`create-project-fields`},E={class:`ui-field`},D={key:0,class:`ui-field-hint`,"data-new-project-id":``},O={class:`ui-field`},k=[`placeholder`],A={class:`ui-field`},j=[`placeholder`],M={class:`ui-field`},N=[`placeholder`],P={class:`ui-field`},F=[`placeholder`],I=b(i({__name:`CreateProjectDialog`,props:{open:{type:Boolean},personalSpaceId:{},existingProjectIds:{},initialPurpose:{}},emits:[`close`,`created`],setup(i,{emit:v}){let b=i,C=v,I=()=>({name:``,purpose:b.initialPurpose??``,includes:``,excludes:``,source:``}),L=p(I()),R=p(!1),z=p(``),B=g(()=>S(L.value.name,b.existingProjectIds));r(()=>b.open,e=>{e&&(L.value=I(),z.value=``)},{immediate:!0});async function V(){if(!R.value){if(!L.value.name.trim()){z.value=f(`projects.createDialog.nameRequired`);return}R.value=!0,z.value=``;try{C(`created`,await w(b.personalSpaceId,B.value,L.value))}catch(e){z.value=e instanceof y&&e.status===409?f(`projects.createDialog.exists`):e instanceof Error&&e.message||f(`projects.createDialog.failed`)}finally{R.value=!1}}}return(r,p)=>i.open?(e(),h(x,{key:0,open:``,class:`create-project-dialog`,size:`lg`,form:``,busy:R.value,error:z.value,title:u(f)(`projects.createDialog.title`),description:u(f)(`projects.createDialog.intro`),onClose:p[6]||=e=>C(`close`),onSubmit:V},{footer:s(()=>[n(_,{variant:`ghost`,disabled:R.value,onClick:p[5]||=e=>C(`close`)},{default:s(()=>[o(d(u(f)(`common.actions.cancel`)),1)]),_:1},8,[`disabled`]),n(_,{variant:`primary`,type:`submit`,busy:R.value,"busy-label":u(f)(`projects.createDialog.creating`)},{default:s(()=>[o(d(u(f)(`projects.createDialog.create`)),1)]),_:1},8,[`busy`,`busy-label`])]),default:s(()=>[l(`div`,T,[l(`label`,E,[o(d(u(f)(`projects.createDialog.name`))+` `,1),c(l(`input`,{"onUpdate:modelValue":p[0]||=e=>L.value.name=e,name:`new-project-name`,maxlength:`160`,required:``,autofocus:``},null,512),[[m,L.value.name]]),L.value.name.trim()?(e(),t(`small`,D,d(u(f)(`projects.createDialog.identifier`,{id:B.value})),1)):a(``,!0)]),l(`label`,O,[o(d(u(f)(`projects.createDialog.purpose`))+` `,1),c(l(`textarea`,{"onUpdate:modelValue":p[1]||=e=>L.value.purpose=e,name:`new-project-purpose`,maxlength:`4096`,rows:`2`,placeholder:u(f)(`projects.createDialog.purposePlaceholder`)},null,8,k),[[m,L.value.purpose]])]),l(`label`,A,[o(d(u(f)(`projects.createDialog.includes`))+` `,1),c(l(`textarea`,{"onUpdate:modelValue":p[2]||=e=>L.value.includes=e,name:`new-project-includes`,maxlength:`4096`,rows:`3`,placeholder:u(f)(`projects.createDialog.includesPlaceholder`)},null,8,j),[[m,L.value.includes]])]),l(`label`,M,[o(d(u(f)(`projects.createDialog.excludes`))+` `,1),c(l(`textarea`,{"onUpdate:modelValue":p[3]||=e=>L.value.excludes=e,name:`new-project-excludes`,maxlength:`8192`,rows:`3`,placeholder:u(f)(`projects.createDialog.excludesPlaceholder`)},null,8,N),[[m,L.value.excludes]])]),l(`label`,P,[o(d(u(f)(`projects.createDialog.source`))+` `,1),c(l(`input`,{"onUpdate:modelValue":p[4]||=e=>L.value.source=e,name:`new-project-source`,maxlength:`2048`,placeholder:u(f)(`projects.createDialog.sourcePlaceholder`)},null,8,F),[[m,L.value.source]])])])]),_:1},8,[`busy`,`error`,`title`,`description`])):a(``,!0)}}),[[`__scopeId`,`data-v-7d31c4ad`]]);export{I as t};
@@ -0,0 +1 @@
1
+ .create-project-fields[data-v-7d31c4ad]{gap:14px;display:grid}
@@ -0,0 +1 @@
1
+ .agent-hand[data-v-02a2e629]{border-radius:var(--radius-control);background:var(--color-accent-soft);min-height:28px;color:var(--color-accent);font:inherit;vertical-align:middle;border:0;flex:none;align-items:center;gap:4px;padding:4px 8px;font-size:12px;font-weight:650;display:inline-flex}button.agent-hand[data-v-02a2e629]{cursor:pointer}button.agent-hand[data-v-02a2e629]:hover{background:var(--color-accent);color:var(--color-on-accent)}@media (pointer:coarse){button.agent-hand[data-v-02a2e629]{min-width:44px;min-height:44px}}.agent-hand svg[data-v-02a2e629]{width:15px;height:15px}.agent-hand[data-v-02a2e629]:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.employee-profile[data-v-10a25b01]{align-items:center;gap:14px;display:flex}.employee-profile h3[data-v-10a25b01]{margin:0 0 2px;font-size:18px;line-height:1.35}.employee-profile h3 span[data-v-10a25b01]{color:var(--color-muted);margin-left:8px;font-size:13px;font-weight:500}.employee-profile p[data-v-10a25b01]{margin:0}.employee-avatar[data-v-10a25b01]{background:var(--color-surface-subtle);border-radius:14px;flex:0 0 48px;place-items:center;height:48px;font-size:24px;font-weight:650;display:grid;overflow:hidden}.employee-avatar img[data-v-10a25b01]{object-fit:cover;width:100%;height:100%}.employee-scope[data-v-10a25b01]{gap:8px;display:grid}.employee-scope .ui-segmented[data-v-10a25b01]{display:flex}.employee-scope .ui-segmented>button[data-v-10a25b01]{flex:1}.employee-title-settings[data-v-10a25b01]{gap:8px;display:grid}.employee-title-settings h3[data-v-10a25b01]{margin:0;font-size:14px;font-weight:600}.employee-title-controls[data-v-10a25b01]{grid-template-columns:1.2fr 1fr;gap:12px;display:grid}.employee-title-example[data-v-10a25b01]{color:var(--color-ink);overflow-wrap:anywhere}.employee-permissions[data-v-10a25b01]{font-size:12px}.employee-permissions strong[data-v-10a25b01]{font-weight:600}.employee-permissions ul[data-v-10a25b01]{flex-wrap:wrap;gap:4px 18px;margin:6px 0;padding-left:16px;display:flex}.employee-runtime[data-v-10a25b01]{margin:0;font-size:12px}.employee-runtime.is-warning[data-v-10a25b01]{color:var(--color-warning)}.employee-success[data-v-10a25b01]{color:var(--color-success)}.employee-success p[data-v-10a25b01]{margin:0}.employee-message[data-v-10a25b01]{justify-items:start;gap:10px;display:grid}.employee-message p[data-v-10a25b01]{margin:0}@media (width<=540px){.employee-title-controls[data-v-10a25b01]{grid-template-columns:minmax(0,1fr)}}
@@ -0,0 +1 @@
1
+ import{B as e,C as t,E as n,G as r,H as i,J as a,O as o,S as s,T as c,X as l,_ as u,b as d,dt as f,ft as ee,mt as p,o as m,ot as h,w as te,x as g,y as _}from"./i18n-DAeCdA8L.js";import{n as v}from"./console-2nhA6IaV.js";import{h as y}from"./useApi-CROJJdhE-BJn8l1Cb.js";import{t as b}from"./vue-router-YsTpOqqM.js";import{a as ne,s as x}from"./client-DBYe0KzE.js";import{t as S}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as re}from"./UiDialog-CIyDfEYh.js";import{t as C}from"./UiSelect-BaVTdhtR.js";import{n as w,r as T}from"./attention-store-Bg-rVsgG.js";import{t as E}from"./avatars-CUyfvsKO.js";import{n as ie}from"./paths-CDREouhi.js";import{i as ae,r as oe}from"./project-origin-KvE_J110.js";import{a as se,o as ce,r as le,s as ue}from"./catalog-CmHt1ONG.js";import{t as de}from"./ProjectScopePicker-CNN_sGrN.js";var D={key:0,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.7`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},O={"aria-hidden":`true`},k=S(o({__name:`AgentHand`,props:{agentId:{},passive:{type:Boolean},countOnly:{type:Boolean}},setup(n){let i=n,a=T(),o=y(),c=_(()=>i.agentId?a.counts[i.agentId]??0:a.total);function u(e){i.passive||(e.preventDefault(),e.stopPropagation(),o?o.push(w(i.agentId)):a.show(i.agentId))}return(i,a)=>c.value?(e(),g(r(n.passive?`span`:`button`),{key:0,type:n.passive?void 0:`button`,class:`agent-hand`,"aria-label":f(m)(`attention.count`,{count:c.value}),title:f(m)(`attention.count`,{count:c.value}),onClick:u},{default:l(()=>[n.countOnly?s(``,!0):(e(),t(`svg`,D,[...a[0]||=[d(`path`,{d:`M8 13V5a1.5 1.5 0 0 1 3 0v6-8a1.5 1.5 0 0 1 3 0v8-6a1.5 1.5 0 0 1 3 0v7-3a1.5 1.5 0 0 1 3 0v6c0 4-2 7-6 7h-1c-3 0-4-1-6-4l-3-4a1.6 1.6 0 0 1 2.5-2z`},null,-1)]])),d(`span`,O,p(c.value),1)]),_:1},8,[`type`,`aria-label`,`title`])):s(``,!0)}}),[[`__scopeId`,`data-v-02a2e629`]]),fe={key:1,role:`alert`,class:`ui-dialog__error employee-message`},pe={key:2,class:`ui-muted`},me={class:`employee-profile`},he={class:`employee-avatar`,"aria-hidden":`true`},ge=[`src`],_e={class:`ui-meta`},ve={key:2,class:`employee-scope`},ye=[`aria-label`],be=[`data-scope`,`aria-checked`,`tabindex`,`disabled`,`onClick`],xe={class:`ui-meta`,role:`status`},Se={key:3,class:`ui-meta`},Ce={key:4,class:`ui-meta`},we={key:5,class:`ui-meta`},Te=[`aria-label`],Ee={class:`employee-title-controls`},De={class:`ui-meta`},Oe={class:`employee-title-example`},ke={class:`ui-meta`},Ae=[`aria-label`],je={class:`ui-meta`},Me={key:8,class:`ui-dialog__error`,role:`alert`},Ne={key:10,class:`employee-success`,role:`status`},A=S(o({__name:`EmployeeRecruitDialog`,props:{open:{type:Boolean},personalSpaceId:{},projects:{},defaultProjectId:{},defaultProjectIds:{},templateId:{}},emits:[`close`,`recruited`],setup(r,{emit:o}){let y=r,S=o,w=h([]),T=h([]),D=h(`selected`),O=h([]),k=h(`auto`),A=h(`emoji`),j=h(``),M=h(``),N=h(!1),P=h(!1),F=h(``),I=h(!1),L=h(``),R=h(null),z=h([]),B=h(``),V=_(()=>y.templateId?z.value:z.value.filter(e=>!e.fixed)),H=_(()=>y.templateId?V.value.find(e=>e.id===y.templateId):V.value.find(e=>e.id===F.value)??V.value[0]),U=_({get:()=>H.value?.id??``,set:e=>{F.value=e}}),Pe=_(()=>H.value?.agentId?m(`employees.manageProjectsTitle`,{name:H.value.name}):m(`employees.recruit`)),W=_(()=>oe(y.projects.filter(e=>e.profile.lifecycle!==`archived`)).map(e=>({id:e.project_id,name:ae(e)}))),G=_(()=>H.value?.management!==void 0),K=_({get:()=>D.value===`all`?W.value.filter(e=>!O.value.includes(e.id)).map(e=>e.id):w.value,set:e=>{if(D.value===`all`){let t=new Set(W.value.map(e=>e.id));O.value=[...O.value.filter(e=>!t.has(e)),...W.value.filter(t=>!e.includes(t.id)).map(e=>e.id)]}else w.value=e}}),q=_(()=>({mode:D.value,projectIds:D.value===`selected`?[...w.value].sort():[],excludedProjectIds:D.value===`all`?[...O.value].sort():[],titleMode:k.value,titleStyle:A.value})),Fe=_(()=>[`auto`,`suggest`,`off`].map(e=>({value:e,label:m(`employees.titles.${e}`)}))),Ie=_(()=>[`emoji`,`text`].map(e=>({value:e,label:m(`employees.titles.${e}`)}))),J=_(()=>new Set(T.value)),Le=_(()=>[...J.value].filter(e=>!K.value.includes(e))),Re=_(()=>!!(H.value?.agentStatus&&H.value.agentStatus!==`active`)),Y=_(()=>H.value?.agentStatus===`active`&&(G.value?JSON.stringify(q.value)===j.value&&(D.value===`all`||w.value.length===J.value.size&&w.value.every(e=>J.value.has(e))):w.value.length===J.value.size&&w.value.every(e=>J.value.has(e)))),ze=_(()=>I.value?m(`employees.recruiting`):Re.value?m(`employees.rehire`,{name:H.value?.name??``}):Y.value||H.value?.agentId?m(`employees.assign`):m(`employees.recruitName`,{name:H.value?.name??``})),Be=_(()=>H.value&&K.value.length?`/employees/${encodeURIComponent(H.value.id)}?project=${encodeURIComponent(K.value[0])}`:``),X=0;a([()=>y.open,()=>y.personalSpaceId,()=>y.templateId],([e])=>{X+=1,e&&Q(!0)},{immediate:!0}),a(F,()=>{y.open&&!N.value&&Z(!0)}),a(q,()=>{L.value=P.value?L.value:``,R.value=null},{flush:`sync`});function Z(e=!1){let t=new Set(W.value.map(e=>e.id));T.value=[...new Set((H.value?.assignments??[]).filter(e=>e.status===`active`&&t.has(e.personalProjectId)).map(e=>e.personalProjectId))];let n=e&&!H.value?.agentId?y.defaultProjectIds??(y.defaultProjectId?[y.defaultProjectId]:[]):[];w.value=[...new Set([...T.value,...n.filter(e=>t.has(e))])];let r=H.value?.management;D.value=r?.mode??`selected`,O.value=[...r?.excludedProjectIds??[]],k.value=r?.titleMode??`auto`,A.value=r?.titleStyle??`emoji`,r?.mode===`selected`&&H.value?.agentId&&(w.value=r.projectIds.filter(e=>t.has(e))),r?.mode===`all`&&H.value?.agentId&&(T.value=[...K.value]),j.value=JSON.stringify(q.value),M.value=H.value?.assignmentsVersion??``,P.value=!1,L.value=``,R.value=null}async function Q(e=!1){let t=++X;N.value=!0,z.value=[],B.value=``;try{let n=await ce(y.personalSpaceId);if(t!==X||!y.open)return;z.value=n,Z(e)}catch(e){t===X&&y.open&&(z.value=[],B.value=le(e))}finally{t===X&&(N.value=!1)}}function $(){I.value||S(`close`)}async function Ve(){if(!H.value||H.value.identityConflict||!y.personalSpaceId||I.value||N.value||P.value||!M.value||Y.value)return;I.value=!0,L.value=``;let e=H.value.id;try{let t=await ne(`/api/employee-templates/${encodeURIComponent(e)}/recruit`,{personalSpaceId:y.personalSpaceId,...G.value?{management:q.value}:{personalProjectIds:[...w.value]},replaceAssignments:!0,expectedAssignmentsVersion:M.value,...Re.value?{reactivate:!0}:{}});await ue(y.personalSpaceId),z.value=[...se.value],Z(),R.value=t,S(`recruited`,t)}catch(e){L.value=le(e);try{let t=JSON.parse(e instanceof Error?e.message:``);P.value=t.code===`assignment_scope_conflict`||t.code===`assignment_update_incomplete`}catch{}}finally{I.value=!1}}function He(e){e===`selected`&&(w.value=[...K.value]),D.value=e}function Ue(e){if(!(I.value||N.value||P.value)&&[`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key)){e.preventDefault();let t=e.key===`Home`?`all`:e.key===`End`||D.value===`all`?`selected`:`all`;He(t),e.currentTarget.querySelector(`[data-scope="${t}"]`)?.focus()}}return(a,o)=>(e(),g(re,{open:r.open,class:`employee-recruit-dialog`,title:Pe.value,busy:I.value,form:``,onClose:$,onSubmit:Ve},te({default:l(()=>[N.value&&!V.value.length?(e(),g(x,{key:0,variant:`compact`,label:f(m)(`employees.loading`)},null,8,[`label`])):B.value?(e(),t(`div`,fe,[d(`p`,null,p(B.value),1),n(v,{size:`sm`,onClick:o[0]||=e=>Q(!0)},{default:l(()=>[c(p(f(m)(`employees.retry`)),1)]),_:1})])):H.value?(e(),t(u,{key:3},[V.value.length>1&&!y.templateId?(e(),g(C,{key:0,modelValue:U.value,"onUpdate:modelValue":o[1]||=e=>U.value=e,field:``,"control-id":`employee-template`,label:f(m)(`employees.choose`),options:V.value.map(e=>({value:e.id,label:e.name,meta:e.role})),disabled:I.value||N.value},null,8,[`modelValue`,`label`,`options`,`disabled`])):s(``,!0),d(`div`,me,[d(`span`,he,[f(E)(H.value.id)?(e(),t(`img`,{key:0,src:f(E)(H.value.id),alt:``},null,8,ge)):(e(),t(u,{key:1},[c(p(H.value.name.slice(0,1)),1)],64))]),d(`div`,null,[d(`h3`,null,[c(p(H.value.name)+` `,1),d(`span`,null,p(H.value.role),1)]),d(`p`,null,p(H.value.description),1),d(`p`,_e,p(H.value.capabilities.join(` · `)),1)])]),N.value?(e(),g(x,{key:1,variant:`compact`,label:f(m)(`employees.loadingScope`)},null,8,[`label`])):s(``,!0),G.value?(e(),t(`div`,ve,[d(`div`,{class:`ui-segmented`,role:`radiogroup`,"aria-label":f(m)(`employees.scope.rule`),onKeydown:Ue},[(e(),t(u,null,i([`all`,`selected`],e=>d(`button`,{key:e,type:`button`,role:`radio`,"data-scope":e,"aria-checked":D.value===e,tabindex:D.value===e?0:-1,disabled:I.value||N.value||P.value,onClick:t=>He(e)},p(f(m)(`employees.scope.${e===`all`?`continuousAll`:`onlySelected`}`)),9,be)),64))],40,ye),d(`p`,xe,p(D.value===`all`?f(m)(`employees.scope.allHint`,{name:H.value.name}):f(m)(`employees.scope.selectedHint`)),1)])):s(``,!0),n(de,{modelValue:K.value,"onUpdate:modelValue":o[2]||=e=>K.value=e,projects:W.value,inline:``,hint:D.value===`all`?f(m)(`employees.scope.excludeHint`):void 0,disabled:I.value||N.value||P.value},null,8,[`modelValue`,`projects`,`hint`,`disabled`]),D.value===`all`&&O.value.length?(e(),t(`p`,Se,p(f(m)(`employees.scope.excludedCount`,{count:O.value.length})),1)):s(``,!0),W.value.length?s(``,!0):(e(),t(`p`,Ce,[c(p(f(m)(`employees.noProjects`))+` `,1),n(f(b),{to:f(ie)(r.personalSpaceId,`directory`),onClick:$},{default:l(()=>[c(p(f(m)(`employees.createProject`)),1)]),_:1},8,[`to`])])),Le.value.length&&!R.value?(e(),t(`p`,we,p(f(m)(`employees.scopeRemoved`,{count:Le.value.length})),1)):s(``,!0),G.value&&H.value.permissions.includes(`session.title`)?(e(),t(`section`,{key:6,class:`employee-title-settings`,"aria-label":f(m)(`employees.titles.heading`)},[d(`h3`,null,p(f(m)(`employees.titles.heading`)),1),d(`div`,Ee,[n(C,{modelValue:k.value,"onUpdate:modelValue":o[3]||=e=>k.value=e,field:``,"control-id":`employee-title-mode`,label:f(m)(`employees.titles.mode`),options:Fe.value,disabled:I.value||N.value||P.value},null,8,[`modelValue`,`label`,`options`,`disabled`]),n(C,{modelValue:A.value,"onUpdate:modelValue":o[4]||=e=>A.value=e,field:``,"control-id":`employee-title-style`,label:f(m)(`employees.titles.style`),options:Ie.value,disabled:I.value||N.value||P.value||k.value===`off`},null,8,[`modelValue`,`label`,`options`,`disabled`])]),d(`p`,De,[c(p(f(m)(`employees.titles.example`))+` `,1),d(`span`,Oe,`【P1|`+p(A.value===`emoji`?`🔧 `:``)+`FIX|`+p(f(m)(`employees.titles.exampleTask`))+`】`,1)]),d(`p`,ke,p(f(m)(`employees.titles.boundary`)),1)],8,Te)):s(``,!0),d(`section`,{class:`employee-permissions`,"aria-label":f(m)(`employees.permissions`)},[d(`strong`,null,p(f(m)(`employees.permissions`)),1),d(`ul`,null,[(e(!0),t(u,null,i(H.value.permissions,n=>(e(),t(`li`,{key:n},p(n===`board.read`?f(m)(`employees.boardRead`):n===`board.write`?f(m)(`employees.boardWrite`):n===`session.title`?f(m)(`employees.titles.heading`):n),1))),128))]),d(`p`,je,p(f(m)(`employees.noExecutor`)),1)],8,Ae),H.value.runtime?(e(),t(`p`,{key:7,class:ee([`employee-runtime`,{"is-warning":H.value.runtimeStatus!==`ready`}])},p(H.value.runtimeStatus===`ready`?f(m)(`employees.hostReady`):f(m)(`employees.installRequired`)),3)):s(``,!0),L.value||H.value.identityConflict?(e(),t(`p`,Me,p(L.value||f(m)(`employees.errors.identity_conflict`)),1)):s(``,!0),P.value?(e(),g(v,{key:9,size:`sm`,disabled:N.value,onClick:o[5]||=e=>Q()},{default:l(()=>[c(p(f(m)(`employees.reloadScope`)),1)]),_:1},8,[`disabled`])):s(``,!0),R.value?(e(),t(`div`,Ne,[d(`strong`,null,p(f(m)(`employees.scopeSaved`)),1),d(`p`,null,p(D.value===`all`?f(m)(`employees.scope.successAll`,{count:K.value.length}):K.value.length?f(m)(`employees.successMultiple`,{count:K.value.length}):f(m)(`employees.successUnassigned`)),1)])):s(``,!0)],64)):(e(),t(`p`,pe,p(f(m)(`employees.noTemplates`)),1))]),_:2},[H.value&&!B.value?{name:`footer`,fn:l(()=>[n(v,{variant:`ghost`,disabled:I.value,onClick:$},{default:l(()=>[c(p(f(m)(`employees.cancel`)),1)]),_:1},8,[`disabled`]),Y.value&&Be.value&&!I.value&&!N.value&&!P.value&&H.value.runtimeStatus===`ready`?(e(),g(f(b),{key:0,class:`ui-button ui-button--primary`,to:Be.value,onClick:$},{default:l(()=>[c(p(f(m)(`employees.open`)),1)]),_:1},8,[`to`])):(e(),g(v,{key:1,variant:`primary`,type:`submit`,busy:I.value,"busy-label":ze.value,disabled:N.value||P.value||!M.value||Y.value||H.value.identityConflict||!r.personalSpaceId},{default:l(()=>[c(p(ze.value),1)]),_:1},8,[`busy`,`busy-label`,`disabled`]))]),key:`0`}:void 0]),1032,[`open`,`title`,`busy`]))}}),[[`__scopeId`,`data-v-10a25b01`]]);export{k as n,A as t};