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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/README.md +101 -29
  2. package/README.zh-CN.md +74 -27
  3. package/dist/web/assets/AboutPage-Bi4E7wSy.js +1 -0
  4. package/dist/web/assets/AboutPage-BkpqvBhp.css +1 -0
  5. package/dist/web/assets/AgentName-CKA8o3DK.js +1 -0
  6. package/dist/web/assets/AgentProfilePage-0ksQ58aV.css +1 -0
  7. package/dist/web/assets/AgentProfilePage-DoWYikZx.js +1 -0
  8. package/dist/web/assets/AgentsDirectoryPage-DoOXStj-.css +1 -0
  9. package/dist/web/assets/AgentsDirectoryPage-DubxSJXK.js +1 -0
  10. package/dist/web/assets/ConnectionsPage-Y9Ll8XwK.js +1 -0
  11. package/dist/web/assets/CreateProjectDialog-T2ISpEdQ.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-DA6MLiX4.js +1 -0
  15. package/dist/web/assets/EmployeeWorkbenchPage-BFSzzB5b.css +1 -0
  16. package/dist/web/assets/EmployeeWorkbenchPage-BQrxgK-1.js +3 -0
  17. package/dist/web/assets/InboxPage-CSnVNoTP.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-TsODwgcQ.js +1 -0
  21. package/dist/web/assets/KnowledgeInspector-DaknAv7P.css +1 -0
  22. package/dist/web/assets/KnowledgeInspector-r2MFq5In.js +1 -0
  23. package/dist/web/assets/KnowledgeOrganizerPage-Bg2p9UBN.js +1 -0
  24. package/dist/web/assets/KnowledgeOrganizerPage-CxICN_0p.css +1 -0
  25. package/dist/web/assets/KnowledgePage-ClUQTumH.js +1 -0
  26. package/dist/web/assets/KnowledgeWorkspace-BGh6AEYh.js +4 -0
  27. package/dist/web/assets/KnowledgeWorkspace-BY_OoTDG.css +1 -0
  28. package/dist/web/assets/NotFoundPage-UodKAzSD.js +1 -0
  29. package/dist/web/assets/OccupationsPage-BXCJPqBB.css +1 -0
  30. package/dist/web/assets/OccupationsPage-C1hxB4uo.js +1 -0
  31. package/dist/web/assets/OverviewPage-C7OJfsL0.css +1 -0
  32. package/dist/web/assets/OverviewPage-DlWymsvL.js +2 -0
  33. package/dist/web/assets/PersonalProfilePage-BF5vSKIG.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-CN8CzEwx.js +1 -0
  37. package/dist/web/assets/ProjectAgentFirstTask-1ZqQx7TD.js +1 -0
  38. package/dist/web/assets/ProjectAgentFirstTask-D1RrWjaX.css +1 -0
  39. package/dist/web/assets/ProjectAgentsPage-BdAKFeHd.css +1 -0
  40. package/dist/web/assets/ProjectAgentsPage-DAub8kxJ.js +12 -0
  41. package/dist/web/assets/ProjectScopePicker-C5Qs2q55.js +1 -0
  42. package/dist/web/assets/PublicProjectsPage-BagwGxkm.js +1 -0
  43. package/dist/web/assets/PublicProjectsPage-DlmcjqGj.css +1 -0
  44. package/dist/web/assets/RoundtablesPage-BE0EM4sU.js +1 -0
  45. package/dist/web/assets/RoundtablesPage-DLZIf0Pu.css +1 -0
  46. package/dist/web/assets/SettingsPage-CfyHImb3.css +1 -0
  47. package/dist/web/assets/SettingsPage-CpyIq-BG.js +1 -0
  48. package/dist/web/assets/SharedJefaReportPage-Cj6nm6w-.js +1 -0
  49. package/dist/web/assets/TaskExecutionPlan-BFVcb7KN.css +1 -0
  50. package/dist/web/assets/TaskExecutionPlan-DFh08QFN.js +2 -0
  51. package/dist/web/assets/TaskSchedulesPage-Cs_pzUIm.js +1 -0
  52. package/dist/web/assets/TaskSchedulesPage-sheRrvlF.css +1 -0
  53. package/dist/web/assets/TextField-DnkSv9Ye.js +1 -0
  54. package/dist/web/assets/UiDialog-DMozYPbD.js +1 -0
  55. package/dist/web/assets/UiDisclosure-BkmYnV5V.js +1 -0
  56. package/dist/web/assets/UiIcon-D_OCiZ2T.js +1 -0
  57. package/dist/web/assets/UiIcon-EWCwhyKc.css +1 -0
  58. package/dist/web/assets/UiIconButton-CSFA7F4B.css +1 -0
  59. package/dist/web/assets/UiIconButton-CaxMAEd6.js +1 -0
  60. package/dist/web/assets/UiSegmented-DirGF0fz.js +1 -0
  61. package/dist/web/assets/UiSelect-CiSPw-7k.css +1 -0
  62. package/dist/web/assets/UiSelect-iDXgMBmg.js +1 -0
  63. package/dist/web/assets/UiToggle-B2sPCVZe.css +1 -0
  64. package/dist/web/assets/UiToggle-DNvok1W_.js +1 -0
  65. package/dist/web/assets/UnassignedConversationsPanel-LcjLO-S7.js +1 -0
  66. package/dist/web/assets/VirtualDirectoryList-rmg4zT6b.js +1 -0
  67. package/dist/web/assets/Workbench3D-BxpszsXO.css +1 -0
  68. package/dist/web/assets/Workbench3D-DVM9HEZI.js +2 -0
  69. package/dist/web/assets/WritingTastePage-B9nMV49S.css +1 -0
  70. package/dist/web/assets/WritingTastePage-ifJbdlZs.js +1 -0
  71. package/dist/web/assets/agent-identity-color-RqpT7gtx.js +1 -0
  72. package/dist/web/assets/agent-occupation-BODbxMc2.js +1 -0
  73. package/dist/web/assets/agent-pins-CtGOL6hE.js +1 -0
  74. package/dist/web/assets/agent-profile-BWgoaYE6.css +1 -0
  75. package/dist/web/assets/agent-work-summary-9jEiDLve.js +1 -0
  76. package/dist/web/assets/astro-avatar-GADWtfJX.webp +0 -0
  77. package/dist/web/assets/attention-store-CVJJ9eFY.js +1 -0
  78. package/dist/web/assets/{avatars-z6ANYG_r.js → avatars-CUyfvsKO.js} +1 -1
  79. package/dist/web/assets/catalog-DoiBFHyb.js +1 -0
  80. package/dist/web/assets/client-B_QrPkEy.css +1 -0
  81. package/dist/web/assets/client-CRiPFGQo.js +1 -0
  82. package/dist/web/assets/console-Dl-Zf-vm.js +1 -0
  83. package/dist/web/assets/conversation-launcher-settings-DUaL_j2q.js +1 -0
  84. package/dist/web/assets/date-time-DBa_h9cD.js +1 -0
  85. package/dist/web/assets/design-lab-DQJjssoJ.js +1 -0
  86. package/dist/web/assets/galaxy-scene-7sJk1pHo.js +1 -0
  87. package/dist/web/assets/i18n-DYrQWclR.js +10 -0
  88. package/dist/web/assets/{identity-CAQk8V-Q.js → identity-B3k8Qjz8.js} +1 -1
  89. package/dist/web/assets/index-CPPm_vKK.js +2 -0
  90. package/dist/web/assets/index-CUiJp41v.css +1 -0
  91. package/dist/web/assets/judgment-types-YhMdw8_r.js +1 -0
  92. package/dist/web/assets/layout-DCeMsVR8.js +1 -0
  93. package/dist/web/assets/model-CgiRuBdV.js +1 -0
  94. package/dist/web/assets/motion-preference-CgUW4x60.js +1 -0
  95. package/dist/web/assets/occupation-catalog-C1dtWRD4.js +1 -0
  96. package/dist/web/assets/office-scene-CbmeA3ZZ.js +1 -0
  97. package/dist/web/assets/personal-profile-graph-C9t0-CUF.js +1 -0
  98. package/dist/web/assets/preload-helper-Czpn1I53.js +1 -0
  99. package/dist/web/assets/project-origin-BthRWajS.js +1 -0
  100. package/dist/web/assets/project-team-api-DLYFf3Df.js +1 -0
  101. package/dist/web/assets/shared-report-NXHxLp5x.css +1 -0
  102. package/dist/web/assets/shared-report-T8YWwLIB.js +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-DCM3k8vr.js +1 -0
  106. package/dist/web/assets/task-updates-ChvjLQXV.js +1 -0
  107. package/dist/web/assets/ui-8PDiMeCo.js +1 -0
  108. package/dist/web/assets/ui-gkBKztsv.css +1 -0
  109. package/dist/web/assets/useAgentRecords-Bw9B25sk.js +1 -0
  110. package/dist/web/assets/{useApi-CROJJdhE-sOV3uq1T.js → useApi-CROJJdhE-Di-SEzl3.js} +1 -1
  111. package/dist/web/assets/vue-router-CG6ezAck.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 +194 -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 +36 -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 +75 -66
  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 +30 -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 +63 -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) ·
