fuli-context 0.9.0 → 0.11.0

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 (210) hide show
  1. package/README.md +29 -58
  2. package/README.zh-CN.md +24 -54
  3. package/dist/web/assets/AboutPage-CKq4IRHd.js +1 -0
  4. package/dist/web/assets/AgentConversations-DfXiFvBN.js +2 -0
  5. package/dist/web/assets/AgentConversations-XqNEBY_2.css +1 -0
  6. package/dist/web/assets/AgentHand-BBM-sKh2.js +1 -0
  7. package/dist/web/assets/AgentName-C_6R80nP.js +1 -0
  8. package/dist/web/assets/AgentProfilePage-Cz-i1fRD.js +1 -0
  9. package/dist/web/assets/AgentsDirectoryPage-BI0EFz6y.js +1 -0
  10. package/dist/web/assets/AgentsDirectoryPage-yRWktiin.css +1 -0
  11. package/dist/web/assets/ConnectionsPage-BoC6kXgs.js +1 -0
  12. package/dist/web/assets/ConnectionsPage-CM9C-zEI.css +1 -0
  13. package/dist/web/assets/EmployeeRecruitDialog-BVyclQAJ.js +1 -0
  14. package/dist/web/assets/EmployeeRecruitDialog-CVbqCzHb.css +1 -0
  15. package/dist/web/assets/EmployeeWorkbenchPage-D-c_Jm2z.css +1 -0
  16. package/dist/web/assets/EmployeeWorkbenchPage-D2GvYraI.js +3 -0
  17. package/dist/web/assets/KnowledgeEditDialog-a0AKWics.js +1 -0
  18. package/dist/web/assets/KnowledgeEditDialog-hT9znkoe.css +1 -0
  19. package/dist/web/assets/KnowledgeInspector-DMg9yJZ2.js +1 -0
  20. package/dist/web/assets/KnowledgeOrganizerPage-BgsHM3Qw.js +1 -0
  21. package/dist/web/assets/KnowledgeOrganizerPage-DeL7Jp34.css +1 -0
  22. package/dist/web/assets/KnowledgePage-kn8MqUCO.js +1 -0
  23. package/dist/web/assets/KnowledgeWorkspace-BtRq9fvC.js +4 -0
  24. package/dist/web/assets/KnowledgeWorkspace-D4a7FcAb.css +1 -0
  25. package/dist/web/assets/NotFoundPage-D-7jLz3o.js +1 -0
  26. package/dist/web/assets/OverviewPage-BHPc-XxY.js +1 -0
  27. package/dist/web/assets/OverviewPage-By-fUzSG.css +1 -0
  28. package/dist/web/assets/PersonalProfilePage-C00iV0Kx.js +1 -0
  29. package/dist/web/assets/PersonalProfilePage-DrMDAAdy.css +1 -0
  30. package/dist/web/assets/PersonalProjectsPage-CFNkdHSo.js +1 -0
  31. package/dist/web/assets/ProjectAgentFirstTask-Bi1ZsTC1.css +1 -0
  32. package/dist/web/assets/ProjectAgentFirstTask-CrCWEYgn.js +1 -0
  33. package/dist/web/assets/ProjectAgentsPage-BzztLMH-.js +12 -0
  34. package/dist/web/assets/ProjectAgentsPage-DNLNjYp-.css +1 -0
  35. package/dist/web/assets/ProjectScopePicker-CMxn3txv.js +1 -0
  36. package/dist/web/assets/PublicProjectsPage-DKamXDV9.css +1 -0
  37. package/dist/web/assets/PublicProjectsPage-DQVtvhOS.js +1 -0
  38. package/dist/web/assets/ReviewPage-BZhvyDWc.js +1 -0
  39. package/dist/web/assets/RoundtablesPage-CVebTXQa.js +1 -0
  40. package/dist/web/assets/RoundtablesPage-Cb0R4GaM.css +1 -0
  41. package/dist/web/assets/SettingsPage-1knvfOW6.js +1 -0
  42. package/dist/web/assets/SettingsPage-BmYkLul4.css +1 -0
  43. package/dist/web/assets/SharedJefaReportPage-BCVq8u0P.js +1 -0
  44. package/dist/web/assets/UiDialog-Da1P10f4.js +1 -0
  45. package/dist/web/assets/UiDisclosure-8wE8YuE4.js +1 -0
  46. package/dist/web/assets/UiSegmented-BKZXc8QF.js +1 -0
  47. package/dist/web/assets/UiSelect-Bv6R0yr1.css +1 -0
  48. package/dist/web/assets/UiSelect-D5Xj5Ec4.js +1 -0
  49. package/dist/web/assets/WritingTastePage-B8-etOBn.js +1 -0
  50. package/dist/web/assets/WritingTastePage-B_zYD1df.css +1 -0
  51. package/dist/web/assets/agent-profile-BZj3ezWe.css +1 -0
  52. package/dist/web/assets/{attention-store-Dk-_P4Oi.js → attention-store-BfxtL9EV.js} +1 -1
  53. package/dist/web/assets/{catalog-DN72452f.js → catalog-6SN9i3WR.js} +1 -1
  54. package/dist/web/assets/client-CUTkF3t4.js +1 -0
  55. package/dist/web/assets/{console-BtPqo79j.js → console-CG8tdtSs.js} +1 -1
  56. package/dist/web/assets/{conversation-launcher-settings-jkHRmWai.js → conversation-launcher-settings-CyZkLJg7.js} +1 -1
  57. package/dist/web/assets/{i18n-D2CJkEYK.js → i18n-CCMR4gDS.js} +3 -3
  58. package/dist/web/assets/{identity-B3zEw-1u.js → identity-C1eN-FSB.js} +1 -1
  59. package/dist/web/assets/index-kPB0Cf8Q.css +1 -0
  60. package/dist/web/assets/index-sLDKI6R-.js +5 -0
  61. package/dist/web/assets/{model-S7ehAjky.js → model-l-sAqtW_.js} +1 -1
  62. package/dist/web/assets/{personal-profile-graph--GG3Mizo.js → personal-profile-graph-BD1Y6TDS.js} +1 -1
  63. package/dist/web/assets/shared-report-B46dxlCR.js +1 -0
  64. package/dist/web/assets/{useAgentRoster-BAPKWZ9y.js → useAgentRoster-DdxoKDEE.js} +1 -1
  65. package/dist/web/assets/{useApi-CROJJdhE-BtFMXFjw.js → useApi-CROJJdhE-DlOiu8lP.js} +1 -1
  66. package/dist/web/assets/{vue-router-DkaTtPn0.js → vue-router-DjqEU4W2.js} +1 -1
  67. package/dist/web/index.html +14 -16
  68. package/docs/agent-conversations-and-collaboration.md +9 -9
  69. package/docs/agent-roundtable.md +61 -0
  70. package/docs/employee-agents.md +2 -2
  71. package/docs/project-agent-memory.md +1 -1
  72. package/graph-provider/fuli_graph/agent_conversation_models.py +11 -2
  73. package/graph-provider/fuli_graph/conversation_context.py +40 -9
  74. package/graph-provider/fuli_graph/default_project_lead.py +88 -0
  75. package/graph-provider/fuli_graph/project_agent_memory_routes.py +7 -0
  76. package/graph-provider/fuli_graph/project_agent_task_models.py +3 -0
  77. package/graph-provider/fuli_graph/runtime.py +3 -76
  78. package/graph-provider/fuli_graph/store.py +2 -0
  79. package/graph-provider/fuli_graph/store_agent_conversations.py +60 -8
  80. package/graph-provider/fuli_graph/store_project_agent_task_recruitment.py +3 -1
  81. package/graph-provider/fuli_graph/store_project_agent_tasks.py +12 -8
  82. package/graph-provider/fuli_graph/store_project_agents.py +25 -124
  83. package/graph-provider/fuli_graph/store_task_contexts.py +26 -0
  84. package/graph-provider/fuli_graph/system_agents.py +128 -0
  85. package/graph-provider/fuli_graph/system_hr_identity.py +1 -1
  86. package/graph-provider/fuli_graph/task_context_routes.py +10 -0
  87. package/graph-provider/pyproject.toml +1 -1
  88. package/npm-shrinkwrap.json +2 -2
  89. package/package.json +2 -4
  90. package/skills/capturing-session-knowledge/SKILL.md +1 -1
  91. package/src/agent-roundtable/http.js +14 -0
  92. package/src/agent-roundtable/service.js +218 -0
  93. package/src/agent-roundtable/store.js +86 -0
  94. package/src/agent-roundtable/tools.js +61 -0
  95. package/src/agent-roundtable/wake.js +99 -0
  96. package/src/agent-tools/agent-conversation-definitions.js +3 -3
  97. package/src/agent-tools/graph-definitions.js +3 -2
  98. package/src/agent-tools/interface-catalog.js +0 -5
  99. package/src/agent-tools.js +2 -2
  100. package/src/agents/claude-code/lifecycle-hook.js +6 -19
  101. package/src/agents/claude-code/wake.js +37 -0
  102. package/src/agents/codex/lifecycle-hook.js +51 -27
  103. package/src/agents/codex/token-usage.js +235 -0
  104. package/src/agents/codex/wake.js +47 -0
  105. package/src/agents/cursor/lifecycle-hook.js +3 -9
  106. package/src/agents/identity-receipt.js +16 -6
  107. package/src/agents/session-log.js +34 -0
  108. package/src/agents/token-usage-resolver.js +147 -0
  109. package/src/agents/wake-registry.js +14 -0
  110. package/src/cli/command-registry.js +0 -2
  111. package/src/cli/setup-command.js +2 -5
  112. package/src/cli/update-command.js +13 -2
  113. package/src/cli.js +0 -5
  114. package/src/employees/management-policy.js +4 -2
  115. package/src/employees/manifest.js +3 -0
  116. package/src/employees/recruitment.js +3 -2
  117. package/src/graphiti/agent-conversations.js +11 -9
  118. package/src/graphiti/agent-knowledge-workflows.js +34 -7
  119. package/src/graphiti/federated-application.js +18 -6
  120. package/src/graphiti/project-agent-mapping.js +1 -1
  121. package/src/graphiti/project-agent-task-entry.js +19 -7
  122. package/src/graphiti/project-agent-workflows.js +6 -1
  123. package/src/graphiti/project-path-context.js +7 -2
  124. package/src/graphiti/provider-client.js +8 -0
  125. package/src/graphiti/repository-project-registration.js +17 -0
  126. package/src/graphiti/task-entry-preferences.js +5 -0
  127. package/src/http/api-router.js +5 -3
  128. package/src/http/error-mapping.js +0 -2
  129. package/src/mcp/instructions.js +5 -5
  130. package/src/mcp/session-id.js +1 -1
  131. package/src/mcp/tool-annotations.js +3 -2
  132. package/src/setup/agents.js +1 -41
  133. package/src/setup/graph-runtime.js +15 -2
  134. package/src/setup/session-skill.js +22 -2
  135. package/dist/web/assets/AboutPage-D-GyJNv1.js +0 -1
  136. package/dist/web/assets/AgentConversations-DOuZgUeA.js +0 -2
  137. package/dist/web/assets/AgentConversations-DS8h3yKn.css +0 -1
  138. package/dist/web/assets/AgentHand-eGsXoGSq.js +0 -1
  139. package/dist/web/assets/AgentName-Dtmu9Ff5.js +0 -1
  140. package/dist/web/assets/AgentProfilePage-D8Tvayn7.js +0 -1
  141. package/dist/web/assets/AgentsDirectoryPage-BTEfKZjF.js +0 -1
  142. package/dist/web/assets/ConnectionsPage-C1w99yN3.css +0 -1
  143. package/dist/web/assets/ConnectionsPage-DwOIcvl9.js +0 -1
  144. package/dist/web/assets/EmployeeRecruitDialog-BrIMRblq.css +0 -1
  145. package/dist/web/assets/EmployeeRecruitDialog-D11blfwU.js +0 -1
  146. package/dist/web/assets/EmployeeWorkbenchPage-BcEzYt65.css +0 -1
  147. package/dist/web/assets/EmployeeWorkbenchPage-CK2BAoGt.js +0 -3
  148. package/dist/web/assets/GrowthLoading-KTjE2e50.js +0 -1
  149. package/dist/web/assets/KnowledgeEditDialog-B3x8vs3c.css +0 -1
  150. package/dist/web/assets/KnowledgeEditDialog-n9trHQ5d.js +0 -1
  151. package/dist/web/assets/KnowledgeInspector-BcNjgw9H.js +0 -1
  152. package/dist/web/assets/KnowledgeOrganizerPage-BzgxP-nG.css +0 -1
  153. package/dist/web/assets/KnowledgeOrganizerPage-DMBpGxLr.js +0 -1
  154. package/dist/web/assets/KnowledgePage-POkCMW8f.js +0 -1
  155. package/dist/web/assets/KnowledgeWorkspace-2FvQadhB.js +0 -4
  156. package/dist/web/assets/KnowledgeWorkspace-sb8OJ97I.css +0 -1
  157. package/dist/web/assets/NotFoundPage-BCMZbeB8.js +0 -1
  158. package/dist/web/assets/OverviewPage-0CFWCG9-.css +0 -1
  159. package/dist/web/assets/OverviewPage-0mYifpjp.js +0 -1
  160. package/dist/web/assets/PersonalProfilePage-Chv2a2pi.css +0 -1
  161. package/dist/web/assets/PersonalProfilePage-JW6Muix6.js +0 -1
  162. package/dist/web/assets/PersonalProjectsPage-CRbi64JP.js +0 -1
  163. package/dist/web/assets/ProjectAgentFirstTask-6afJ8HUe.css +0 -1
  164. package/dist/web/assets/ProjectAgentFirstTask-DJ0wTbh8.js +0 -1
  165. package/dist/web/assets/ProjectAgentsPage-BgQLIpxg.css +0 -1
  166. package/dist/web/assets/ProjectAgentsPage-CQemHFxy.js +0 -12
  167. package/dist/web/assets/ProjectScopePicker-BwB7gK-7.js +0 -1
  168. package/dist/web/assets/PublicProjectsPage-CB272Sq-.js +0 -1
  169. package/dist/web/assets/ReviewPage-CelTZU4C.js +0 -1
  170. package/dist/web/assets/RoundtablesPage-ByVeZlgC.js +0 -2
  171. package/dist/web/assets/RoundtablesPage-DCbIBnBq.css +0 -1
  172. package/dist/web/assets/SearchableSelect-f7EHbyDL.js +0 -1
  173. package/dist/web/assets/SettingsPage-5g7mRN2F.css +0 -1
  174. package/dist/web/assets/SettingsPage-nAijmm5f.js +0 -1
  175. package/dist/web/assets/SharedJefaReportPage-CjpJ9bkk.js +0 -1
  176. package/dist/web/assets/UiDisclosure-CWlC91Zt.js +0 -1
  177. package/dist/web/assets/WritingTastePage-DaHWY61P.js +0 -1
  178. package/dist/web/assets/WritingTastePage-SMGF39mf.css +0 -1
  179. package/dist/web/assets/agent-profile-CBvJHGjt.css +0 -1
  180. package/dist/web/assets/client-B2cRl-7c.js +0 -1
  181. package/dist/web/assets/copy-D2LqwtPZ.js +0 -1
  182. package/dist/web/assets/index-CNp0tRNp.css +0 -1
  183. package/dist/web/assets/index-UygXwZDZ.js +0 -5
  184. package/dist/web/assets/shared-report-DEK9wvhl.js +0 -1
  185. package/dist/web/assets/useModalDialog-D8tiJfbc.js +0 -1
  186. package/docs/roundtable-beta-testing.md +0 -102
  187. package/docs/roundtable-beta-validation.md +0 -133
  188. package/docs/roundtable-research.md +0 -142
  189. package/src/agents/a2a/roundtable-participant.js +0 -374
  190. package/src/agents/claude-code/roundtable-participant.js +0 -24
  191. package/src/agents/codex/roundtable-config.js +0 -32
  192. package/src/agents/codex/roundtable-participant.js +0 -34
  193. package/src/agents/grok/roundtable-participant.js +0 -185
  194. package/src/agents/pi/roundtable-participant.js +0 -193
  195. package/src/agents/pi/roundtable-result-format.js +0 -183
  196. package/src/cli/roundtable-command.js +0 -79
  197. package/src/roundtables/application.js +0 -69
  198. package/src/roundtables/domain.js +0 -181
  199. package/src/roundtables/http-router.js +0 -56
  200. package/src/roundtables/mcp-server.js +0 -48
  201. package/src/roundtables/participant-registry.js +0 -12
  202. package/src/roundtables/process.js +0 -70
  203. package/src/roundtables/result-contract.js +0 -47
  204. package/src/roundtables/server.js +0 -52
  205. package/src/roundtables/service.js +0 -396
  206. package/src/roundtables/store.js +0 -59
  207. package/src/roundtables/tool-contract.js +0 -41
  208. package/src/roundtables/turn-prompt.js +0 -24
  209. package/src/roundtables/worker.js +0 -85
  210. /package/dist/web/assets/{GrowthLoading-CIuQ1icy.css → client-CIuQ1icy.css} +0 -0
package/README.md CHANGED
@@ -25,6 +25,11 @@ its identity, project responsibilities, and relevant working context.
25
25
  their sources, scope, and confirmation status.
26
26
  - **A team when needed:** coordinate specialist agents and record actual worker execution through
27
27
  an available, authorized host client or executor.