@@ -91,6 +136,10 @@ forks the conversation; Codex records the exchange in it (or uses a new session
91
136
  open in the app). A message that cannot be delivered waits in the recipient's inbox for its
92
137
  next task.
93
138
 
139
+ Agents can also keep direct and group chats with `agent_chat`. Messages are pushed: an Agent
140
+ that calls `wait` gets new messages at once, and a direct message or an `@` mention wakes an
141
+ Agent that is not waiting. Chats only carry communication; they never change knowledge weights.
142
+
94
143
  Every exchange is kept locally; the console's Roundtable page shows who asked whom, through
95
144
  which client, and exactly what was said. Tools and limits: [Agent Roundtable](docs/agent-roundtable.md).
96
145
 
@@ -360,18 +409,16 @@ sequenceDiagram
360
409
  opt The task creates a decision, contradiction, or stale signal
361
410
  A->>F: Record rationale or knowledge feedback
362
411
  end
363
- A->>F: checkpoint_task_knowledge
364
- alt A small durable candidate batch exists
412
+ opt Something is worth keeping (candidates, a decision, a meaningful work log)
413
+ A->>F: checkpoint_task_knowledge
365
414
  F->>G: capture_candidates
366
- else Nothing should be retained
367
- F-->>A: retain_nothing
368
415
  end
369
416
 
370
417
  alt Loaded and trusted Claude Code / Codex Stop hook
371
418
  L->>F: verify_task_checkpoint
372
- F-->>L: Allow stop only after review
373
- else Cursor reminder or prompt-fallback agent
374
- Note over A,F: Same contract; a bounded reminder is not an unconditional Stop gate
419
+ F-->>L: Close a routine task as retain_nothing / reported, otherwise remind
420
+ else Cursor or an Agent without a Stop hook
421
+ Note over A,F: Same contract. A routine fallback task closes at the next task entry
375
422
  end
376
423
  A-->>U: Return the result and any Fuli sources actually used
377
424
  ```
@@ -473,6 +520,17 @@ Core mechanisms covered by implementation and automated tests include:
473
520
  - common-knowledge discovery and preview-token-protected atomic promotion;
474
521
  - read-only multi-project MCP, Notion, Feishu/Lark, Dify-compatible RAG Retrieval API, and trusted-code bindings with connected retrieval.
475
522
 
523
+ New in 0.20 (public preview `0.20.0-beta`, see the [release notes](docs/releases/0.20.0.md)):
524
+
525
+ - **Projects and people**: unassigned conversations go to Astro, Jefa triages them, and a topic becomes a project after three conversations. Every project has a brief and every Agent an occupation, which Bole recruits by.
526
+ - **Tasks**: assign without starting (backlog), schedule recurring tasks that pause after repeated failures, and stop, retry, or review any run from the task details. A temporary failure is retried automatically only when no prompt was sent.
527
+ - **Decisions**: an Agent that needs you asks in the conversation first. A request that must wait for you goes to the Decisions page, and your reply reaches the Agent that asked.
528
+ - **Roundtable**: besides asks (`message_agent`), Agents have direct and group chats (`agent_chat`) with push delivery and `wait`; the console shows them live.
529
+ - **Memory between projects**: weighted links (related, frequent, close) say how much one project may draw on another. Weights never grant access.
530
+ - **Lower token cost**: a smaller task entry, shared rules read on demand, long preference lists read in pages, and a Stop hook that closes routine tasks without another model turn.
531
+ - **Console**: six entries (Workbench, Agents, Conversations, Projects, Memory, Settings), a phone layout, and Alt/Option-click explanations for any status or term.
532
+ - **Windows**: an installed build with Update-Fuli, Rollback-Fuli, and Uninstall-Fuli that keeps your data.
533
+
476
534
  The following must not be presented as already proven:
477
535
 
478
536
  - the A/B thresholds in `FULI_ALIGNMENT_BENCHMARK.md` are acceptance conventions; claims that Fuli
@@ -553,6 +611,7 @@ system locale. User data such as paths and space names is displayed unchanged.
553
611
  | `fuli open [--data-dir DIR]` | Open the current management UI in the default browser |
554
612
  | `fuli graph export --output DIR [--mode container\|native]` | Export graph data as a checksummed, copyable offline bundle |
555
613
  | `fuli graph import --input DIR [--target-mode container\|native] [--yes]` | Verify and replace target graph data, preserving an automatic pre-import rollback bundle |
614
+ | `fuli graph migrate --to native [--yes]` | Move a container graph to native mode, accepted only when node and relationship counts match |
556
615
  | `fuli update [setup options]` | Update the npm package and refresh local integrations |
557
616
  | `fuli uninstall [--yes] [--data-dir DIR]` | Remove agent integrations and services while preserving knowledge data and Neo4j volumes |
558
617
 
@@ -669,6 +728,18 @@ fuli setup --yes --runtime-mode native --memory-profile low --adaptive-memory
669
728
  fuli graph import --target-mode native --input "$HOME/Backups/fuli-container" --yes
670
729
  ```