28
+ - **Every task has an owner:** ask for work inside a project directory; Fuli registers the project
29
+ and staffs a lead agent. The reply ends with who led and who helped.
30
+ - **A fixed PM and HR:** Jefa (project manager) and Bole (HR) come with every space; no hiring needed.
31
+ - **Agents talk to each other:** through the [Roundtable](#agent-roundtable), one agent asks another
32
+ conversation directly, and every exchange is recorded.
28
33
 
29
34
  “Long-lived” means persistent identity and context. Fuli assembles that context and coordinates
30
35
  work; the connected AI tools run it. Client adapters determine which conversations can be captured
@@ -49,8 +54,8 @@ fuli open
49
54
  The setup wizard shows its plan before changing your environment. See [Installation](#installation)
50
55
  for requirements and the macOS/Linux native runtime option.
51
56
 
52
- To try a cross-tool handoff, register a local project and assign an agent, complete a task through
53
- one connected client, then use the agent's continuation instruction in another client connected
57
+ To try a cross-tool handoff, ask for a task inside a project directory (Fuli registers the project and
58
+ staffs a lead agent), complete it through one connected client, then use the agent's continuation instruction in another client connected
54
59
  to the same data. Check whether it recovers the correct project and prior work, and asks for
55
60
  missing context rather than inventing it. See [Agent conversations and collaboration](docs/agent-conversations-and-collaboration.md)
56
61
  for supported adapters and boundaries.
@@ -59,7 +64,7 @@ For a one-off task, this source version also supports an isolated **temporary pr
59
64
  connected client to coordinate the task with Fuli even when no registered project matches. Fuli
60
65
  retains its task history and follows the existing Agent recruitment and executor permissions.
61
66
  Reading preferences alone creates nothing. An ambiguous project still needs a choice.
62
- This behavior is included in the `0.9.0-beta.2` prerelease.
67
+ This behavior is available in the stable release.
63
68
 
64
69
  The Agent directory now explains the first-task entry, and task details distinguish assignment
65
70
  from actual worker reports. A completion table appears only after real execution is reported;
@@ -70,60 +75,18 @@ an assigned Agent or an ordinary local conversation alone is not worker evidence
70
75
  [Cross-client acceptance](acceptance/cross-client-handoff.md) · [Contribute](CONTRIBUTING.md) ·
71
76
  [Report an issue](https://github.com/JevonsCode/fuli/issues/new/choose)
72
77
 
73
- ## Agent Roundtable (Beta)
78
+ ## Agent Roundtable
74
79
 
75
- The [validation record](docs/roundtable-beta-validation.md) includes a genuine seven-turn Codex run, an independently verified file and an explicit review result. Physical multi-computer and external service checks remain separate.
80
+ Agents talk to each other directly, the way a lead asks a teammate or a sub-agent. A Codex
81
+ Agent can ask the Agent behind a specific Claude Code conversation, or a FULI Agent that has
82
+ never run yet. Nobody creates rooms or invites participants: an Agent calls `message_agent`,
83
+ Fuli wakes the recipient read-only in its own client and returns its answer: Claude Code
84
+ forks the conversation; Codex records the exchange in it (or uses a new session while it is
85
+ open in the app). A message that cannot be delivered waits in the recipient's inbox for its
86
+ next task.
76
87
 
77
- Give independent agents one shared goal, discuss proposals, hand work to implementers, and review
78
- the result before accepting delivery. Fuli keeps lasting identity and scoped knowledge; the
79
- roundtable keeps this collaboration's messages, turns, task dependencies, dissent and receipts.
80
- Workers run on the participants' own computers and pull only their authorized turns.
81
-
82
- | Product layer | Availability | Responsibility |
83
- | --- | --- | --- |
84
- | Identity and knowledge | Available | Persistent agent roles, relevant context, project scope, provenance and temporal history |
85
- | Roundtable coordination | Beta | Discussion, planning, implementation, review, synthesis and explicit human acceptance |
86
- | Runtime adapters | Beta | Codex CLI, Claude Code CLI, Pi with local Ollama, active MCP participation and xAI API; A2A is experimental within supported protocol paths |
87
- | Delivery across computers | Beta | One coordinator, revocable seat invitations, participant workers and actual execution receipts |
88
- | Closed platforms and always-on cloud hosting | Planned | Require separate callable integrations and operational verification |
89
-
90
- Start a standalone coordinator, then open `http://127.0.0.1:3738/roundtables`:
91
-
92
- ```bash
93
- npm install -g fuli-context@beta
94
- fl roundtable serve --data-dir ./roundtable-data --port 3738
95
- ```
96
-
97
- Create a discussion or collaborative task, assign 2–6 seats with one moderator, and create a seat
98
- invitation. Every participant completes preflight and joins before the owner starts the room.
99
- Selecting an adapter alone does not launch an agent. A collaborative task needs implementer and
100
- reviewer roles; writing requires both the owner's explicit workspace permission and the worker
101
- user's `--allow-write`. Reviews and workers default to read only.
102
-
103
- On a participant's computer, keep the invitation in `FULI_ROUNDTABLE_TOKEN`, then run:
104
-
105
- ```bash
106
- fl roundtable worker --url https://COORDINATOR --room ROOM_ID --runtime codex --workspace /local/project
107
- ```
108
-
109
- Use `claude-code`, `pi`, `grok`, or `a2a` for the corresponding adapter. Pi requires an installed local Ollama model selected with `--model`; see the [beta testing guide](docs/roundtable-beta-testing.md). Grok requires `XAI_API_KEY` and `XAI_MODEL` on the
110
- worker; A2A requires `--a2a-url`. The coordinator must expose a reachable HTTPS peer endpoint and
111
- set `--public-url https://COORDINATOR`; keep owner control on local loopback. The invitation UI
112
- generates participant commands and exposes credentials once without storing them in browser storage.
113
-
114
- Pi / Ollama is experimental: real tool actions and file references are checked, but tested local models can still produce inaccurate reports. Use an independent reviewer before accepting delivery.
115
-
116
- An MCP participant uses `https://COORDINATOR/roundtable-peer/v1/rooms/ROOM_ID/mcp` with the seat
117
- credential as Bearer authentication, then actively calls `join_roundtable`, `read_roundtable`,
118
- `claim_roundtable_turn`, and `submit_roundtable_turn`. A [Grok Team Bot can configure a custom remote
119
- HTTPS MCP server](https://docs.x.ai/grok-bot/team-bots) through its official settings. This is
120
- separate from a Grok API seat and does not use an API to wake an existing Bot chat.
121
-
122
- Only actual source receipts produce execution rows. Missing model or usage data stays unknown;
123
- joining, preflight and assignment do not count as execution. Runtime sources are participant
124
- reports, and the server does not independently verify native process identity. Beta adapters still need live
125
- verification with the intended credentials, clients and computers. Full A2A conformance,
126
- cloud availability and arbitrary closed-platform support are not established by protocol tests.
88
+ Every exchange is kept locally; the console's Roundtable page shows who asked whom, through
89
+ which client, and exactly what was said. Tools and limits: [Agent Roundtable](docs/agent-roundtable.md).
127
90
 
128
91
  ## npm packages
129
92
 
@@ -536,6 +499,14 @@ npm install --global fuli-context
536
499
  fuli setup
537
500
  ```
538
501
 
502
+ Or use the one-line installer, which checks the Node.js version first:
503
+
504
+ ```bash
505
+ curl -fsSL https://xn--8ovp9s.xn--m8txu.com/fuli/install.sh | sh
506
+ ```
507
+
508
+ On Windows PowerShell: `irm https://xn--8ovp9s.xn--m8txu.com/fuli/install.ps1 | iex`.
509
+
539
510
  `fuli setup` first shows its plan and asks for confirmation. It then checks the container runtime,
540
511
  initializes local Graphiti / Neo4j, creates a personal space, installs the companion Agent Skills,
541
512
  and registers the `fuli` MCP with detected agents. The default setup connects only the personal
@@ -657,7 +628,7 @@ containers; it does not shut down Rancher Desktop, Docker Desktop, Kubernetes, o
657
628
  itself. Native mode directly stops the corresponding Provider and Neo4j processes, so no shared VM
658
629
  overhead remains while idle.
659
630
 
660
- **Project Agents → Recruit employee** provides reusable employee templates. Jefa is the project manager; Bole is the built-in HR Agent with a native people panel for Agent distribution, current work, and recruitment history.
631
+ Jefa (project manager) and Bole (HR, with a native people panel for Agent distribution, current work and recruitment history) are fixed roles in every space and are never hired. **Project Agents → Hire an Agent** offers the other reusable employee templates.
661
632
  Recruitment reuses a durable identity with separate project assignments. An installed employee workbench,
662
633
  API and A2A share the FULI port; existing FULI MCP clients discover and call its tools. Recruitment does not
663
634
  start a model or rewrite client settings. See the [employee package and extension contract](docs/employee-agents.md).
@@ -666,8 +637,8 @@ Project Agent identities remain control-plane records rather than one resident p
666
637
  Roles now keep versioned, project-private working memory in the same Neo4j Provider. Task entry
667
638
  restores one owner across Codex, Claude Code and Cursor; lifecycle checkpoints survive separate
668
639
  MCP processes. See [role memory, host hooks and acceptance boundaries](docs/project-agent-memory.md).
669
- Supported Codex and Claude Code hooks also journal visible conversations, with 7-day inactivity
670
- archival and bounded recovery. Specialist loans and artifact verification share the same Provider.
640
+ Supported Codex and Claude Code hooks also journal visible conversations. Once unfolded messages pass
641
+ a size threshold (64 KB by default), older ones fold into a digest; recovery stays within a byte budget. Specialist loans and artifact verification share the same Provider.
671
642
  See [conversation continuity and collaboration](docs/agent-conversations-and-collaboration.md)
672
643
  for client coverage, model capability configuration and acceptance limits.
673
644
  Physical executors share leases by executor ID. Fuli starts and stops only executors with an explicitly
package/README.zh-CN.md CHANGED
@@ -22,6 +22,9 @@
22
22
  - **搭档留得住:**任务结束后,Agent 的职责、合作记录与工作记忆继续保留。
23
23
  - **上下文有边界:**按需取回项目知识、决定与偏好,保留来源、作用域和确认状态。
24
24
  - **需要时一起做:**协调不同专长的 Agent,通过可用且获授权的客户端或执行器开展任务,记录真实执行。
25
+ - **每个任务都有负责人:**在项目目录里直接提需求,Fuli 自动登记项目并安排一位负责 Agent;回复最后一行写明谁负责、谁协助。
26
+ - **项目经理与 HR 固定在岗:**Jefa(项目经理)和 Bole(HR)随空间自带,不需要招募。
27
+ - **Agent 之间直接对话:**通过[圆桌](#agent-圆桌),一个 Agent 可以直接去问另一段对话里的 Agent,往来全程留痕。
25
28
 
26
29
  这里的“长期”指身份和上下文持续存在。Fuli 负责组织上下文与协调任务,接入的 AI 工具负责执行。
27
30
  能采集、接续哪些对话取决于客户端适配器;换工具不会自动获得其他项目的私有记忆。
@@ -41,13 +44,13 @@ fuli open
41
44
 
42
45
  设置向导会先展示计划,再修改环境。完整要求与 macOS / Linux 原生运行方式见[安装](#安装)。
43
46
 
44
- 第一次可以试一次跨工具接续:登记一个本地项目、分配一位 Agent,在一个已接入客户端完成任务,
47
+ 第一次可以试一次跨工具接续:在项目目录里提一个需求(Fuli 会登记项目并安排负责 Agent),在一个已接入客户端完成任务,
45
48
  再把这位 Agent 的接续指令带到连接同一份数据的另一客户端。检查它是否找对项目、恢复上次的工作,
46
49
  并在缺少信息时如实说明。支持范围见[Agent 对话与协作说明](docs/agent-conversations-and-collaboration.md)。
47
50
 
48
51
  临时任务也能交给 Agent:本次源码支持在没有匹配到已登记项目时,建立隔离的**临时项目**,
49
52
  继续用 Fuli 协调任务。任务历史会保留,Agent 招募与执行器授权沿用现有规则;
50
- 单纯读取偏好不会创建项目,多个候选项目仍需明确选择。此能力包含在 `0.9.0-beta.2` 预发布中。
53
+ 单纯读取偏好不会创建项目,多个候选项目仍需明确选择。此能力已包含在正式版中。
51
54
 
52
55
  Agent 目录提供首次任务入口,任务详情会区分“已分配”和“收到工作进程报告”。
53
56
  只有上报真实执行后才有完成汇总;分配了 Agent、或仅完成普通本机对话,都不等于已运行工作进程。
@@ -56,57 +59,16 @@ Agent 目录提供首次任务入口,任务详情会区分“已分配”和
56
59
  [跨客户端验收](acceptance/cross-client-handoff.md) · [参与贡献](CONTRIBUTING.md) ·
57
60
  [反馈问题](https://github.com/JevonsCode/fuli/issues/new/choose)
58
61
 
59
- ## Agent 圆桌(Beta)
62
+ ## Agent 圆桌
60
63
 
61
- [验证记录](docs/roundtable-beta-validation.md)包含真实的 Codex 七轮协作、独立核对的文件和明确的审查结果。多台物理电脑与外部服务分别验收。
64
+ Agent 之间可以直接对话,就像负责人去问一位同事或子 Agent。比如 Codex 里的 Agent 可以问
65
+ 某一段 Claude Code 对话里的 Agent,也可以问一位还没运行过的 FULI Agent。不需要人建房间或拉人:
66
+ Agent 调用 `message_agent`,Fuli 在对方自己的客户端里以只读方式唤醒它并把回答带回来:
67
+ Claude Code 会 fork 原会话;Codex 会在原对话里记下这次问答(对话正在 Codex 中打开时改用新会话)。
68
+ 暂时唤不醒的消息会在对方下次开始任务时出现在它的收件箱里。
62
69
 
63
- 让独立 Agent 围绕同一个目标,先讨论方案,再交接实施和审查,由你验收交付。
64
- Fuli 管理长期身份与有边界的知识;圆桌保存本次公开消息、回合、任务依赖、分歧与实际回执。
65
- 各参与者在自己的电脑上运行工作端,主动领取获授权的回合。
66
-
67
- | 产品层 | 状态 | 职责 |
68
- | --- | --- | --- |
69
- | 身份与知识 | 已提供 | Agent 职责、相关脉络、项目范围、来源与时间历史 |
70
- | 圆桌协作 | Beta | 讨论、分工、实施、审查、汇总与明确的人工验收 |
71
- | 运行时接入 | Beta | Codex CLI、Claude Code CLI、Pi + 本地 Ollama、主动 MCP 参与和 xAI API;A2A 按已支持的协议能力试验接入 |
72
- | 跨电脑交付 | Beta | 一个协调端、可撤销席位邀请、参与端工作进程与真实执行回执 |
73
- | 封闭平台与云端常驻 | 待支持 | 需要独立的可调用接口与运行验收 |
74
-
75
- 启动独立协调端,再打开 `http://127.0.0.1:3738/roundtables`:
76
-
77
- ```bash
78
- npm install -g fuli-context@beta
79
- fl roundtable serve --data-dir ./roundtable-data --port 3738
80
- ```
81
-
82
- 创建讨论或协作任务,设置 2–6 个席位和一位主持人,生成席位邀请。
83
- 各参与端完成真实预检并加入后,由本地用户开始圆桌。选择平台本身不会启动 Agent。
84
- 协作任务需要实施者和审查者;写入需要创建者明确授权工作区,以及工作端用户的
85
- `--allow-write`。审查和工作端默认只读。
86
-
87
- 在参与者的电脑上,将邀请凭据设置为环境变量 `FULI_ROUNDTABLE_TOKEN`,然后运行:
88
-
89
- ```bash
90
- fl roundtable worker --url https://COORDINATOR --room ROOM_ID --runtime codex --workspace /local/project
91
- ```
92
-
93
- 将 runtime 换成 `claude-code`、`pi`、`grok` 或 `a2a` 使用对应适配器。Pi 使用本机 Ollama,通过 `--model` 选择已安装模型,配置见 [Beta 测试指南](docs/roundtable-beta-testing.md)。Grok 需要在工作端配置
94
- `XAI_API_KEY` 和 `XAI_MODEL`,A2A 需要 `--a2a-url`。跨电脑时,协调端提供可访问的 HTTPS 参与端入口,
95
- 并设置 `--public-url https://COORDINATOR`;所有者控制面保留在本机回环地址。
96
- 邀请界面提供可复制指令,凭据只在当前页面显示一次,不写入浏览器存储。
97
-
98
- Pi / Ollama 当前为试验能力:真实工具动作和文件引用受到检查,但已测试的本地模型仍可能输出不准确的报告,交付必须经过独立审查。
99
-
100
- MCP 参与者配置 `https://COORDINATOR/roundtable-peer/v1/rooms/ROOM_ID/mcp`,将席位凭据作为
101
- Bearer 认证秘密保存,再主动调用 `join_roundtable`、`read_roundtable`、
102
- `claim_roundtable_turn`、`submit_roundtable_turn`。
103
- [Grok Team Bot 官方支持自定义远程 HTTPS MCP](https://docs.x.ai/grok-bot/team-bots),可在其设置中
104
- 配置圆桌入口。这个接入与调用 xAI 的 Grok API 席位分别展示,不通过 API 唤醒现有 Bot 聊天。
105
-
106
- 只有实际来源回执会产生执行行;缺少模型或用量时标为未知。运行来源由参与端报告,服务端不独立证明
107
- 原生进程身份。加入、预检和任务分配都不是执行证据。
108
- Beta 适配器仍需在目标凭据、客户端和电脑上完成真实验收;协议测试不能证明完整 A2A 兼容、
109
- 云端常驻或任意封闭平台接入。参与同一圆桌不会共享他人的私有记忆,也不会扩大执行权限。
70
+ 每一段往来都保存在本机,控制台的“圆桌”页能看到谁问了谁、通过哪个客户端、原文和回答。
71
+ 工具与限制见[圆桌说明](docs/agent-roundtable.md)。
110
72
 
111
73
  ## npm 包
112
74
 
@@ -186,7 +148,7 @@ Agent 在酒店项目工作时先搜索酒店本地知识,再沿显式的 `PAR
186
148
  ### 7. 本地优先,公开层不包含个人模型
187
149
 
188
150
  个人图谱默认留在本机。支持的客户端适配器可保存可见对话,用于私有 Agent 接续;对话记录与
189
- 结构化、可复用的确认知识分开存储,默认使用 7 天不活跃窗口和有界上下文召回。凭据、临时日志
151
+ 结构化、可复用的确认知识分开存储,对话累积到一定量(默认 64 KB)后较早的消息折叠成摘要,召回有字节预算。凭据、临时日志
190
152
  与原始命令输出不应写入知识图谱。团队共享层只承载经过确认、具有上下文和来源的项目或领域知识,不包含个人的
191
153
  品味、个性和判断偏好。
192
154
 
@@ -472,6 +434,14 @@ npm install --global fuli-context
472
434
  fuli setup
473
435
  ```
474
436
 
437
+ 也可以一行安装,会先检查 Node.js 版本:
438
+
439
+ ```bash
440
+ curl -fsSL https://xn--8ovp9s.xn--m8txu.com/fuli/install.sh | sh
441
+ ```
442
+
443
+ Windows PowerShell:`irm https://xn--8ovp9s.xn--m8txu.com/fuli/install.ps1 | iex`。
444
+
475
445
  `fuli setup` 会先展示操作计划并请求确认,然后检查容器运行时、初始化本机
476
446
  Graphiti / Neo4j、创建个人空间、安装配套 Agent Skills,并为检测到的 Agent 注册 `fuli`
477
447
  MCP。默认只连接个人 Provider,不会模拟团队共享服务。
@@ -588,14 +558,14 @@ start 和 restart 会继续沿用。
588
558
  Kubernetes 或整台容器虚拟机;原生模式会直接停止对应 Provider 和 Neo4j 进程,因此空闲时
589
559
  不再保留共享虚拟机开销。
590
560
 
591
- “项目 Agent → 招募员工”支持可复用的默认员工模板。Jefa 是项目经理;Bole 是固定 HR Agent,原生人员面板可查看 Agent 分布、当前工作与招募历史。招募复用持久身份,
561
+ Jefa(项目经理)和 Bole(HR,原生人员面板可查看 Agent 分布、当前工作与招募历史)是每个空间固定在岗的角色,不需要招募。“Agents → 聘请 Agent”提供其他可复用的员工模板。招募复用持久身份,
592
562
  按项目单独任职;安装员工包后,侧栏工作台与 API/A2A 共用 FULI 端口,已有 FULI MCP 可发现和调用员工工具。
593
563
  招募不等于启动模型,也不改写已有客户端配置。详见[员工包安装与扩展协议](docs/employee-agents.md)。
594
564
 
595
565
  Project Agent 身份仍是控制面记录,不会每个身份常驻一个进程。角色工作记忆按项目私有、
596
566
  版本化地保存在同一个 Neo4j Provider 中;任务入口恢复唯一负责人,结束检查跨 MCP 进程持久化。
597
567
  详见[角色记忆、宿主 hooks 与验收边界](docs/project-agent-memory.md)。受支持的 Codex 和
598
- Claude Code Hook 还会保存可见对话,默认闲置 7 天归档、按预算恢复。跨项目借调与
568
+ Claude Code Hook 还会保存可见对话,累积到一定量后折叠成摘要,按预算恢复。跨项目借调与
599
569
  产物验证沿用同一个 Provider;客户端覆盖及模型能力配置见
600
570
  [对话与协作](docs/agent-conversations-and-collaboration.md)。实际执行器按 ID 共用租约:
601
571
  只有显式注入受管生命周期适配器的执行器才由 Fuli 启停;Codex 等宿主自己拥有的外部执行器
@@ -0,0 +1 @@
1
+ import{C as e,M as t,P as n,S as r,_ as i,a,b as o,g as s,it as c,m as l,tt as u,w as d}from"./i18n-CCMR4gDS.js";import{t as f}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as p}from"./fuli-logo-Bu9WBuQe.js";var m=[`aria-label`],ee={class:`label-dimension-strip`},h=[`data-dimension`],g={class:`label-guide-sheet`},_={class:`label-guide-section profile-guide`},v={class:`label-definition-list`},y=[`data-kind`],b={class:`label-guide-section quadrant-guide`},x={class:`quadrant-explainer`},S={class:`quadrant-y-axis`,"aria-hidden":`true`},C=[`aria-label`],w=[`data-quadrant`],T={class:`quadrant-x-axis`,"aria-hidden":`true`},E={class:`quadrant-notes`},D={class:`label-guide-section confirmation-guide`},O={class:`status-table-wrap`},k={class:`status-definition-table`},A={scope:`col`},j={scope:`col`},M={scope:`col`},N={scope:`row`},P=[`data-status`],F=[`data-label`],I=[`data-label`],L={class:`status-boundaries`},R={class:`label-example`},z={class:`label-example-tags`,"aria-hidden":`true`},B={class:`label-token profile-token`,"data-kind":`taste`},V={class:`label-token origin-token`},H={class:`label-token status-token`,"data-status":`confirmed`},U={class:`label-all-note`},W=f(d({__name:`LabelGuide`,setup(e){let d=s(()=>[{key:`profile`,title:a(`about.dimensions.profile.title`),question:a(`about.dimensions.profile.question`),timing:a(`about.dimensions.profile.timing`)},{key:`origin`,title:a(`about.dimensions.origin.title`),question:a(`about.dimensions.origin.question`),timing:a(`about.dimensions.origin.timing`)},{key:`confirmation`,title:a(`about.dimensions.confirmation.title`),question:a(`about.dimensions.confirmation.question`),timing:a(`about.dimensions.confirmation.timing`)}]),f=s(()=>[{key:`taste`,label:a(`about.profiles.taste.label`),short:a(`about.profiles.taste.short`),description:a(`about.profiles.taste.description`)},{key:`personality`,label:a(`about.profiles.personality.label`),short:a(`about.profiles.personality.short`),description:a(`about.profiles.personality.description`)},{key:`judgment`,label:a(`about.profiles.judgment.label`),short:a(`about.profiles.judgment.short`),description:a(`about.profiles.judgment.description`)}]),p=s(()=>[{key:`known-unknown`,label:a(`about.quadrants.knownUnknown.label`),coordinate:a(`about.quadrants.knownUnknown.coordinate`),description:a(`about.quadrants.knownUnknown.description`)},{key:`known-known`,label:a(`about.quadrants.knownKnown.label`),coordinate:a(`about.quadrants.knownKnown.coordinate`),description:a(`about.quadrants.knownKnown.description`)},{key:`unknown-unknown`,label:a(`about.quadrants.unknownUnknown.label`),coordinate:a(`about.quadrants.unknownUnknown.coordinate`),description:a(`about.quadrants.unknownUnknown.description`)},{key:`unknown-known`,label:a(`about.quadrants.unknownKnown.label`),coordinate:a(`about.quadrants.unknownKnown.coordinate`),description:a(`about.quadrants.unknownKnown.description`)}]),W=s(()=>[{key:`pending`,label:a(`about.statuses.pending.label`),description:a(`about.statuses.pending.description`),rule:a(`about.statuses.pending.rule`)},{key:`agent-confirmed`,label:a(`about.statuses.agentConfirmed.label`),description:a(`about.statuses.agentConfirmed.description`),rule:a(`about.statuses.agentConfirmed.rule`)},{key:`confirmed`,label:a(`about.statuses.confirmed.label`),description:a(`about.statuses.confirmed.description`),rule:a(`about.statuses.confirmed.rule`)}]);return(e,s)=>(t(),o(`section`,{class:`label-guide`,"aria-label":u(a)(`about.labelsAria`)},[i(`div`,ee,[(t(!0),o(l,null,n(d.value,e=>(t(),o(`article`,{key:e.key,"data-dimension":e.key},[s[0]||=i(`i`,{"aria-hidden":`true`},null,-1),i(`dl`,null,[i(`dt`,null,c(e.title),1),i(`dd`,null,[r(c(e.question)+` `,1),i(`small`,null,c(e.timing),1)])])],8,h))),128))]),i(`div`,g,[i(`section`,_,[i(`header`,null,[i(`span`,null,c(u(a)(`about.sections.profile.index`)),1),i(`div`,null,[i(`h3`,null,c(u(a)(`about.sections.profile.title`)),1),i(`p`,null,c(u(a)(`about.sections.profile.meta`)),1)])]),i(`dl`,v,[(t(!0),o(l,null,n(f.value,e=>(t(),o(`div`,{key:e.key,class:`label-definition-row`},[i(`dt`,null,[i(`span`,{class:`label-token profile-token`,"data-kind":e.key},c(e.label),9,y)]),i(`dd`,null,[i(`strong`,null,c(e.short),1),i(`p`,null,c(e.description),1)])]))),128))])]),i(`section`,b,[i(`header`,null,[i(`span`,null,c(u(a)(`about.sections.origin.index`)),1),i(`div`,null,[i(`h3`,null,c(u(a)(`about.sections.origin.title`)),1),i(`p`,null,c(u(a)(`about.sections.origin.meta`)),1)])]),i(`div`,x,[i(`div`,S,[i(`span`,null,c(u(a)(`about.quadrants.aware`)),1),i(`strong`,null,c(u(a)(`about.quadrants.awareness`)),1),i(`span`,null,c(u(a)(`about.quadrants.unaware`)),1)]),i(`div`,{class:`quadrant-grid`,role:`group`,"aria-label":u(a)(`about.sections.origin.title`)},[(t(!0),o(l,null,n(p.value,e=>(t(),o(`article`,{key:e.key,"data-quadrant":e.key},[i(`span`,null,c(e.coordinate),1),i(`strong`,null,c(e.label),1),i(`p`,null,c(e.description),1)],8,w))),128))],8,C),i(`div`,T,[i(`span`,null,c(u(a)(`about.quadrants.unmastered`)),1),i(`strong`,null,c(u(a)(`about.quadrants.mastery`)),1),i(`span`,null,c(u(a)(`about.quadrants.mastered`)),1)]),i(`div`,E,[i(`p`,null,c(u(a)(`about.quadrants.immutable`)),1),i(`p`,null,c(u(a)(`about.quadrants.unclassified`)),1)])])]),i(`section`,D,[i(`header`,null,[i(`span`,null,c(u(a)(`about.sections.confirmation.index`)),1),i(`div`,null,[i(`h3`,null,c(u(a)(`about.sections.confirmation.title`)),1),i(`p`,null,c(u(a)(`about.sections.confirmation.meta`)),1)])]),i(`div`,O,[i(`table`,k,[i(`thead`,null,[i(`tr`,null,[i(`th`,A,c(u(a)(`about.sections.confirmation.title`)),1),i(`th`,j,c(u(a)(`about.statuses.descriptionHeader`)),1),i(`th`,M,c(u(a)(`about.statuses.entryCondition`)),1)])]),i(`tbody`,null,[(t(!0),o(l,null,n(W.value,e=>(t(),o(`tr`,{key:e.key,class:`status-definition-row`},[i(`th`,N,[i(`span`,{class:`label-token status-token`,"data-status":e.key},c(e.label),9,P)]),i(`td`,{"data-label":u(a)(`about.statuses.descriptionHeader`)},c(e.description),9,F),i(`td`,{"data-label":u(a)(`about.statuses.entryCondition`)},[i(`strong`,null,c(e.rule),1)],8,I)]))),128))])]),i(`div`,L,[i(`p`,null,c(u(a)(`about.statuses.usageBoundary`)),1),i(`p`,null,c(u(a)(`about.statuses.resetBoundary`)),1)])])]),i(`section`,R,[i(`div`,null,[i(`span`,null,c(u(a)(`about.example.title`)),1),i(`strong`,null,c(u(a)(`about.example.item`)),1)]),i(`div`,z,[i(`span`,B,c(u(a)(`about.example.profile`)),1),i(`span`,V,c(u(a)(`about.example.origin`)),1),i(`span`,H,c(u(a)(`about.example.status`)),1)]),i(`p`,null,c(u(a)(`about.example.description`)),1)]),i(`p`,U,c(u(a)(`about.allFilter`)),1)])],8,m))}}),[[`__scopeId`,`data-v-234eb38f`]]),G={class:`open-source-credits`,"aria-labelledby":`credits-title`},K={class:`credits-heading`},q={id:`credits-title`},J={class:`credit-list`},Y=[`href`],X={class:`credit-role`},te={class:`credit-name`},Z={class:`credit-source-note`},Q={class:`fuli-finale`},ne={class:`finale-logo-plate`},re=[`src`],ie={class:`finale-brand`},ae={class:`finale-site-link`,"data-testid":`about-website-link`,href:`https://xn--8ovp9s.xn--m8txu.com/fuli/`,target:`_blank`,rel:`noreferrer`},oe=f(d({__name:`OpenSourceCredits`,setup(e){let r=s(()=>[{name:`Vue.js`,role:a(`about.credits.roles.vue`),url:`https://vuejs.org/`},{name:`Vite`,role:a(`about.credits.roles.vite`),url:`https://vite.dev/`},{name:`Pinia`,role:a(`about.credits.roles.pinia`),url:`https://pinia.vuejs.org/`},{name:`D3.js`,role:a(`about.credits.roles.d3`),url:`https://d3js.org/`},{name:`Vitest`,role:a(`about.credits.roles.vitest`),url:`https://vitest.dev/`},{name:`Hono`,role:a(`about.credits.roles.hono`),url:`https://hono.dev/`},{name:`Neo4j`,role:a(`about.credits.roles.neo4j`),url:`https://neo4j.com/`},{name:`Zod`,role:a(`about.credits.roles.zod`),url:`https://zod.dev/`},{name:`FastAPI`,role:a(`about.credits.roles.fastapi`),url:`https://fastapi.tiangolo.com/`},{name:`Graphiti`,role:a(`about.credits.roles.graphiti`),url:`https://github.com/getzep/graphiti`},{name:`Model Context Protocol`,role:a(`about.credits.roles.mcp`),url:`https://modelcontextprotocol.io/`}]);return(e,s)=>(t(),o(`section`,G,[i(`header`,K,[s[0]||=i(`span`,{class:`credits-index`,"aria-hidden":`true`},`03`,-1),i(`div`,null,[i(`h2`,q,c(u(a)(`about.credits.title`)),1),i(`p`,null,c(u(a)(`about.credits.description`)),1)])]),i(`ul`,J,[(t(!0),o(l,null,n(r.value,e=>(t(),o(`li`,{key:e.name,class:`credit-item`},[i(`a`,{class:`credit-row`,href:e.url,target:`_blank`,rel:`noreferrer`},[i(`span`,X,c(e.role),1),i(`span`,te,[i(`strong`,null,c(e.name),1),s[1]||=i(`span`,{class:`credit-arrow`,"aria-hidden":`true`},`↗`,-1)])],8,Y)]))),128))]),i(`p`,Z,c(u(a)(`about.credits.sourceNote`)),1),i(`footer`,Q,[i(`span`,ne,[i(`img`,{src:u(p),alt:``,"aria-hidden":`true`},null,8,re)]),i(`div`,ie,[i(`strong`,null,c(u(a)(`common.brand`)),1),s[2]||=i(`span`,null,`Context Graph`,-1)]),i(`p`,null,c(u(a)(`about.credits.finale`)),1),i(`a`,ae,c(u(a)(`about.credits.website`)),1)])]))}}),[[`__scopeId`,`data-v-6191d078`]]),se={class:`product-principles`,"aria-labelledby":`principles-title`},ce={class:`principles-heading`},le={id:`principles-title`},ue={class:`principle-sequence`},de={class:`principle-boundaries`},fe=[`data-boundary`],pe=f(d({__name:`ProductPrinciples`,setup(e){let r=s(()=>[{key:`capture`,index:a(`about.philosophy.capture.index`),title:a(`about.philosophy.capture.title`),description:a(`about.philosophy.capture.description`)},{key:`project`,index:a(`about.philosophy.project.index`),title:a(`about.philosophy.project.title`),description:a(`about.philosophy.project.description`)},{key:`review`,index:a(`about.philosophy.review.index`),title:a(`about.philosophy.review.title`),description:a(`about.philosophy.review.description`)},{key:`reuse`,index:a(`about.philosophy.reuse.index`),title:a(`about.philosophy.reuse.title`),description:a(`about.philosophy.reuse.description`)}]),d=s(()=>[{key:`local`,title:a(`about.philosophy.local.title`),description:a(`about.philosophy.local.description`)},{key:`authority`,title:a(`about.philosophy.authority.title`),description:a(`about.philosophy.authority.description`)},{key:`scope`,title:a(`about.philosophy.scope.title`),description:a(`about.philosophy.scope.description`)}]);return(e,s)=>(t(),o(`section`,se,[i(`header`,ce,[s[0]||=i(`span`,{class:`principles-index`,"aria-hidden":`true`},`01`,-1),i(`div`,null,[i(`h2`,le,c(u(a)(`about.philosophy.sectionTitle`)),1),i(`p`,null,c(u(a)(`about.philosophy.support`)),1)])]),i(`div`,ue,[(t(!0),o(l,null,n(r.value,e=>(t(),o(`article`,{key:e.key},[i(`span`,null,c(e.index),1),i(`div`,null,[i(`h3`,null,c(e.title),1),i(`p`,null,c(e.description),1)])]))),128))]),i(`div`,de,[i(`h3`,null,c(u(a)(`about.philosophy.boundariesTitle`)),1),i(`div`,null,[(t(!0),o(l,null,n(d.value,e=>(t(),o(`article`,{key:e.key},[i(`i`,{"data-boundary":e.key,"aria-hidden":`true`},null,8,fe),i(`h4`,null,c(e.title),1),i(`p`,null,c(e.description),1)]))),128))])])]))}}),[[`__scopeId`,`data-v-6089df60`]]),me=[`aria-label`],he={class:`about-content`},ge={class:`about-opening`},_e={class:`about-brand-lockup`},ve={class:`about-logo-plate`},ye=[`src`],be={class:`about-brand-name`},$={class:`about-opening-claim`},xe={class:`about-opening-copy`},Se={class:`about-labels-section`,"aria-labelledby":`about-labels-title`},Ce={class:`about-section-heading`},we={id:`about-labels-title`},Te=f(d({__name:`AboutPage`,setup(n){return(n,r)=>(t(),o(`section`,{class:`view about-view`,"aria-label":u(a)(`about.aria`)},[i(`div`,he,[i(`header`,ge,[i(`div`,_e,[i(`span`,ve,[i(`img`,{"data-testid":`about-opening-logo`,src:u(p),alt:``,"aria-hidden":`true`},null,8,ye)]),i(`span`,be,c(u(a)(`common.brand`)),1)]),i(`p`,$,c(u(a)(`about.philosophy.title`)),1),i(`p`,xe,c(u(a)(`about.philosophy.intro`)),1)]),e(pe),i(`section`,Se,[i(`header`,Ce,[r[0]||=i(`span`,{class:`about-section-index`,"aria-hidden":`true`},`02`,-1),i(`div`,null,[i(`h2`,we,c(u(a)(`about.labelsIntro.title`)),1),i(`p`,null,c(u(a)(`about.labelsIntro.description`)),1)])]),e(W)]),e(oe)])],8,me))}}),[[`__scopeId`,`data-v-a41cabd8`]]);export{Te as default};
@@ -0,0 +1,2 @@
1
+ import{M as e,P as t,R as n,S as r,V as i,X as a,_ as o,a as s,b as c,c as ee,it as l,m as u,n as te,p as d,tt as f,u as p,v as m,w as h,y as g}from"./i18n-CCMR4gDS.js";import{a as ne,i as _,o as v}from"./client-CUTkF3t4.js";import{t as y}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as re}from"./UiSelect-D5Xj5Ec4.js";var ie={class:`conversation-hint`},ae={key:2,role:`alert`},oe={key:3,class:`conversation-list`},se=[`aria-pressed`,`disabled`,`onClick`],ce=[`datetime`],le=[`data-copy-continuation`,`onClick`],ue={key:1,"data-continuation-feedback":``},b={key:0,role:`status`,class:`conversation-hint`},de={role:`alert`,class:`conversation-hint`},fe=[`aria-label`,`value`],pe={key:2,class:`conversation-messages`},me={key:0,class:`conversation-hint`},he={key:2,role:`alert`},ge=[`onClick`],x=[`onClick`],S={key:4,class:`conversation-hint`},_e={key:4},ve=[`disabled`],ye={class:`capture-toggle`},be={class:`conversation-hint`},xe={class:`quiet-button`,type:`submit`},Se={key:1},Ce={key:2,role:`alert`},we={key:3,role:`status`},C=y(h({__name:`AgentConversations`,props:{personalSpaceId:{},agentId:{},projects:{}},setup(h){let y=h,C=a(``),w=a(!1),T=a(!1),E=a([]),D=a(!1),O=a(``),k=a(``),A=a([]),j=a(!1),M=a(``),N=a(),P=a(!1),F=a(!1),I=a(!1),L=a(``),R=a(!1),z=a(!1),B=a(64),V=a(4e3),H=a(!0),U=a(),W=0,G=0,K=0,q=0;function J(){return{personalSpaceId:y.personalSpaceId,personalProjectId:C.value,agentId:y.agentId}}function Y(e){return e instanceof Error?e.message:s(`projectAgents.conversations.loadFailed`)}n(()=>[y.agentId,y.personalSpaceId,y.projects.map(e=>e.id).join(`
2
+ `)],()=>{let e=y.projects.some(e=>e.id===C.value)?C.value:y.projects[0]?.id??``;e===C.value?X():C.value=e},{immediate:!0}),n(C,()=>void X());async function X(){let e=++W;if(++G,++K,++q,E.value=[],A.value=[],k.value=``,O.value=``,M.value=``,U.value=void 0,F.value=!1,I.value=!1,L.value=``,z.value=!1,R.value=!1,D.value=!1,j.value=!1,P.value=!1,!(!w.value||!C.value)){D.value=!0,T.value&&$();try{let t=await _(`/api/agent-conversations/query`,{...J(),mode:`list`,limit:20});e===W&&(E.value=t.conversations)}catch(t){e===W&&(O.value=Y(t))}finally{e===W&&(D.value=!1)}}}function Te(e){let t=e.target.open;t!==w.value&&(w.value=t,t?X():(++W,++G,++K,++q,U.value=void 0,T.value=!1))}async function Z(e,t=!1){if(j.value||!C.value)return;let n=++G;k.value=e,M.value=``,j.value=!0,t||(A.value=[],N.value=void 0,P.value=!1);try{let r=await _(`/api/agent-conversations/query`,{...J(),mode:`events`,conversationId:e,limit:20,...t&&N.value!==void 0?{after:N.value}:{}});if(n!==G)return;A.value=t?[...A.value,...r.events]:r.events,N.value=r.next_cursor,P.value=r.has_more===!0&&r.next_cursor!==void 0}catch(e){n===G&&(M.value=Y(e))}finally{n===G&&(j.value=!1)}}function Ee(e){T.value=e.target.open,T.value&&!F.value&&!I.value&&w.value&&$()}function Q(e){B.value=e.compact_after_kb,V.value=e.context_budget,H.value=e.enabled}async function $(){let e=++K;I.value=!0,L.value=``,z.value=!1;try{let t=await _(`/api/agent-conversations/query`,{...J(),mode:`policy`});e===K&&(Q(t),F.value=!0)}catch(t){e===K&&(L.value=Y(t))}finally{e===K&&(I.value=!1)}}async function De(){if(R.value||!F.value)return;if(z.value=!1,L.value=``,!Number.isInteger(B.value)||B.value<8||B.value>1024||!Number.isInteger(V.value)||V.value<512||V.value>16e3){L.value=s(`projectAgents.conversations.invalidPolicy`);return}let e=K;R.value=!0;try{let t=await ne(`/api/agent-conversations/policy`,{...J(),compactAfterKb:B.value,contextBudget:V.value,enabled:H.value});e===K&&(Q(t),z.value=!0)}catch(t){e===K&&(L.value=Y(t))}finally{e===K&&(R.value=!1)}}function Oe(e){let t=new Date(e);return Number.isNaN(t.getTime())?s(`projectAgents.notReported`):new Intl.DateTimeFormat(te(),{dateStyle:`short`,timeStyle:`short`}).format(t)}function ke(e){return[`user`,`assistant`,`tool`].includes(e)?s(`projectAgents.conversations.${e}`):e}function Ae(e){return typeof e==`string`?e:JSON.stringify(e,null,2)}async function je(e){let t=e.continuation_prompt;if(!t)return;let n=++q,r=C.value;U.value=void 0;try{let i=globalThis.navigator?.clipboard;if(!i?.writeText)throw Error(`Clipboard unavailable`);await i.writeText(t),n===q&&r===C.value&&(U.value={conversationId:e.id,state:`copied`})}catch{n===q&&r===C.value&&(U.value={conversationId:e.id,state:`fallback`})}}function Me(e){e.target.select()}return(n,a)=>(e(),c(`details`,{class:`agent-conversations`,onToggle:Te},[o(`summary`,null,l(f(s)(`projectAgents.conversations.title`)),1),w.value?(e(),c(u,{key:0},[h.projects.length?(e(),m(re,{key:0,modelValue:C.value,"onUpdate:modelValue":a[0]||=e=>C.value=e,field:``,label:f(s)(`projectAgents.fields.project`),options:h.projects.map(e=>({value:e.id,label:e.name}))},null,8,[`modelValue`,`label`,`options`])):g(``,!0),o(`p`,ie,l(f(s)(`projectAgents.conversations.hint`)),1),D.value?(e(),m(v,{key:1,variant:`compact`,label:f(s)(`projectAgents.conversations.loading`)},null,8,[`label`])):O.value?(e(),c(`div`,ae,[o(`p`,null,l(O.value),1),o(`button`,{"data-retry-list":``,class:`quiet-button`,type:`button`,onClick:X},l(f(s)(`projectAgents.retry`)),1)])):E.value.length?(e(),c(`ol`,oe,[(e(!0),c(u,null,t(E.value,n=>(e(),c(`li`,{key:n.id},[o(`button`,{"data-read-conversation":``,class:`conversation-link`,type:`button`,"aria-pressed":k.value===n.id,disabled:j.value,onClick:e=>Z(n.id)},[o(`strong`,null,l(n.summary||f(s)(`projectAgents.conversations.untitled`)),1),o(`span`,null,[r(l(n.compacted_through>0?f(s)(`projectAgents.conversations.compacted`):f(s)(`projectAgents.conversations.recent`))+` · `,1),o(`time`,{datetime:n.last_activity},l(Oe(n.last_activity)),9,ce)])],8,se),n.continuation_prompt?(e(),c(`button`,{key:0,"data-copy-continuation":n.id,class:`quiet-button continuation-copy`,type:`button`,onClick:e=>je(n)},l(f(s)(`projectAgents.conversations.copyContinuation`)),9,le)):g(``,!0),U.value?.conversationId===n.id?(e(),c(`div`,ue,[U.value.state===`copied`?(e(),c(`p`,b,l(f(s)(`projectAgents.conversations.copiedContinuation`)),1)):(e(),c(u,{key:1},[o(`p`,de,l(f(s)(`projectAgents.conversations.copyContinuationFailed`)),1),o(`textarea`,{"data-continuation-fallback":``,readonly:``,rows:`3`,"aria-label":f(s)(`projectAgents.conversations.manualContinuation`),value:n.continuation_prompt,onFocus:Me},null,40,fe)],64))])):g(``,!0),k.value===n.id?(e(),c(`div`,pe,[n.raw_retained?(e(),c(`p`,me,l(f(s)(`projectAgents.conversations.rawRetained`)),1)):g(``,!0),o(`ol`,null,[(e(!0),c(u,null,t(A.value,t=>(e(),c(`li`,{key:t.sequence},[o(`strong`,null,l(ke(t.role)),1),o(`pre`,null,l(Ae(t.content)),1)]))),128))]),j.value?(e(),m(v,{key:1,variant:`compact`,label:f(s)(`projectAgents.conversations.loadingMessages`)},null,8,[`label`])):M.value?(e(),c(`div`,he,[o(`p`,null,l(M.value),1),o(`button`,{class:`quiet-button`,type:`button`,onClick:e=>Z(n.id,A.value.length>0)},l(f(s)(`projectAgents.retry`)),9,ge)])):P.value?(e(),c(`button`,{key:3,"data-more-messages":``,class:`quiet-button`,type:`button`,onClick:e=>Z(n.id,!0)},l(f(s)(`projectAgents.conversations.more`)),9,x)):A.value.length?g(``,!0):(e(),c(`p`,S,l(f(s)(`projectAgents.conversations.noMessages`)),1))])):g(``,!0)]))),128))])):(e(),c(`p`,_e,l(f(s)(`projectAgents.conversations.empty`)),1)),C.value?(e(),c(`details`,{key:5,"data-memory-settings":``,onToggle:d(Ee,[`stop`])},[o(`summary`,null,l(f(s)(`projectAgents.conversations.settings`)),1),I.value?(e(),m(v,{key:0,variant:`compact`,label:f(s)(`projectAgents.conversations.loadingPolicy`)},null,8,[`label`])):g(``,!0),F.value?(e(),c(`form`,{key:1,onSubmit:d(De,[`prevent`])},[o(`fieldset`,{disabled:R.value},[o(`label`,ye,[i(o(`input`,{"onUpdate:modelValue":a[1]||=e=>H.value=e,type:`checkbox`},null,512),[[ee,H.value]]),r(l(f(s)(`projectAgents.conversations.capture`)),1)]),o(`label`,null,[r(l(f(s)(`projectAgents.conversations.compactAfterKb`)),1),i(o(`input`,{"onUpdate:modelValue":a[2]||=e=>B.value=e,name:`compactAfterKb`,type:`number`,min:`8`,max:`1024`,required:``},null,512),[[p,B.value,void 0,{number:!0}]])]),o(`label`,null,[r(l(f(s)(`projectAgents.conversations.budget`)),1),i(o(`input`,{"onUpdate:modelValue":a[3]||=e=>V.value=e,name:`contextBudget`,type:`number`,min:`512`,max:`16000`,required:``},null,512),[[p,V.value,void 0,{number:!0}]])]),o(`p`,be,l(f(s)(`projectAgents.conversations.budgetHint`)),1),o(`button`,xe,[R.value?(e(),m(v,{key:0,variant:`inline`,label:f(s)(`projectAgents.conversations.saving`)},null,8,[`label`])):(e(),c(`span`,Se,l(f(s)(`projectAgents.conversations.save`)),1))])],8,ve)],32)):g(``,!0),L.value?(e(),c(`div`,Ce,[o(`p`,null,l(L.value),1),F.value?g(``,!0):(e(),c(`button`,{key:0,class:`quiet-button`,type:`button`,onClick:$},l(f(s)(`projectAgents.retry`)),1))])):g(``,!0),z.value?(e(),c(`p`,we,l(f(s)(`projectAgents.conversations.saved`)),1)):g(``,!0)],32)):g(``,!0)],64)):g(``,!0)],32))}}),[[`__scopeId`,`data-v-d822789b`]]);export{C as t};
@@ -0,0 +1 @@
1
+ .agent-conversations[data-v-d822789b]{color:var(--color-ink);margin-block:20px;font-size:14px}summary[data-v-d822789b]{cursor:pointer;padding-block:12px;font-weight:650}summary[data-v-d822789b]:focus-visible,button[data-v-d822789b]:focus-visible,input[data-v-d822789b]:focus-visible,select[data-v-d822789b]:focus-visible,textarea[data-v-d822789b]:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}label[data-v-d822789b]{flex-wrap:wrap;align-items:center;gap:12px;display:flex}select[data-v-d822789b],input[type=number][data-v-d822789b]{border:1px solid var(--color-border-strong);max-width:100%;font:inherit;color:inherit;background:var(--color-surface);border-radius:6px;padding:8px}input[type=number][data-v-d822789b]{width:100px}input[type=checkbox][data-v-d822789b]{width:18px;height:18px}fieldset[data-v-d822789b]{border:0;gap:16px;min-width:0;margin:0;padding:8px 0;display:grid}fieldset button[data-v-d822789b]{justify-self:start}.conversation-hint[data-v-d822789b]{color:var(--color-muted);margin-block:12px;line-height:1.65}ol[data-v-d822789b]{margin:0;padding:0;list-style:none}.conversation-list>li[data-v-d822789b]{border-bottom:1px solid var(--color-border)}.continuation-copy[data-v-d822789b]{margin-bottom:12px}.conversation-link[data-v-d822789b]{text-align:left;width:100%;font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;gap:6px;padding:14px 0;display:grid}.conversation-link:hover strong[data-v-d822789b]{text-underline-offset:3px;text-decoration:underline}.conversation-link[aria-pressed=true] strong[data-v-d822789b]{color:var(--color-ink)}.conversation-link span[data-v-d822789b]{color:var(--color-muted);font-size:12px}.conversation-link strong[data-v-d822789b]{overflow-wrap:anywhere}.conversation-messages[data-v-d822789b]{padding-bottom:16px}.conversation-messages li[data-v-d822789b]{padding-block:12px}pre[data-v-d822789b]{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;max-height:320px;margin-block:8px;line-height:1.65;overflow:auto}textarea[data-v-d822789b]{box-sizing:border-box;width:100%;font:inherit;color:inherit;resize:vertical;background:#fff;border:1px solid #a8b7ad;border-radius:6px;padding:8px}button[data-v-d822789b]:disabled{cursor:wait;opacity:.65}@media (width<=640px){.agent-conversations[data-v-d822789b]{font-size:16px}}
@@ -0,0 +1 @@
1
+ import{B as e,I as t,M as n,_ as r,a as i,b as a,g as o,it as s,tt as c,v as l,w as u,y as d}from"./i18n-CCMR4gDS.js";import{t as f}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as p}from"./attention-store-BfxtL9EV.js";var m={key:0,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.7`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},h={"aria-hidden":`true`},g=f(u({__name:`AgentHand`,props:{agentId:{},passive:{type:Boolean},countOnly:{type:Boolean}},setup(u){let f=u,g=p(),_=o(()=>f.agentId?g.counts[f.agentId]??0:g.total);function v(e){f.passive||(e.preventDefault(),e.stopPropagation(),g.show(f.agentId))}return(o,f)=>_.value?(n(),l(t(u.passive?`span`:`button`),{key:0,type:u.passive?void 0:`button`,class:`agent-hand`,"aria-label":c(i)(`attention.count`,{count:_.value}),title:c(i)(`attention.count`,{count:_.value}),onClick:v},{default:e(()=>[u.countOnly?d(``,!0):(n(),a(`svg`,m,[...f[0]||=[r(`path`,{d:`M8 13V5a1.5 1.5 0 0 1 3 0v6-8a1.5 1.5 0 0 1 3 0v8-6a1.5 1.5 0 0 1 3 0v7-3a1.5 1.5 0 0 1 3 0v6c0 4-2 7-6 7h-1c-3 0-4-1-6-4l-3-4a1.6 1.6 0 0 1 2.5-2z`},null,-1)]])),r(`span`,h,s(_.value),1)]),_:1},8,[`type`,`aria-label`,`title`])):d(``,!0)}}),[[`__scopeId`,`data-v-5bcf651a`]]);export{g as t};
@@ -0,0 +1 @@
1
+ import{B as e,M as t,S as n,it as r,tt as i,v as a,w as o}from"./i18n-CCMR4gDS.js";import{t as s}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as c}from"./vue-router-DjqEU4W2.js";import{n as l}from"./profile-model-BQO4zNs9.js";var u=s(o({__name:`AgentName`,props:{spaceId:{},agentId:{},name:{}},setup(o){return(s,u)=>(t(),a(i(c),{class:`agent-name-link`,to:i(l)(o.spaceId,o.agentId)},{default:e(()=>[n(r(o.name),1)]),_:1},8,[`to`]))}}),[[`__scopeId`,`data-v-4c868995`]]);export{u as t};
@@ -0,0 +1 @@
1
+ import{B as e,C as t,M as n,P as r,R as i,S as a,V as o,X as s,_ as c,a as l,b as u,d,g as f,it as p,j as m,k as ee,m as h,nt as g,p as te,tt as _,u as v,v as y,w as b,y as x}from"./i18n-CCMR4gDS.js";import{t as S}from"./console-CG8tdtSs.js";import{a as C,n as w,o as T}from"./client-CUTkF3t4.js";import{m as E}from"./useApi-CROJJdhE-DlOiu8lP.js";import{t as D}from"./vue-router-DjqEU4W2.js";import{t as O}from"./UiSelect-D5Xj5Ec4.js";import{t as k}from"./UiDisclosure-8wE8YuE4.js";import{n as A}from"./paths-CDREouhi.js";import{a as j,r as M,t as N}from"./profile-model-BQO4zNs9.js";import{t as P}from"./AgentName-C_6R80nP.js";import{t as ne}from"./AgentConversations-DfXiFvBN.js";import{d as re,i as F,m as ie,r as ae,t as oe,v as se,w as ce}from"./agent-work-summary-LeW-Al_S.js";import{t as le}from"./useAgentRoster-DdxoKDEE.js";import{a as ue}from"./catalog-6SN9i3WR.js";/* empty css */var I={key:1,class:`agent-locked-platforms`},L={key:2,class:`agent-platform-field`},de=[`disabled`,`placeholder`],R=[`onUpdate:modelValue`,`disabled`],fe={key:3,role:`alert`},pe={key:4,role:`status`},z=[`disabled`],me=b({__name:`AgentProfileSettings`,props:{agent:{}},emits:[`saved`],setup(e,{emit:d}){let m=e,ee=d,g=s([]),b=s(!1),S=s(!1),E=s(``),D=s(!1),k=``,A=s(``),j=s(``),M=s({judgment:``,taste:``,personality:``}),N=f(()=>m.agent.profile.executorPolicy?.mode===`locked`),P=f(()=>{let e=m.agent.profile.executorPolicy;return(e?.lockedExecutorIds?.length?e.lockedExecutorIds:(e?.allowList??[]).map(e=>e.executorId)).map(e=>g.value.find(t=>t.executorId===e)?.displayName||e)}),ne=f(()=>g.value.filter(e=>e.registrationStatus===`registered`&&e.permissionStatus===`authorized`&&e.preflightStatus===`passed`&&e.workspacePermission&&e.healthStatus!==`unhealthy`&&(!e.healthRequired||e.healthStatus===`healthy`))),re=f(()=>[{value:``,label:l(`agentProfiles.automatic`)},...A.value&&!ne.value.some(e=>e.executorId===A.value)?[{value:A.value,label:l(`agentProfiles.platformUnavailable`),disabled:!0}]:[],...ne.value.map(e=>({value:e.executorId,label:e.displayName||e.executorId}))]),F=0;i(()=>`${m.agent.personalSpaceId}/${m.agent.agentId}`,async()=>{let e=m.agent,t=++F;j.value=e.profile.expectations??``,M.value={judgment:``,taste:``,personality:``,...e.profile.character},A.value=e.profile.executorPolicy?.preferredExecutorIds?.[0]??``,k=A.value,E.value=``,D.value=!1,S.value=!1,b.value=!0,g.value=[];try{let n=await w(`/api/executors?${new URLSearchParams({personalSpaceId:e.personalSpaceId})}`);t===F&&(g.value=Array.isArray(n)?n:n.executors)}catch{t===F&&(E.value=l(`agentProfiles.platformUnavailable`))}finally{t===F&&(b.value=!1)}},{immediate:!0});async function ie(){if(S.value)return;let e=F,t=m.agent;S.value=!0,E.value=``,D.value=!1;let n=t.profile.executorPolicy;try{let r=await C(`/api/project-agents`,{personalSpaceId:t.personalSpaceId,personalProjectId:t.personalProjectId??null,agentId:t.agentId,profile:{...t.profile,character:{...M.value},expectations:j.value,executorPolicy:N.value||A.value===k?n:{...n,mode:`flexible`,preferredExecutorIds:A.value?[A.value]:[]}}});e===F&&(k=A.value,ee(`saved`,r),D.value=!0)}catch(t){e===F&&(E.value=t instanceof Error?t.message:l(`agentProfiles.saveError`))}finally{e===F&&(S.value=!1)}}return(e,i)=>(n(),u(`form`,{class:`agent-simple-settings`,onSubmit:te(ie,[`prevent`])},[c(`h3`,null,p(_(l)(`agentProfiles.settings`)),1),b.value?(n(),y(T,{key:0,variant:`compact`,label:_(l)(`agentProfiles.settingsLoading`)},null,8,[`label`])):N.value?(n(),u(`div`,I,[c(`h4`,null,p(_(l)(`agentProfiles.platform`)),1),c(`p`,null,p(P.value.join(` · `)||_(l)(`agentProfiles.platformUnavailable`)),1),c(`small`,null,p(_(l)(`agentProfiles.locked`)),1)])):(n(),u(`div`,L,[t(O,{modelValue:A.value,"onUpdate:modelValue":i[0]||=e=>A.value=e,field:``,label:_(l)(`agentProfiles.platform`),options:re.value,disabled:N.value||S.value},null,8,[`modelValue`,`label`,`options`,`disabled`]),c(`small`,null,p(_(l)(N.value?`agentProfiles.locked`:`agentProfiles.platformHint`)),1)])),c(`label`,null,[a(p(_(l)(`agentProfiles.expectations`)),1),o(c(`textarea`,{"onUpdate:modelValue":i[1]||=e=>j.value=e,rows:`3`,maxlength:`4096`,disabled:S.value,placeholder:_(l)(`agentProfiles.expectationsPlaceholder`)},null,8,de),[[v,j.value]])]),c(`details`,null,[c(`summary`,null,p(_(l)(`agentProfiles.editCharacter`)),1),(n(),u(h,null,r([`judgment`,`taste`,`personality`],e=>c(`label`,{key:e},[a(p(_(l)(`agentProfiles.${e}`)),1),o(c(`textarea`,{"onUpdate:modelValue":t=>M.value[e]=t,rows:`2`,maxlength:`2048`,disabled:S.value},null,8,R),[[v,M.value[e]]])])),64))]),E.value?(n(),u(`p`,fe,p(E.value),1)):x(``,!0),D.value?(n(),u(`p`,pe,p(_(l)(`agentProfiles.saved`)),1)):x(``,!0),c(`button`,{class:`primary-button`,disabled:S.value||b.value,type:`submit`},[S.value?(n(),y(T,{key:0,variant:`inline`,label:_(l)(`agentProfiles.saving`)},null,8,[`label`])):(n(),u(h,{key:1},[a(p(_(l)(`agentProfiles.save`)),1)],64))],8,z)],32))}}),he=[`aria-label`],ge={key:1,class:`ui-card ui-empty agent-profile-empty`,role:`alert`},_e={key:2,class:`ui-card ui-empty agent-profile-empty`},ve={class:`ui-card agent-resume-header`},ye={class:`agent-portrait`,"aria-hidden":`true`},be={class:`agent-resume-intro`},xe={class:`agent-resume-name-row`},Se={class:`agent-resume-meta`},Ce={class:`agent-profile-actions`},we=[`aria-expanded`],Te={key:1,class:`agent-profile-refresh-status`,role:`status`},Ee=[`aria-label`],De=[`id`,`aria-selected`,`aria-controls`,`tabindex`,`onClick`,`onKeydown`],Oe={key:4,class:`agent-profile-partial`,role:`status`},ke=[`aria-hidden`],Ae={class:`agent-profile-primary-grid`},je={class:`ui-card agent-resume-section agent-current-work-section`},Me={class:`agent-section-heading`},Ne={key:0},Pe={key:0,class:`agent-current-work-list`},Fe={class:`ui-badge`},Ie={key:1,class:`agent-muted`},Le={key:2,class:`agent-muted`},Re={class:`ui-card agent-resume-section agent-projects-section`},ze={class:`agent-section-heading`},Be={class:`agent-resume-list agent-current-project-list`},Ve={key:0,class:`agent-project-responsibility`},He={class:`agent-resume-list`},Ue={key:0,class:`agent-project-responsibility`},We={key:1,class:`agent-muted`},Ge=[`aria-hidden`],Ke={class:`ui-card agent-resume-section`},qe={key:0,class:`ui-disclosure`,open:``},Je={class:`agent-resume-list`},Ye={key:1,class:`agent-muted`},Xe={class:`ui-card agent-resume-section`},Ze={class:`agent-muted`},Qe={class:`agent-work-timeline`},$e={class:`agent-section-heading`},et={key:0},tt={key:0},nt={key:0},rt={key:0,class:`agent-muted`},it=[`aria-hidden`],at={class:`ui-card agent-resume-section`},ot={class:`agent-character`},st={key:0,class:`agent-expectation`},ct={class:`agent-strengths`},lt={class:`agent-inline-skills`},ut={key:0},dt=[`aria-hidden`],ft={class:`ui-card agent-resume-section`},pt={class:`agent-section-heading`},mt={key:0,role:`status`},ht={key:0,class:`agent-org-lead`},gt={key:1,class:`agent-org-members`},_t={key:2,class:`agent-muted`},vt={key:0,class:`agent-muted`},yt={class:`ui-card agent-resume-section`},bt={class:`agent-collaborators`},xt={key:0,class:`agent-muted`},St=[`aria-hidden`],Ct={class:`ui-card agent-resume-section`},wt=[`aria-hidden`],Tt={class:`ui-card agent-resume-section agent-management-card`},Et={class:`agent-muted`},Dt={class:`agent-profile-management-links`},Ot={class:`agent-profile-footer`},B=b({__name:`AgentProfilePage`,setup(te){let v=E(),b=S(),C=f(()=>b.activePersonalSpace?.id??``),{agents:O,loading:I,error:L,load:de}=le(C),R=f(()=>v.params.spaceId===C.value?O.value.find(e=>e.personalSpaceId===C.value&&(e.agentId===v.params.agentId||e.legacyAgentIds?.includes(String(v.params.agentId)))):void 0),fe=f(()=>(b.state?.personalProjects??[]).filter(e=>e.personal_space_id===C.value)),pe=f(()=>fe.value.map(e=>({id:e.project_id,name:e.profile.name}))),z=e=>fe.value.find(t=>t.project_id===e)?.profile.name||e,B=e=>{let t=O.value.find(t=>t.agentId===e);return t?N(t):e},V=s([]),H=s(void 0),U=s([]),W=s(!1),G=s(!1),K=s(!1),q=s(`overview`),J=f(()=>{let e=[{id:`overview`,label:l(`agentProfiles.working`)},{id:`history`,label:l(`agentProfiles.experience`)},{id:`style`,label:l(`agentProfiles.about`)},{id:`collaborators`,label:l(`agentProfiles.collaborators`)},{id:`management`,label:l(`agentProfiles.advanced`)}];return R.value?.memoryScope===`reviewed_agent`&&e.splice(4,0,{id:`conversations`,label:l(`projectAgents.conversations.title`)}),e}),kt=f(()=>R.value?M(R.value.agentId,V.value):[]),Y=f(()=>R.value?j({...R.value,assignments:H.value??R.value.assignments}):[]),At=f(()=>Y.value.slice(0,4)),jt=f(()=>Y.value.slice(4)),Mt=f(()=>(H.value??[]).filter(e=>e.status!==`active`)),X=f(()=>V.value.filter(e=>F.has(e.status)).slice(0,6)),Z=f(()=>ue.value.find(e=>e.agentId===R.value?.agentId)),Q=e=>e&&!Number.isNaN(Date.parse(e))?new Date(e).toLocaleDateString():l(`agentProfiles.timeUnknown`),$=e=>{let t=H.value?.find(t=>t.personalProjectId===e&&t.status===`active`)?.responsibility?.trim(),n=R.value?.profile.responsibility.trim();return t&&t!==n?t:``},Nt=f(()=>{let e=`agentRedesign.projects.more`,t=l(e,{count:Y.value.length});return t===e?`All projects (${Y.value.length})`:t}),Pt=0;i(()=>R.value?`${R.value.personalSpaceId}/${R.value.agentId}`:``,async()=>{let e=R.value,t=++Pt;if(V.value=[],H.value=void 0,U.value=[],G.value=!1,W.value=!1,K.value=!1,q.value=`overview`,!e)return;W.value=!0,H.value=e.assignments;let n=new URLSearchParams({personalSpaceId:e.personalSpaceId}),r=new URLSearchParams({personalSpaceId:e.personalSpaceId,agentId:e.agentId}),i=await Promise.allSettled([w(`/api/project-agent-tasks?${n}&limit=200`),w(`/api/project-agent-assignments?${r}`)]);if(t!==Pt)return;let[a,o]=i;if(a.status===`fulfilled`){let t=a.value,n=ce(t);G.value=!oe(t),V.value=re(Array.isArray(t)?t:n.tasks??n.items).map(se).filter(t=>!!(t&&(!t.personalSpaceId||t.personalSpaceId===e.personalSpaceId)&&ae(t,e.agentId))).sort((e,t)=>(t.updatedAt??t.createdAt??``).localeCompare(e.updatedAt??e.createdAt??``))}else G.value=!0;if(o.status===`fulfilled`){let t=o.value,n=ce(t);H.value=re(Array.isArray(t)?t:n.assignments??n.items).map(t=>ie(t,e)).filter(t=>!!(t&&t.agentId===e.agentId&&t.personalSpaceId===e.personalSpaceId))}else G.value=!0;let s=j({...e,assignments:H.value??e.assignments}),c=await Promise.all(s.map(async t=>{try{return{projectId:t,policy:await w(`/api/project-agent-coordination-policy?${new URLSearchParams({personalSpaceId:e.personalSpaceId,personalProjectId:t})}`),error:!1}}catch{return{projectId:t,policy:null,error:!0}}}));t===Pt&&(U.value=c,W.value=!1)},{immediate:!0});function Ft(e){let t=O.value.findIndex(t=>t.agentId===e.agentId);t>=0&&(O.value[t]={...O.value[t],...e})}function It(e){q.value=e}function Lt(e,t){let n=e.key;if(![`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(n))return;let r=e.currentTarget;e.preventDefault();let i=J.value.length,a=n===`Home`?0:n===`End`?i-1:(t+(n===`ArrowRight`?1:-1)+i)%i,o=J.value[a];o&&(It(o.id),ee(()=>{let e=(r?.closest(`[role="tablist"]`))?.querySelectorAll(`[role="tab"]`)[a];e?.focus(),e?.scrollIntoView?.({block:`nearest`,inline:`nearest`})}))}return m(()=>{b.runtimeStatus===`idle`&&b.refresh()}),(i,s)=>(n(),u(`section`,{class:`view agent-profile-page`,"aria-label":_(l)(`agentProfiles.profile`)},[t(_(D),{class:`agent-profile-back`,to:`/project-agents`},{default:e(()=>[a(` ← `+p(_(l)(`agentProfiles.back`)),1)]),_:1}),(_(I)||_(b).runtimeStatus===`loading`)&&!R.value?(n(),y(T,{key:0,label:_(l)(`agentProfiles.loading`)},null,8,[`label`])):(_(L)||_(b).runtimeStatus===`error`)&&!R.value?(n(),u(`div`,ge,[c(`p`,null,p(_(L)||_(l)(`agentProfiles.loadError`)),1),c(`button`,{class:`quiet-button`,type:`button`,onClick:s[0]||=e=>_(b).state?_(de)():_(b).refresh()},p(_(l)(`agentProfiles.retry`)),1)])):R.value?(n(),u(h,{key:3},[c(`header`,ve,[c(`span`,ye,p(R.value.profile.occupationEmoji||_(N)(R.value).slice(0,1)),1),c(`div`,be,[c(`div`,xe,[c(`h1`,null,p(_(N)(R.value)),1),c(`span`,{class:g([`ui-badge agent-profile-membership`,`is-${R.value.profile.status}`])},p(_(l)(`projectAgents.status.${R.value.profile.status}`)),3)]),c(`p`,null,p(R.value.profile.responsibility),1),c(`div`,Se,[c(`span`,null,p(_(l)(R.value.recruitedAt?`agentProfiles.joined`:`agentProfiles.created`))+` · `+p(Q(R.value.recruitedAt||R.value.createdAt)),1)])]),c(`div`,Ce,[Z.value?(n(),y(_(D),{key:0,class:`quiet-button`,to:`/employees/${encodeURIComponent(Z.value.id)}`},{default:e(()=>[a(p(_(l)(`agentProfiles.workbench`)),1)]),_:1},8,[`to`])):x(``,!0),c(`button`,{class:`quiet-button`,type:`button`,"aria-expanded":K.value,onClick:s[1]||=e=>K.value=!K.value},p(_(l)(`agentProfiles.settings`)),9,we),t(_(D),{class:`quiet-button`,to:{path:`/employees/bole`,query:{q:_(N)(R.value)}}},{default:e(()=>[a(p(_(l)(`agentProfiles.askHR`)),1)]),_:1},8,[`to`])])]),_(I)||_(b).runtimeStatus===`loading`?(n(),y(T,{key:0,variant:`compact`,label:_(l)(`agentProfiles.loading`)},null,8,[`label`])):x(``,!0),_(L)?(n(),u(`p`,Te,p(_(L)),1)):x(``,!0),K.value?(n(),y(me,{key:R.value.agentId,agent:R.value,onSaved:Ft},null,8,[`agent`])):x(``,!0),W.value?(n(),y(T,{key:3,variant:`compact`,label:_(l)(`agentProfiles.detailLoading`)},null,8,[`label`])):x(``,!0),c(`nav`,{class:`agent-profile-tabs`,role:`tablist`,"aria-label":_(l)(`agentProfiles.profile`)},[(n(!0),u(h,null,r(J.value,e=>(n(),u(`button`,{id:`agent-tab-${e.id}`,key:e.id,class:`agent-profile-tab`,type:`button`,role:`tab`,"aria-selected":q.value===e.id,"aria-controls":`agent-panel-${e.id}`,tabindex:q.value===e.id?0:-1,onClick:t=>It(e.id),onKeydown:t=>Lt(t,J.value.findIndex(t=>t.id===e.id))},p(e.label),41,De))),128))],8,Ee),G.value?(n(),u(`p`,Oe,p(_(l)(`agentProfiles.partial`)),1)):x(``,!0),o(c(`section`,{id:`agent-panel-overview`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-overview`,"aria-hidden":q.value!==`overview`,tabindex:`0`},[c(`div`,Ae,[c(`section`,je,[c(`div`,Me,[c(`h2`,null,p(_(l)(`agentProfiles.working`)),1),X.value.length?(n(),u(`span`,Ne,p(X.value.length),1)):x(``,!0)]),X.value.length?(n(),u(`ul`,Pe,[(n(!0),u(h,null,r(X.value,r=>(n(),u(`li`,{key:r.taskId},[t(_(D),{to:{path:`/project-agents/manage`,query:{agent:R.value.agentId,task:r.taskId}}},{default:e(()=>[a(p(r.title),1)]),_:2},1032,[`to`]),c(`span`,Fe,p(_(l)(`projectAgents.taskStatus.${r.status}`)),1)]))),128))])):!W.value&&!G.value?(n(),u(`p`,Ie,p(_(l)(`agentProfiles.idle`)),1)):W.value?x(``,!0):(n(),u(`p`,Le,p(_(l)(`agentProfiles.partial`)),1))]),c(`section`,Re,[c(`div`,ze,[c(`h2`,null,p(_(l)(`agentProfiles.projects`)),1),c(`span`,null,p(Y.value.length),1)]),c(`ul`,Be,[(n(!0),u(h,null,r(At.value,r=>(n(),u(`li`,{key:r,class:`agent-project-item`},[c(`h3`,null,[t(_(D),{class:`agent-project-link`,to:_(A)(C.value,`graph`,r)},{default:e(()=>[a(p(z(r)),1)]),_:2},1032,[`to`])]),$(r)?(n(),u(`p`,Ve,p($(r)),1)):x(``,!0)]))),128))]),jt.value.length?(n(),y(k,{key:0,class:`agent-project-overflow`,title:Nt.value},{default:e(()=>[c(`ul`,He,[(n(!0),u(h,null,r(jt.value,r=>(n(),u(`li`,{key:r,class:`agent-project-item`},[c(`h3`,null,[t(_(D),{class:`agent-project-link`,to:_(A)(C.value,`graph`,r)},{default:e(()=>[a(p(z(r)),1)]),_:2},1032,[`to`])]),$(r)?(n(),u(`p`,Ue,p($(r)),1)):x(``,!0)]))),128))])]),_:1},8,[`title`])):x(``,!0),!W.value&&!Y.value.length?(n(),u(`p`,We,p(_(l)(`agentProfiles.noProject`)),1)):x(``,!0)])])],8,ke),[[d,q.value===`overview`]]),o(c(`section`,{id:`agent-panel-history`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-history`,"aria-hidden":q.value!==`history`,tabindex:`0`},[c(`section`,Ke,[c(`h2`,null,p(_(l)(`agentProfiles.projects`)),1),Mt.value.length?(n(),u(`details`,qe,[c(`summary`,null,p(_(l)(`agentProfiles.projectHistory`)),1),c(`ul`,Je,[(n(!0),u(h,null,r(Mt.value,r=>(n(),u(`li`,{key:r.assignmentId},[c(`h3`,null,[t(_(D),{class:`agent-project-link`,to:_(A)(C.value,`graph`,r.personalProjectId)},{default:e(()=>[a(p(z(r.personalProjectId)),1)]),_:2},1032,[`to`])]),c(`p`,null,p(r.responsibility),1),c(`small`,null,p(Q(r.assignedAt))+` – `+p(Q(r.endedAt)),1)]))),128))])])):W.value?x(``,!0):(n(),u(`p`,Ye,p(_(l)(`agentProfiles.noProject`)),1))]),c(`section`,Xe,[c(`h2`,null,p(_(l)(`agentProfiles.experience`)),1),c(`p`,Ze,p(_(l)(`agentProfiles.recent`)),1),c(`ol`,Qe,[(n(!0),u(h,null,r(V.value.slice(0,12),r=>(n(),u(`li`,{key:r.taskId},[c(`div`,$e,[t(_(D),{to:{path:`/project-agents/manage`,query:{agent:R.value.agentId,task:r.taskId}}},{default:e(()=>[a(p(r.title),1)]),_:2},1032,[`to`]),c(`span`,null,p(_(l)(`projectAgents.taskStatus.${r.status}`)),1)]),r.resultSummary?(n(),u(`p`,et,p(r.resultSummary),1)):x(``,!0),c(`small`,null,p(Q(r.completedAt||r.updatedAt||r.createdAt)),1)]))),128)),R.value.recruitedAt||R.value.recruitmentReason?(n(),u(`li`,tt,[c(`h3`,null,p(_(l)(`agentProfiles.recruitment`)),1),R.value.recruitmentReason?(n(),u(`p`,nt,p(R.value.recruitmentReason),1)):x(``,!0),c(`small`,null,p(Q(R.value.recruitedAt)),1)])):x(``,!0)]),!W.value&&!V.value.length&&!R.value.recruitmentReason&&!R.value.recruitedAt?(n(),u(`p`,rt,p(_(l)(`agentProfiles.noExperience`)),1)):x(``,!0)])],8,Ge),[[d,q.value===`history`]]),o(c(`section`,{id:`agent-panel-style`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-style`,"aria-hidden":q.value!==`style`,tabindex:`0`},[c(`section`,at,[c(`h2`,null,p(_(l)(`agentProfiles.about`)),1),c(`div`,ot,[(n(),u(h,null,r([`judgment`,`taste`,`personality`],e=>c(`div`,{key:e},[c(`h3`,null,p(_(l)(`agentProfiles.${e}`)),1),c(`p`,{class:g({"agent-muted":!R.value.profile.character?.[e]})},p(R.value.profile.character?.[e]||_(l)(`agentProfiles.characterEmpty`)),3)])),64))]),R.value.profile.expectations?(n(),u(`p`,st,[c(`strong`,null,p(_(l)(`agentProfiles.expectations`)),1),a(` `+p(R.value.profile.expectations),1)])):x(``,!0),c(`div`,ct,[c(`h3`,null,p(_(l)(`agentProfiles.strengths`)),1),c(`div`,lt,[(n(!0),u(h,null,r(R.value.profile.capabilities,e=>(n(),u(`span`,{key:e},p(e),1))),128)),R.value.profile.capabilities.length?x(``,!0):(n(),u(`span`,ut,p(_(l)(`agentProfiles.noSkills`)),1))])])])],8,it),[[d,q.value===`style`]]),o(c(`section`,{id:`agent-panel-collaborators`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-collaborators`,"aria-hidden":q.value!==`collaborators`,tabindex:`0`},[c(`section`,ft,[c(`div`,pt,[c(`h2`,null,p(_(l)(`agentProfiles.organization`)),1),t(_(D),{to:{path:`/employees/bole`,query:{q:_(N)(R.value)}}},{default:e(()=>[a(p(_(l)(`agentProfiles.hr`)),1)]),_:1},8,[`to`])]),(n(!0),u(h,null,r(U.value,e=>(n(),u(`div`,{key:e.projectId,class:`agent-organization`},[c(`h3`,null,p(z(e.projectId)),1),e.error?(n(),u(`p`,mt,p(_(l)(`agentProfiles.teamUnavailable`)),1)):e.policy?.teamLeadAgentId||e.policy?.teamMemberAgentIds?.length?(n(),u(h,{key:1},[e.policy.teamLeadAgentId?(n(),u(`div`,ht,[c(`span`,null,p(_(l)(`agentProfiles.lead`)),1),t(P,{"space-id":C.value,"agent-id":e.policy.teamLeadAgentId,name:B(e.policy.teamLeadAgentId)},null,8,[`space-id`,`agent-id`,`name`])])):x(``,!0),e.policy.teamMemberAgentIds?.length?(n(),u(`div`,gt,[c(`span`,null,p(_(l)(`agentProfiles.teammates`)),1),c(`ul`,null,[(n(!0),u(h,null,r([...new Set(e.policy.teamMemberAgentIds)].filter(t=>t!==e.policy?.teamLeadAgentId),e=>(n(),u(`li`,{key:e},[t(P,{"space-id":C.value,"agent-id":e,name:B(e)},null,8,[`space-id`,`agent-id`,`name`])]))),128))])])):x(``,!0)],64)):(n(),u(`p`,_t,p(_(l)(`agentProfiles.teamUnset`)),1))]))),128)),!W.value&&!U.value.length?(n(),u(`p`,vt,p(_(l)(`agentProfiles.noProject`)),1)):x(``,!0)]),c(`section`,yt,[c(`h2`,null,p(_(l)(`agentProfiles.collaborators`)),1),c(`ul`,bt,[(n(!0),u(h,null,r(kt.value,e=>(n(),u(`li`,{key:e.agentId},[t(P,{"space-id":C.value,"agent-id":e.agentId,name:B(e.agentId)},null,8,[`space-id`,`agent-id`,`name`]),c(`span`,null,p(_(l)(`agentProfiles.sharedTasks`,{count:e.count})),1)]))),128))]),!W.value&&!kt.value.length?(n(),u(`p`,xt,p(_(l)(`agentProfiles.noCollaborators`)),1)):x(``,!0)])],8,dt),[[d,q.value===`collaborators`]]),R.value.memoryScope===`reviewed_agent`?o((n(),u(`section`,{key:5,id:`agent-panel-conversations`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-conversations`,"aria-hidden":q.value!==`conversations`,tabindex:`0`},[c(`section`,Ct,[(n(),y(ne,{key:R.value.agentId,"personal-space-id":C.value,"agent-id":R.value.agentId,projects:pe.value},null,8,[`personal-space-id`,`agent-id`,`projects`]))])],8,St)),[[d,q.value===`conversations`]]):x(``,!0),o(c(`section`,{id:`agent-panel-management`,class:`agent-profile-panel`,role:`tabpanel`,"aria-labelledby":`agent-tab-management`,"aria-hidden":q.value!==`management`,tabindex:`0`},[c(`section`,Tt,[c(`h2`,null,p(_(l)(`agentProfiles.advanced`)),1),c(`p`,Et,p(_(l)(`agentProfiles.locked`)),1),c(`div`,Dt,[Z.value?(n(),y(_(D),{key:0,class:`quiet-button`,to:`/employees/${encodeURIComponent(Z.value.id)}`},{default:e(()=>[a(p(_(l)(`agentProfiles.workbench`)),1)]),_:1},8,[`to`])):x(``,!0),t(_(D),{class:`quiet-button`,to:{path:`/project-agents/manage`,query:{agent:R.value.agentId}}},{default:e(()=>[a(p(_(l)(`agentProfiles.advanced`)),1)]),_:1},8,[`to`])])])],8,wt),[[d,q.value===`management`]]),c(`footer`,Ot,[Z.value?(n(),y(_(D),{key:0,to:`/employees/${encodeURIComponent(Z.value.id)}`},{default:e(()=>[a(p(_(l)(`agentProfiles.workbench`)),1)]),_:1},8,[`to`])):x(``,!0),t(_(D),{to:{path:`/project-agents/manage`,query:{agent:R.value.agentId}}},{default:e(()=>[a(p(_(l)(`agentProfiles.advanced`)),1)]),_:1},8,[`to`])])],64)):(n(),u(`p`,_e,p(_(l)(`agentProfiles.unavailable`)),1))],8,he))}});export{B as default};
@@ -0,0 +1 @@
1
+ import{B as e,C as t,M as n,P as r,R as i,S as a,V as o,X as s,_ as c,a as l,b as u,d,g as f,it as p,j as m,m as h,nt as g,tt as _,u as v,v as y,w as b,y as x}from"./i18n-CCMR4gDS.js";import{t as S}from"./console-CG8tdtSs.js";import{n as C,o as w}from"./client-CUTkF3t4.js";import{t as T}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{h as E,m as D}from"./useApi-CROJJdhE-DlOiu8lP.js";import{t as O}from"./vue-router-DjqEU4W2.js";import{t as k}from"./UiSelect-D5Xj5Ec4.js";import{t as A}from"./AgentHand-BBM-sKh2.js";import{a as j,i as ee,n as M,t as N}from"./profile-model-BQO4zNs9.js";import{n as P,t as F}from"./agent-work-summary-LeW-Al_S.js";import{t as te}from"./useAgentRoster-DdxoKDEE.js";import{a as I,s as L}from"./catalog-6SN9i3WR.js";/* empty css */import{t as ne}from"./ProjectAgentFirstTask-CrCWEYgn.js";import{n as R,t as re}from"./EmployeeRecruitDialog-BVyclQAJ.js";var z={class:`ui-card agent-card`},B={class:`agent-card-topline`},V={class:`agent-portrait small`,"aria-hidden":`true`},H={class:`agent-directory-name`},U={key:0,class:`ui-badge ui-badge--accent agent-card-role`},W=[`data-membership-status`],G=[`data-work-status`,`aria-label`],K={class:`agent-card-responsibility`},q={key:0,class:`agent-inline-skills`},J={class:`agent-card-meta`},Y={class:`agent-card-projects`},X={key:0,class:`agent-card-project-list`},Z={key:0,class:`ui-badge agent-card-project-count`},Q={key:1,class:`ui-badge`},$={key:2,class:`agent-card-no-project`},ie=b({__name:`AgentCard`,props:{agent:{},spaceId:{},projectNames:{},managesAllProjects:{type:Boolean},workSummary:{},workState:{}},setup(i){let o=i,s=f(()=>N(o.agent)),d=f(()=>j(o.agent)),m=f(()=>d.value.slice(0,2).map(e=>o.projectNames?.[e]||e)),v=f(()=>Math.max(d.value.length-2,0)),y=f(()=>o.agent.profile.capabilities.slice(0,3)),b=f(()=>`is-${o.agent.profile.status}`),S=f(()=>l(`projectAgents.status.${o.agent.profile.status}`)),C=f(()=>o.workSummary?o.workSummary.status:o.workState===`loading`?`loading`:o.workState===`error`?`unavailable`:o.workState===`incomplete`?`unreported`:`none`),w=f(()=>`is-${C.value}`),T=f(()=>({coordinator:l(`agentProfiles.roles.projectManager`),hr:l(`agentProfiles.roles.hr`)})[o.agent.profile.agentType]??``);function E(e,t,n){let r=l(e,n);return r===e?t:r}let D=f(()=>E(`agentRedesign.membershipStatus`,`Member · ${S.value}`,{status:S.value})),k=f(()=>{let e={awaiting_recruitment:`Awaiting recruitment`,queued:`Queued`,running:`Running`,paused:`Paused`,awaiting_review:`Awaiting review`,blocked:`Blocked`,none:l(`agentProfiles.idle`),loading:`Loading work status`,unreported:`Partial status`,unavailable:`Unavailable`}[C.value];return E(`agentRedesign.workStatus.${C.value}`,e??`Work status unavailable`)});return(o,d)=>(n(),u(`article`,z,[c(`div`,B,[c(`span`,V,p(i.agent.profile.occupationEmoji||s.value.slice(0,1)),1),c(`div`,H,[t(_(O),{to:_(M)(i.spaceId,i.agent.agentId),"aria-label":`${s.value} · ${_(l)(`agentProfiles.profile`)}`},{default:e(()=>[a(p(s.value),1)]),_:1},8,[`to`,`aria-label`]),T.value?(n(),u(`span`,U,p(T.value),1)):x(``,!0),t(A,{"agent-id":i.agent.agentId},null,8,[`agent-id`])]),i.agent.profile.status===`active`?x(``,!0):(n(),u(`span`,{key:0,class:g([`ui-badge agent-card-status agent-card-membership-status`,b.value]),"data-membership-status":i.agent.profile.status},p(D.value),11,W)),i.agent.profile.status===`active`||![`none`,`loading`].includes(C.value)?(n(),u(`span`,{key:1,class:g([`agent-card-work-status`,w.value]),"data-work-status":C.value,"aria-label":`${_(l)(`agentRedesign.workStatus.label`)} · ${k.value}`},p(k.value),11,G)):x(``,!0)]),c(`p`,K,p(i.agent.profile.responsibility),1),y.value.length?(n(),u(`div`,q,[(n(!0),u(h,null,r(y.value,e=>(n(),u(`span`,{key:e},p(e),1))),128))])):x(``,!0),c(`div`,J,[c(`div`,Y,[m.value.length?(n(),u(`div`,X,[(n(!0),u(h,null,r(m.value,e=>(n(),u(`span`,{key:e,class:`ui-badge`},p(e),1))),128)),v.value?(n(),u(`span`,Z,` +`+p(v.value),1)):x(``,!0)])):i.managesAllProjects?(n(),u(`span`,Q,p(_(l)(`agentProfiles.allProjects`)),1)):(n(),u(`span`,$,p(_(l)(`agentProfiles.noProject`)),1))]),t(_(O),{class:`agent-directory-open`,to:_(M)(i.spaceId,i.agent.agentId),"aria-label":`${s.value} · ${_(l)(`agentProfiles.profile`)}`},{default:e(()=>[a(p(_(l)(`agentProfiles.profile`))+` → `,1)]),_:1},8,[`to`,`aria-label`])])]))}});function ae(e){let t=s({}),n=s(!1),r=s(``),a=s(`idle`),o=new Map,c=0;async function u(){let i=++c,s=e.value;if(r.value=``,!s){t.value={},n.value=!1,a.value=`idle`;return}let u=o.get(s);u?t.value=u:Object.keys(t.value).length&&(t.value={}),n.value=!0,a.value=`loading`;try{let n=await C(`/api/project-agent-tasks?${new URLSearchParams({personalSpaceId:s,limit:`200`})}`);if(i!==c||e.value!==s)return;let r=P(n,s);o.set(s,r),t.value=r,a.value=F(n)?`ready`:`incomplete`}catch(t){if(i!==c||e.value!==s)return;r.value=t instanceof Error?t.message:l(`agentProfiles.loadError`),a.value=`error`}finally{i===c&&e.value===s&&(n.value=!1)}}return i(e,u,{immediate:!0}),{summaries:t,loading:n,error:r,state:a,load:u}}var oe=[`src`],se=T(b({__name:`EmployeeWorkbenchLinks`,props:{personalSpaceId:{}},setup(t){let o=t;i(()=>o.personalSpaceId,e=>{L(e===`current`?``:e)},{immediate:!0});let s=f(()=>I.value.filter(e=>e.agentId&&e.agentStatus===`active`&&(e.runtime||e.workbench?.kind===`native`)));return(t,i)=>(n(!0),u(h,null,r(s.value,t=>(n(),y(_(O),{key:t.id,class:`ui-button employee-workbench-link`,to:`/employees/${encodeURIComponent(t.id)}`,title:_(l)(`agentProfiles.workbench`)},{default:e(()=>[_(R)(t.id)?(n(),u(`img`,{key:0,src:_(R)(t.id),alt:``,"aria-hidden":`true`},null,8,oe)):x(``,!0),a(` `+p(t.name)+` · `+p(t.role),1)]),_:2},1032,[`to`,`title`]))),128))}}),[[`__scopeId`,`data-v-4906fde1`]]),ce=[`aria-label`],le={class:`ui-toolbar agents-directory-heading`},ue={key:0,class:`agents-directory-count`},de={key:1,class:`agents-directory-count`,"aria-hidden":`true`},fe={class:`agent-profile-actions`},pe=[`disabled`],me={key:1,class:`agent-directory-work-error`,role:`status`},he={class:`ui-toolbar agents-directory-filters`},ge={class:`agents-directory-search`},_e={class:`sr-only`},ve=[`placeholder`],ye={key:3,role:`alert`,class:`ui-card ui-empty agent-profile-empty`},be={key:4,class:`ui-card ui-empty agent-profile-empty`},xe={key:5,class:`agents-directory-grid`},Se=b({__name:`AgentsDirectoryPage`,setup(e){let a=S(),g=D(),b=E(),C=f(()=>a.activePersonalSpace?.id??``),{agents:T,loading:O,error:A,load:P}=te(C),{summaries:F,loading:L,error:R,state:z,load:B}=ae(C),V=s(typeof g.query.q==`string`?g.query.q:``),H=s(`all`),U=s(typeof g.query.project==`string`?[g.query.project]:[]),W=s(!1),G=f(()=>I.value.some(e=>!e.fixed)),K=e=>I.value.some(t=>t.agentId===e&&t.management?.mode===`all`),q=f(()=>(a.state?.personalProjects??[]).filter(e=>e.personal_space_id===C.value)),J=f(()=>q.value.map(e=>({value:e.project_id,label:e.profile.name}))),Y=f(()=>Object.fromEntries(J.value.map(e=>[e.value,e.label]))),X=f(()=>[{value:`all`,label:l(`agentProfiles.allStatus`)},...[`active`,`inactive`,`archived`].map(e=>({value:e,label:l(`projectAgents.status.${e}`)}))]),Z=f(()=>T.value.filter(e=>(H.value===`all`||e.profile.status===H.value)&&(!U.value.length||j(e).some(e=>U.value.includes(e)))&&ee([N(e),e.profile.responsibility,...e.profile.capabilities,...j(e).map(e=>Y.value[e]||e)].join(` `),V.value)).sort((e,t)=>N(e).localeCompare(N(t)))),Q=f(()=>O.value||L.value||a.runtimeStatus===`loading`),$=e=>F.value[e];m(()=>{a.runtimeStatus===`idle`&&a.refresh()}),i([C,()=>g.query.agent],([e,t])=>{if(e&&typeof t==`string`){let{agent:n,...r}=g.query;b.replace({path:typeof g.query.task==`string`?`/project-agents/manage`:M(e,t),query:typeof g.query.task==`string`?g.query:r})}},{immediate:!0}),i(C,(e,t)=>{t&&(V.value=``,U.value=[],H.value=`all`)});async function oe(e){W.value=!1,await b.push(M(C.value,e.agent.agentId))}async function Se(){if(a.state){await Promise.allSettled([P(),B()]);return}await a.refresh(),await Promise.allSettled([P(),B()])}return(e,i)=>(n(),u(`section`,{class:`view agents-directory`,"aria-label":_(l)(`agentProfiles.title`)},[c(`header`,le,[!Q.value||_(T).length?(n(),u(`p`,ue,p(_(l)(`agentProfiles.members`,{count:_(T).length})),1)):(n(),u(`span`,de,`\xA0`)),c(`div`,fe,[Q.value&&_(T).length?(n(),y(w,{key:0,variant:`inline`,label:_(l)(`agentRedesign.refreshing`)},null,8,[`label`])):x(``,!0),t(se,{"personal-space-id":C.value||`current`},null,8,[`personal-space-id`]),G.value?(n(),u(`button`,{key:1,type:`button`,class:`primary-button`,disabled:!C.value,onClick:i[0]||=e=>W.value=!0},p(_(l)(`employees.recruit`)),9,pe)):x(``,!0)])]),!Q.value&&!_(A)&&_(a).runtimeStatus===`ready`&&!q.value.length?(n(),y(ne,{key:0,"personal-space-id":C.value},null,8,[`personal-space-id`])):x(``,!0),_(R)?(n(),u(`p`,me,[c(`span`,null,p(_(l)(`agentRedesign.workStatus.refreshError`)),1),c(`button`,{class:`quiet-button`,type:`button`,onClick:i[1]||=(...e)=>_(B)&&_(B)(...e)},p(_(l)(`agentProfiles.retry`)),1)])):x(``,!0),c(`div`,he,[c(`label`,ge,[c(`span`,_e,p(_(l)(`agentProfiles.search`)),1),o(c(`input`,{"onUpdate:modelValue":i[2]||=e=>V.value=e,type:`search`,maxlength:`160`,placeholder:_(l)(`agentProfiles.search`)},null,8,ve),[[v,V.value]])]),t(k,{modelValue:U.value,"onUpdate:modelValue":i[3]||=e=>U.value=e,class:`agents-directory-select`,multiple:``,options:J.value,label:_(l)(`employees.filterLabel`),placeholder:_(l)(`employees.allProjectsFilter`)},null,8,[`modelValue`,`options`,`label`,`placeholder`]),t(k,{modelValue:H.value,"onUpdate:modelValue":i[4]||=e=>H.value=e,class:`agents-directory-select`,options:X.value,label:_(l)(`projectAgents.fields.status`)},null,8,[`modelValue`,`options`,`label`])]),Q.value&&!_(T).length?(n(),y(w,{key:2,label:_(l)(`agentProfiles.loading`)},null,8,[`label`])):x(``,!0),_(A)||_(a).runtimeStatus===`error`?o((n(),u(`div`,ye,[c(`p`,null,p(_(A)||_(l)(`agentProfiles.loadError`)),1),c(`button`,{class:`quiet-button`,type:`button`,onClick:Se},p(_(l)(`agentProfiles.retry`)),1)],512)),[[d,!Q.value||_(T).length===0]]):x(``,!0),!Q.value&&!Z.value.length&&!_(A)&&_(a).runtimeStatus!==`error`?(n(),u(`p`,be,p(_(l)(_(T).length?`agentProfiles.noMatch`:`agentProfiles.noAgents`)),1)):x(``,!0),Z.value.length?(n(),u(`ul`,xe,[(n(!0),u(h,null,r(Z.value,e=>(n(),u(`li`,{key:e.agentId},[t(ie,{agent:e,"space-id":C.value,"project-names":Y.value,"manages-all-projects":K(e.agentId),"work-summary":$(e.agentId),"work-state":_(z)},null,8,[`agent`,`space-id`,`project-names`,`manages-all-projects`,`work-summary`,`work-state`])]))),128))])):x(``,!0),t(re,{open:W.value,"personal-space-id":C.value,projects:q.value,"default-project-ids":U.value??[],onClose:i[5]||=e=>W.value=!1,onRecruited:oe},null,8,[`open`,`personal-space-id`,`projects`,`default-project-ids`])],8,ce))}});export{Se as default};
@@ -0,0 +1 @@
1
+ .employee-workbench-link img[data-v-4906fde1]{object-fit:cover;border-radius:5px;width:18px;height:18px}
@@ -0,0 +1 @@
1
+ import{A as e,B as t,C as n,J as r,M as i,O as ee,P as a,R as o,S as te,X as s,_ as c,a as l,b as u,g as d,it as f,j as ne,m as p,n as re,p as ie,tt as m,v as h,w as g,y as _}from"./i18n-CCMR4gDS.js";import{t as ae}from"./console-CG8tdtSs.js";import{i as v,n as y,o as b,r as oe,t as se}from"./client-CUTkF3t4.js";import{t as x}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as S}from"./UiSelect-D5Xj5Ec4.js";import{t as C}from"./UiDisclosure-8wE8YuE4.js";import{r as ce,t as le}from"./identity-C1eN-FSB.js";var w={class:`text-field`},T=[`id`,`value`,`name`,`placeholder`,`disabled`,`required`,`rows`],E=[`id`,`value`,`name`,`type`,`placeholder`,`disabled`,`required`],D=x(g({inheritAttrs:!1,__name:`TextField`,props:{modelValue:{},label:{},controlId:{default:void 0},type:{default:`text`},placeholder:{default:void 0},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},multiline:{type:Boolean,default:!1},rows:{default:3},name:{default:void 0}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=t;function r(e){n(`update:modelValue`,e.target.value)}return(t,n)=>(i(),u(`label`,w,[c(`span`,null,f(e.label),1),e.multiline?(i(),u(`textarea`,ee({key:0},t.$attrs,{id:e.controlId,value:e.modelValue,name:e.name,placeholder:e.placeholder,disabled:e.disabled,required:e.required,rows:e.rows,onInput:r}),null,16,T)):(i(),u(`input`,ee({key:1},t.$attrs,{id:e.controlId,value:e.modelValue,name:e.name,type:e.type,placeholder:e.placeholder,disabled:e.disabled,required:e.required,onInput:r}),null,16,E))]))}}),[[`__scopeId`,`data-v-8c90420d`]]),ue={class:`view connections-view`},de=[`aria-label`],fe=[`data-status`],pe={class:`service-state`},me=[`data-status`],he={class:`connection-title-row`},ge={class:`service-state`},_e={class:`external-knowledge-section`},ve={class:`section-title section-title-with-help`},ye=[`href`,`aria-label`,`title`],be={class:`external-binding-count`},xe={class:`external-binding-list`},Se=[`data-status`],Ce={class:`external-binding-copy`},we={class:`external-binding-targets`},Te=[`data-status`],Ee={key:0},De={key:1},Oe={class:`external-binding-actions`},ke=[`disabled`,`onClick`],Ae=[`disabled`,`onClick`],je=[`disabled`,`onClick`],Me=[`disabled`,`onClick`],Ne={key:0,class:`external-binding-editor`},Pe={class:`external-target-mode-list`},Fe={class:`external-binding-editor-actions`},Ie=[`disabled`],Le=[`disabled`,`onClick`],Re={key:0,class:`compact-empty`},ze={class:`wide-field`},Be={class:`trusted-code-badge`},Ve=[`disabled`],He={class:`section-title section-title-with-help`},Ue=[`href`,`aria-label`,`title`],We={class:`conflict-policy-controls`},Ge={key:2,role:`alert`},Ke={key:1,class:`connection-subscriptions`},qe={class:`section-title`},Je={class:`subscription-list`},Ye=[`disabled`,`onClick`],Xe={key:0,class:`empty-state`},Ze=[`disabled`],O=g({__name:`ConnectionsPage`,setup(ee){let g=ae(),x=s(``),w=s(!1),T=s(``),E=s([]),O=s([]),k=s(!1),A=s(!1),j=s(``),M=s(null),N=s([]),P=s({}),F=s(``),I=s(`ask_human`),L=s(!1),R=s(!1),z=s(!1),B=`ask_human`,V=0,H=null,U=r({name:``,connectorType:`mcp`,mode:`hybrid`,personalProjectIds:[],mcpTransport:`http`,mcpUrl:``,mcpCommand:``,mcpArgs:``,mcpTokenEnv:``,mcpResourcePrefix:``,notionTokenEnv:``,notionPageIds:``,notionDataSourceIds:``,feishuTokenEnv:``,feishuRegion:`cn`,feishuSpaceId:``,feishuRootNodeToken:``,feishuNodeTokens:``,feishuWebBaseUrl:``,retrievalUrl:``,retrievalTokenEnv:``,retrievalKnowledgeIds:``,retrievalScoreThreshold:`0.5`,customModule:``,customEnvironmentNames:``,customSourceJson:`{}`}),Qe=d(()=>g.state?.providers?.personal?.status===`ready`),$e=d(()=>g.state?.providers?.workspaces??[]),et=d(()=>$e.value.filter(({status:e})=>e===`ready`).length),tt=d(()=>{let e=g.state?.capabilities,t=[e?.browsePublicProjects?l(`pages.connections.publicCapability.discovery`):null,e?.subscribeProject?l(`pages.connections.publicCapability.subscription`):null,e?.publishProject?l(`pages.connections.publicCapability.publishing`):null,e?.submitKnowledge?l(`pages.connections.publicCapability.contribution`):null,e?.reviewProposals?l(`pages.connections.publicCapability.review`):null].filter(e=>!!e);return t.length?new Intl.ListFormat(re(),{style:`long`,type:`conjunction`}).format(t):l(`pages.connections.notAvailable`)}),W=d(()=>g.state?.subscriptions??[]),G=d(()=>g.state?.personalProjects??[]),nt=d(()=>Ft(`connect-external-knowledge`)),rt=d(()=>Ft(`external-knowledge-conflict-policy`)),it=d(()=>new Set(W.value.map(({provider_url:e,project_id:t})=>`${e}::${t}`))),at=d(()=>(g.state?.projects??[]).filter(e=>!it.value.has(q(e)))),ot=d(()=>at.value.map(e=>({value:q(e),label:e.name,meta:`#${le(e.id,26)}`,search:ce(e.id)}))),st=d(()=>E.value.map(e=>({value:e.type,label:e.name,meta:e.description}))),K=d(()=>G.value.map(e=>({value:e.project_id,label:e.profile.name,meta:`#${le(e.project_id,26)}`,search:ce(e.project_id)}))),ct=d(()=>[{value:`hybrid`,label:l(`pages.connections.mode.hybrid`),disabled:!Y(U.connectorType,`hybrid`)},{value:`mirror`,label:l(`pages.connections.mode.mirror`),disabled:!Y(U.connectorType,`mirror`)},{value:`live`,label:l(`pages.connections.mode.live`),disabled:!Y(U.connectorType,`live`)}]),lt=d(()=>[{value:`http`,label:`Streamable HTTP`},{value:`stdio`,label:`stdio`}]),ut=d(()=>[{value:`cn`,label:`Feishu`},{value:`global`,label:`Lark`}]),dt=d(()=>[{value:`ask_human`,label:l(`pages.connections.askHuman`)},{value:`agent_decide`,label:l(`pages.connections.agentDecide`)}]);o(G,e=>{let t=new Set(e.map(({project_id:e})=>e)),n=e[0]?.project_id??``;U.personalProjectIds=U.personalProjectIds.filter(e=>t.has(e)),!U.personalProjectIds.length&&n&&(U.personalProjectIds=[n]),N.value=N.value.filter(e=>t.has(e)),t.has(F.value)||(F.value=n)},{immediate:!0}),o(()=>[g.activePersonalSpace?.id,F.value],()=>void Tt(),{immediate:!0,flush:`sync`}),o(()=>U.connectorType,e=>{Y(e,U.mode)||(U.mode=Ot(e))}),ne(()=>void J()),e(()=>{V+=1,H?.abort()});function q(e){return`${e.providerUrl}::${e.id}`}async function ft(){let e=g.activePersonalSpace?.id,t=at.value.find(e=>q(e)===x.value);if(!(!e||!t||w.value)){w.value=!0,T.value=`pages.connections.subscribing`;try{await v(`/api/subscriptions`,{personalSpaceId:e,projectId:t.id,providerUrl:t.providerUrl,projectName:t.name}),x.value=``,g.notify(l(`pages.connections.subscribed`,{name:t.name})),T.value=`pages.connections.loadingSubscriptions`,await g.refresh()}catch(e){g.reportError(e)}finally{w.value=!1}}}async function pt(e){let t=g.activePersonalSpace?.id;if(!(!t||w.value)){w.value=!0,T.value=`pages.connections.unsubscribing`;try{let n=new URLSearchParams({personalSpaceId:t,providerUrl:e.provider_url});await se(`/api/subscriptions/${encodeURIComponent(e.project_id)}?${n}`),g.notify(l(`pages.connections.unsubscribed`,{name:e.project_name??e.project_id})),T.value=`pages.connections.loadingSubscriptions`,await g.refresh()}catch(e){g.reportError(e)}finally{w.value=!1}}}async function J(){A.value=!0;try{let[e,t]=await Promise.all([y(`/api/external-knowledge/connectors`),y(`/api/external-knowledge/bindings`)]);E.value=e,O.value=t}catch(e){g.reportError(e)}finally{A.value=!1}}async function mt(){let e=g.activePersonalSpace?.id;if(!(!e||!U.personalProjectIds.length||k.value)){k.value=!0,j.value=`pages.connections.creatingBinding`;try{let{connectorConfig:t,source:n}=ht();await v(`/api/external-knowledge/bindings`,{name:U.name.trim(),connectorType:U.connectorType,connectorConfig:t,source:n,targets:U.personalProjectIds.map(t=>({personalSpaceId:e,personalProjectId:t,mode:U.mode}))}),g.notify(l(`pages.connections.externalCreated`,{name:U.name.trim()})),U.name=``,await J()}catch(e){g.reportError(e)}finally{k.value=!1}}}function ht(){if(U.connectorType===`notion`)return{connectorConfig:{tokenEnv:$(U.notionTokenEnv,`Notion token env`)},source:{pageIds:Z(U.notionPageIds),dataSourceIds:Z(U.notionDataSourceIds)}};if(U.connectorType===`feishu`)return{connectorConfig:{accessTokenEnv:$(U.feishuTokenEnv,`Feishu token env`),region:U.feishuRegion},source:Q({spaceId:U.feishuSpaceId.trim(),rootNodeToken:U.feishuRootNodeToken.trim(),nodeTokens:Z(U.feishuNodeTokens),webBaseUrl:U.feishuWebBaseUrl.trim()})};if(U.connectorType===`retrieval_api`){let e=Number(U.retrievalScoreThreshold);if(!Number.isFinite(e)||e<0||e>1)throw TypeError(l(`pages.connections.scoreThresholdInvalid`));return{connectorConfig:Q({url:$(U.retrievalUrl,`Retrieval API URL`),tokenEnv:U.retrievalTokenEnv.trim(),scoreThreshold:e}),source:{knowledgeIds:Pt(U.retrievalKnowledgeIds,`Knowledge IDs`)}}}if(U.connectorType===`custom`){let e=JSON.parse(U.customSourceJson);if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(l(`pages.connections.customSourceObject`));return{connectorConfig:{module:$(U.customModule,`Custom connector module`),environmentNames:Z(U.customEnvironmentNames)},source:e}}return{connectorConfig:U.mcpTransport===`stdio`?Q({transport:`stdio`,command:U.mcpCommand.trim(),args:Z(U.mcpArgs)}):Q({transport:`http`,url:$(U.mcpUrl,`MCP URL`),tokenEnv:U.mcpTokenEnv.trim()}),source:Q({resourceUriPrefix:U.mcpResourcePrefix.trim()})}}async function gt(e){await vt(e,`check`)}async function _t(e){await vt(e,`sync`)}async function vt(e,t){if(!k.value){k.value=!0,j.value=t===`sync`?`pages.connections.syncingBinding`:`pages.connections.checkingBinding`;try{let n=await v(`/api/external-knowledge/bindings/${encodeURIComponent(e.id)}/${t}`,{});g.notify(l(t===`sync`&&n.skippedCredentials?`pages.connections.externalSyncedWithSkipped`:t===`sync`?`pages.connections.externalSynced`:`pages.connections.externalChecked`,{name:e.name,count:n.skippedCredentials??0})),await J()}catch(e){g.reportError(e)}finally{k.value=!1}}}async function yt(e){if(!k.value){k.value=!0,j.value=`pages.connections.disconnectingBinding`;try{await se(`/api/external-knowledge/bindings/${encodeURIComponent(e.id)}`),g.notify(l(`pages.connections.externalDeleted`,{name:e.name})),await J()}catch(e){g.reportError(e)}finally{k.value=!1}}}function bt(e){let t=X(e);M.value=e.id,N.value=t.map(({personalProjectId:e})=>e),P.value=Object.fromEntries(t.map(({personalProjectId:e,mode:t})=>[e,t]))}function xt(){M.value=null,N.value=[],P.value={}}function St(e){let t=O.value.find(({id:e})=>e===M.value);if(!t)return;let n=P.value,r=Ot(t.connectorType);P.value=Object.fromEntries(e.map(e=>[e,n[e]??t.mode??r]))}function Ct(e,t){P.value={...P.value,[e]:t}}async function wt(e){let t=g.activePersonalSpace?.id;if(!(!t||!N.value.length||k.value)){k.value=!0,j.value=`pages.connections.savingBindingTargets`;try{await oe(`/api/external-knowledge/bindings/${encodeURIComponent(e.id)}/targets`,{expectedTargetsVersion:e.targetsVersion,targets:N.value.map(n=>({personalSpaceId:t,personalProjectId:n,mode:P.value[n]??e.mode}))}),g.notify(l(`pages.connections.projectsUpdated`,{name:e.name})),xt(),await J()}catch(e){g.reportError(e)}finally{k.value=!1}}}async function Tt(){let e=++V;if(H?.abort(),H=null,I.value=`ask_human`,z.value=!1,R.value=!1,!g.activePersonalSpace?.id||!F.value)return;let t=new AbortController;H=t,R.value=!0;try{let n=await y(`/api/external-knowledge/conflict-policy?${new URLSearchParams({personalProjectId:F.value})}`,{signal:t.signal});if(e!==V)return;I.value=n.mode,B=n.mode}catch{if(e!==V)return;z.value=!0}finally{e===V&&(R.value=!1,H=null)}}async function Et(){let e=g.activePersonalSpace?.id;if(!e||!F.value||L.value||R.value||z.value)return;let t=V;L.value=!0;try{let n=await oe(`/api/external-knowledge/conflict-policy?${new URLSearchParams({personalProjectId:F.value})}`,{personalSpaceId:e,personalProjectId:F.value,mode:I.value});if(t!==V)return;I.value=n.mode,B=n.mode,g.notify(l(`pages.connections.conflictSaved`))}catch(e){if(t!==V)return;I.value=B,g.reportError(e)}finally{L.value=!1}}function Dt(e){return E.value.find(t=>t.type===e)?.name??e}function Y(e,t){let n=E.value.find(t=>t.type===e)?.capabilities;return!n?.length||(t===`live`||t===`hybrid`?n.includes(`retrieve`):!0)&&(t===`mirror`||t===`hybrid`?n.includes(`sync`):!0)}function Ot(e){return[`hybrid`,`mirror`,`live`].find(t=>Y(e,t))??`live`}function kt(e){return[`hybrid`,`mirror`,`live`].map(t=>({value:t,label:l(`pages.connections.mode.${t}`),disabled:!Y(e,t)}))}function X(e){return e.targets?.length?e.targets:[{id:e.id,...e.target,mode:e.mode,status:e.status,sync:e.sync}]}function At(e){return X(e).some(({mode:e})=>e!==`live`)}function jt(e){return G.value.find(({project_id:t})=>t===e)?.profile.name??e}function Mt(e){return X(e).find(({sync:e})=>e?.error)?.sync?.error??e.sync?.error}function Nt(e){return X(e).reduce((e,t)=>e+(t.sync?.skippedCredentials??0),0)}function Z(e){return[...new Set(e.split(`,`).map(e=>e.trim()).filter(Boolean))]}function Pt(e,t){let n=Z(e);if(!n.length)throw TypeError(`${t} is required`);return n}function Q(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==``&&(!Array.isArray(e)||e.length>0)))}function $(e,t){if(!e.trim())throw TypeError(`${t} is required`);return e.trim()}function Ft(e){return`https://github.com/JevonsCode/fuli/blob/main/${re()===`zh-CN`?`README.zh-CN.md`:`README.md`}#${e}`}return(e,r)=>(i(),u(`section`,ue,[c(`div`,{class:`service-connection-grid`,"aria-label":m(l)(`pages.connections.statusAria`)},[c(`article`,{class:`service-connection-card`,"data-status":Qe.value?`ready`:`error`},[c(`header`,null,[r[30]||=c(`span`,{class:`service-connection-icon local`,"aria-hidden":`true`},[c(`span`,{class:`nav-icon nav-icon-personal-project`})],-1),c(`div`,null,[c(`h3`,null,f(m(l)(`pages.connections.localGraphiti`)),1)]),c(`span`,pe,f(Qe.value?m(l)(`common.status.connected`):m(l)(`common.status.connectionError`)),1)]),n(C,{title:m(l)(`ui.connectionDetails`)},{default:t(()=>[c(`dl`,null,[c(`div`,null,[c(`dt`,null,f(m(l)(`pages.connections.storage`)),1),r[31]||=c(`dd`,null,`Neo4j`,-1)]),c(`div`,null,[c(`dt`,null,f(m(l)(`pages.connections.purpose`)),1),c(`dd`,null,f(m(l)(`pages.connections.localPurpose`)),1)])])]),_:1},8,[`title`])],8,fe),c(`article`,{class:`service-connection-card`,"data-status":m(g).publicRuntimeStatus},[c(`header`,null,[r[33]||=c(`span`,{class:`service-connection-icon public`,"aria-hidden":`true`},[c(`span`,{class:`nav-icon nav-icon-public-project`})],-1),c(`div`,he,[c(`h3`,null,f(m(l)(`pages.connections.publicService`)),1),r[32]||=c(`span`,{class:`feature-badge beta`},`BETA`,-1)]),c(`span`,ge,f(m(g).publicRuntimeStatus===`ready`?m(l)(`common.status.connected`):m(g).publicRuntimeStatus===`error`?m(l)(`common.status.connectionError`):m(l)(`common.status.notConnected`)),1)]),c(`dl`,null,[c(`div`,null,[c(`dt`,null,f(m(l)(`pages.connections.currentStatus`)),1),c(`dd`,null,f(m(g).publicRuntimeStatus===`ready`?m(l)(`pages.connections.sharedServicesReady`,{count:et.value||$e.value.length}):m(l)(`pages.connections.notAvailable`)),1)]),c(`div`,null,[c(`dt`,null,f(m(l)(`pages.connections.purpose`)),1),c(`dd`,null,f(tt.value),1)])])],8,me)],8,de),c(`section`,_e,[c(`div`,ve,[c(`h3`,null,f(m(l)(`pages.connections.externalTitle`)),1),c(`a`,{class:`section-help-link`,"data-testid":`external-knowledge-help`,href:nt.value,"aria-label":m(l)(`pages.connections.externalHelp`),title:m(l)(`pages.connections.externalHelp`),target:`_blank`,rel:`noreferrer`},`?`,8,ye),c(`span`,be,f(m(l)(`pages.connections.bindingCount`,{count:O.value.length})),1)]),A.value||k.value?(i(),h(b,{key:0,variant:`compact`,label:m(l)(A.value?`pages.connections.loadingBindings`:j.value)},null,8,[`label`])):_(``,!0),c(`div`,xe,[(i(!0),u(p,null,a(O.value,e=>(i(),u(`article`,{key:e.id,class:`external-binding-row`,"data-status":e.status},[r[34]||=c(`i`,{"aria-hidden":`true`},null,-1),c(`div`,Ce,[c(`strong`,null,f(e.name),1),c(`span`,null,f(Dt(e.connectorType)),1),c(`div`,we,[c(`b`,null,f(m(l)(`pages.connections.boundTo`)),1),(i(!0),u(p,null,a(X(e),e=>(i(),u(`span`,{key:e.id,class:`external-binding-target-chip`,"data-status":e.status},f(jt(e.personalProjectId))+` · `+f(m(l)(`pages.connections.mode.${e.mode}`)),9,Te))),128))]),Mt(e)?(i(),u(`small`,Ee,f(Mt(e)),1)):Nt(e)?(i(),u(`small`,De,f(m(l)(`pages.connections.credentialsSkipped`,{count:Nt(e)})),1)):_(``,!0)]),c(`div`,Oe,[c(`button`,{class:`quiet-button`,type:`button`,disabled:k.value,onClick:t=>gt(e)},f(m(l)(`pages.connections.check`)),9,ke),c(`button`,{class:`quiet-button external-sync-action`,type:`button`,disabled:k.value||!At(e),onClick:t=>_t(e)},f(m(l)(`pages.connections.sync`)),9,Ae),c(`button`,{class:`quiet-button`,type:`button`,disabled:k.value,onClick:t=>bt(e)},f(m(l)(`pages.connections.manageProjects`)),9,je),c(`button`,{class:`quiet-button danger`,type:`button`,disabled:k.value,onClick:t=>yt(e)},f(m(l)(`pages.connections.disconnect`)),9,Me)]),M.value===e.id?(i(),u(`div`,Ne,[c(`label`,null,[c(`span`,null,f(m(l)(`pages.connections.targetProjects`)),1),n(S,{multiple:``,modelValue:N.value,"onUpdate:modelValue":r[0]||=e=>N.value=e,"control-id":`external-projects-${e.id}`,label:m(l)(`pages.connections.targetProjects`),options:K.value,disabled:k.value,required:``,searchable:``,onChange:St},null,8,[`modelValue`,`control-id`,`label`,`options`,`disabled`])]),c(`div`,Pe,[(i(!0),u(p,null,a(N.value,t=>(i(),u(`div`,{key:t,class:`external-target-mode-row`},[c(`span`,null,f(jt(t)),1),n(S,{"model-value":P.value[t]??e.mode,"control-id":`external-target-mode-${e.id}-${t}`,label:m(l)(`pages.connections.bindingMode`),options:kt(e.connectorType),disabled:k.value,"onUpdate:modelValue":e=>Ct(t,e)},null,8,[`model-value`,`control-id`,`label`,`options`,`disabled`,`onUpdate:modelValue`])]))),128))]),c(`div`,Fe,[c(`button`,{class:`quiet-button`,type:`button`,disabled:k.value,onClick:xt},f(m(l)(`common.actions.cancel`)),9,Ie),c(`button`,{class:`primary-action`,type:`button`,disabled:k.value||!N.value.length,onClick:t=>wt(e)},f(m(l)(`pages.connections.saveProjects`)),9,Le)])])):_(``,!0)],8,Se))),128)),!A.value&&!O.value.length?(i(),u(`div`,Re,f(m(l)(`pages.connections.noExternalBindings`)),1)):_(``,!0)]),n(C,{title:m(l)(`pages.connections.connect`),open:!O.value.length},{default:t(()=>[c(`form`,{class:`external-binding-form`,onSubmit:ie(mt,[`prevent`])},[n(D,{modelValue:U.name,"onUpdate:modelValue":r[1]||=e=>U.name=e,label:m(l)(`pages.connections.bindingName`),"data-testid":`external-name`,required:``},null,8,[`modelValue`,`label`]),c(`label`,null,[c(`span`,null,f(m(l)(`pages.connections.connector`)),1),n(S,{modelValue:U.connectorType,"onUpdate:modelValue":r[2]||=e=>U.connectorType=e,"control-id":`external-connector`,label:m(l)(`pages.connections.connector`),options:st.value,disabled:k.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),c(`label`,null,[c(`span`,null,f(m(l)(`pages.connections.targetProjects`)),1),n(S,{multiple:``,modelValue:U.personalProjectIds,"onUpdate:modelValue":r[3]||=e=>U.personalProjectIds=e,"control-id":`external-projects`,label:m(l)(`pages.connections.targetProjects`),options:K.value,disabled:k.value,required:``,searchable:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),c(`label`,null,[c(`span`,null,f(m(l)(`pages.connections.bindingMode`)),1),n(S,{modelValue:U.mode,"onUpdate:modelValue":r[4]||=e=>U.mode=e,"control-id":`external-binding-mode`,label:m(l)(`pages.connections.bindingMode`),options:ct.value,disabled:k.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),U.connectorType===`mcp`?(i(),u(p,{key:0},[c(`label`,null,[c(`span`,null,f(m(l)(`pages.connections.transport`)),1),n(S,{modelValue:U.mcpTransport,"onUpdate:modelValue":r[5]||=e=>U.mcpTransport=e,"control-id":`external-mcp-transport`,label:m(l)(`pages.connections.transport`),options:lt.value,disabled:k.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),U.mcpTransport===`http`?(i(),h(D,{key:0,modelValue:U.mcpUrl,"onUpdate:modelValue":r[6]||=e=>U.mcpUrl=e,label:`MCP URL`,"data-testid":`mcp-url`,type:`url`,required:``},null,8,[`modelValue`])):(i(),h(D,{key:1,modelValue:U.mcpCommand,"onUpdate:modelValue":r[7]||=e=>U.mcpCommand=e,label:m(l)(`pages.connections.command`),required:``},null,8,[`modelValue`,`label`])),U.mcpTransport===`stdio`?(i(),h(D,{key:2,modelValue:U.mcpArgs,"onUpdate:modelValue":r[8]||=e=>U.mcpArgs=e,label:m(l)(`pages.connections.arguments`)},null,8,[`modelValue`,`label`])):(i(),h(D,{key:3,modelValue:U.mcpTokenEnv,"onUpdate:modelValue":r[9]||=e=>U.mcpTokenEnv=e,label:m(l)(`pages.connections.tokenEnv`),"data-testid":`mcp-token-env`},null,8,[`modelValue`,`label`])),n(D,{modelValue:U.mcpResourcePrefix,"onUpdate:modelValue":r[10]||=e=>U.mcpResourcePrefix=e,label:m(l)(`pages.connections.resourcePrefix`),"data-testid":`mcp-resource-prefix`},null,8,[`modelValue`,`label`])],64)):U.connectorType===`notion`?(i(),u(p,{key:1},[n(D,{modelValue:U.notionTokenEnv,"onUpdate:modelValue":r[11]||=e=>U.notionTokenEnv=e,label:m(l)(`pages.connections.tokenEnv`),required:``},null,8,[`modelValue`,`label`]),n(D,{modelValue:U.notionPageIds,"onUpdate:modelValue":r[12]||=e=>U.notionPageIds=e,label:`Page IDs`},null,8,[`modelValue`]),n(D,{modelValue:U.notionDataSourceIds,"onUpdate:modelValue":r[13]||=e=>U.notionDataSourceIds=e,label:`Data Source IDs`},null,8,[`modelValue`])],64)):U.connectorType===`feishu`?(i(),u(p,{key:2},[n(D,{modelValue:U.feishuTokenEnv,"onUpdate:modelValue":r[14]||=e=>U.feishuTokenEnv=e,label:m(l)(`pages.connections.tokenEnv`),required:``},null,8,[`modelValue`,`label`]),c(`label`,null,[c(`span`,null,f(m(l)(`pages.connections.region`)),1),n(S,{modelValue:U.feishuRegion,"onUpdate:modelValue":r[15]||=e=>U.feishuRegion=e,"control-id":`external-feishu-region`,label:m(l)(`pages.connections.region`),options:ut.value,disabled:k.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),n(D,{modelValue:U.feishuSpaceId,"onUpdate:modelValue":r[16]||=e=>U.feishuSpaceId=e,label:`Space ID`},null,8,[`modelValue`]),n(D,{modelValue:U.feishuRootNodeToken,"onUpdate:modelValue":r[17]||=e=>U.feishuRootNodeToken=e,label:`Root Node Token`},null,8,[`modelValue`]),n(D,{modelValue:U.feishuNodeTokens,"onUpdate:modelValue":r[18]||=e=>U.feishuNodeTokens=e,label:`Node Tokens`},null,8,[`modelValue`]),n(D,{modelValue:U.feishuWebBaseUrl,"onUpdate:modelValue":r[19]||=e=>U.feishuWebBaseUrl=e,label:`Web URL`,type:`url`},null,8,[`modelValue`])],64)):U.connectorType===`retrieval_api`?(i(),u(p,{key:3},[n(D,{modelValue:U.retrievalUrl,"onUpdate:modelValue":r[20]||=e=>U.retrievalUrl=e,label:m(l)(`pages.connections.retrievalUrl`),type:`url`,required:``},null,8,[`modelValue`,`label`]),n(D,{modelValue:U.retrievalTokenEnv,"onUpdate:modelValue":r[21]||=e=>U.retrievalTokenEnv=e,label:m(l)(`pages.connections.tokenEnv`)},null,8,[`modelValue`,`label`]),n(D,{modelValue:U.retrievalKnowledgeIds,"onUpdate:modelValue":r[22]||=e=>U.retrievalKnowledgeIds=e,label:m(l)(`pages.connections.knowledgeIds`),required:``},null,8,[`modelValue`,`label`]),n(D,{modelValue:U.retrievalScoreThreshold,"onUpdate:modelValue":r[23]||=e=>U.retrievalScoreThreshold=e,label:m(l)(`pages.connections.scoreThreshold`),inputmode:`decimal`,required:``},null,8,[`modelValue`,`label`])],64)):(i(),u(p,{key:4},[n(D,{modelValue:U.customModule,"onUpdate:modelValue":r[24]||=e=>U.customModule=e,label:m(l)(`pages.connections.module`),required:``},null,8,[`modelValue`,`label`]),n(D,{modelValue:U.customEnvironmentNames,"onUpdate:modelValue":r[25]||=e=>U.customEnvironmentNames=e,label:m(l)(`pages.connections.environmentNames`)},null,8,[`modelValue`,`label`]),c(`div`,ze,[n(D,{modelValue:U.customSourceJson,"onUpdate:modelValue":r[26]||=e=>U.customSourceJson=e,label:m(l)(`pages.connections.sourceJson`),multiline:``,required:``},null,8,[`modelValue`,`label`])]),c(`span`,Be,f(m(l)(`pages.connections.trustedCode`)),1)],64)),c(`button`,{class:`primary-action external-create-action`,type:`submit`,disabled:k.value||!G.value.length||!U.personalProjectIds.length},[r[35]||=c(`span`,{class:`external-create-action-icon`,"aria-hidden":`true`},null,-1),c(`span`,null,f(m(l)(`pages.connections.connect`)),1)],8,Ve)],32)]),_:1},8,[`title`,`open`])]),G.value.length?(i(),h(C,{key:0,class:`conflict-policy-section`,open:z.value,title:m(l)(`pages.connections.conflictTitle`)},{default:t(()=>[c(`div`,He,[c(`a`,{class:`section-help-link`,"data-testid":`conflict-policy-help`,href:rt.value,"aria-label":m(l)(`pages.connections.conflictHelp`),title:m(l)(`pages.connections.conflictHelp`),target:`_blank`,rel:`noreferrer`},`?`,8,Ue)]),c(`div`,We,[c(`label`,null,[c(`span`,null,f(m(l)(`pages.connections.targetProject`)),1),n(S,{modelValue:F.value,"onUpdate:modelValue":r[27]||=e=>F.value=e,"control-id":`external-conflict-project`,label:m(l)(`pages.connections.targetProject`),options:K.value,disabled:L.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),c(`label`,null,[c(`span`,null,f(m(l)(`pages.connections.conflictAction`)),1),n(S,{modelValue:I.value,"onUpdate:modelValue":r[28]||=e=>I.value=e,"control-id":`external-conflict-mode`,label:m(l)(`pages.connections.conflictAction`),options:dt.value,disabled:L.value||R.value||z.value||!F.value,required:``,onChange:Et},null,8,[`modelValue`,`label`,`options`,`disabled`])])]),R.value?(i(),h(b,{key:0,variant:`compact`,label:m(l)(`pages.connections.loadingConflictPolicy`)},null,8,[`label`])):_(``,!0),L.value?(i(),h(b,{key:1,variant:`inline`,label:m(l)(`pages.connections.savingConflictPolicy`)},null,8,[`label`])):z.value?(i(),u(`div`,Ge,[c(`p`,null,f(m(l)(`common.errors.loadFailed`)),1),c(`button`,{class:`secondary-action`,type:`button`,onClick:Tt},f(m(l)(`common.actions.retry`)),1)])):_(``,!0)]),_:1},8,[`open`,`title`])):_(``,!0),m(g).state?.capabilities?.subscribeProject?(i(),u(`section`,Ke,[c(`div`,qe,[c(`h3`,null,[te(f(m(l)(`pages.connections.subscriptionsTitle`))+` `,1),r[36]||=c(`span`,{class:`feature-badge beta`},`BETA`,-1)])]),w.value?(i(),h(b,{key:0,variant:`inline`,label:m(l)(T.value)},null,8,[`label`])):_(``,!0),c(`div`,Je,[(i(!0),u(p,null,a(W.value,e=>(i(),u(`div`,{key:`${e.provider_url}:${e.project_id}`,class:`subscription-row`},[r[37]||=c(`span`,null,`↗`,-1),c(`div`,null,[c(`strong`,null,f(e.project_name??e.project_id),1),c(`span`,null,f(m(l)(`pages.connections.sharedProject`)),1)]),c(`button`,{class:`secondary-action subscription-action`,type:`button`,disabled:w.value,onClick:t=>pt(e)},f(m(l)(`pages.connections.unsubscribe`)),9,Ye)]))),128)),W.value.length?_(``,!0):(i(),u(`div`,Xe,f(m(l)(`pages.connections.noSubscriptions`)),1))]),c(`form`,{class:`subscription-form`,onSubmit:ie(ft,[`prevent`])},[n(S,{modelValue:x.value,"onUpdate:modelValue":r[29]||=e=>x.value=e,options:ot.value,label:m(l)(`pages.connections.sharedProjectLabel`),placeholder:m(l)(`pages.connections.choosePublicProject`),searchable:``,required:``,disabled:w.value},null,8,[`modelValue`,`options`,`label`,`placeholder`,`disabled`]),c(`button`,{type:`submit`,disabled:w.value||!x.value||!m(g).activePersonalSpace},f(m(l)(`pages.connections.subscribe`)),9,Ze)],32)])):_(``,!0)]))}});export{O as default};
@@ -0,0 +1 @@
1
+ .text-field[data-v-8c90420d]{min-width:0;color:var(--color-ink-soft);gap:6px;font-size:13px;font-weight:500;display:grid}.text-field input[data-v-8c90420d],.text-field textarea[data-v-8c90420d]{width:100%;min-width:0;font-weight:400}
@@ -0,0 +1 @@
1
+ import{B as e,C as t,M as n,P as r,R as i,S as a,X as o,_ as s,a as c,b as l,g as u,it as d,m as f,nt as ee,tt as p,v as m,w as h,x as te,y as g}from"./i18n-CCMR4gDS.js";import{i as ne,o as re}from"./client-CUTkF3t4.js";import{t as _}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as v,t as ie}from"./UiDialog-Da1P10f4.js";import{t as y}from"./vue-router-DjqEU4W2.js";import{t as b}from"./UiSelect-D5Xj5Ec4.js";import{n as ae}from"./paths-CDREouhi.js";import{a as oe,o as se,r as ce,s as le}from"./catalog-6SN9i3WR.js";import{t as ue}from"./ProjectScopePicker-CMxn3txv.js";var x={jefa:`/assets/jefa-avatar-Dew42td5.webp`,bole:`/assets/bole-avatar-CVIr-bU_.webp`};function S(e){return x[e]}var de={key:1,role:`alert`,class:`ui-dialog__error employee-message`},fe={key:2,class:`ui-muted`},pe={class:`employee-profile`},me={class:`employee-avatar`,"aria-hidden":`true`},he=[`src`],ge={class:`ui-meta`},_e={key:2,class:`employee-scope`},ve=[`aria-label`],ye=[`data-scope`,`aria-checked`,`tabindex`,`disabled`,`onClick`],be={class:`ui-meta`,role:`status`},xe={key:3,class:`ui-meta`},Se={key:4,class:`ui-meta`},Ce={key:5,class:`ui-meta`},we=[`aria-label`],Te={class:`employee-title-controls`},Ee={class:`ui-meta`},De={class:`employee-title-example`},Oe={class:`ui-meta`},ke=[`aria-label`],Ae={class:`ui-meta`},je={key:8,class:`ui-dialog__error`,role:`alert`},Me={key:10,class:`employee-success`,role:`status`},C=_(h({__name:`EmployeeRecruitDialog`,props:{open:{type:Boolean},personalSpaceId:{},projects:{},defaultProjectId:{},defaultProjectIds:{},templateId:{}},emits:[`close`,`recruited`],setup(h,{emit:_}){let x=h,C=_,w=o([]),T=o([]),E=o(`selected`),D=o([]),O=o(`auto`),k=o(`emoji`),A=o(``),j=o(``),M=o(!1),N=o(!1),P=o(``),F=o(!1),I=o(``),L=o(null),R=o([]),z=o(``),B=u(()=>x.templateId?R.value:R.value.filter(e=>!e.fixed)),V=u(()=>x.templateId?B.value.find(e=>e.id===x.templateId):B.value.find(e=>e.id===P.value)??B.value[0]),Ne=u({get:()=>V.value?.id??``,set:e=>{P.value=e}}),Pe=u(()=>V.value?.agentId?c(`employees.manageProjectsTitle`,{name:V.value.name}):c(`employees.recruit`)),H=u(()=>x.projects.filter(e=>e.profile.lifecycle!==`archived`).map(e=>({id:e.project_id,name:e.profile.name}))),U=u(()=>V.value?.management!==void 0),W=u({get:()=>E.value===`all`?H.value.filter(e=>!D.value.includes(e.id)).map(e=>e.id):w.value,set:e=>{if(E.value===`all`){let t=new Set(H.value.map(e=>e.id));D.value=[...D.value.filter(e=>!t.has(e)),...H.value.filter(t=>!e.includes(t.id)).map(e=>e.id)]}else w.value=e}}),G=u(()=>({mode:E.value,projectIds:E.value===`selected`?[...w.value].sort():[],excludedProjectIds:E.value===`all`?[...D.value].sort():[],titleMode:O.value,titleStyle:k.value})),Fe=u(()=>[`auto`,`suggest`,`off`].map(e=>({value:e,label:c(`employees.titles.${e}`)}))),Ie=u(()=>[`emoji`,`text`].map(e=>({value:e,label:c(`employees.titles.${e}`)}))),K=u(()=>new Set(T.value)),Le=u(()=>[...K.value].filter(e=>!W.value.includes(e))),Re=u(()=>!!(V.value?.agentStatus&&V.value.agentStatus!==`active`)),q=u(()=>V.value?.agentStatus===`active`&&(U.value?JSON.stringify(G.value)===A.value&&(E.value===`all`||w.value.length===K.value.size&&w.value.every(e=>K.value.has(e))):w.value.length===K.value.size&&w.value.every(e=>K.value.has(e)))),ze=u(()=>F.value?c(`employees.recruiting`):Re.value?c(`employees.rehire`,{name:V.value?.name??``}):q.value||V.value?.agentId?c(`employees.assign`):c(`employees.recruitName`,{name:V.value?.name??``})),J=u(()=>V.value&&W.value.length?`/employees/${encodeURIComponent(V.value.id)}?project=${encodeURIComponent(W.value[0])}`:``),Y=0;i([()=>x.open,()=>x.personalSpaceId,()=>x.templateId],([e])=>{Y+=1,e&&Z(!0)},{immediate:!0}),i(P,()=>{x.open&&!M.value&&X(!0)}),i(G,()=>{I.value=N.value?I.value:``,L.value=null},{flush:`sync`});function X(e=!1){let t=new Set(H.value.map(e=>e.id));T.value=[...new Set((V.value?.assignments??[]).filter(e=>e.status===`active`&&t.has(e.personalProjectId)).map(e=>e.personalProjectId))];let n=e&&!V.value?.agentId?x.defaultProjectIds??(x.defaultProjectId?[x.defaultProjectId]:[]):[];w.value=[...new Set([...T.value,...n.filter(e=>t.has(e))])];let r=V.value?.management;E.value=r?.mode??`selected`,D.value=[...r?.excludedProjectIds??[]],O.value=r?.titleMode??`auto`,k.value=r?.titleStyle??`emoji`,r?.mode===`selected`&&V.value?.agentId&&(w.value=r.projectIds.filter(e=>t.has(e))),r?.mode===`all`&&V.value?.agentId&&(T.value=[...W.value]),A.value=JSON.stringify(G.value),j.value=V.value?.assignmentsVersion??``,N.value=!1,I.value=``,L.value=null}async function Z(e=!1){let t=++Y;M.value=!0,R.value=[],z.value=``;try{let n=await se(x.personalSpaceId);if(t!==Y||!x.open)return;R.value=n,X(e)}catch(e){t===Y&&x.open&&(R.value=[],z.value=ce(e))}finally{t===Y&&(M.value=!1)}}function Q(){F.value||C(`close`)}async function Be(){if(!V.value||V.value.identityConflict||!x.personalSpaceId||F.value||M.value||N.value||!j.value||q.value)return;F.value=!0,I.value=``;let e=V.value.id;try{let t=await ne(`/api/employee-templates/${encodeURIComponent(e)}/recruit`,{personalSpaceId:x.personalSpaceId,...U.value?{management:G.value}:{personalProjectIds:[...w.value]},replaceAssignments:!0,expectedAssignmentsVersion:j.value,...Re.value?{reactivate:!0}:{}});await le(x.personalSpaceId),R.value=[...oe.value],X(),L.value=t,C(`recruited`,t)}catch(e){I.value=ce(e);try{let t=JSON.parse(e instanceof Error?e.message:``);N.value=t.code===`assignment_scope_conflict`||t.code===`assignment_update_incomplete`}catch{}}finally{F.value=!1}}function $(e){e===`selected`&&(w.value=[...W.value]),E.value=e}function Ve(e){if(!(F.value||M.value||N.value)&&[`ArrowLeft`,`ArrowRight`,`Home`,`End`].includes(e.key)){e.preventDefault();let t=e.key===`Home`?`all`:e.key===`End`||E.value===`all`?`selected`:`all`;$(t),e.currentTarget.querySelector(`[data-scope="${t}"]`)?.focus()}}return(i,o)=>(n(),m(ie,{open:h.open,class:`employee-recruit-dialog`,title:Pe.value,busy:F.value,form:``,onClose:Q,onSubmit:Be},te({default:e(()=>[M.value&&!B.value.length?(n(),m(re,{key:0,variant:`compact`,label:p(c)(`employees.loading`)},null,8,[`label`])):z.value?(n(),l(`div`,de,[s(`p`,null,d(z.value),1),t(v,{size:`sm`,onClick:o[0]||=e=>Z(!0)},{default:e(()=>[a(d(p(c)(`employees.retry`)),1)]),_:1})])):V.value?(n(),l(f,{key:3},[B.value.length>1&&!x.templateId?(n(),m(b,{key:0,modelValue:Ne.value,"onUpdate:modelValue":o[1]||=e=>Ne.value=e,field:``,"control-id":`employee-template`,label:p(c)(`employees.choose`),options:B.value.map(e=>({value:e.id,label:e.name,meta:e.role})),disabled:F.value||M.value},null,8,[`modelValue`,`label`,`options`,`disabled`])):g(``,!0),s(`div`,pe,[s(`span`,me,[p(S)(V.value.id)?(n(),l(`img`,{key:0,src:p(S)(V.value.id),alt:``},null,8,he)):(n(),l(f,{key:1},[a(d(V.value.name.slice(0,1)),1)],64))]),s(`div`,null,[s(`h3`,null,[a(d(V.value.name)+` `,1),s(`span`,null,d(V.value.role),1)]),s(`p`,null,d(V.value.description),1),s(`p`,ge,d(V.value.capabilities.join(` · `)),1)])]),M.value?(n(),m(re,{key:1,variant:`compact`,label:p(c)(`employees.loadingScope`)},null,8,[`label`])):g(``,!0),U.value?(n(),l(`div`,_e,[s(`div`,{class:`ui-segmented`,role:`radiogroup`,"aria-label":p(c)(`employees.scope.rule`),onKeydown:Ve},[(n(),l(f,null,r([`all`,`selected`],e=>s(`button`,{key:e,type:`button`,role:`radio`,"data-scope":e,"aria-checked":E.value===e,tabindex:E.value===e?0:-1,disabled:F.value||M.value||N.value,onClick:t=>$(e)},d(p(c)(`employees.scope.${e===`all`?`continuousAll`:`onlySelected`}`)),9,ye)),64))],40,ve),s(`p`,be,d(E.value===`all`?p(c)(`employees.scope.allHint`,{name:V.value.name}):p(c)(`employees.scope.selectedHint`)),1)])):g(``,!0),t(ue,{modelValue:W.value,"onUpdate:modelValue":o[2]||=e=>W.value=e,projects:H.value,inline:``,hint:E.value===`all`?p(c)(`employees.scope.excludeHint`):void 0,disabled:F.value||M.value||N.value},null,8,[`modelValue`,`projects`,`hint`,`disabled`]),E.value===`all`&&D.value.length?(n(),l(`p`,xe,d(p(c)(`employees.scope.excludedCount`,{count:D.value.length})),1)):g(``,!0),H.value.length?g(``,!0):(n(),l(`p`,Se,[a(d(p(c)(`employees.noProjects`))+` `,1),t(p(y),{to:p(ae)(h.personalSpaceId,`directory`),onClick:Q},{default:e(()=>[a(d(p(c)(`employees.createProject`)),1)]),_:1},8,[`to`])])),Le.value.length&&!L.value?(n(),l(`p`,Ce,d(p(c)(`employees.scopeRemoved`,{count:Le.value.length})),1)):g(``,!0),U.value&&V.value.permissions.includes(`session.title`)?(n(),l(`section`,{key:6,class:`employee-title-settings`,"aria-label":p(c)(`employees.titles.heading`)},[s(`h3`,null,d(p(c)(`employees.titles.heading`)),1),s(`div`,Te,[t(b,{modelValue:O.value,"onUpdate:modelValue":o[3]||=e=>O.value=e,field:``,"control-id":`employee-title-mode`,label:p(c)(`employees.titles.mode`),options:Fe.value,disabled:F.value||M.value||N.value},null,8,[`modelValue`,`label`,`options`,`disabled`]),t(b,{modelValue:k.value,"onUpdate:modelValue":o[4]||=e=>k.value=e,field:``,"control-id":`employee-title-style`,label:p(c)(`employees.titles.style`),options:Ie.value,disabled:F.value||M.value||N.value||O.value===`off`},null,8,[`modelValue`,`label`,`options`,`disabled`])]),s(`p`,Ee,[a(d(p(c)(`employees.titles.example`))+` `,1),s(`span`,De,`【P1|`+d(k.value===`emoji`?`🔧 `:``)+`FIX|`+d(p(c)(`employees.titles.exampleTask`))+`】`,1)]),s(`p`,Oe,d(p(c)(`employees.titles.boundary`)),1)],8,we)):g(``,!0),s(`section`,{class:`employee-permissions`,"aria-label":p(c)(`employees.permissions`)},[s(`strong`,null,d(p(c)(`employees.permissions`)),1),s(`ul`,null,[(n(!0),l(f,null,r(V.value.permissions,e=>(n(),l(`li`,{key:e},d(e===`board.read`?p(c)(`employees.boardRead`):e===`board.write`?p(c)(`employees.boardWrite`):e===`session.title`?p(c)(`employees.titles.heading`):e),1))),128))]),s(`p`,Ae,d(p(c)(`employees.noExecutor`)),1)],8,ke),V.value.runtime?(n(),l(`p`,{key:7,class:ee([`employee-runtime`,{"is-warning":V.value.runtimeStatus!==`ready`}])},d(V.value.runtimeStatus===`ready`?p(c)(`employees.hostReady`):p(c)(`employees.installRequired`)),3)):g(``,!0),I.value||V.value.identityConflict?(n(),l(`p`,je,d(I.value||p(c)(`employees.errors.identity_conflict`)),1)):g(``,!0),N.value?(n(),m(v,{key:9,size:`sm`,disabled:M.value,onClick:o[5]||=e=>Z()},{default:e(()=>[a(d(p(c)(`employees.reloadScope`)),1)]),_:1},8,[`disabled`])):g(``,!0),L.value?(n(),l(`div`,Me,[s(`strong`,null,d(p(c)(`employees.scopeSaved`)),1),s(`p`,null,d(E.value===`all`?p(c)(`employees.scope.successAll`,{count:W.value.length}):W.value.length?p(c)(`employees.successMultiple`,{count:W.value.length}):p(c)(`employees.successUnassigned`)),1)])):g(``,!0)],64)):(n(),l(`p`,fe,d(p(c)(`employees.noTemplates`)),1))]),_:2},[V.value&&!z.value?{name:`footer`,fn:e(()=>[t(v,{variant:`ghost`,disabled:F.value,onClick:Q},{default:e(()=>[a(d(p(c)(`employees.cancel`)),1)]),_:1},8,[`disabled`]),q.value&&J.value&&!F.value&&!M.value&&!N.value&&V.value.runtimeStatus===`ready`?(n(),m(p(y),{key:0,class:`ui-button ui-button--primary`,to:J.value,onClick:Q},{default:e(()=>[a(d(p(c)(`employees.open`)),1)]),_:1},8,[`to`])):(n(),m(v,{key:1,variant:`primary`,type:`submit`,busy:F.value,"busy-label":ze.value,disabled:M.value||N.value||!j.value||q.value||V.value.identityConflict||!h.personalSpaceId},{default:e(()=>[a(d(ze.value),1)]),_:1},8,[`busy`,`busy-label`,`disabled`]))]),key:`0`}:void 0]),1032,[`open`,`title`,`busy`]))}}),[[`__scopeId`,`data-v-4e6fb0a1`]]);export{S as n,C as t};
@@ -0,0 +1 @@
1
+ .employee-profile[data-v-4e6fb0a1]{align-items:center;gap:14px;display:flex}.employee-profile h3[data-v-4e6fb0a1]{margin:0 0 2px;font-size:18px;line-height:1.35}.employee-profile h3 span[data-v-4e6fb0a1]{color:var(--color-muted);margin-left:8px;font-size:13px;font-weight:500}.employee-profile p[data-v-4e6fb0a1]{margin:0}.employee-avatar[data-v-4e6fb0a1]{background:var(--color-surface-subtle);border-radius:14px;flex:0 0 48px;place-items:center;height:48px;font-size:24px;font-weight:650;display:grid;overflow:hidden}.employee-avatar img[data-v-4e6fb0a1]{object-fit:cover;width:100%;height:100%}.employee-scope[data-v-4e6fb0a1]{gap:8px;display:grid}.employee-scope .ui-segmented[data-v-4e6fb0a1]{display:flex}.employee-scope .ui-segmented>button[data-v-4e6fb0a1]{flex:1}.employee-title-settings[data-v-4e6fb0a1]{gap:8px;display:grid}.employee-title-settings h3[data-v-4e6fb0a1]{margin:0;font-size:14px;font-weight:600}.employee-title-controls[data-v-4e6fb0a1]{grid-template-columns:1.2fr 1fr;gap:12px;display:grid}.employee-title-example[data-v-4e6fb0a1]{color:var(--color-ink);overflow-wrap:anywhere}.employee-permissions[data-v-4e6fb0a1]{font-size:12px}.employee-permissions strong[data-v-4e6fb0a1]{font-weight:600}.employee-permissions ul[data-v-4e6fb0a1]{flex-wrap:wrap;gap:4px 18px;margin:6px 0;padding-left:16px;display:flex}.employee-runtime[data-v-4e6fb0a1]{margin:0;font-size:12px}.employee-runtime.is-warning[data-v-4e6fb0a1]{color:var(--color-warning)}.employee-success[data-v-4e6fb0a1]{color:var(--color-success)}.employee-success p[data-v-4e6fb0a1]{margin:0}.employee-message[data-v-4e6fb0a1]{justify-items:start;gap:10px;display:grid}.employee-message p[data-v-4e6fb0a1]{margin:0}@media (width<=540px){.employee-title-controls[data-v-4e6fb0a1]{grid-template-columns:minmax(0,1fr)}}
@@ -0,0 +1 @@
1
+ .bole-panel[data-v-5c62fca6]{--bole-ink:var(--color-ink);--bole-muted:var(--color-muted);--bole-line:var(--color-surface-subtle);background:var(--color-surface);min-width:0;min-height:0;color:var(--bole-ink);flex-direction:column;flex:1;display:flex;overflow:hidden}.bole-header[data-v-5c62fca6],.bole-controls[data-v-5c62fca6]{flex:none;padding-inline:24px}.bole-header[data-v-5c62fca6]{border-bottom:1px solid var(--bole-line);background:var(--color-surface);flex-wrap:wrap;align-items:center;gap:4px 16px;padding-block:8px;display:flex}.bole-heading[data-v-5c62fca6]{flex-wrap:wrap;align-items:center;gap:4px 24px;display:flex}.bole-heading h2[data-v-5c62fca6]{margin:0;font-size:20px;font-weight:650;line-height:1.3}.bole-refresh[data-v-5c62fca6]:disabled{cursor:progress}.bole-summary[data-v-5c62fca6]{flex-wrap:wrap;gap:8px 16px;margin:0 0 0 auto;display:flex}.bole-summary div[data-v-5c62fca6]{align-items:baseline;gap:8px;display:flex}.bole-summary dt[data-v-5c62fca6]{color:var(--bole-muted);font-size:12px}.bole-summary dd[data-v-5c62fca6]{font-variant-numeric:tabular-nums;margin:0;font-size:15px;font-weight:650}.bole-controls[data-v-5c62fca6]{z-index:2;border-bottom:1px solid var(--bole-line);background:var(--color-surface);padding-bottom:12px}.bole-views[data-v-5c62fca6]{flex-wrap:wrap;gap:20px;display:flex}.bole-views button[data-v-5c62fca6]{min-height:44px;color:var(--bole-muted);background:0 0;border:0;align-items:center;gap:8px;padding:10px 0;font-size:14px;display:flex;position:relative}.bole-views button[aria-pressed=true][data-v-5c62fca6]{color:var(--color-ink);font-weight:650}.bole-views button[aria-pressed=true][data-v-5c62fca6]:after{background:var(--color-ink);content:"";height:2px;position:absolute;inset:auto 0 -1px}.bole-views span[data-v-5c62fca6]{color:var(--bole-muted);font-variant-numeric:tabular-nums;font-size:12px;font-weight:500}.bole-filters[data-v-5c62fca6]{flex-wrap:wrap;align-items:center;gap:12px;padding-top:12px;display:flex}.bole-search[data-v-5c62fca6]{flex:220px;min-width:0;min-height:44px}.bole-search[data-v-5c62fca6]::placeholder{color:var(--bole-muted)}.bole-filters .project-scope-picker[data-v-5c62fca6]{flex:0 260px}.bole-role-filters[data-v-5c62fca6]{flex-wrap:wrap;gap:4px 8px;margin-top:12px;display:flex}.bole-role-filters button[data-v-5c62fca6]:not(.bole-clear){border-radius:var(--radius-control);min-height:36px;color:var(--bole-muted);background:0 0;border:0;padding:8px 10px;font-size:12px}.bole-role-filters button:not(.bole-clear)[aria-pressed=true][data-v-5c62fca6]{color:var(--color-ink);background:var(--color-surface-subtle);font-weight:600}.bole-role-filters button[data-v-5c62fca6]:not(.bole-clear):hover{background:var(--color-surface-subtle)}.bole-role-filters span[data-v-5c62fca6]{font-variant-numeric:tabular-nums;margin-left:4px}.bole-role-filters .bole-clear[data-v-5c62fca6]{margin-left:auto}.bole-content[data-v-5c62fca6]{overscroll-behavior:contain;scrollbar-gutter:stable;flex:1;min-height:0;padding:16px 24px 32px;overflow:auto}.bole-result-count[data-v-5c62fca6]{color:var(--bole-muted);align-self:center;font-size:12px}.bole-table-heading[data-v-5c62fca6],.bole-agent-row[data-v-5c62fca6]{grid-template-columns:minmax(0,1fr) minmax(0,1.25fr) minmax(0,.8fr);gap:24px;padding:16px;display:grid}.bole-table-heading[data-v-5c62fca6]{background:var(--color-surface-subtle);color:var(--bole-muted);padding-block:12px;font-size:12px}.bole-agent-row[data-v-5c62fca6]{border-top:1px solid var(--bole-line);align-items:center}.bole-agent-row[data-v-5c62fca6]:hover{background:var(--color-surface)}.bole-agent-identity[data-v-5c62fca6]{align-items:center;gap:12px;min-width:0;display:flex}.bole-agent-identity>div[data-v-5c62fca6]{min-width:0}.bole-agent-mark[data-v-5c62fca6]{background:var(--color-surface-subtle);border-radius:10px;flex:0 0 36px;place-items:center;height:36px;font-size:18px;display:grid;overflow:hidden}.bole-agent-mark img[data-v-5c62fca6]{object-fit:cover;width:100%;height:100%}.bole-agent-identity strong[data-v-5c62fca6],.bole-recruitment-identity strong[data-v-5c62fca6]{overflow-wrap:anywhere;font-size:14px;font-weight:600;display:block}.bole-agent-identity small[data-v-5c62fca6],.bole-timeline small[data-v-5c62fca6]{color:var(--bole-muted);margin-top:4px;font-size:12px;line-height:1.5;display:block}.bole-agent-work p[data-v-5c62fca6]{overflow-wrap:anywhere;margin:6px 0 0;font-size:14px;line-height:1.55}.bole-agent-work .is-idle[data-v-5c62fca6]{color:var(--bole-muted);margin:0}.bole-status[data-v-5c62fca6]{white-space:nowrap}.bole-status[data-status=blocked][data-v-5c62fca6]{background:var(--color-danger-soft);color:var(--color-danger)}.bole-status[data-status=awaiting_review][data-v-5c62fca6]{background:var(--color-warning-soft);color:var(--color-warning)}.bole-agent-projects[data-v-5c62fca6]{min-width:0;color:var(--bole-muted);font-size:12px;line-height:1.6}.bole-agent-projects span[data-v-5c62fca6]{overflow-wrap:anywhere;display:block}.bole-agent-projects summary[data-v-5c62fca6]{cursor:pointer;width:fit-content;min-height:32px;color:var(--color-ink);padding-block:6px}.bole-timeline[data-v-5c62fca6]{margin:0;padding:0;list-style:none}.bole-timeline li[data-v-5c62fca6]{border-bottom:1px solid var(--bole-line);grid-template-columns:minmax(0,1fr) minmax(0,1.7fr) minmax(120px,.6fr);gap:24px;padding:20px 0;display:grid}.bole-recruitment-reason p[data-v-5c62fca6]{overflow-wrap:anywhere;max-width:70ch;margin:0;font-size:13px;line-height:1.7}.bole-timeline time[data-v-5c62fca6]{color:var(--bole-muted);font-size:12px;line-height:1.6}.bole-empty[data-v-5c62fca6]{color:var(--bole-muted)}.bole-alert[data-v-5c62fca6]{background:var(--color-danger-soft);color:var(--color-danger);flex:none;justify-content:space-between;align-items:center;gap:16px;padding:8px 24px;font-size:13px;display:flex}.bole-content[data-v-5c62fca6]:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}@media (width<=1100px){.bole-table-heading[data-v-5c62fca6],.bole-agent-row[data-v-5c62fca6]{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:16px}.bole-table-heading[data-v-5c62fca6]>:last-child{display:none}.bole-agent-projects[data-v-5c62fca6]{grid-column:2}.bole-timeline li[data-v-5c62fca6]{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr);gap:12px 20px}.bole-timeline time[data-v-5c62fca6]{grid-column:2}}@media (width<=700px),(height<=560px){.bole-panel[data-v-5c62fca6]{overscroll-behavior:contain;overflow:auto}.bole-content[data-v-5c62fca6]{flex:none;overflow:visible}}@media (width<=700px){.bole-header[data-v-5c62fca6],.bole-controls[data-v-5c62fca6]{padding-inline:16px}.bole-content[data-v-5c62fca6]{padding:16px 16px 28px}.bole-heading[data-v-5c62fca6]{gap:4px 16px;width:100%}.bole-views[data-v-5c62fca6]{gap:16px}.bole-summary[data-v-5c62fca6]{gap:8px 16px;margin-left:0}.bole-refresh[data-v-5c62fca6]{margin-left:auto}.bole-filters[data-v-5c62fca6]{gap:8px}.bole-search[data-v-5c62fca6]{flex-basis:100%}.bole-filters .project-scope-picker[data-v-5c62fca6]{flex:180px}.bole-role-filters[data-v-5c62fca6]{gap:4px}.bole-table-heading[data-v-5c62fca6]{display:none}.bole-agent-row[data-v-5c62fca6]{grid-template-columns:minmax(0,1fr);gap:12px}.bole-agent-row[data-v-5c62fca6]:first-of-type{border-top:0}.bole-agent-projects[data-v-5c62fca6]{grid-column:auto;padding-left:48px}.bole-agent-work[data-v-5c62fca6]{padding-left:48px}.bole-timeline li[data-v-5c62fca6]{grid-template-columns:minmax(0,1fr);gap:12px}.bole-timeline time[data-v-5c62fca6]{grid-column:auto}.bole-alert[data-v-5c62fca6]{padding-inline:16px}}fieldset[data-v-50bf5065]{border:0;min-width:0;margin:0;padding:0}.employee-share-result[data-v-50bf5065]{gap:12px;display:grid}.employee-share-result>div[data-v-50bf5065]{align-items:center;gap:16px;display:flex}.employee-share-result a[data-v-50bf5065]{color:var(--color-ink);font-size:13px}.employee-share-preview[data-v-50bf5065]{color:var(--color-ink);justify-content:space-between;align-items:center;gap:12px;font-weight:600;display:flex}.employee-share-empty[data-v-50bf5065]{color:var(--color-warning);line-height:1.6}.employee-share-active[data-v-50bf5065]{border-top:1px solid var(--color-border);padding-top:16px}.employee-share-active h3[data-v-50bf5065]{margin:0 0 10px;font-size:14px}.employee-share-active>div[data-v-50bf5065]{justify-content:space-between;align-items:center;gap:12px;padding:6px 0;font-size:13px;display:flex}.employee-share-active span[data-v-50bf5065]{overflow-wrap:anywhere}.employee-dialog-count[data-v-50bf5065]{color:var(--color-muted);margin-right:auto;font-size:12px}.employee-workbench-view[data-v-424ede82]{background:var(--color-surface);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.employee-workbench-toolbar[data-v-424ede82]{flex:none;justify-content:space-between;align-items:center;gap:20px;padding:16px 24px 10px;display:flex}.employee-workbench-identity[data-v-424ede82]{align-items:center;gap:10px;min-width:0;display:flex}.employee-workbench-mark[data-v-424ede82]{border-radius:var(--radius-control);background:var(--color-surface-subtle);height:32px;color:var(--color-ink);flex:0 0 32px;place-items:center;font-size:17px;font-weight:650;display:grid;overflow:hidden}.employee-workbench-mark img[data-v-424ede82]{object-fit:cover;width:100%;height:100%}.employee-share-button[data-v-424ede82]{border-radius:var(--radius-control);width:40px;height:40px;color:var(--color-ink);cursor:pointer;background:0 0;border:0;flex:0 0 40px;place-items:center;display:grid}.employee-share-button[data-v-424ede82]:hover{background:var(--color-surface-subtle)}.employee-share-button[data-v-424ede82]:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}.employee-workbench-toolbar h1[data-v-424ede82]{color:var(--color-ink);overflow-wrap:anywhere;margin:0;font-size:18px;font-weight:650;line-height:1.4}.employee-workbench-toolbar h1 span[data-v-424ede82]{color:var(--color-muted);margin-left:8px;font-size:12px;font-weight:400}.employee-workbench-actions[data-v-424ede82]{align-items:center;gap:12px;min-width:0;display:flex}.employee-manage-projects[data-v-424ede82],.employee-back-to-all[data-v-424ede82]{border-radius:var(--radius-control);min-height:40px;color:var(--color-ink);font:inherit;cursor:pointer;white-space:nowrap;background:0 0;border:0;justify-content:center;align-items:center;gap:7px;padding:8px 10px;font-size:13px;display:inline-flex}.employee-manage-projects[data-v-424ede82]:hover:not(:disabled),.employee-back-to-all[data-v-424ede82]:hover{background:var(--color-surface-subtle)}.employee-manage-projects[data-v-424ede82]:disabled{color:var(--color-muted);cursor:default}.employee-manage-projects[data-v-424ede82]:focus-visible,.employee-back-to-all[data-v-424ede82]:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.employee-workbench-frame[data-v-424ede82]{border:0;flex:1;width:100%;height:100%;min-height:0}.employee-workbench-state[data-v-424ede82]{color:var(--color-muted);text-align:center;flex:1;place-content:center;justify-items:center;gap:14px;padding:30px;font-size:14px;display:grid}.employee-workbench-state a[data-v-424ede82]{color:var(--color-ink)}.employee-workbench-state h2[data-v-424ede82]{color:var(--color-ink);font-size:20px;font-weight:600}.employee-workbench-state p[data-v-424ede82]{max-width:48ch;margin:0;line-height:1.7}@media (width<=640px){.employee-workbench-toolbar[data-v-424ede82]{flex-wrap:wrap;gap:10px;padding:8px 16px 10px}.employee-workbench-actions[data-v-424ede82]{justify-content:flex-end;gap:8px;width:100%}.employee-workbench-toolbar h1 span[data-v-424ede82]{margin-left:6px}}