671
730
 
731
+ Or run the same steps as one command, from a package that has the native runtime (on Windows the
732
+ installed Fuli desktop package):
733
+
734
+ ```bash
735
+ fuli graph migrate --to native
736
+ ```
737
+
738
+ It stops the running console, counts and exports the container graph, sets up native mode, imports,
739
+ and accepts the result only when every label and relationship-type count matches. On any failure it
740
+ switches back to container mode. The container volume is only read and is left stopped, never removed.
741
+ Client integrations are not changed.
742
+
672
743
  Swap `container` and `native` for the reverse direction. Export briefly stops the source database
673
744
  and resumes only services that were actually running beforehand. Import validates the manifest and
674
745
  every dump's SHA-256 before stopping the target. It preserves the old target under `backups/graph`
@@ -699,8 +770,9 @@ refreshes only clients with an existing Fuli MCP entry. Existing knowledge, conf
699
770
  and Neo4j volumes remain intact. Reuse any custom setup options during updates.
700
771
 
701
772
  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.
773
+ new MCP process. To repair existing integrations that still have a Fuli MCP entry without upgrading,
774
+ run `fuli setup --yes --connected-only`. Clients that are `skills-only`, `removed`, or newly added
775
+ (no Fuli MCP entry) require a full `fuli setup`.
704
776
 
705
777
  Uninstall:
706
778
 
package/README.zh-CN.md CHANGED
@@ -14,20 +14,30 @@
14
14
  <a href="LICENSE"><img src="https://img.shields.io/npm/l/fuli-context?style=flat" alt="许可证" /></a>
15
15
  </p>
16
16
 
17
- **换 AI 工具,不用换搭档。**
17
+ **换 AI 工具,留住你自己。**
18
+
19
+ 复利(Fuli)就是 **compound interest**:收益再生收益。
20
+
21
+ 复利的初衷,是在你和 AI 一起工作时,留住你自己的品味、个性和判断。我们相信,人不必再事事亲力亲为。
22
+ 你可以腾出手来做决定、想点子,也可以歇一歇。
23
+
24
+ 复利支持 Codex、Claude Code,以及其他支持 MCP 和 Skills 的 Agent 客户端。让这些客户端接入同一份 Fuli 数据,
25
+ 就能继续和同一位 Agent 合作,延续它记录下的工作和相关上下文。
26
+
27
+ AI 能接手的工作越来越多。复利帮你完成这段过渡,同时让你自己的判断始终居中。
18
28
 
19
29
  复利是跨兼容 MCP 客户端的长期 Agent 协作层。让 AI 工具接入同一份可访问的 Fuli 数据,
20
30
  选中同一位 Agent,就能延续它的身份、项目职责和相关工作脉络。运行 `fuli connect` 获取标准
21
31
  MCP 配置,有适配器的客户端还支持自动配置(Codex、Claude Code、Cursor,以及使用精简聊天工具集的 Claude
22
32
  桌面版)。详见[客户端接入](docs/client-connections.md)。
23
33
 
24
- - **搭档留得住:**任务结束后,Agent 的职责、合作记录与工作记忆继续保留。
25
- - **上下文有边界:**按需取回项目知识、决定与偏好,保留来源、作用域和确认状态。
26
- - **需要时一起做:**协调不同专长的 Agent,通过可用且获授权的客户端或执行器开展任务,记录真实执行。
27
- - **每个任务都有负责人:**在项目目录里直接提需求,Fuli 自动登记项目并安排一位负责 Agent;回复最后一行写明谁负责、谁协助。
28
- - **三位专职随时在岗:**Jefa 管项目,Bole 做 AR(Agent Resources),负责招募与人员安排,Tonborg 帮你做判断;每个空间都自带这三位。
29
- - **按你的偏好判断:**[Tonborg](docs/judgment-and-autonomy.md) 在你设定的自主程度内协助审核、建议客户端与模型。每次判断都有记录,点赞、点踩或补一句理由,帮助它改进后续判断。
30
- - **Agent 之间直接对话:**通过[圆桌](#agent-圆桌),一个 Agent 可以直接去问另一段对话里的 Agent,往来全程留痕。
34
+ - **搭档留得住**:任务结束后,Agent 的职责、合作记录与工作记忆继续保留。
35
+ - **上下文有边界**:按需取回项目知识、决定与偏好,保留来源、作用域和确认状态。
36
+ - **需要时一起做**:协调不同专长的 Agent,通过可用且获授权的客户端或执行器开展任务,记录真实执行。
37
+ - **每个任务都有负责人**:在项目目录里直接提需求,Fuli 自动登记项目并安排一位负责 Agent;回复最后一行写明谁负责、谁协助。
38
+ - **三位专职随时在岗**:Jefa 管项目,Bole 做 AR(Agent Resources),负责招募与人员安排,Tonborg 帮你做判断;每个空间都自带这三位。
39
+ - **按你的偏好判断**:[Tonborg](docs/judgment-and-autonomy.md) 在你设定的自主程度内协助审核、建议客户端与模型。每次判断都有记录,点赞、点踩或补一句理由,帮助它改进后续判断。
40
+ - **Agent 之间直接对话**:通过[圆桌](#agent-圆桌),一个 Agent 可以直接去问另一段对话里的 Agent,往来全程留痕。
31
41
 
32
42
  这里的“长期”指身份和上下文持续存在。Fuli 负责组织上下文与协调任务,接入的 AI 工具负责执行。
33
43
  能采集、接续哪些对话取决于客户端适配器;换工具不会自动获得其他项目的私有记忆。
@@ -37,7 +47,14 @@ AI 负责检索、提醒、归纳和执行;人始终保留最终判断权。
37
47
 
38
48
  ## 先用起来
39
49
 
40
- 准备好 Node.js 24.12+ 和 Docker Compose v2 后,运行:
50
+ 安装 Fuli、接入客户端,并通过一次实际工具调用完成验证。完整要求见[安装](#安装);配置格式、Hook 与排错见
51
+ [客户端接入(英文)](docs/client-connections.md)。
52
+
53
+ 登录、Hook 信任与人工审核仍由人确认。**“设置 → 客户端接入”显示 `已接入`(`connected`)仅代表客户端配置文件中已有当前版本的 Fuli 条目,不代表客户端进程已加载该 MCP、Hook 已送达上下文或工具已成功调用。**
54
+
55
+ ### 1. 安装
56
+
57
+ 在具备 Node.js 24.12+ 和 Docker Compose v2 的环境下(默认容器模式;macOS / Linux 原生模式见[安装](#安装)),运行:
41
58
 
42
59
  ```bash
43
60
  npm install --global fuli-context
@@ -45,18 +62,26 @@ fuli setup
45
62
  fuli open
46
63
  ```
47
64
 
48
- 设置向导会先展示计划,再修改环境。完整要求与 macOS / Linux 原生运行方式见[安装](#安装)。
65
+ 设置向导会先展示计划,再修改环境。
66
+
67
+ ### 2. 接入客户端
68
+
69
+ - **已检测到 Codex、Claude Code、Cursor 或 Claude 桌面版:** `fuli setup` 会写入 MCP 配置及支持的
70
+ Hook / Skills。只在启动时读取配置的应用须退出重开,重连后新建任务;Codex Hook 信任须在 Codex 的 `/hooks` 中人工审阅。
71
+ - **其他 MCP 客户端:** 运行 `fuli connect`(或打开控制台 **设置 → 客户端接入**),将 `fuli` 条目合并到客户端 MCP 配置并保留其他服务器,再按该客户端要求重载或信任连接。`fuli connect` 只打印 JSON。
72
+
73
+ ### 3. 首次实际工具调用与验证
49
74
 
50
- 第一次可以试一次跨工具接续:在项目目录里提一个需求(Fuli 会登记项目并安排负责 Agent),在一个已接入客户端完成任务,
51
- 再把这位 Agent 的接续指令带到连接同一份数据的另一客户端。检查它是否找对项目、恢复上次的工作,
52
- 并在缺少信息时如实说明。支持范围见[Agent 对话与协作说明](docs/agent-conversations-and-collaboration.md)。
75
+ 1. 运行 `fuli status`,确认管理界面与个人图谱就绪(默认 `http://127.0.0.1:2727`)。
76
+ 2. 在客户端中确认 Fuli 工具已出现,并在项目目录里**发起一次实际工具调用**(例如让 Agent 读取当前项目协作偏好或协调一个小任务),检查它是否找对项目(或登记项目并安排负责 Agent),且在缺少信息时如实询问而非编造。
77
+ 3. 可选的跨工具接续:把这位 Agent 的接续指令带到连接同一份数据的另一客户端,验证它能否恢复同一位 Agent、项目和上次工作。支持范围见[Agent 对话与协作说明](docs/agent-conversations-and-collaboration.md)。
53
78
 
54
- 临时任务也能交给 Agent:本次源码支持在没有匹配到已登记项目时,建立隔离的**临时项目**,
55
- 继续用 Fuli 协调任务。任务历史会保留,Agent 招募与执行器授权沿用现有规则;
56
- 单纯读取偏好不会创建项目,多个候选项目仍需明确选择。此能力已包含在正式版中。
79
+ 临时任务也能交给 Agent:本次源码支持在没有匹配到已登记项目时建立隔离的**临时项目**;单纯读取偏好不会创建项目,多个候选项目仍需明确选择。Fuli 会保留其任务历史,并遵循既有的 Agent 招募与执行器权限。Agent 目录提供首次任务入口,任务详情只有在收到真实执行报告后才展示完成汇总——仅分配了 Agent 或普通本机对话都不等于工作进程证据。
57
80
 
58
- Agent 目录提供首次任务入口,任务详情会区分“已分配”和“收到工作进程报告”。
59
- 只有上报真实执行后才有完成汇总;分配了 Agent、或仅完成普通本机对话,都不等于已运行工作进程。
81
+ ### 4. 排错与恢复
82
+
83
+ 若安装、客户端检测或工具调用失败,见[常见失败与恢复(英文)](docs/client-connections.md#common-failure-recovery)。
84
+ `fuli setup --yes --connected-only` 仅用于刷新仍保留 Fuli MCP 条目的客户端(“设置”页显示**已接入** / `connected` 或**配置有变化** / `changed`);显示**只剩技能文件**(`skills_left`)、**已移除**(`removed`)、**未接入**(`not_connected`)或新安装的客户端(无 Fuli MCP 条目)须运行完整的 `fuli setup`。
60
85
 
61
86
  [工作原理](#项目理念) · [安装](#安装) · [Agent 角色与团队](docs/employee-agents.md) ·
62
87
  [跨客户端验收](acceptance/cross-client-handoff.md) · [参与贡献](CONTRIBUTING.md) ·
@@ -70,6 +95,9 @@ Agent 调用 `message_agent`,Fuli 在对方自己的客户端里以只读方
70
95
  Claude Code 会 fork 原会话;Codex 会在原对话里记下这次问答(对话正在 Codex 中打开时改用新会话)。
71
96
  暂时唤不醒的消息会在对方下次开始任务时出现在它的收件箱里。
72
97
 
98
+ Agent 之间还可以用 `agent_chat` 私聊和建群。消息是推送的:调用 `wait` 的 Agent 会立刻收到新消息,
99
+ 私聊或 `@` 点名会唤醒不在等待的 Agent。聊天只负责通信,不会改变知识权重。
100
+
73
101
  每一段往来都保存在本机,控制台的“圆桌”页能看到谁问了谁、通过哪个客户端、原文和回答。
74
102
  工具与限制见[圆桌说明](docs/agent-roundtable.md)。
75
103
 
@@ -309,18 +337,16 @@ sequenceDiagram
309
337
  opt 产生决策、反证或失效证据
310
338
  A->>F: 记录理由或知识反馈
311
339
  end
312
- A->>F: checkpoint_task_knowledge
313
- alt 有少量可复用候选
340
+ opt 有值得保留的内容(候选、决策、有意义的工作记录)
341
+ A->>F: checkpoint_task_knowledge
314
342
  F->>G: capture_candidates
315
- else 没有值得长期保留的内容
316
- F-->>A: retain_nothing
317
343
  end
318
344
 
319
345
  alt 已加载并获信任的 Claude Code / Codex Stop Hook
320
346
  L->>F: verify_task_checkpoint
321
- F-->>L: 已检查才允许结束
322
- else Cursor 提醒或 Prompt fallback Agent
323
- Note over A,F: 遵循同一契约;有限提醒不是无条件 Stop Gate
347
+ F-->>L: 日常任务如实收尾为 retain_nothing / reported,其余给出提醒
348
+ else Cursor 或没有 Stop Hook 的 Agent
349
+ Note over A,F: 遵循同一契约。日常兜底任务在下一次任务入口时收尾
324
350
  end
325
351
  A-->>U: 返回结果与实际使用的 Fuli 来源
326
352
  ```
@@ -408,6 +434,17 @@ Agent 上下文。
408
434
  - 公共知识候选发现,以及预览令牌保护的原子提升;
409
435
  - MCP、Notion、飞书 / Lark、Dify 兼容 RAG Retrieval API 和可信自定义代码的只读多项目绑定与聚合检索。
410
436
 
437
+ 0.20 新增(公开预览版 `0.20.0-beta`,详见[发布说明](docs/releases/0.20.0.md)):
438
+
439
+ - **项目与人员**:没有归属的会话先交给 Astro,Jefa 负责分诊,同一话题累计 3 个会话就成为正式项目。项目都有简介,Agent 都有职业,Bole 按职业招聘。
440
+ - **任务**:可以只指派不开工(backlog);可以定时创建任务,连续失败会自动暂停;在任务详情里可以停止、重试、回看任何一次运行。临时故障只在确定没发出指令时才自动重试。
441
+ - **待决策**:Agent 需要你时,先在当前会话里问你。需要等你稍后处理的请求进「待决策」页,你的回复会送回发起请求的 Agent。
442
+ - **圆桌**:除了问答(`message_agent`),Agent 之间还能私聊和群聊(`agent_chat`),支持推送和 `wait` 等待;控制台实时显示。
443
+ - **项目间记忆**:用权重(有关系 / 常往来 / 密切)表示一个项目能从另一个项目取多少记忆。权重不授予权限。
444
+ - **更省 Token**:任务入口更小,共享规则按需读取,长偏好分页读完,Stop Hook 直接收尾日常任务,省掉一次模型往返。
445
+ - **控制台**:六个入口(工作台、Agents、对话、项目、记忆、设置),适配手机;按住 Alt / Option 点任意状态或名词就能看到解释。
446
+ - **Windows**:安装版自带 Update-Fuli、Rollback-Fuli、Uninstall-Fuli,数据都会保留。
447
+
411
448
  仍需与“已经证明”区分的内容:
412
449
 
413
450
  - `FULI_ALIGNMENT_BENCHMARK.md` 中 A/B 阈值是验收约定;只有完成足量、同条件的真实配对任务
@@ -483,6 +520,7 @@ CLI 的帮助、交互提示、状态和错误信息固定使用英文,不跟
483
520
  | `fuli open [--data-dir DIR]` | 在默认浏览器中打开当前管理界面 |
484
521
  | `fuli graph export --output DIR [--mode container\|native]` | 把当前图数据导出为可校验、可复制的离线备份包 |
485
522
  | `fuli graph import --input DIR [--target-mode container\|native] [--yes]` | 校验备份并替换目标图数据;导入前自动保留回滚包 |
523
+ | `fuli graph migrate --to native [--yes]` | 把容器图谱迁移到原生模式;节点和关系数量完全一致才算成功 |
486
524
  | `fuli update [setup 选项]` | 更新 npm 包并刷新本机接入 |
487
525
  | `fuli uninstall [--yes] [--data-dir DIR]` | 清理 Agent 接入和服务,保留知识数据和 Neo4j 数据卷 |
488
526
 
@@ -591,6 +629,16 @@ fuli setup --yes --runtime-mode native --memory-profile low --adaptive-memory
591
629
  fuli graph import --target-mode native --input "$HOME/Backups/fuli-container" --yes
592
630
  ```
593
631
 
632
+ 也可以用一条命令完成同样的步骤(需要带原生运行时的安装包;Windows 上是已安装的 Fuli 桌面版):
633
+
634
+ ```bash
635
+ fuli graph migrate --to native
636
+ ```
637
+
638
+ 它会停止正在运行的控制台,统计并导出容器图谱,切到原生模式后导入;只有每种标签和关系类型的数量都一致,
639
+ 才接受迁移结果。任何一步失败都会切回容器模式。容器卷只会被读取,之后保持停止,不会被删除;
640
+ 客户端接入不受影响。
641
+
594
642
  反向迁移只需交换 `container` 和 `native`。导出会短暂停止来源数据库,完成后只恢复导出前
595
643
  确实在运行的服务;导入会先校验清单和每个 dump 的 SHA-256,再停止目标数据库。替换前的
596
644
  目标数据会自动保存在数据目录下的 `backups/graph`,导入失败时会立即尝试回滚。执行前应让
@@ -618,8 +666,7 @@ fuli update
618
666
  相同选项。
619
667
 
620
668
  已打开的客户端需要重新连接 Fuli MCP,或重启客户端后新建任务,才能加载新进程。
621
- 只需修复已有接入时,运行 `fuli setup --yes --connected-only`;接入新客户端仍使用普通
622
- `fuli setup`。
669
+ 只需修复仍保留 Fuli MCP 条目的已有接入时,运行 `fuli setup --yes --connected-only`;仅剩 Skills(`skills-only`)、已移除(`removed`)或新接入的客户端(无 Fuli MCP 条目)须运行完整的 `fuli setup`。
623
670
 
624
671
  卸载:
625
672
 
@@ -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-DYrQWclR.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
+ .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,O as t,T as n,X as r,dt as i,mt as a,x as o}from"./i18n-DYrQWclR.js";import{t as s}from"./vue-router-CG6ezAck.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-DYrQWclR.js";import{n as T,t as E}from"./console-Dl-Zf-vm.js";import{m as D}from"./useApi-CROJJdhE-Di-SEzl3.js";import{t as O}from"./vue-router-CG6ezAck.js";import{o as k,r as A,s as j}from"./client-CRiPFGQo.js";import{t as M}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{r as N}from"./ui-8PDiMeCo.js";import{t as ee}from"./UiSelect-iDXgMBmg.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-Bw9B25sk.js";import{n as oe}from"./paths-CDREouhi.js";import{t as se}from"./UiDisclosure-BkmYnV5V.js";import{t as ce}from"./AgentName-CKA8o3DK.js";import{i as le,n as z,t as ue}from"./occupation-catalog-C1dtWRD4.js";import{i as B,n as V,r as H,t as U}from"./agent-occupation-BODbxMc2.js";import{n as de,t as fe}from"./TaskExecutionPlan-DFh08QFN.js";import{a as pe,i as me,n as he}from"./agent-work-summary-9jEiDLve.js";import{a as ge,s as _e}from"./catalog-DoiBFHyb.js";import{t as ve}from"./project-team-api-DLYFf3Df.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
+ .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}