fuli-context 0.8.2 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +11 -7
  2. package/README.zh-CN.md +8 -7
  3. package/dist/web/assets/{AboutPage-fBq5VFoQ.js → AboutPage-HLhChD_Q.js} +1 -1
  4. package/dist/web/assets/{AgentHand-CMZk5GjY.js → AgentHand-BaLSbn08.js} +1 -1
  5. package/dist/web/assets/{AgentName-DRZHAIB2.js → AgentName-0PIU7MOX.js} +1 -1
  6. package/dist/web/assets/{AgentProfilePage-BPQEfMhB.js → AgentProfilePage-9cSsZHnk.js} +1 -1
  7. package/dist/web/assets/{AgentsDirectoryPage-CKZfrcuD.js → AgentsDirectoryPage-7G02Xm6C.js} +1 -1
  8. package/dist/web/assets/{ConnectionsPage-COb56qnk.js → ConnectionsPage-D0wPYbwd.js} +1 -1
  9. package/dist/web/assets/{EmployeeRecruitDialog-BLTpjCcK.js → EmployeeRecruitDialog-BrPH3e50.js} +1 -1
  10. package/dist/web/assets/{EmployeeWorkbenchPage-HUd-gne2.js → EmployeeWorkbenchPage-u-jw38PW.js} +1 -1
  11. package/dist/web/assets/{GrowthLoading-Bu_kH-I8.js → GrowthLoading-DFOy-mEl.js} +1 -1
  12. package/dist/web/assets/{KnowledgeEditDialog-BTwXXRCD.js → KnowledgeEditDialog-DBsjlkDr.js} +1 -1
  13. package/dist/web/assets/{KnowledgeInspector-Ct5hl2--.js → KnowledgeInspector-C79hbuOo.js} +1 -1
  14. package/dist/web/assets/{KnowledgeOrganizerPage-DMC8Hh43.js → KnowledgeOrganizerPage-Cz1BnAtz.js} +1 -1
  15. package/dist/web/assets/KnowledgePage-JyfFFUrg.js +1 -0
  16. package/dist/web/assets/{KnowledgeWorkspace-DmHIc0jb.js → KnowledgeWorkspace-B2vj12QG.js} +1 -1
  17. package/dist/web/assets/{NotFoundPage-C0yOR9T9.js → NotFoundPage-D340EQJP.js} +1 -1
  18. package/dist/web/assets/{OverviewPage-BreX_kb4.js → OverviewPage-BKiYudrC.js} +1 -1
  19. package/dist/web/assets/{PersonalProfilePage-CX1a6_E3.js → PersonalProfilePage-BIGTcem2.js} +1 -1
  20. package/dist/web/assets/PersonalProjectsPage-CzjDCIi0.js +1 -0
  21. package/dist/web/assets/{ProjectAgentsPage-CA04h1Uf.js → ProjectAgentsPage-C5F2WgwJ.js} +4 -4
  22. package/dist/web/assets/ProjectAgentsPage-C89ZEDgi.css +1 -0
  23. package/dist/web/assets/{ProjectScopePicker-DVHfXX1f.js → ProjectScopePicker-8hrgvmg-.js} +1 -1
  24. package/dist/web/assets/{PublicProjectsPage-CtctKml1.js → PublicProjectsPage-b5zx0dFS.js} +1 -1
  25. package/dist/web/assets/{ReviewPage-DUqaK-do.js → ReviewPage-BLdWYDmj.js} +1 -1
  26. package/dist/web/assets/{SearchableSelect-BZtyYmZN.js → SearchableSelect-vaoSDq1g.js} +1 -1
  27. package/dist/web/assets/{SettingsPage-CB4ymLr8.js → SettingsPage-Dxjrkq1g.js} +1 -1
  28. package/dist/web/assets/{SharedJefaReportPage-CbFtrDCY.js → SharedJefaReportPage-YG2xwQQy.js} +1 -1
  29. package/dist/web/assets/{WritingTastePage-B7lSzs2z.js → WritingTastePage-CPPduPb1.js} +1 -1
  30. package/dist/web/assets/{agent-profile.css_vue_type_style_index_0_src_true_lang-C22UdfU0.js → agent-profile.css_vue_type_style_index_0_src_true_lang-LTJ1ptv9.js} +1 -1
  31. package/dist/web/assets/{catalog-DU4Kfd-N.js → catalog-B9tlJAp9.js} +1 -1
  32. package/dist/web/assets/{client-CEHkJJ-5.js → client-InXscj8J.js} +1 -1
  33. package/dist/web/assets/{console--CZxc3PW.js → console-hUns2aD-.js} +1 -1
  34. package/dist/web/assets/{conversation-launcher-settings-Co1RlTFH.js → conversation-launcher-settings-DEtJ6pZg.js} +1 -1
  35. package/dist/web/assets/{i18n-BtOOoyJd.js → i18n-75woNt31.js} +2 -2
  36. package/dist/web/assets/{identity-CsowvtIm.js → identity-Wt2Xio_B.js} +1 -1
  37. package/dist/web/assets/index-pleRuLpw.js +2 -0
  38. package/dist/web/assets/{model-CGpllrds.js → model-C1GwBvd9.js} +1 -1
  39. package/dist/web/assets/{personal-profile-graph-BNTG4PSY.js → personal-profile-graph-BdV_3I1u.js} +1 -1
  40. package/dist/web/assets/{shared-report-BFUJqqQe.js → shared-report-tRQV1iJl.js} +1 -1
  41. package/dist/web/assets/{useApi-CROJJdhE-raNlHRDl.js → useApi-CROJJdhE-QfNm4ADP.js} +1 -1
  42. package/dist/web/assets/{useModalDialog-CroGk2Cs.js → useModalDialog-BopF-KHN.js} +1 -1
  43. package/dist/web/assets/{vue-router-JFYBLXB1.js → vue-router-COCNAJJn.js} +1 -1
  44. package/dist/web/index.html +10 -10
  45. package/docs/agent-conversations-and-collaboration.md +18 -1
  46. package/graph-provider/fuli_graph/store_project_agent_context.py +18 -1
  47. package/graph-provider/fuli_graph/store_project_agent_task_staffing.py +86 -11
  48. package/graph-provider/pyproject.toml +1 -1
  49. package/npm-shrinkwrap.json +2 -2
  50. package/package.json +2 -2
  51. package/skills/operating-fuli/SKILL.md +8 -0
  52. package/src/agents/identity-receipt.js +29 -0
  53. package/src/conversations/task-context-view.js +3 -1
  54. package/src/employees/service.js +9 -2
  55. package/src/employees/task-entry.js +5 -1
  56. package/src/graphiti/agent-conversations.js +15 -1
  57. package/src/graphiti/federated-application.js +6 -40
  58. package/src/graphiti/project-agent-mention.js +35 -0
  59. package/src/graphiti/project-agent-task-entry.js +22 -3
  60. package/src/graphiti/project-agent-workflows.js +3 -1
  61. package/src/graphiti/task-entry-preferences.js +50 -0
  62. package/dist/web/assets/KnowledgePage-uXW1Eovz.js +0 -1
  63. package/dist/web/assets/PersonalProjectsPage-Br1S8ETM.js +0 -1
  64. package/dist/web/assets/ProjectAgentsPage-CZWWV4Kw.css +0 -1
  65. package/dist/web/assets/index-7X3LGByg.js +0 -2
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "fuli-context",
3
- "version": "0.8.2",
3
+ "version": "0.8.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "fuli-context",
9
- "version": "0.8.2",
9
+ "version": "0.8.3",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@hono/node-server": "2.0.12",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fuli-context",
3
- "version": "0.8.2",
3
+ "version": "0.8.3",
4
4
  "description": "Local-first collaboration relationship graph for AI agents.",
5
5
  "type": "module",
6
6
  "files": [
@@ -65,7 +65,7 @@
65
65
  "type": "git",
66
66
  "url": "git+https://github.com/JevonsCode/fuli.git"
67
67
  },
68
- "homepage": "https://github.com/JevonsCode/fuli#readme",
68
+ "homepage": "https://jevonscode.github.io/fuli/",
69
69
  "bugs": {
70
70
  "url": "https://github.com/JevonsCode/fuli/issues"
71
71
  },
@@ -39,6 +39,10 @@ For read-only questions, use the narrowest list/get/search tool and return sourc
39
39
 
40
40
  When the user addresses HR or Bole to ask about organization or find someone, resolve the existing dedicated HR identity and read `list_project_agents` plus `get_project_agent_coordination_policy` for the exact personal space and relevant project. Use recorded roles, assignments and team membership; do not invent an organization or recruit a replacement HR. Match names, responsibilities and capabilities, but never guess between ambiguous or duplicate names. Link each resolved name to its personal page at `/agents/{encodedPersonalSpaceId}/{encodedAgentId}`. Answering in the HR role does not mean a worker has started; report actual execution separately.
41
41
 
42
+ ## Before starting collaborators
43
+
44
+ Read each returned worker's `context.agent.profile.allowedClients` and `executorPolicy`, together with the task's effective executor policy. Intersect the restrictions before starting either a native or external worker; the lead's selected executor does not authorize every collaborator. A locked allow-list applies even when the current host has an idle worker. If the intended platform is outside any effective lock, select an eligible Agent/executor or report the constraint before launch. Never relax the lock, relabel the worker, or invent model evidence to satisfy reporting. FULI context recovery and a ready worker plan are not execution authorization by themselves.
45
+
42
46
  ## Handling conflicts and failures
43
47
 
44
48
  - On revision or timestamp conflict, re-read, explain what changed, and recompute the intended patch. Do not blindly retry stale input.
@@ -49,3 +53,7 @@ When the user addresses HR or Bole to ask about organization or find someone, re
49
53
  ## Completion response
50
54
 
51
55
  State what changed, the exact project or item scope, the verification result, and any remaining human-only action. Do not claim success from a configured capability or submitted request alone.
56
+
57
+ Include the task's named durable owner and profile link from `agent_receipt` or the successful checkpoint's `conversation.receipt`. Include Jefa or other peers only with an actual `collaboration_receipt`, naming the tool work they performed; board tools do not imply a separate model worker ran. Keep this receipt brief and distinguish work completion, memory checkpoint and visible-transcript coverage. Do not report saved memory when capture failed or is disabled.
58
+
59
+ For cross-client continuation, copy the supplied continuation prompt into the same project's connected client. A leading `@Name` matches exact directory names; `@{agentId}` is the stable form (the generated prompt percent-encodes unusual IDs). Duplicate names require an exact ID in the current request; an ambiguous explicit mention must not fall back to the prior session owner or memory. This is FULI task-entry matching, not registration in a client's native @ menu. Obtain a fresh task token before `resume_agent_conversation`; never copy an old token between clients. If no qualified owner exists, route staffing through HR before implementation; Jefa remains a management peer. Preserve confirmed taste/personality/preferences and Agent character/expectations in delegated context.
@@ -0,0 +1,29 @@
1
+ import { sourceConsoleUrl } from '../graphiti/source-marker.js';
2
+
3
+ export function agentProfileUrl(application, agentId) {
4
+ return `${application.consoleUrl ?? sourceConsoleUrl(null)}/agents/${encodeURIComponent(application.config.personal.spaceId)}/${encodeURIComponent(agentId)}`;
5
+ }
6
+
7
+ export function agentContinuation(projectId, agentId, conversationId = null) {
8
+ return { personal_project_id: projectId, agent_id: agentId,
9
+ ...(conversationId ? { conversation_id: conversationId } : {}),
10
+ prompt: `@{${encodeURIComponent(agentId)}} 请在 FULI 项目 ${JSON.stringify(projectId)} 对应的工作目录继续工作。`
11
+ + (conversationId ? `先用当前任务的 taskContextToken 调用 resume_agent_conversation,conversationId=${JSON.stringify(conversationId)},再按需读取上下文。` : '先恢复这个 Agent 的项目记忆和最近会话。'),
12
+ guidance: 'Use a connected client and the same authorized project/Agent. Obtain a fresh task context; never reuse the previous client’s token. This is a FULI prompt, not a native client @ picker registration.' };
13
+ }
14
+
15
+ export function taskAgentReceipt(application, { projectId, agentId, name = null,
16
+ sourceApplication = null, workStatus = null, conversationId = null, persistence = null }) {
17
+ return { owner: { agent_id: agentId, name,
18
+ profile_url: agentProfileUrl(application, agentId), source_application: sourceApplication },
19
+ personal_project_id: projectId, work_status: workStatus, persistence,
20
+ continuation: agentContinuation(projectId, agentId, conversationId),
21
+ guidance: 'Finish with the named owner and profile link, truthful work/memory status and continuation. Add only actually used collaboration_receipt participants (for example Jefa); tools and configured peers are not independent model workers.' };
22
+ }
23
+
24
+ export function employeeCollaborationReceipt(application, context, { tool, permission, sourceApplication }) {
25
+ return { agent_id: context.agentId, name: context.name, role: context.role,
26
+ profile_url: agentProfileUrl(application, context.agentId),
27
+ personal_project_id: context.project.id, tool, permission,
28
+ status: 'tool_completed', source_application: sourceApplication ?? 'other', worker_started: false };
29
+ }
@@ -5,7 +5,9 @@ export function compactTaskContext(value) {
5
5
  const result = { ...value };
6
6
  if (Array.isArray(value.effective_preferences)) result.effective_preferences = value.effective_preferences.map(item => ({
7
7
  instruction: item.instruction, preference_key: item.preference_key,
8
- preference_scope: item.preference_scope, confirmation_status: item.confirmation_status
8
+ preference_scope: item.preference_scope, confirmation_status: item.confirmation_status,
9
+ profile_aspect: item.profile_aspect,
10
+ ...(item.attributes?.tasteDomain ? { attributes: { tasteDomain: item.attributes.tasteDomain } } : {})
9
11
  }));
10
12
  const continuity = value.project_agent_context;
11
13
  if (continuity?.memory) {
@@ -4,6 +4,7 @@ import { createEmployeeRecruitment } from './recruitment.js';
4
4
  import { join } from 'node:path';
5
5
  import { EmployeeManagementStore } from './management-policy.js';
6
6
  import { employeeTaskEntry } from './task-entry.js';
7
+ import { employeeCollaborationReceipt } from '../agents/identity-receipt.js';
7
8
 
8
9
  export function createEmployeeService({ app, runtimeConfigPath, registry: configuredRegistry, managementStore: configuredManagementStore }) {
9
10
  const registry = configuredRegistry ?? createEmployeePackageRegistry(employeeDirectories(runtimeConfigPath));
@@ -65,7 +66,13 @@ export function createEmployeeService({ app, runtimeConfigPath, registry: config
65
66
  sourceApplication: input.sourceApplication ?? 'other', id: input.sourceSessionId,
66
67
  verified: input.sourceSessionVerified === true,
67
68
  } : null;
68
- try { return await runtime.callTool(input.tool, input.arguments ?? {}, { ...context, session }); }
69
+ try {
70
+ const result = await runtime.callTool(input.tool, input.arguments ?? {}, { ...context, session });
71
+ if (!result || typeof result !== 'object' || Array.isArray(result)) return result;
72
+ return { ...result, collaboration_receipt: employeeCollaborationReceipt(app, context, {
73
+ tool: input.tool, permission: tool.permission, sourceApplication: input.sourceApplication
74
+ }) };
75
+ }
69
76
  catch (error) {
70
77
  if (Number.isInteger(error?.status) && error.status >= 400 && error.status < 500) {
71
78
  throw new EmployeeError(error.message, error.status, error.code ?? 'tool_error');
@@ -79,7 +86,7 @@ export function createEmployeeService({ app, runtimeConfigPath, registry: config
79
86
  recruit: async (input) => recruitment.recruit(await resolveInput(input)),
80
87
  workspace, describeTools, callTool,
81
88
  authorize: recruitment.authorize,
82
- taskEntry: (input) => employeeTaskEntry({ registry, recruitment, workspace }, input)
89
+ taskEntry: (input) => employeeTaskEntry({ app, registry, recruitment, workspace }, input)
83
90
  .catch(() => ({ status: 'unavailable', managers: [], worker_started: false })),
84
91
  async handleHttp(request, response, input) {
85
92
  const context = await workspace(input);
@@ -1,6 +1,7 @@
1
1
  // Management is a task-entry capability, not a replacement for the specialist
2
2
  // role/executor chosen by FULI. Never persist the user's prompt or start a model.
3
- export async function employeeTaskEntry({ registry, recruitment, workspace }, input) {
3
+ import { employeeCollaborationReceipt } from '../agents/identity-receipt.js';
4
+ export async function employeeTaskEntry({ app, registry, recruitment, workspace }, input) {
4
5
  if (!input.personalProjectId) return { status: 'project_unresolved', managers: [], worker_started: false };
5
6
  const managers = [];
6
7
  let unavailable = false;
@@ -18,6 +19,9 @@ export async function employeeTaskEntry({ registry, recruitment, workspace }, in
18
19
  const board = await runtime.callTool(manifest.taskEntry.boardTool, { limit: 8 }, resolved);
19
20
  managers.push({
20
21
  template_id: manifest.id, agent_id: context.agentId, name: manifest.name,
22
+ collaboration_receipt: employeeCollaborationReceipt(app, resolved, {
23
+ tool: manifest.taskEntry.boardTool, permission: 'board.read', sourceApplication: input.sourceApplication
24
+ }),
21
25
  personal_project_id: context.project.id, scope_mode: context.management.mode,
22
26
  title_mode: context.management.titleMode, title_style: context.management.titleStyle,
23
27
  board: { version: board.version, total: board.total, truncated: board.truncated,
@@ -1,4 +1,5 @@
1
1
  import { detectSensitiveContent } from '../security/sensitive-content.js';
2
+ import { agentContinuation, taskAgentReceipt } from '../agents/identity-receipt.js';
2
3
 
3
4
  export function conversationScope(application, input) {
4
5
  return { personal_space_id: application.config.personal.spaceId,
@@ -46,16 +47,29 @@ export async function checkpointConversation(application, task, workLog) {
46
47
  ...conversationTask(application, task), summary: safeConversationContent(workLog.summary), status: workLog.status,
47
48
  events: [{ event_id: `${task.token}:summary`, role: 'summary', kind: 'checkpoint', content: safeConversationContent(workLog.summary) }]
48
49
  });
50
+ if (result.status !== 'saved') return result;
51
+ let name = null;
52
+ try {
53
+ const agent = await application.personal.getProjectAgent(application.config.personal.spaceId, task.personalProjectId, task.projectAgentId);
54
+ name = agent?.profile?.display_name || agent?.profile?.name || null;
55
+ } catch { /* Metadata availability does not undo a successful save. */ }
49
56
  return { ...result, agent_id: task.projectAgentId, work_status: workLog.status,
57
+ receipt: taskAgentReceipt(application, { projectId: task.personalProjectId,
58
+ agentId: task.projectAgentId, name, sourceApplication: task.sourceApplication,
59
+ workStatus: workLog.status, conversationId: result.conversation_id,
60
+ persistence: result.status }),
50
61
  coverage: 'task_summary; visible transcript capture is confirmed separately by the host hook',
51
62
  guidance: 'Include the Agent name, truthful work status and conversation ID in the final receipt. In another client select this Agent, then call resume_agent_conversation with its current taskContextToken and this conversation ID.' };
52
63
  } catch { return unavailable(); }
53
64
  }
54
65
 
55
66
  export async function queryConversations(application, input) {
56
- return application.personal.conversation('query', { ...conversationScope(application, input),
67
+ const result = await application.personal.conversation('query', { ...conversationScope(application, input),
57
68
  mode: input.mode ?? 'list', ...(input.conversationId ? { conversation_id: input.conversationId } : {}),
58
69
  after: input.after ?? 0, limit: input.limit ?? (input.mode === 'events' ? 3 : 10) });
70
+ if (!Array.isArray(result.conversations)) return result;
71
+ return { ...result, conversations: result.conversations.map(conversation => ({ ...conversation,
72
+ continuation_prompt: agentContinuation(input.personalProjectId, input.agentId, conversation.id).prompt })) };
59
73
  }
60
74
  export async function resumeConversation(application, input) {
61
75
  const task = await application.taskContextRegistry.context(input.taskContextToken, input.sourceApplication);
@@ -76,11 +76,8 @@ import {
76
76
  import {
77
77
  relatedProjectGuidance
78
78
  } from './related-project-suggestions.js';
79
- import {
80
- getCollaborationPreferences as getCollaborationPreferencesWorkflow
81
- } from './collaboration-preference-workflow.js';
82
79
  import { buildUserTasteSkill } from './user-taste-skill.js';
83
- import { resolveTaskEntryAgent, loadProjectAgentContinuity } from './project-agent-task-entry.js';
80
+ import { taskEntryPreferences } from './task-entry-preferences.js';
84
81
  import { getWritingTasteProfile as getWritingTasteProfileWorkflow } from './writing-taste-profile-workflow.js';
85
82
  import {
86
83
  groupSubscriptions,
@@ -256,42 +253,11 @@ export class FederatedGraphApplication extends ProjectAgentControlPlaneApplicati
256
253
  agentToolName = 'get_collaboration_preferences'
257
254
  } = {}) {
258
255
  const projectResolution = await this.#resolvePreferenceProject({ personalProjectId, projectPath });
259
- const selection = projectPath === null && !personalProjectId && !projectAgentId
260
- ? null
261
- : await resolveTaskEntryAgent(
262
- this, projectResolution, { projectAgentId, taskPrompt, sourceApplication,
263
- sessionId: agentToolName === 'get_collaboration_preferences'
264
- ? sessionId ?? sourceSessionId : turnId ? sessionId : null,
265
- turnId: agentToolName === 'begin_task_context' ? turnId : null,
266
- workKind, requiredCapabilities, agentInvocation, agentToolName }
267
- );
268
- // A rejected explicit role must not leak its private preferences via fallback.
269
- const selectedAgentId = selection ? selection.agent?.agentId ?? null : projectAgentId;
270
- const preferences = await getCollaborationPreferencesWorkflow(
271
- this,
272
- projectResolution,
273
- {
274
- projectAgentId: selectedAgentId,
275
- taskPrompt,
276
- limit,
277
- agentInvocation,
278
- agentToolName
279
- },
280
- (items, toolName) => this.#recordAgentViews(items, toolName)
281
- );
282
- const management = this.employees && agentInvocation &&
283
- ['begin_task_context', 'get_collaboration_preferences'].includes(agentToolName)
284
- ? await this.employees.taskEntry({ personalProjectId: projectResolution.personalProjectId,
285
- sourceApplication, sourceSessionId, sessionId })
286
- : null;
287
- const managedPreferences = management ? { ...preferences, project_management_context: management } : preferences;
288
- if (!selection) return managedPreferences;
289
- const context = selection.agent ? await loadProjectAgentContinuity(this, {
290
- projectId: projectResolution.personalProjectId, agent: selection.agent,
291
- sourceApplication, taskPrompt, selectionReason: selection.reason,
292
- matchBasis: selection.match_basis
293
- }) : selection;
294
- return { ...managedPreferences, project_agent_context: context };
256
+ return taskEntryPreferences(this, projectResolution, {
257
+ personalProjectId, projectAgentId, projectPath, taskPrompt, sourceApplication,
258
+ sourceSessionId, sessionId, turnId, workKind, requiredCapabilities,
259
+ limit, agentInvocation, agentToolName
260
+ }, (items, toolName) => this.#recordAgentViews(items, toolName));
295
261
  }
296
262
 
297
263
  async getUserTasteSkill({
@@ -0,0 +1,35 @@
1
+ // Only an explicit leading mention selects a role. Matching uses this project's
2
+ // directory, never fuzzy search or another Agent's memory. Provider authorization
3
+ // still runs after matching, including for inactive or client-restricted names.
4
+ export async function resolveTaskAgentMention(application, projectId, input) {
5
+ const prompt = String(input.taskPrompt ?? '').trimStart();
6
+ if (!prompt.startsWith('@')) return null;
7
+ const directory = await application.personal.listProjectAgents(
8
+ application.config.personal.spaceId, projectId);
9
+ const agents = Array.isArray(directory) ? directory : directory.agents ?? directory.items ?? [];
10
+ const raw = prompt.slice(1, 2049);
11
+ const text = normalize(raw);
12
+ const stable = /^\{([^{}\s]+)\}(?=$|[\s,,::])/u.exec(raw);
13
+ let stableId;
14
+ try { stableId = stable ? decodeURIComponent(stable[1]) : null; }
15
+ catch { stableId = null; }
16
+ const matches = agents.flatMap(agent => {
17
+ const aliases = stable ? [agent.agent_id] : [agent.profile?.display_name, agent.profile?.name, agent.agent_id];
18
+ const lengths = aliases.filter(Boolean).map(name => stable ? name : normalize(name)).filter(name => stable
19
+ ? name === stableId : text.startsWith(name) && /^(?:$|[\s,,::!?!?])/u.test(text.slice(name.length))).map(name => name.length);
20
+ return lengths.length ? [{ agent, length: Math.max(...lengths) }] : [];
21
+ });
22
+ const longest = Math.max(0, ...matches.map(match => match.length));
23
+ const exact = matches.filter(match => match.length === longest);
24
+ const failure = status => ({ status, worker_started: false,
25
+ required_action: 'Select an exact current-project Agent with @{agentId}; use list_project_agents to resolve names. Do not load a different Agent as fallback.' });
26
+ if (!exact.length) return failure('agent_not_found');
27
+ if (exact.length > 1) return { ...failure('ambiguous_agent'),
28
+ candidates: exact.slice(0, 8).map(({ agent }) => ({ agent_id: agent.agent_id,
29
+ name: agent.profile?.display_name || agent.profile?.name })) };
30
+ const agentId = exact[0].agent.agent_id;
31
+ if (input.projectAgentId && input.projectAgentId !== agentId) return failure('agent_selection_conflict');
32
+ return { agentId };
33
+ }
34
+
35
+ function normalize(value) { return String(value).normalize('NFKC').toLowerCase(); }
@@ -2,6 +2,7 @@ import { projectAgentRecord } from './project-agent-mapping.js';
2
2
  import { agentMemoryView } from './project-agent-memory.js';
3
3
  import { planTaskKnowledgeRecall } from './task-knowledge-recall.js';
4
4
  import { loadProjectTeamContext } from './project-agent-team-context.js';
5
+ import { resolveTaskAgentMention } from './project-agent-mention.js';
5
6
 
6
7
  const ENTRY_TOOLS = new Set(['begin_task_context', 'get_collaboration_preferences']);
7
8
 
@@ -9,18 +10,25 @@ export async function resolveTaskEntryAgent(application, resolution, input) {
9
10
  if (!input.agentInvocation || !ENTRY_TOOLS.has(input.agentToolName)) return null;
10
11
  if (!resolution.personalProjectId) return { status: 'project_unresolved', worker_started: false };
11
12
  try {
13
+ const mention = await resolveTaskAgentMention(application, resolution.personalProjectId, input);
14
+ if (mention?.status) return mention;
15
+ const workKind = input.workKind ?? taskWorkKind(input.taskPrompt);
12
16
  const value = await application.personal.resolveProjectAgentContext({
13
17
  personal_space_id: application.config.personal.spaceId,
14
18
  personal_project_id: resolution.personalProjectId,
15
- agent_id: input.projectAgentId ?? null,
19
+ agent_id: mention?.agentId ?? input.projectAgentId ?? null,
16
20
  session_id: input.sessionId ?? null,
17
21
  turn_id: input.turnId ?? null,
18
- work_kind: input.workKind ?? taskWorkKind(input.taskPrompt),
22
+ work_kind: workKind,
19
23
  required_capabilities: input.requiredCapabilities ?? [],
20
24
  source_application: input.sourceApplication ?? 'other'
21
25
  });
22
26
  if (!value?.status) throw new Error('Role resolution is unavailable');
23
27
  const agent = value.agent ? projectAgentRecord(value.agent) : null;
28
+ if (agent && !mention?.agentId && !input.projectAgentId && unrelatedPeer(agent, workKind, input.requiredCapabilities)) {
29
+ return { status: 'unassigned', reason: 'specialist_required', worker_started: false,
30
+ required_action: 'Use coordinate_project_agent_task to select or recruit a qualified durable owner before implementation. HR and project managers collaborate in their own roles; do not attribute development to them by fallback.' };
31
+ }
24
32
  const employeeId = /^employee\.([a-z][a-z0-9-]{0,63})$/.exec(agent?.agentId ?? '')?.[1];
25
33
  if (employeeId && application.employees) {
26
34
  try { await application.employees.authorize({ templateId: employeeId, personalProjectId: resolution.personalProjectId }); }
@@ -118,6 +126,15 @@ function boundedRoleText(value, limit) {
118
126
  return typeof value === 'string' ? value.slice(0, limit) : '';
119
127
  }
120
128
 
129
+ function unrelatedPeer(agent, workKind, required = []) {
130
+ const profile = agent.profile;
131
+ const capabilities = (profile.capabilities ?? []).map(value => value.toLowerCase());
132
+ const peer = ['employee.jefa', 'employee.bole', 'fuli-project-hr'].includes(agent.agentId)
133
+ || profile.agentType === 'hr' || capabilities.some(value => ['fuli.employee:jefa', 'fuli.employee:bole'].includes(value));
134
+ return peer && !(profile.workKinds ?? []).some(kind => kind.toLowerCase() === workKind.toLowerCase())
135
+ && !(required.length && required.every(value => capabilities.includes(value.toLowerCase())));
136
+ }
137
+
121
138
  function scopedItems(items, agentId) {
122
139
  return (items ?? []).filter(item => !item.project_agent_id || item.project_agent_id === agentId)
123
140
  .slice(0, 4).map(item => ({
@@ -133,7 +150,9 @@ function scopedItems(items, agentId) {
133
150
  function taskWorkKind(prompt) {
134
151
  const text = typeof prompt === 'string' ? prompt.slice(0, 8192) : '';
135
152
  if (/代码审查|代码评审|code review|review code/iu.test(text)) return 'code_review';
136
- if (/修复|实现|开发|编写代码|\b(?:implement|fix|bug|coding)\b/iu.test(text)) return 'implementation';
153
+ if (/架构|\barchitecture\b/iu.test(text)) return 'architecture';
154
+ if (/修复|实现|开发|编写代码|优化|改为|接入|\b(?:implement|fix|bug|coding)\b/iu.test(text)) return 'implementation';
137
155
  if (/测试|验证|\b(?:test|verify|validation)\b/iu.test(text)) return 'test_validation';
156
+ if (/看板|排期|规划|\bplanning\b/iu.test(text)) return 'project_management';
138
157
  return 'project_context';
139
158
  }
@@ -581,7 +581,9 @@ export async function getProjectAgentContext(
581
581
  executionSummary: agent.executionSummary ?? [],
582
582
  role_instructions: {
583
583
  responsibility: agent.profile.responsibility,
584
- initial_preferences: agent.profile.initialPreferences
584
+ initial_preferences: agent.profile.initialPreferences,
585
+ character: continuity.role.character,
586
+ expectations: continuity.role.expectations
585
587
  },
586
588
  effective_preferences: preferences.effective_preferences,
587
589
  deferred_conflicts: preferences.deferred_conflicts,
@@ -0,0 +1,50 @@
1
+ import { taskAgentReceipt } from '../agents/identity-receipt.js';
2
+ import { getCollaborationPreferences as getCollaborationPreferencesWorkflow } from './collaboration-preference-workflow.js';
3
+ import { resolveTaskEntryAgent, loadProjectAgentContinuity } from './project-agent-task-entry.js';
4
+
5
+ export async function taskEntryPreferences(application, projectResolution, {
6
+ personalProjectId, projectAgentId, projectPath, taskPrompt, sourceApplication,
7
+ sourceSessionId, sessionId, turnId, workKind, requiredCapabilities,
8
+ limit, agentInvocation, agentToolName
9
+ }, recordAgentViews) {
10
+ const selection = projectPath === null && !personalProjectId && !projectAgentId
11
+ ? null
12
+ : await resolveTaskEntryAgent(
13
+ application, projectResolution, { projectAgentId, taskPrompt, sourceApplication,
14
+ sessionId: agentToolName === 'get_collaboration_preferences'
15
+ ? sessionId ?? sourceSessionId : turnId ? sessionId : null,
16
+ turnId: agentToolName === 'begin_task_context' ? turnId : null,
17
+ workKind, requiredCapabilities, agentInvocation, agentToolName }
18
+ );
19
+ // A rejected explicit role must not leak its private preferences via fallback.
20
+ const selectedAgentId = selection ? selection.agent?.agentId ?? null : projectAgentId;
21
+ const preferences = await getCollaborationPreferencesWorkflow(
22
+ application,
23
+ projectResolution,
24
+ {
25
+ projectAgentId: selectedAgentId,
26
+ taskPrompt,
27
+ limit,
28
+ agentInvocation,
29
+ agentToolName
30
+ },
31
+ (items, toolName) => recordAgentViews(items, toolName)
32
+ );
33
+ const management = application.employees && agentInvocation &&
34
+ ['begin_task_context', 'get_collaboration_preferences'].includes(agentToolName)
35
+ ? await application.employees.taskEntry({ personalProjectId: projectResolution.personalProjectId,
36
+ sourceApplication, sourceSessionId, sessionId })
37
+ : null;
38
+ const managedPreferences = management ? { ...preferences, project_management_context: management } : preferences;
39
+ if (!selection) return managedPreferences;
40
+ const context = selection.agent ? await loadProjectAgentContinuity(application, {
41
+ projectId: projectResolution.personalProjectId, agent: selection.agent,
42
+ sourceApplication, taskPrompt, selectionReason: selection.reason,
43
+ matchBasis: selection.match_basis
44
+ }) : selection;
45
+ return { ...managedPreferences, project_agent_context: context,
46
+ ...(selection.agent ? { agent_receipt: taskAgentReceipt(application, {
47
+ projectId: projectResolution.personalProjectId, agentId: selection.agent.agentId,
48
+ name: context.role?.name, sourceApplication
49
+ }) } : {}) };
50
+ }
@@ -1 +0,0 @@
1
- import{N as e,T as t,y as n}from"./i18n-BtOOoyJd.js";import{t as r}from"./KnowledgeWorkspace-DmHIc0jb.js";var i=t({__name:`KnowledgePage`,setup(t){return(t,i)=>(e(),n(r))}});export{i as default};
@@ -1 +0,0 @@
1
- import{N as e,T as t,y as n}from"./i18n-BtOOoyJd.js";import{t as r}from"./KnowledgeWorkspace-DmHIc0jb.js";var i=t({__name:`PersonalProjectsPage`,setup(t){return(t,i)=>(e(),n(r,{"personal-projects-only":``}))}});export{i as default};
@@ -1 +0,0 @@
1
- .project-agent-assignment-dialog[data-v-ee37776b]{background:0 0;border:0;border-radius:12px;width:min(620px,100vw - 32px);max-height:calc(100vh - 32px);padding:0}.project-agent-assignment-dialog-shell[data-v-ee37776b]{background:#fbfcfb;border:1px solid #d5dcd7;border-radius:12px;flex-direction:column;max-height:calc(100vh - 32px);display:flex;overflow:hidden;box-shadow:0 18px 48px #212d262e}.project-agent-assignment-dialog-header[data-v-ee37776b],.project-agent-assignment-dialog-actions[data-v-ee37776b]{justify-content:space-between;align-items:center;gap:16px;padding:16px 18px;display:flex}.project-agent-assignment-dialog-header[data-v-ee37776b]{border-bottom:1px solid #e1e6e2}.project-agent-assignment-dialog-header h3[data-v-ee37776b]{color:#283a31;font-size:16px}.project-agent-assignment-dialog-fields[data-v-ee37776b]{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;min-height:0;padding:18px;display:grid;overflow:auto}.project-agent-assignment-dialog-fields label[data-v-ee37776b]{color:#626d66;gap:6px;font-size:11px;font-weight:650;display:grid}.project-agent-assignment-dialog-fields input[data-v-ee37776b],.project-agent-assignment-dialog-fields textarea[data-v-ee37776b]{color:#28342d;background:#fff;border:1px solid #ccd5ce;border-radius:8px;width:100%;padding:8px 9px;font-size:12px;line-height:1.5}.project-agent-assignment-dialog-fields textarea[data-v-ee37776b]{resize:vertical}.project-agent-assignment-dialog-fields input[data-v-ee37776b]:focus-visible,.project-agent-assignment-dialog-fields textarea[data-v-ee37776b]:focus-visible{outline-offset:1px;outline:2px solid #91a398}.project-agent-assignment-wide-field[data-v-ee37776b]{grid-column:1/-1}.project-agent-assignment-dialog-error[data-v-ee37776b]{color:#8b3f38;margin:0 18px;font-size:11px}.project-agent-assignment-dialog-actions[data-v-ee37776b]{border-top:1px solid #e1e6e2;justify-content:flex-end}.project-agent-primary-action[data-v-ee37776b]{color:#fff;background:#344c3d;border:0;border-radius:8px;padding:8px 13px;font-size:11px;font-weight:700}.project-agent-primary-action[data-v-ee37776b]:focus-visible{outline-offset:2px;outline:2px solid #91a398}@media (width<=620px){.project-agent-assignment-dialog-fields[data-v-ee37776b]{grid-template-columns:1fr}.project-agent-assignment-wide-field[data-v-ee37776b]{grid-column:auto}}.project-agent-dialog[data-v-4d36bcaf]{background:0 0;border:0;border-radius:12px;width:min(760px,100vw - 64px);max-height:calc(100vh - 64px);padding:0;overflow:hidden}.project-agent-dialog-shell[data-v-4d36bcaf]{background:#fbfcfb;border:1px solid #d5dcd7;border-radius:12px;flex-direction:column;min-height:0;max-height:calc(100vh - 64px);display:flex;overflow:hidden;box-shadow:0 18px 48px #212d262e}.project-agent-dialog-header[data-v-4d36bcaf],.project-agent-dialog-actions[data-v-4d36bcaf]{justify-content:space-between;align-items:center;gap:16px;padding:18px 20px;display:flex}.project-agent-dialog-header[data-v-4d36bcaf]{border-bottom:1px solid #e1e6e2}.project-agent-dialog-header h3[data-v-4d36bcaf]{color:#283a31;font-size:17px}.project-agent-dialog-fields[data-v-4d36bcaf]{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;min-height:0;padding:20px;display:grid;overflow:auto}.project-agent-dialog-fields label[data-v-4d36bcaf]{color:#626d66;align-content:start;gap:6px;min-width:0;font-size:11px;font-weight:650;display:grid}.project-agent-dialog-fields input[data-v-4d36bcaf],.project-agent-dialog-fields select[data-v-4d36bcaf],.project-agent-dialog-fields textarea[data-v-4d36bcaf]{color:#28342d;background:#fff;border:1px solid #ccd5ce;border-radius:8px;width:100%;padding:9px 10px;font-size:12px;line-height:1.5}.project-agent-dialog-fields textarea[data-v-4d36bcaf]{resize:vertical}.project-agent-dialog-fields input[data-v-4d36bcaf]:focus-visible,.project-agent-dialog-fields select[data-v-4d36bcaf]:focus-visible,.project-agent-dialog-fields textarea[data-v-4d36bcaf]:focus-visible{outline-offset:1px;outline:2px solid #91a398}.project-agent-wide-field[data-v-4d36bcaf],.project-agent-id-note[data-v-4d36bcaf]{grid-column:1/-1}.project-agent-dialog-error[data-v-4d36bcaf]{color:#8b3f38;margin:0 20px;font-size:11px}.project-agent-dialog-actions[data-v-4d36bcaf]{border-top:1px solid #e1e6e2;justify-content:flex-end}.project-agent-primary-action[data-v-4d36bcaf]{color:#fff;background:#344c3d;border:0;border-radius:8px;padding:8px 14px;font-size:12px;font-weight:700}.project-agent-primary-action[data-v-4d36bcaf]:hover{background:#2b4234}.project-agent-primary-action[data-v-4d36bcaf]:focus-visible{outline-offset:2px;outline:2px solid #91a398}.project-agent-primary-action[data-v-4d36bcaf]:disabled,.project-agent-dialog-fields[data-v-4d36bcaf] :disabled{cursor:not-allowed;opacity:.6}.project-agent-dialog-check[data-v-4d36bcaf]{align-items:center;gap:7px!important;display:flex!important}.project-agent-dialog-check input[data-v-4d36bcaf]{width:auto!important}.project-agent-dialog-note[data-v-4d36bcaf]{color:#7b857e;font-size:10px;line-height:1.55}.project-team[data-v-077ab7fe]{border-top:1px solid #dfe5e0;grid-column:1/-1;min-width:0;padding-block:12px}.project-team-peers[data-v-077ab7fe]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.project-team-peers[data-v-077ab7fe]>*{color:#31453a;background:#edf3ee;border:1px solid #cad9cd;border-radius:6px;padding:7px 10px;font-size:12px}.project-team-summary[data-v-077ab7fe]{color:#53665a;margin:9px 0;font-size:12px}.project-team-members[data-v-077ab7fe]{gap:9px;margin:10px 0 16px 18px;padding:0;list-style:none;display:grid}.project-team-members button[data-v-077ab7fe]{text-align:start;color:#31453a;background:0 0;border:0;gap:3px;max-width:100%;display:grid}.project-team-members span[data-v-077ab7fe]{color:#596b60;overflow-wrap:anywhere;font-size:12px;line-height:1.5}.project-team summary[data-v-077ab7fe]{cursor:pointer;font-size:12px}.team-lead-field[data-v-077ab7fe]{flex-wrap:wrap;align-items:center;gap:12px;margin-block:14px;display:flex}.team-lead-field select[data-v-077ab7fe]{max-width:100%;padding:7px}.project-team fieldset[data-v-077ab7fe]{border:0;flex-wrap:wrap;gap:12px;margin-bottom:14px;padding:0;display:flex}.project-team fieldset label[data-v-077ab7fe]{align-items:center;gap:5px;font-size:12px;display:flex}.project-team legend[data-v-077ab7fe]{margin-bottom:8px;font-size:12px}.project-agent-automation-policy[data-v-077ab7fe]{border-block:1px solid #dfe5e0;grid-template-columns:minmax(110px,150px) minmax(0,1fr);align-items:center;gap:14px;padding:11px 0;display:grid}.project-agent-automation-policy>header[data-v-077ab7fe]{min-width:0}.project-agent-automation-policy h3[data-v-077ab7fe]{color:#31453a;font-size:12px;line-height:1.35}.project-agent-automation-policy header span[data-v-077ab7fe]{color:#68756d;text-overflow:ellipsis;white-space:nowrap;margin-top:3px;font-size:9px;display:block;overflow:hidden}.project-agent-policy-options[data-v-077ab7fe]{grid-template-columns:repeat(2,minmax(0,1fr));min-width:0;display:grid}.project-agent-policy-options label[data-v-077ab7fe]{cursor:pointer;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;min-width:0;padding:2px 16px;display:grid}.project-agent-policy-options label+label[data-v-077ab7fe]{border-inline-start:1px solid #e2e7e3}.project-agent-policy-options label>span[data-v-077ab7fe]{gap:3px;min-width:0;display:grid}.project-agent-policy-options strong[data-v-077ab7fe]{color:#3d5045;font-size:10px;line-height:1.4}.project-agent-policy-options small[data-v-077ab7fe]{color:#6d7971;overflow-wrap:anywhere;max-width:54ch;font-size:9px;line-height:1.45}.project-agent-policy-options input[data-v-077ab7fe]{appearance:none;cursor:pointer;background:#e8ece9;border:1px solid #aeb8b1;border-radius:999px;width:34px;height:19px;margin:0;transition:background-color .14s ease-out,border-color .14s ease-out;position:relative}.project-agent-policy-options input[data-v-077ab7fe]:after{content:"";background:#fff;border-radius:50%;width:13px;height:13px;transition:transform .14s ease-out;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #24372c38}.project-agent-policy-options input[data-v-077ab7fe]:checked{background:#4d8164;border-color:#3f7658}.project-agent-policy-options input[data-v-077ab7fe]:checked:after{transform:translate(15px)}.project-agent-policy-options input[data-v-077ab7fe]:focus-visible{outline-offset:3px;outline:2px solid #355f49}.project-agent-policy-options input[data-v-077ab7fe]:disabled{cursor:wait;opacity:.62}.project-agent-policy-feedback[data-v-077ab7fe]{grid-column:2;min-height:14px;padding-inline:16px}.project-agent-policy-state[data-v-077ab7fe],.project-agent-policy-feedback p[data-v-077ab7fe]{color:#66736b;font-size:9px;line-height:1.45}.project-agent-policy-feedback p[role=alert][data-v-077ab7fe]{color:#874b43}.project-agent-policy-feedback button[data-v-077ab7fe]{color:#355f49;font:inherit;cursor:pointer;background:0 0;border:0;margin-inline-start:6px;padding:0;font-weight:700}@media (width<=760px){.project-agent-automation-policy[data-v-077ab7fe],.project-agent-policy-options[data-v-077ab7fe]{grid-template-columns:minmax(0,1fr)}.project-agent-policy-options label[data-v-077ab7fe]{padding:8px 0}.project-agent-policy-options label+label[data-v-077ab7fe]{border-block-start:1px solid #e2e7e3;border-inline-start:0}.project-agent-policy-feedback[data-v-077ab7fe]{grid-column:1;padding-inline:0}}.project-agent-source-state[data-v-ca9a5880]{color:#727d75;background:#f7f9f7;border:1px solid #e1e6e2;border-radius:8px;justify-content:space-between;align-items:center;gap:10px;margin-top:22px;padding:10px 12px;font-size:10px;display:flex}.project-agent-source-state.is-error[data-v-ca9a5880]{color:#8c4f49;background:#fbf3f1;border-color:#ebd5d0}.employee-work-history[data-v-bf7d05b1]{margin-block:24px;font-size:14px}summary[data-v-bf7d05b1]{cursor:pointer;padding-block:12px;font-weight:650}label[data-v-bf7d05b1]{flex-wrap:wrap;align-items:center;gap:12px;display:flex}select[data-v-bf7d05b1]{max-width:100%;font:inherit;padding:8px}ol[data-v-bf7d05b1]{margin:12px 0;padding:0;list-style:none}li[data-v-bf7d05b1]{border-top:1px solid #dce3de;padding-block:14px}.work-record-meta[data-v-bf7d05b1]{flex-wrap:wrap;align-items:baseline;gap:12px;display:flex}p[data-v-bf7d05b1]{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.65}@media (width<=640px){.employee-work-history[data-v-bf7d05b1]{font-size:16px}}.agent-conversations[data-v-14d7c328]{color:#39483f;margin-block:20px;font-size:14px}summary[data-v-14d7c328]{cursor:pointer;padding-block:12px;font-weight:650}summary[data-v-14d7c328]:focus-visible,button[data-v-14d7c328]:focus-visible,input[data-v-14d7c328]:focus-visible,select[data-v-14d7c328]:focus-visible{outline-offset:3px;outline:2px solid #315c43}label[data-v-14d7c328]{flex-wrap:wrap;align-items:center;gap:12px;display:flex}select[data-v-14d7c328],input[type=number][data-v-14d7c328]{max-width:100%;font:inherit;color:inherit;background:#fff;border:1px solid #a8b7ad;border-radius:6px;padding:8px}input[type=number][data-v-14d7c328]{width:100px}input[type=checkbox][data-v-14d7c328]{width:18px;height:18px}fieldset[data-v-14d7c328]{border:0;gap:16px;min-width:0;margin:0;padding:8px 0;display:grid}fieldset button[data-v-14d7c328]{justify-self:start}.conversation-hint[data-v-14d7c328]{color:#58675d;margin-block:12px;line-height:1.65}ol[data-v-14d7c328]{margin:0;padding:0;list-style:none}.conversation-list>li[data-v-14d7c328]{border-bottom:1px solid #dce3de}.conversation-link[data-v-14d7c328]{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-14d7c328]{text-underline-offset:3px;text-decoration:underline}.conversation-link[aria-pressed=true] strong[data-v-14d7c328]{color:#315c43}.conversation-link span[data-v-14d7c328]{color:#58675d;font-size:12px}.conversation-link strong[data-v-14d7c328]{overflow-wrap:anywhere}.conversation-messages[data-v-14d7c328]{padding-bottom:16px}.conversation-messages li[data-v-14d7c328]{padding-block:12px}pre[data-v-14d7c328]{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;max-height:320px;margin-block:8px;line-height:1.65;overflow:auto}button[data-v-14d7c328]:disabled{cursor:wait;opacity:.65}@media (width<=640px){.agent-conversations[data-v-14d7c328]{font-size:16px}}.project-agent-dialog[data-v-95db0a3d]{background:0 0;border:0;border-radius:12px;width:min(760px,100vw - 64px);max-height:calc(100vh - 64px);padding:0;overflow:hidden}.project-agent-dialog-shell[data-v-95db0a3d]{background:#fbfcfb;border:1px solid #d5dcd7;border-radius:12px;flex-direction:column;min-height:0;max-height:calc(100vh - 64px);display:flex;overflow:hidden;box-shadow:0 18px 48px #212d262e}.project-agent-dialog-header[data-v-95db0a3d],.project-agent-dialog-actions[data-v-95db0a3d]{justify-content:space-between;align-items:center;gap:16px;padding:18px 20px;display:flex}.project-agent-dialog-header[data-v-95db0a3d]{border-bottom:1px solid #e1e6e2}.project-agent-dialog-header h3[data-v-95db0a3d]{color:#283a31;font-size:17px}.project-agent-dialog-fields[data-v-95db0a3d]{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;min-height:0;padding:20px;display:grid;overflow:auto}.project-agent-dialog-fields label[data-v-95db0a3d]{color:#626d66;align-content:start;gap:6px;min-width:0;font-size:11px;font-weight:650;display:grid}.project-agent-dialog-fields input[data-v-95db0a3d],.project-agent-dialog-fields select[data-v-95db0a3d],.project-agent-dialog-fields textarea[data-v-95db0a3d]{color:#28342d;background:#fff;border:1px solid #ccd5ce;border-radius:8px;width:100%;padding:9px 10px;font-size:12px;line-height:1.5}.project-agent-dialog-fields textarea[data-v-95db0a3d]{resize:vertical}.project-agent-dialog-fields input[data-v-95db0a3d]:focus-visible,.project-agent-dialog-fields select[data-v-95db0a3d]:focus-visible,.project-agent-dialog-fields textarea[data-v-95db0a3d]:focus-visible{outline-offset:1px;outline:2px solid #91a398}.project-agent-wide-field[data-v-95db0a3d],.project-agent-id-note[data-v-95db0a3d]{grid-column:1/-1}.project-agent-strategy-fields[data-v-95db0a3d]{border:1px solid #dfe5e0;border-radius:9px;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;min-width:0;margin:0;padding:12px;display:grid}.project-agent-strategy-fields legend[data-v-95db0a3d]{color:#59665d;padding:0 5px;font-size:10px;font-weight:700}.project-agent-strategy-fields>small[data-v-95db0a3d]{color:#818a84;grid-column:1/-1;font-size:9px;line-height:1.5}.project-agent-id-note[data-v-95db0a3d]{color:#7b847e;margin-top:-8px;font-size:10px}.project-agent-dialog-error[data-v-95db0a3d]{color:#8b3f38;margin:0 20px;font-size:11px}.project-agent-dialog-actions[data-v-95db0a3d]{border-top:1px solid #e1e6e2;justify-content:flex-end}.project-agent-primary-action[data-v-95db0a3d]{color:#fff;background:#344c3d;border:0;border-radius:8px;padding:8px 14px;font-size:12px;font-weight:700}.project-agent-primary-action[data-v-95db0a3d]:hover{background:#2b4234}.project-agent-primary-action[data-v-95db0a3d]:focus-visible{outline-offset:2px;outline:2px solid #91a398}.project-agent-primary-action[data-v-95db0a3d]:disabled,.project-agent-dialog-fields[data-v-95db0a3d] :disabled{cursor:not-allowed;opacity:.6}@media (width<=720px){.project-agent-dialog-fields[data-v-95db0a3d]{grid-template-columns:1fr}.project-agent-wide-field[data-v-95db0a3d],.project-agent-id-note[data-v-95db0a3d]{grid-column:1}}.project-agent-row-shell[data-v-fcdd93e0]{align-items:flex-start;gap:6px;min-width:0;display:flex}.project-agent-row-shell>.project-agent-row[data-v-fcdd93e0]{flex:1;min-width:0}.project-agent-row-shell>.agent-hand[data-v-fcdd93e0]{margin-top:14px}.project-agent-header-actions[data-v-fcdd93e0]{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.project-agents-view[data-v-fcdd93e0]{flex-direction:column;gap:12px;min-height:0;padding:18px 32px 20px;display:flex;overflow:hidden}.project-agents-header[data-v-fcdd93e0],.project-agent-section-heading[data-v-fcdd93e0],.project-agent-section-tools[data-v-fcdd93e0],.project-agent-detail-actions[data-v-fcdd93e0],.project-agent-assignment-card header[data-v-fcdd93e0],.project-agent-task-card header[data-v-fcdd93e0],.project-agent-learning-card header[data-v-fcdd93e0],.project-agent-day-detail header[data-v-fcdd93e0]{justify-content:space-between;align-items:center;gap:12px;display:flex}.project-agents-header h2[data-v-fcdd93e0]{color:#283a31;font-size:18px}.project-agents-header-meta[data-v-fcdd93e0]{color:#7a847d;font-size:10px}.project-agents-summary[data-v-fcdd93e0]{color:#58675d;gap:18px;padding:2px 0 4px;font-size:12px;line-height:1.5;display:flex}.project-agents-summary span[data-v-fcdd93e0]:first-child{color:#2f493b;font-weight:700}.project-agent-add[data-v-fcdd93e0]{color:#fff;cursor:pointer;background:#344c3d;border:0;border-radius:8px;min-height:40px;padding:9px 14px;font-size:12px;font-weight:600}.project-agent-add[data-v-fcdd93e0]:hover{background:#2b4234}.project-agent-add[data-v-fcdd93e0]:focus-visible,.quiet-button[data-v-fcdd93e0]:focus-visible{outline-offset:2px;outline:2px solid #91a398}.project-agent-add[data-v-fcdd93e0]:disabled{cursor:not-allowed;opacity:.55}.project-agents-toolbar[data-v-fcdd93e0]{grid-template-columns:minmax(240px,320px) minmax(200px,1fr) auto;align-items:center;gap:12px;display:grid}.project-agents-search input[data-v-fcdd93e0]{color:#2e3932;background:#fff;border:1px solid #cfd7d1;border-radius:8px;width:100%;min-height:44px;padding:10px 12px;font-size:13px}.project-agents-search input[data-v-fcdd93e0]:focus-visible{outline-offset:1px;outline:2px solid #91a398}.project-agents-status-filter[data-v-fcdd93e0]{background:#f5f7f5;border:1px solid #d8ded9;border-radius:8px;gap:3px;padding:3px;display:flex}.project-agents-status-filter button[data-v-fcdd93e0],.quiet-button[data-v-fcdd93e0]{color:#58675d;cursor:pointer;background:0 0;border:0;border-radius:6px;min-height:34px;padding:7px 10px;font-size:12px}.project-agents-status-filter button[aria-pressed=true][data-v-fcdd93e0]{color:#315440;background:#fff;font-weight:700;box-shadow:0 1px 3px #27392f1f}.project-agents-directory[data-v-fcdd93e0]{background:#fff;border:1px solid #cfd7d1;border-radius:10px;flex:1;grid-template-columns:minmax(360px,.94fr) minmax(390px,1.06fr);min-height:0;display:grid;overflow:hidden}.project-agent-list[data-v-fcdd93e0]{border-right:1px solid #dfe4e0;min-width:0;min-height:0;overflow:auto}.project-agent-row[data-v-fcdd93e0]{width:100%;color:inherit;text-align:left;background:#fff;border:0;border-bottom:1px solid #e6eae7;grid-template-columns:minmax(0,1fr) auto;gap:5px 14px;padding:14px 16px;display:grid}.project-agent-row[data-v-fcdd93e0]:hover{background:#f7f9f7}.project-agent-row.selected[data-v-fcdd93e0]{background:#edf3ef}.project-agent-row[data-v-fcdd93e0]:focus-visible{z-index:1;outline-offset:-3px;outline:2px solid #91a398;position:relative}.project-agent-row-heading[data-v-fcdd93e0]{align-items:center;gap:7px;min-width:0;display:flex}.project-agent-occupation-emoji[data-v-fcdd93e0]{flex:none;justify-content:center;align-items:center;min-width:1.2em;font-size:15px;line-height:1;display:inline-flex}.project-agent-row-heading strong[data-v-fcdd93e0]{color:#293b31;text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.project-agent-row-heading i[data-v-fcdd93e0],.project-agent-assignment-card header i[data-v-fcdd93e0],.project-agent-task-card header i[data-v-fcdd93e0],.project-agent-learning-card header i[data-v-fcdd93e0]{color:#66716a;background:#e6eae7;border-radius:999px;flex:none;padding:2px 7px;font-size:9px;font-style:normal;font-weight:700}.project-agent-row-heading i.is-active[data-v-fcdd93e0]{color:#2f6947;background:#e1eee6}.project-agent-row-heading i.is-archived[data-v-fcdd93e0]{color:#75695d;background:#eeeae5}.project-agent-kind[data-v-fcdd93e0]{color:#53647b!important;background:#eef2f7!important}.project-agent-row-id[data-v-fcdd93e0]{color:#8a938d;overflow-wrap:anywhere;text-align:right;font-size:9px}.project-agent-row-projects[data-v-fcdd93e0]{flex-wrap:wrap;grid-column:1/-1;gap:4px;display:flex}.project-agent-row-projects b[data-v-fcdd93e0],.project-agent-tags span[data-v-fcdd93e0],.project-agent-inline-list span[data-v-fcdd93e0]{color:#5f6b64;background:#eef1ef;border-radius:999px;padding:3px 7px;font-size:9px;font-weight:650}.project-agent-row-projects em[data-v-fcdd93e0]{color:#8a938d;font-size:9px;font-style:normal}.project-agent-row-responsibility[data-v-fcdd93e0]{color:#59645d;text-overflow:ellipsis;white-space:nowrap;grid-column:1/-1;font-size:11px;line-height:1.5;overflow:hidden}.project-agent-row-work[data-v-fcdd93e0]{color:#59645d;grid-column:1/-1;font-size:10px;line-height:1.5}.project-agent-work-dot[data-v-fcdd93e0]{background:#4b8d63;border-radius:50%;width:6px;height:6px;margin-right:4px;display:inline-block}.project-agent-detail[data-v-fcdd93e0]{min-width:0;min-height:0;padding:20px;overflow:auto;container-type:inline-size}.employee-project-overview[data-v-fcdd93e0]{border-bottom:1px solid #e1e6e2;margin:22px 0;padding-bottom:18px}.employee-project-overview-heading[data-v-fcdd93e0]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.employee-project-overview-heading h4[data-v-fcdd93e0]{color:#33483c;margin:0;font-size:14px}.employee-project-overview-heading p[data-v-fcdd93e0],.employee-project-overview-hint[data-v-fcdd93e0]{color:#58675d;margin:5px 0 0;font-size:12px;line-height:1.6}.employee-project-overview-hint[data-v-fcdd93e0]{margin-top:12px}.employee-assigned-projects[data-v-fcdd93e0]{grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 20px;margin-top:12px;display:grid}.employee-assigned-projects a[data-v-fcdd93e0]{color:#315c43;justify-content:space-between;align-items:center;gap:10px;padding:8px 0;font-size:13px;line-height:1.5;text-decoration:none;display:flex}.employee-assigned-projects a[data-v-fcdd93e0]:hover{text-underline-offset:3px;text-decoration:underline}.employee-assigned-projects a[data-v-fcdd93e0]:focus-visible{outline-offset:3px;outline:2px solid #91a398}.employee-assigned-projects a span[data-v-fcdd93e0]{overflow-wrap:anywhere}.employee-assigned-projects svg[data-v-fcdd93e0]{flex-shrink:0}@container (width<=480px){.employee-assigned-projects[data-v-fcdd93e0]{grid-template-columns:minmax(0,1fr)}}.project-agent-detail>header[data-v-fcdd93e0]{border-bottom:1px solid #e1e6e2;grid-template-columns:minmax(0,1fr) max-content;align-items:flex-start;gap:16px;padding-bottom:16px;display:grid}.project-agent-detail-heading[data-v-fcdd93e0]{min-width:0}.project-agent-detail h3[data-v-fcdd93e0]{color:#263b30;text-wrap:balance;font-size:17px;line-height:1.32}.project-agent-detail header p[data-v-fcdd93e0]{color:#7a847d;overflow-wrap:anywhere;max-width:72ch;margin-top:5px;font-size:10px;line-height:1.5}.project-agent-detail-actions[data-v-fcdd93e0]{grid-auto-columns:78px;grid-auto-flow:column;justify-content:end;gap:8px;display:grid}.project-agent-detail-actions .quiet-button[data-v-fcdd93e0]{white-space:nowrap;width:78px}.project-agent-detail-meta[data-v-fcdd93e0],.project-agent-compact-meta[data-v-fcdd93e0]{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:16px 0 0;display:grid}.project-agent-detail-meta div[data-v-fcdd93e0],.project-agent-compact-meta div[data-v-fcdd93e0]{min-width:0}.project-agent-detail-meta dt[data-v-fcdd93e0],.project-agent-compact-meta dt[data-v-fcdd93e0],.project-agent-detail-section h4[data-v-fcdd93e0]{color:#7a847d;letter-spacing:.06em;text-transform:uppercase;font-size:9px;font-weight:700}.project-agent-detail-meta dd[data-v-fcdd93e0],.project-agent-compact-meta dd[data-v-fcdd93e0]{overflow-wrap:anywhere;color:#39483f;margin:4px 0 0;font-size:11px}.project-agent-detail-meta dd small[data-v-fcdd93e0]{color:#818a84;margin-top:3px;font-size:9px;line-height:1.4;display:block}.project-agent-detail-section[data-v-fcdd93e0]{margin-top:22px}.project-agent-detail-section.is-responsibility[data-v-fcdd93e0]{background:#f2f5f2;border-radius:10px;padding:14px}.project-agent-detail-section p[data-v-fcdd93e0],.project-agent-detail-section li[data-v-fcdd93e0]{color:#4f5c54;font-size:11px;line-height:1.65}.project-agent-tags[data-v-fcdd93e0],.project-agent-inline-list[data-v-fcdd93e0]{flex-wrap:wrap;gap:6px;margin-top:9px;display:flex}.project-agent-muted[data-v-fcdd93e0]{color:#8a928d!important}.project-agent-detail-notice[data-v-fcdd93e0]{background:#f5f5f1;border-radius:7px;margin:12px 0 0;padding:8px 10px;color:#6f705f!important}.project-agent-detail-placeholder[data-v-fcdd93e0],.project-agents-state[data-v-fcdd93e0]{color:#737d76;text-align:center;place-content:center;justify-items:center;gap:8px;min-height:240px;font-size:11px;display:grid}.project-agents-state[data-v-fcdd93e0]{background:#fafbfa;border:1px solid #d9dfda;border-radius:10px;flex:1}.project-agents-state strong[data-v-fcdd93e0]{color:#36473e;font-size:14px}.project-agents-state p[data-v-fcdd93e0]{max-width:52ch;line-height:1.6}.project-agents-state.is-error[data-v-fcdd93e0]{color:#8b3f38}.project-agent-assignment-list[data-v-fcdd93e0],.project-agent-task-list[data-v-fcdd93e0],.project-agent-learning-list[data-v-fcdd93e0],.project-agent-recruitment-list[data-v-fcdd93e0]{gap:8px;margin-top:9px;display:grid}.project-agent-task-list[data-v-fcdd93e0]{grid-template-columns:minmax(0,1fr);min-width:0}.project-agent-execution-summary[data-v-fcdd93e0]{border-top:1px solid #dfe5e0;min-width:0;margin-top:13px;padding-top:12px}.project-agent-worker-event-evidence[data-v-fcdd93e0]{background:#f8faf8;border:1px dashed #d8dfd9;border-radius:8px;margin-top:13px;padding:10px 10px 0}.project-agent-execution-summary .project-agent-section-heading[data-v-fcdd93e0]{gap:8px}.project-agent-execution-summary h5[data-v-fcdd93e0]{color:#65736a;letter-spacing:.06em;text-transform:uppercase;margin:0;font-size:11px;font-weight:700}.project-agent-execution-summary-table-wrap[data-v-fcdd93e0]{box-sizing:border-box;overscroll-behavior-inline:contain;background:#fff;border:1px solid #dce3de;border-radius:8px;width:100%;max-width:100%;margin-top:7px;overflow-x:auto}.project-agent-execution-summary-table-wrap[data-v-fcdd93e0]:focus-visible{outline-offset:2px;outline:2px solid #91a398}.project-agent-execution-summary-table[data-v-fcdd93e0]{border-collapse:collapse;table-layout:fixed;color:#4f5e54;width:100%;min-width:1040px;font-size:12px;line-height:1.5}.project-agent-execution-summary-table th[data-v-fcdd93e0],.project-agent-execution-summary-table td[data-v-fcdd93e0]{overflow-wrap:anywhere;text-align:left;vertical-align:top;border-bottom:1px solid #e6ebe7;border-right:1px solid #e6ebe7;min-width:0;padding:8px 9px}.project-agent-execution-summary-table tr[data-v-fcdd93e0]>:last-child{border-right:0}.project-agent-execution-summary-table tbody tr[data-v-fcdd93e0]:last-child>*{border-bottom:0}.project-agent-execution-summary-table thead th[data-v-fcdd93e0]{color:#65736a;letter-spacing:.04em;text-transform:uppercase;background:#f3f6f4;font-size:11px;font-weight:750}.project-agent-execution-summary-table thead th[data-v-fcdd93e0]:first-child{width:14%}.project-agent-execution-summary-table thead th[data-v-fcdd93e0]:nth-child(2){width:20%}.project-agent-execution-summary-table thead th[data-v-fcdd93e0]:nth-child(3){width:13%}.project-agent-execution-summary-table thead th[data-v-fcdd93e0]:nth-child(4),.project-agent-execution-summary-table thead th[data-v-fcdd93e0]:nth-child(5){width:15%}.project-agent-execution-summary-table thead th[data-v-fcdd93e0]:nth-child(6){width:12%}.project-agent-execution-summary-table tbody tr[data-v-fcdd93e0]:hover{background:#fafcfb}.project-agent-execution-summary-table tbody th[data-v-fcdd93e0]{color:#3f5647;font-weight:700}.project-agent-execution-summary-table tbody strong[data-v-fcdd93e0],.project-agent-execution-summary-table tbody span[data-v-fcdd93e0],.project-agent-execution-summary-table tbody small[data-v-fcdd93e0],.project-agent-execution-summary-table tbody a[data-v-fcdd93e0]{display:block}.project-agent-execution-summary-table tbody small[data-v-fcdd93e0]{color:#647168;margin-top:3px;font-size:11px;font-weight:500}.project-agent-execution-summary-table tbody .project-agent-reporter-label[data-v-fcdd93e0]{margin-top:8px}.project-agent-execution-summary-table tbody a[data-v-fcdd93e0]{color:#386c50;text-underline-offset:2px;margin-top:3px;text-decoration-thickness:1px}.project-agent-execution-summary-table tbody a[data-v-fcdd93e0]:focus-visible{outline-offset:2px;border-radius:2px;outline:2px solid #91a398}.project-agent-execution-worker[data-v-fcdd93e0]{align-items:center;gap:4px;display:flex!important}.project-agent-execution-summary-row i[data-v-fcdd93e0]{color:#66716a;background:#e6eae7;border-radius:999px;padding:2px 6px;font-size:11px;font-style:normal;font-weight:700;display:inline-flex}.project-agent-execution-summary-row i.is-completed[data-v-fcdd93e0]{color:#2f6947;background:#e1eee6}.project-agent-execution-summary-row i.is-failed[data-v-fcdd93e0]{color:#8c4f49;background:#f7e9e6}.project-agent-execution-summary-row i.is-cancelled[data-v-fcdd93e0]{color:#75695d;background:#eeeae5}.project-agent-execution-summary-list[data-v-fcdd93e0]{margin:7px 0 0;padding:0;list-style:none;display:grid}.project-agent-worker-event-row[data-v-fcdd93e0]{border-top:1px solid #e6ebe7;min-width:0;padding:10px 0}.project-agent-worker-event-row[data-v-fcdd93e0]:first-child{border-top:0}.project-agent-worker-event-row header[data-v-fcdd93e0]{align-items:flex-start}.project-agent-worker-event-row header strong[data-v-fcdd93e0]{overflow-wrap:anywhere;color:#3f5647;align-items:center;gap:5px;min-width:0;font-size:10px;display:flex}.project-agent-worker-event-row header strong small[data-v-fcdd93e0]{color:#89948c;margin:0;font-size:8px;font-weight:500;display:inline}.project-agent-worker-event-row header i[data-v-fcdd93e0]{color:#66716a;background:#e6eae7;border-radius:999px;flex:none;padding:2px 6px;font-size:8px;font-style:normal;font-weight:700}.project-agent-worker-event-row header i.is-completed[data-v-fcdd93e0]{color:#2f6947;background:#e1eee6}.project-agent-worker-event-row header i.is-failed[data-v-fcdd93e0]{color:#8c4f49;background:#f7e9e6}.project-agent-worker-event-row header i.is-cancelled[data-v-fcdd93e0]{color:#75695d;background:#eeeae5}.project-agent-execution-summary-meta[data-v-fcdd93e0]{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px 10px;margin:8px 0 0;display:grid}.project-agent-execution-summary-meta div[data-v-fcdd93e0]{min-width:0}.project-agent-execution-summary-meta dt[data-v-fcdd93e0]{color:#89948c;letter-spacing:.04em;text-transform:uppercase;font-size:8px;font-weight:700}.project-agent-execution-summary-meta dd[data-v-fcdd93e0]{overflow-wrap:anywhere;color:#4f5e54;margin:2px 0 0;font-size:9px;line-height:1.45}.project-agent-execution-summary-meta dd small[data-v-fcdd93e0]{color:#89948c;margin-top:2px;font-size:8px;display:block}.project-agent-assignment-card[data-v-fcdd93e0],.project-agent-task-card[data-v-fcdd93e0],.project-agent-learning-card[data-v-fcdd93e0]{background:#fbfcfb;border:1px solid #e0e6e1;border-radius:9px;min-width:0;padding:11px 12px}.project-agent-recruitment-card[data-v-fcdd93e0]{background:#fbfcfb;border:1px solid #e0e6e1;border-radius:9px;padding:11px 12px}.project-agent-assignment-card header strong[data-v-fcdd93e0],.project-agent-task-card header strong[data-v-fcdd93e0],.project-agent-learning-card header strong[data-v-fcdd93e0]{color:#33483a;font-size:11px}.project-agent-card-actions[data-v-fcdd93e0]{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:4px;display:flex}.project-agent-assignment-card p[data-v-fcdd93e0],.project-agent-task-card p[data-v-fcdd93e0],.project-agent-learning-card p[data-v-fcdd93e0]{margin:7px 0 0}.project-agent-assignment-card small[data-v-fcdd93e0],.project-agent-task-card small[data-v-fcdd93e0],.project-agent-learning-card small[data-v-fcdd93e0]{color:#818a84;margin-top:6px;font-size:9px;line-height:1.5;display:block}.project-agent-assignment-card header i.is-ended[data-v-fcdd93e0],.project-agent-assignment-card header i.is-replaced[data-v-fcdd93e0]{color:#75695d;background:#eeeae5}.project-agent-strategy-note[data-v-fcdd93e0],.project-agent-execution-line[data-v-fcdd93e0]{color:#7a847d;flex-wrap:wrap;align-items:baseline;gap:6px;margin-top:8px;font-size:9px;display:flex}.project-agent-strategy-note strong[data-v-fcdd93e0],.project-agent-execution-line strong[data-v-fcdd93e0]{color:#53685a;font-size:10px}.project-agent-strategy-note small[data-v-fcdd93e0]{color:#8c5d54;flex-basis:100%}.project-agent-routing-decision[data-v-fcdd93e0]{color:#65736a;background:#f3f7f3;border:1px solid #dce5de;border-radius:7px;gap:5px;margin-top:10px;padding:9px 10px;font-size:9px;display:grid}.project-agent-routing-decision .project-agent-section-heading[data-v-fcdd93e0]{align-items:baseline;gap:8px}.project-agent-routing-decision .project-agent-section-heading strong[data-v-fcdd93e0]{color:#3f604b;font-size:10px}.project-agent-routing-decision small[data-v-fcdd93e0]{color:#65736a;line-height:1.45}.project-agent-blocked[data-v-fcdd93e0]{color:#8c5d54!important}.project-agent-task-card header[data-v-fcdd93e0]{align-items:flex-start}.project-agent-task-card header small[data-v-fcdd93e0]{margin-top:3px}.project-agent-task-card header i[data-v-fcdd93e0]{color:#53647b;background:#eef2f7}.project-agent-task-card header i.is-completed[data-v-fcdd93e0]{color:#2f6947;background:#e1eee6}.project-agent-task-card header i.is-failed[data-v-fcdd93e0]{color:#8c4f49;background:#f7e9e6}.project-agent-task-card header i.is-cancelled[data-v-fcdd93e0]{color:#75695d;background:#eeeae5}.project-agent-heatmap-viewport[data-v-fcdd93e0]{contain:layout inline-size paint;min-width:0;max-width:100%;overflow-x:clip}.project-agent-heatmap[data-v-fcdd93e0]{grid-template-rows:repeat(7,minmax(10px,1fr));grid-auto-columns:minmax(10px,1fr);grid-auto-flow:column;gap:3px;width:100%;max-width:100%;margin-top:9px;padding:0;display:grid;overflow-x:auto}.project-agent-heat-cell[data-v-fcdd93e0]{appearance:none;box-sizing:border-box;aspect-ratio:1;background:#f2f4f2;border:1px solid #dfe6e0;border-radius:3px;min-width:9px;margin:0;padding:0}.project-agent-heat-cell.intensity-1[data-v-fcdd93e0]{background:#dce9df}.project-agent-heat-cell.intensity-2[data-v-fcdd93e0]{background:#b9d3bf}.project-agent-heat-cell.intensity-3[data-v-fcdd93e0]{background:#87b493}.project-agent-heat-cell.intensity-4[data-v-fcdd93e0]{background:#548466}.project-agent-heat-cell[data-v-fcdd93e0]:focus-visible,.project-agent-heat-cell.selected[data-v-fcdd93e0]{box-shadow:none;border:2px solid #2f5740;outline:none}.project-agent-day-detail[data-v-fcdd93e0]{background:#f6f8f6;border-radius:8px;margin-top:10px;padding:10px}.project-agent-day-detail ul[data-v-fcdd93e0]{margin:8px 0 0;padding-left:17px}.project-agent-day-detail li[data-v-fcdd93e0]{margin-top:6px}.project-agent-day-detail li strong[data-v-fcdd93e0],.project-agent-day-detail li span[data-v-fcdd93e0],.project-agent-day-detail li small[data-v-fcdd93e0]{display:block}.project-agent-day-detail li span[data-v-fcdd93e0]{color:#66736b;font-size:9px}.project-agent-day-detail li small[data-v-fcdd93e0]{color:#7e8981;font-size:9px}.project-agent-client-list[data-v-fcdd93e0],.project-agent-rule-list[data-v-fcdd93e0]{gap:5px;margin-top:9px;display:grid}.project-agent-client-row[data-v-fcdd93e0],.project-agent-rule-row[data-v-fcdd93e0]{color:#68736c;background:#f7f9f7;border-radius:7px;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:7px;padding:8px 10px;font-size:9px;display:grid}.project-agent-client-row strong[data-v-fcdd93e0],.project-agent-rule-row strong[data-v-fcdd93e0]{color:#43584a;font-size:10px}.project-agent-client-row small[data-v-fcdd93e0]{color:#8a938d;grid-column:1/-1}.project-agent-executor-list[data-v-fcdd93e0]{gap:5px;margin-top:9px;display:grid}.project-agent-executor-row[data-v-fcdd93e0]{color:#68736c;background:#f7f9f7;border-radius:7px;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:7px;padding:8px 10px;font-size:9px;display:grid}.project-agent-executor-row strong[data-v-fcdd93e0]{color:#43584a;font-size:10px}.project-agent-executor-row small[data-v-fcdd93e0]{color:#8a938d;grid-column:1/-1}.project-agent-learning-card header i[data-v-fcdd93e0]{color:#6c776f;background:#f1f3f1}.project-agent-evidence-list[data-v-fcdd93e0]{margin:8px 0 0;padding-left:17px}.project-agent-evidence-list li[data-v-fcdd93e0]{color:#768179;font-size:9px}.project-agent-learning-actions[data-v-fcdd93e0]{gap:6px;margin-top:8px;display:flex}.project-agent-note[data-v-fcdd93e0]{color:#818a84;margin-top:9px;font-size:9px;line-height:1.5;display:block}.sr-only[data-v-fcdd93e0]{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (width<=1180px){.project-agents-toolbar[data-v-fcdd93e0]{grid-template-columns:minmax(220px,280px) 1fr}.project-agents-status-filter[data-v-fcdd93e0]{grid-column:1/-1;justify-self:start}.project-agents-directory[data-v-fcdd93e0]{grid-template-columns:minmax(320px,.9fr) minmax(330px,1fr)}.project-agent-detail-meta[data-v-fcdd93e0],.project-agent-compact-meta[data-v-fcdd93e0]{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (width<=420px){.project-agent-detail>header[data-v-fcdd93e0]{grid-template-columns:minmax(0,1fr)}.project-agent-detail-actions[data-v-fcdd93e0]{justify-content:start}}@media (width<=760px){.project-agents-view[data-v-fcdd93e0]{padding:14px 16px 18px;overflow:auto}.project-agents-header[data-v-fcdd93e0],.project-agents-summary[data-v-fcdd93e0],.project-agent-section-heading[data-v-fcdd93e0],.project-agent-assignment-card header[data-v-fcdd93e0]{flex-wrap:wrap;align-items:flex-start}.project-agents-toolbar[data-v-fcdd93e0]{grid-template-columns:minmax(0,1fr)}.project-agents-project-filter[data-v-fcdd93e0],.project-agents-search[data-v-fcdd93e0],.project-agents-status-filter[data-v-fcdd93e0]{grid-column:1}.project-agents-status-filter[data-v-fcdd93e0]{flex-wrap:wrap;justify-self:stretch;width:100%}.project-agents-directory[data-v-fcdd93e0]{flex:none;grid-template-columns:minmax(0,1fr);overflow:visible}.project-agent-list[data-v-fcdd93e0]{border-bottom:1px solid #dfe4e0;border-right:0;max-height:340px}.project-agent-detail[data-v-fcdd93e0]{min-height:520px;padding:16px}.project-agent-client-row[data-v-fcdd93e0],.project-agent-rule-row[data-v-fcdd93e0],.project-agent-executor-row[data-v-fcdd93e0]{grid-template-columns:minmax(0,1fr);align-items:start}.project-agent-client-row small[data-v-fcdd93e0],.project-agent-executor-row small[data-v-fcdd93e0]{grid-column:1}.project-agent-execution-summary-meta[data-v-fcdd93e0]{grid-template-columns:minmax(0,1fr)}.project-agent-worker-event-row header[data-v-fcdd93e0]{gap:8px}}.project-agent-disclosure[data-v-fcdd93e0]{margin-top:18px}.project-agent-disclosure>summary[data-v-fcdd93e0]{cursor:pointer;color:#39483f;padding-block:10px;font-size:13px;font-weight:650}.project-agent-disclosure>summary[data-v-fcdd93e0]:focus-visible{outline-offset:3px;outline:2px solid #315c43}.project-agent-disclosure .project-agent-detail-section[data-v-fcdd93e0]:first-child{margin-top:12px}
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/SharedJefaReportPage-CbFtrDCY.js","assets/i18n-BtOOoyJd.js","assets/GrowthLoading-Bu_kH-I8.js","assets/_plugin-vue_export-helper-BDNMzG2s.js","assets/GrowthLoading-B_Hh0CRS.css","assets/useApi-CROJJdhE-raNlHRDl.js","assets/shared-report-BFUJqqQe.js","assets/client-CEHkJJ-5.js","assets/ProjectScopePicker-DVHfXX1f.js","assets/ProjectScopePicker-BvaGTMFx.css","assets/shared-report-ezeb8dW4.css","assets/SharedJefaReportPage-DXbj_JhO.css","assets/OverviewPage-BreX_kb4.js","assets/console--CZxc3PW.js","assets/vue-router-JFYBLXB1.js","assets/paths-CDREouhi.js","assets/PersonalProfilePage-CX1a6_E3.js","assets/useModalDialog-CroGk2Cs.js","assets/SearchableSelect-BZtyYmZN.js","assets/KnowledgeInspector-Ct5hl2--.js","assets/model-CGpllrds.js","assets/conversation-launcher-settings-Co1RlTFH.js","assets/KnowledgeInspector--1NujtXW.css","assets/KnowledgeEditDialog-BTwXXRCD.js","assets/identity-CsowvtIm.js","assets/KnowledgeEditDialog-D9NuRHvp.css","assets/personal-profile-graph-BNTG4PSY.js","assets/PersonalProfilePage-L8T5xMEC.css","assets/WritingTastePage-B7lSzs2z.js","assets/WritingTastePage-Bzg6AvnB.css","assets/PersonalProjectsPage-Br1S8ETM.js","assets/KnowledgeWorkspace-DmHIc0jb.js","assets/KnowledgeWorkspace-sb8OJ97I.css","assets/KnowledgeOrganizerPage-DMC8Hh43.js","assets/KnowledgeOrganizerPage-h2iKvQpO.css","assets/AgentsDirectoryPage-CKZfrcuD.js","assets/AgentHand-CMZk5GjY.js","assets/AgentHand-D9sQu2vc.css","assets/profile-model-BQO4zNs9.js","assets/AgentName-DRZHAIB2.js","assets/AgentName-Cydd0UI4.css","assets/agent-profile.css_vue_type_style_index_0_src_true_lang-C22UdfU0.js","assets/task-evidence-BUu7yYIn.js","assets/agent-profile-CdKOh5xw.css","assets/EmployeeRecruitDialog-BLTpjCcK.js","assets/catalog-DU4Kfd-N.js","assets/EmployeeRecruitDialog-B59X3rOi.css","assets/AgentProfilePage-BPQEfMhB.js","assets/ProjectAgentsPage-CA04h1Uf.js","assets/ProjectAgentsPage-CZWWV4Kw.css","assets/EmployeeWorkbenchPage-HUd-gne2.js","assets/EmployeeWorkbenchPage-CQwZnTA0.css","assets/employee-dialog-Bh5ccIbK.css","assets/PublicProjectsPage-CtctKml1.js","assets/KnowledgePage-uXW1Eovz.js","assets/ReviewPage-DUqaK-do.js","assets/ConnectionsPage-COb56qnk.js","assets/ConnectionsPage-CBHAdZXT.css","assets/SettingsPage-CB4ymLr8.js","assets/SettingsPage-Brl-SL33.css","assets/AboutPage-fBq5VFoQ.js","assets/fuli-logo-Bu9WBuQe.js","assets/AboutPage-vYIBifKw.css","assets/NotFoundPage-C0yOR9T9.js"])))=>i.map(i=>d[i]);
2
- import{$ as e,A as t,B as n,C as r,F as i,H as a,L as o,M as s,N as c,T as l,V as u,Z as d,_ as f,a as p,at as m,b as h,d as g,g as _,h as v,i as y,j as b,m as x,n as S,nt as C,p as w,r as T,rt as E,s as D,t as O,v as k,w as A,x as j,y as M,z as N}from"./i18n-BtOOoyJd.js";import{n as P,t as F}from"./console--CZxc3PW.js";import{t as I}from"./GrowthLoading-Bu_kH-I8.js";import{t as L}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{m as R}from"./useApi-CROJJdhE-raNlHRDl.js";import{i as z,n as B,r as V,t as H}from"./vue-router-JFYBLXB1.js";import{t as U}from"./fuli-logo-Bu9WBuQe.js";import{n as W}from"./client-CEHkJJ-5.js";import{a as G,s as K}from"./catalog-DU4Kfd-N.js";import{i as q,n as ee,r as te,t as J}from"./AgentHand-CMZk5GjY.js";import{n as ne}from"./profile-model-BQO4zNs9.js";import{t as re}from"./useModalDialog-CroGk2Cs.js";/* empty css */import{n as ie,t as ae}from"./paths-CDREouhi.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Y={name:`fuli-context`,version:`0.8.2`,description:`Local-first collaboration relationship graph for AI agents.`,type:`module`,files:[`README.zh-CN.md`,`npm-shrinkwrap.json`,`src/`,`dist/web/`,`docs/external-knowledge-architecture.md`,`docs/public-personal-architecture.md`,`docs/project-agent-memory.md`,`docs/agent-conversations-and-collaboration.md`,`docs/employee-agents.md`,`docs/agent-interface-architecture.md`,`examples/external-knowledge/markdown-folder.mjs`,`graph-provider/Dockerfile`,`graph-provider/pyproject.toml`,`graph-provider/fuli_graph/*.py`,`graph-provider/fuli_graph/**/*.py`,`skills/`,`compose.graphiti.yml`],bin:{fl:`src/cli.js`,fuli:`src/cli.js`},keywords:[`ai-agent`,`mcp`,`context`,`knowledge-graph`,`local-first`,`codex`,`claude-code`],scripts:{mcp:`node src/mcp-server.js`,dev:`run-p dev:server dev:web`,"dev:server":`node src/server.js`,"dev:web":`vite`,build:`run-s typecheck:web build:web`,"build:web":`vite build`,"typecheck:web":`vue-tsc --noEmit -p tsconfig.app.json`,"test:node":`node --test`,"test:web":`vitest run --config vitest.config.ts`,"test:package":`node scripts/package-smoke.js`,"test:knowledge:live":`node acceptance/knowledge-live.js`,"test:external-knowledge:live":`node scripts/validate-external-knowledge-live.js`,start:`node src/server.js`,"graph:setup":`node src/graphiti/setup.js`,"graph:up":`docker compose -f compose.graphiti.yml up -d --build`,"graph:down":`docker compose -f compose.graphiti.yml down`,"test:structure":`node --test test/source-structure.test.js`,pretest:`npm run build:web`,test:`run-s typecheck:web test:node test:web`,prepack:`npm run build`,prepublishOnly:`npm test`},engines:{node:`>=24.12`},repository:{type:`git`,url:`git+https://github.com/JevonsCode/fuli.git`},homepage:`https://github.com/JevonsCode/fuli#readme`,bugs:{url:`https://github.com/JevonsCode/fuli/issues`},publishConfig:{access:`public`},license:`Apache-2.0`,dependencies:{"@hono/node-server":`2.0.12`,"@modelcontextprotocol/sdk":`^1.29.0`,zod:`^4.4.3`},devDependencies:{"@types/d3":`^7.4.3`,"@types/node":`^24.13.3`,"@vitejs/plugin-vue":`^6.0.8`,"@vue/test-utils":`^2.4.11`,"brace-expansion":`5.0.12`,d3:`^7.9.0`,jsdom:`^29.1.1`,linkedom:`^0.18.12`,"npm-run-all2":`^9.0.2`,pinia:`^4.0.2`,typescript:`~6.0.0`,vite:`^8.1.5`,vitest:`^4.1.10`,vue:`^3.5.40`,"vue-i18n":`^11.4.8`,"vue-router":`^5.2.0`,"vue-tsc":`^3.3.8`},overrides:{"@modelcontextprotocol/sdk":{"@hono/node-server":`2.0.12`},"brace-expansion":`$brace-expansion`,"fast-uri":`3.1.8`,qs:`6.16.0`}}.version,oe=[`aria-label`],se={class:`brand-mark-wrap`},ce=[`src`],le={class:`brand-copy`},ue={class:`brand-title-row`},de={class:`brand-name`},fe=[`aria-label`,`aria-expanded`],pe={class:`brand-version`},me={key:1,class:`brand-version`},he={class:`brand-title-row`},ge={class:`brand-name`},_e={class:`brand-version`},ve=[`aria-label`],ye=[`href`],be=L(l({__name:`BrandEasterEgg`,setup(e){let n=d(null),r=d(null),i=d(0),a=d(!1),o=d(!1),l=d(!1),u=d(null),g=f(()=>u.value?.status===`ready`&&u.value.updateAvailable&&!!u.value.latestVersion),_=f(()=>u.value?.latestVersion??``),v=f(()=>u.value?.packageUrl??`https://www.npmjs.com/package/fuli-context`),y=new AbortController,S=!1;function w(){i.value+=1,a.value=!0}function T(){a.value=!1}function D(){g.value&&(l.value=!l.value)}function O(e){S=!1,o.value=!1,l.value&&!n.value?.contains(e.target)&&(l.value=!1)}function A(e){e.key===`Tab`&&(S=!0),e.key===`Escape`&&l.value&&(e.preventDefault(),l.value=!1,t(()=>r.value?.focus()))}function M(){o.value=S}function N(){o.value=!1}return s(()=>{window.addEventListener(`pointerdown`,O,!0),window.addEventListener(`keydown`,A,!0),W(`/api/system/version`,{signal:y.signal}).then(e=>{u.value=e}).catch(()=>{})}),b(()=>{y.abort(),window.removeEventListener(`pointerdown`,O,!0),window.removeEventListener(`keydown`,A,!0)}),(e,t)=>(c(),j(`div`,{ref_key:`root`,ref:n,class:E([`brand-block`,{"is-sparkling":a.value,"is-keyboard-focused":o.value}])},[k(`button`,{class:`brand-effect-button`,type:`button`,"aria-label":C(p)(`console.brandEffect.aria`),onClick:w,onFocus:M,onBlur:N},[k(`span`,se,[k(`img`,{class:`brand-mark`,src:C(U),alt:``,"aria-hidden":`true`},null,8,ce),a.value?(c(),j(`span`,{key:`orbit-${i.value}`,class:`brand-orbit`,"aria-hidden":`true`})):h(``,!0)])],40,oe),k(`span`,le,[k(`span`,ue,[k(`span`,de,m(C(p)(`common.brand`)),1),g.value?(c(),j(`button`,{key:0,ref_key:`versionButton`,ref:r,class:`brand-version-button`,type:`button`,"aria-label":C(p)(`console.update.aria`,{version:_.value}),"aria-expanded":l.value,"aria-controls":`brand-update-details`,onClick:D},[k(`span`,pe,`v`+m(C(Y)),1),t[0]||=k(`span`,{class:`brand-update-dot`,"aria-hidden":`true`},null,-1)],8,fe)):(c(),j(`span`,me,`v`+m(C(Y)),1))]),t[1]||=k(`span`,{class:`brand-subtitle`},`Context Graph`,-1),a.value?(c(),j(`span`,{key:`copy-reflection-${i.value}`,class:`brand-copy-reflection`,"aria-hidden":`true`,onAnimationend:x(T,[`self`])},[k(`span`,he,[k(`span`,ge,m(C(p)(`common.brand`)),1),k(`span`,_e,`v`+m(C(Y)),1)])],32)):h(``,!0)]),l.value?(c(),j(`div`,{key:0,id:`brand-update-details`,class:`brand-update-popover`,role:`dialog`,"aria-label":C(p)(`console.update.title`,{version:_.value})},[k(`strong`,null,m(C(p)(`console.update.title`,{version:_.value})),1),k(`p`,null,m(C(p)(`console.update.copy`)),1),t[2]||=k(`code`,null,`fuli update --yes`,-1),k(`a`,{href:v.value,target:`_blank`,rel:`noopener noreferrer`},m(C(p)(`console.update.npmLink`)),9,ye)],8,ve)):h(``,!0)],2))}}),[[`__scopeId`,`data-v-3ccab825`]]),xe=[`aria-label`],Se=[`lang`,`aria-label`,`aria-pressed`,`onClick`],Ce=l({__name:`LocaleSwitcher`,setup(e){let t=f(()=>S()),n={"zh-CN":`中`,"en-US":`EN`};function r(e){e!==t.value&&y(e)}return(e,a)=>(c(),j(`div`,{class:`locale-switcher`,role:`group`,"aria-label":C(p)(`common.language.label`)},[(c(!0),j(v,null,i(C(O),e=>(c(),j(`button`,{key:e,type:`button`,lang:e,"aria-label":C(p)(e===`zh-CN`?`common.language.chinese`:`common.language.english`),"aria-pressed":t.value===e,onClick:t=>r(e)},m(n[e]),9,Se))),128))],8,xe))}}),X=e(null);function we(e){let t=e.onError((t,n)=>{let r=e.resolve(n).href;!r.startsWith(`/`)||r.startsWith(`//`)||(X.value={href:r,resourceFailure:/dynamically imported module|module script|loading chunk|preload css|importing a module/i.test(String(t))})}),n=e.afterEach((e,t,n)=>{n||(X.value=null)});return()=>{t(),n()}}var Te={key:0,class:`navigation-recovery`,role:`alert`},Ee=[`href`],De=L(l({__name:`NavigationRecovery`,setup(e){return(e,t)=>C(X)?(c(),j(`div`,Te,[k(`div`,null,[k(`strong`,null,m(C(p)(`routes.loadFailure.title`)),1),k(`p`,null,m(C(p)(C(X).resourceFailure?`routes.loadFailure.resources`:`routes.loadFailure.message`)),1)]),k(`a`,{href:C(X).href,class:`quiet-button`},m(C(p)(`routes.loadFailure.reload`)),9,Ee),k(`button`,{type:`button`,class:`navigation-recovery-dismiss`,onClick:t[0]||=e=>X.value=null},m(C(p)(`routes.loadFailure.dismiss`)),1)])):h(``,!0)}}),[[`__scopeId`,`data-v-83dee1c5`]]),Oe={class:`nav-section-label`},ke={class:`employee-nav-mark`,"aria-hidden":`true`},Ae=[`src`],je={class:`nav-copy`},Me=L(l({__name:`EmployeeNavigation`,props:{personalSpaceId:{}},setup(e){let t=e;N(()=>t.personalSpaceId,e=>{K(e===`current`?``:e)},{immediate:!0});let n=f(()=>G.value.filter(e=>e.agentId&&e.agentStatus===`active`&&(e.runtime||e.workbench?.kind===`native`)));return(t,a)=>n.value.length?(c(),j(v,{key:0},[k(`p`,Oe,m(C(p)(`employees.directory`)),1),(c(!0),j(v,null,i(n.value,t=>(c(),j(`div`,{key:t.id,class:`employee-nav-row`},[A(C(H),{to:C(ne)(e.personalSpaceId,t.agentId),class:`space-nav-button employee-nav`,"active-class":`is-active`},{default:u(()=>[k(`span`,ke,[C(q)(t.id)?(c(),j(`img`,{key:0,src:C(q)(t.id),alt:``},null,8,Ae)):(c(),j(v,{key:1},[r(m(t.name.slice(0,1)),1)],64))]),k(`span`,je,[k(`strong`,null,m(t.name),1),k(`small`,null,m(t.role),1)])]),_:2},1032,[`to`]),A(C(H),{class:`employee-workbench-link`,to:`/employees/${encodeURIComponent(t.id)}`,"aria-label":`${t.name} · ${C(p)(`agentProfiles.workbench`)}`,title:C(p)(`agentProfiles.workbench`)},{default:u(()=>[...a[0]||=[k(`svg`,{viewBox:`0 0 20 20`,width:`16`,height:`16`,"aria-hidden":`true`},[k(`path`,{d:`M3 4h14v12H3zM3 8h14M8 8v8`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.4`})],-1)]]),_:1},8,[`to`,`aria-label`,`title`]),A(J,{"agent-id":t.agentId},null,8,[`agent-id`])]))),128))],64)):h(``,!0)}}),[[`__scopeId`,`data-v-8788995d`]]),Ne=[`title`],Pe={class:`employee-dialog-shell`},Fe={id:`attention-title`},Ie=[`disabled`,`aria-label`],Le={class:`employee-dialog-body`},Re={class:`attention-toolbar`},ze=[`disabled`],Be={key:0,role:`alert`,class:`employee-dialog-error`},Ve={key:1,role:`alert`,class:`employee-dialog-error`},He={key:4},Ue={class:`attention-meta`},We={class:`attention-action`},Ge=[`href`],Ke=[`onSubmit`],qe=[`for`],Je=[`id`,`onUpdate:modelValue`,`disabled`],Ye=[`disabled`],Xe={key:1},Ze=[`disabled`],Qe=L(l({__name:`AgentAttentionCenter`,props:{personalSpaceId:{},projects:{}},setup(e){let t=e,n=te(),r=d({}),o=d(!1),l=d({}),u=d(``),y=d(``),S=f(()=>new Map(t.projects.map(e=>[e.project_id,e.profile.name]))),{dialogRef:w,initialFocusRef:T,onCancel:E,onKeydown:D}=re(()=>n.open,()=>{u.value||(n.open=!1)});N(()=>t.personalSpaceId,e=>{r.value={},o.value=!1,l.value={},n.setSpace(e===`current`?``:e)},{immediate:!0}),N(()=>n.open,async e=>{if(!e)return;y.value=``;let t=n.spaceId;o.value=!0;try{let e=await W(`/api/project-agents?${new URLSearchParams({personalSpaceId:t})}`);t===n.spaceId&&(r.value=Object.fromEntries(e.map(e=>[e.agentId,e.profile.displayName||e.profile.name])))}catch{}finally{t===n.spaceId&&(o.value=!1)}});let O;function P(){document.visibilityState===`visible`&&!n.loading&&!n.open&&n.refresh()}s(()=>{O=setInterval(P,3e4),document.addEventListener(`visibilitychange`,P)}),b(()=>{clearInterval(O),document.removeEventListener(`visibilitychange`,P),n.setSpace(``)});async function F(e){if(!(u.value||!l.value[e.requestId]?.trim())){u.value=e.requestId,y.value=``;try{await n.respond(e,l.value[e.requestId].trim()),delete l.value[e.requestId]}catch(e){y.value=e instanceof Error?e.message:String(e),await n.refresh()}finally{u.value=``}}}return(e,t)=>(c(),j(v,null,[k(`button`,{class:`space-nav-button attention-nav`,type:`button`,onClick:t[0]||=e=>C(n).show()},[k(`span`,null,m(C(p)(`attention.title`)),1),A(J,{passive:``}),C(n).error?(c(),j(`span`,{key:0,title:C(p)(`attention.loadError`)},`!`,8,Ne)):h(``,!0)]),(c(),M(_,{to:`body`},[C(n).open?(c(),j(`dialog`,{key:0,ref_key:`dialogRef`,ref:w,class:`employee-dialog attention-dialog`,"aria-labelledby":`attention-title`,onCancel:t[6]||=(...e)=>C(E)&&C(E)(...e),onKeydown:t[7]||=(...e)=>C(D)&&C(D)(...e)},[k(`div`,Pe,[k(`header`,null,[k(`h2`,Fe,m(C(n).agentId&&r.value[C(n).agentId]||C(p)(`attention.title`)),1),k(`button`,{ref_key:`initialFocusRef`,ref:T,type:`button`,disabled:!!u.value,"aria-label":C(p)(`attention.close`),onClick:t[1]||=e=>C(n).open=!1},`×`,8,Ie)]),k(`div`,Le,[k(`div`,Re,[C(n).agentId?(c(),j(`button`,{key:0,type:`button`,onClick:t[2]||=e=>C(n).show()},m(C(p)(`attention.all`)),1)):h(``,!0),k(`button`,{type:`button`,disabled:C(n).loading||!!u.value,onClick:t[3]||=e=>C(n).refresh()},m(C(p)(`attention.refresh`)),9,ze)]),C(n).error?(c(),j(`p`,Be,m(C(p)(`attention.loadError`))+` · `+m(C(n).error),1)):h(``,!0),y.value?(c(),j(`p`,Ve,m(y.value),1)):h(``,!0),o.value?(c(),M(I,{key:2,variant:`inline`,label:C(p)(`attention.loadingAgents`)},null,8,[`label`])):h(``,!0),C(n).loading?(c(),M(I,{key:3,variant:`compact`,label:C(p)(`attention.loading`)},null,8,[`label`])):!C(n).items.length&&!C(n).error?(c(),j(`p`,He,m(C(p)(`attention.empty`)),1)):h(``,!0),(c(!0),j(v,null,i(C(n).items,e=>(c(),j(`article`,{key:e.requestId,class:`attention-item`},[k(`p`,Ue,m(r.value[e.agentId]||e.agentId)+` · `+m(S.value.get(e.personalProjectId)||e.personalProjectId)+` · `+m(C(p)(`attention.kinds.${e.kind}`)),1),k(`h3`,null,m(e.title),1),k(`p`,null,m(e.detail),1),k(`p`,We,m(e.requestedAction),1),e.taskId?(c(),j(`a`,{key:0,href:C(ee)(e),onClick:t[4]||=e=>C(n).open=!1},m(C(p)(`attention.task`)),9,Ge)):h(``,!0),k(`form`,{onSubmit:x(t=>F(e),[`prevent`])},[k(`label`,{for:`attention-${e.requestId}`},m(C(p)(`attention.response`)),9,qe),a(k(`textarea`,{id:`attention-${e.requestId}`,"onUpdate:modelValue":t=>l.value[e.requestId]=t,rows:`2`,maxlength:`4096`,required:``,disabled:!!u.value},null,8,Je),[[g,l.value[e.requestId]]]),k(`button`,{type:`submit`,class:`primary`,disabled:!!u.value||!l.value[e.requestId]?.trim()},[u.value===e.requestId?(c(),M(I,{key:0,variant:`inline`,label:C(p)(`attention.sending`)},null,8,[`label`])):(c(),j(`span`,Xe,m(C(p)(`attention.send`)),1))],8,Ye)],40,Ke)]))),128)),C(n).items.length<C(n).filteredTotal?(c(),j(`button`,{key:5,type:`button`,disabled:C(n).loading,onClick:t[5]||=e=>C(n).more()},m(C(p)(`attention.more`)),9,Ze)):h(``,!0)])])],544)):h(``,!0)]))],64))}}),[[`__scopeId`,`data-v-521df451`]]),$e=[`routes.`,`common.`,`employees.`,`agentProfiles.`];function et(e,t=``){let n=typeof e==`string`&&e?e:t;return $e.some(e=>n.startsWith(e))?p(n):n}function tt(e){if(typeof document>`u`)return;let t=et(e,`routes.overview.title`);document.title=`${t} · ${p(`common.brand`)}`}var nt={class:`app-shell`},rt=[`onKeydown`],it=[`aria-label`],at={class:`nav-section-label`},ot={class:`nav-label`},st={class:`nav-section-label nav-space-label`},ct={class:`nav-copy`},lt={class:`nav-copy`},ut={class:`nav-copy`},dt={class:`nav-copy`},ft={class:`nav-section-label nav-public-label`},pt={class:`nav-copy`},mt={class:`nav-section-label nav-tool-label`},ht={class:`nav-label`},gt={class:`nav-label`},_t={class:`nav-label`},vt={class:`nav-section-label nav-about-label`},yt={class:`nav-label`},bt={class:`nav-label`},xt={class:`sidebar-foot`},St=[`aria-label`],Ct={class:`runtime-status`},wt={class:`runtime-status`},Tt=[`aria-label`],Et=[`inert`],Dt=[`aria-expanded`],Ot={key:0,class:`workbench-host-label`},kt={key:1,class:`topbar-heading`},At={key:2,class:`topbar-actions`},jt={key:0,class:`mode-chip`},Mt=[`disabled`],Nt=[`disabled`],Pt={key:1},Ft=[`aria-label`],It=L(l({__name:`ConsoleLayout`,setup(e){let i=F(),a=R(),l=d(!1),g=d(null),_=d(null),y=f(()=>i.activePersonalSpace?.id??`current`),S=f(()=>ie(y.value,`graph`)),T=f(()=>ae(`personal`,y.value,`directory`)),D=f(()=>et(a.meta.title,`routes.overview.title`)),O=f(()=>a.meta.dedicatedWorkspace===!0),P=f(()=>i.publicRuntimeStatus===`ready`),L=f(()=>i.publicRuntimeStatus===`ready`?p(`console.services.publicReady`):i.publicRuntimeStatus===`error`?p(`console.services.publicError`):p(`console.services.publicOffline`)),z=f(()=>{if(i.publicRuntimeStatus===`ready`){let e=i.state?.capabilities;return e?.browsePublicProjects&&e?.subscribeProject&&!e?.publishProject&&!e?.submitKnowledge&&!e?.reviewProposals?p(`console.services.publicBrowseSubscribe`):p(`console.services.publicAvailable`)}return i.publicRuntimeStatus===`error`?p(`console.services.localUnaffected`):p(`console.services.localOnly`)}),V=f(()=>i.state?.capabilities?.browsePublicProjects!==!1),U=f(()=>{let e=i.state?.capabilities;return e?.submitKnowledge!==!1||e?.reviewProposals===!0});s(()=>{i.runtimeStatus===`idle`&&i.refresh(),window.addEventListener(`resize`,W)}),b(()=>window.removeEventListener(`resize`,W));function W(){window.innerWidth>920&&(l.value=!1)}function G(e){if(!l.value||e.key!==`Tab`)return;let t=[...e.currentTarget.querySelectorAll(`button:not(:disabled), a[href], input:not(:disabled), [tabindex="0"]`)].filter(e=>e.getClientRects().length>0),n=t[0],r=t.at(-1);e.shiftKey&&document.activeElement===n?(e.preventDefault(),r?.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus())}n(()=>{tt(a.meta.title)}),N(()=>a.fullPath,()=>{l.value=!1});async function K(){l.value=!0,await t(),_.value?.focus({preventScroll:!0})}async function q(){l.value=!1,await t(),g.value?.focus({preventScroll:!0})}return(e,t)=>(c(),j(`div`,nt,[k(`aside`,{id:`console-primary-sidebar`,class:E([`sidebar`,{"is-mobile-open":l.value}]),onKeydown:[w(x(q,[`stop`]),[`esc`]),G]},[k(`button`,{ref_key:`mobileNavCloseRef`,ref:_,class:`mobile-nav-close quiet-button`,type:`button`,onClick:q},m(C(p)(`console.navigation.closeMenu`)),513),A(be),k(`nav`,{class:`primary-nav`,"aria-label":C(p)(`console.navigation.aria`)},[k(`p`,at,m(C(p)(`console.navigation.workspace`)),1),A(C(H),{to:`/`,"exact-active-class":`is-active`},{default:u(()=>[t[2]||=k(`span`,{class:`nav-icon nav-icon-overview`,"aria-hidden":`true`},null,-1),k(`span`,ot,m(C(p)(`console.navigation.overview`)),1)]),_:1}),k(`p`,st,m(C(p)(`console.navigation.personalSpace`)),1),A(C(H),{class:`space-nav-button personal-profile-button`,to:`/preferences`,"active-class":`is-active`},{default:u(()=>[t[3]||=k(`span`,{class:`nav-icon nav-icon-personal-profile`,"aria-hidden":`true`},null,-1),k(`span`,ct,[k(`strong`,null,m(C(p)(`console.navigation.preferences`)),1),k(`small`,null,m(C(p)(`console.navigation.preferencesMeta`)),1)])]),_:1}),A(C(H),{class:`space-nav-button knowledge-organizer-button`,to:`/organize`,"active-class":`is-active`},{default:u(()=>[t[4]||=k(`span`,{class:`nav-icon nav-icon-knowledge-organizer`,"aria-hidden":`true`},null,-1),k(`span`,lt,[k(`strong`,null,m(C(p)(`console.navigation.organizer`)),1),k(`small`,null,m(C(p)(`console.navigation.organizerMeta`)),1)])]),_:1}),A(C(H),{class:`space-nav-button personal-space-button`,to:S.value,"active-class":`is-active`},{default:u(()=>[t[5]||=k(`span`,{class:`nav-icon nav-icon-personal-project`,"aria-hidden":`true`},null,-1),k(`span`,ut,[k(`strong`,null,m(C(p)(`console.navigation.personalProjects`)),1),k(`small`,null,m(C(p)(`console.navigation.personalProjectsMeta`)),1)])]),_:1},8,[`to`]),A(C(H),{class:`space-nav-button project-agents-button`,to:`/project-agents`,"active-class":`is-active`},{default:u(()=>[t[6]||=k(`span`,{class:`nav-icon nav-icon-project-agent`,"aria-hidden":`true`},null,-1),k(`span`,dt,[k(`strong`,null,m(C(p)(`console.navigation.projectAgents`)),1),k(`small`,null,m(C(p)(`console.navigation.projectAgentsMeta`)),1)])]),_:1}),V.value?(c(),j(v,{key:0},[k(`p`,ft,m(C(p)(`console.navigation.publicSpace`)),1),A(C(H),{class:`space-nav-button public-space-button`,to:`/public-projects`,"active-class":`is-active`},{default:u(()=>[t[7]||=k(`span`,{class:`nav-icon nav-icon-public-project`,"aria-hidden":`true`},null,-1),k(`span`,pt,[k(`strong`,null,m(C(p)(`console.navigation.publicProjects`)),1),k(`small`,null,m(C(p)(`console.navigation.publicProjectsMeta`)),1)])]),_:1})],64)):h(``,!0),A(Me,{"personal-space-id":y.value},null,8,[`personal-space-id`]),A(Qe,{"personal-space-id":y.value,projects:C(i).state?.personalProjects??[]},null,8,[`personal-space-id`,`projects`]),k(`p`,mt,m(C(p)(`console.navigation.governance`)),1),A(C(H),{to:T.value,"active-class":`is-active`},{default:u(()=>[t[8]||=k(`span`,{class:`nav-icon nav-icon-knowledge-graph`,"aria-hidden":`true`},null,-1),k(`span`,ht,m(C(p)(`console.navigation.knowledge`)),1)]),_:1},8,[`to`]),U.value?(c(),M(C(H),{key:1,to:`/review`,"active-class":`is-active`},{default:u(()=>[t[9]||=k(`span`,{class:`nav-icon nav-icon-review`,"aria-hidden":`true`},null,-1),k(`span`,gt,m(C(p)(`console.navigation.review`)),1)]),_:1})):h(``,!0),A(C(H),{to:`/connections`,"active-class":`is-active`},{default:u(()=>[t[10]||=k(`span`,{class:`nav-icon nav-icon-connections`,"aria-hidden":`true`},null,-1),k(`span`,_t,m(C(p)(`console.navigation.connections`)),1)]),_:1}),k(`p`,vt,m(C(p)(`console.navigation.aboutSection`)),1),A(C(H),{to:`/settings`,"active-class":`is-active`},{default:u(()=>[t[11]||=k(`span`,{class:`nav-icon nav-icon-settings`,"aria-hidden":`true`},null,-1),k(`span`,yt,m(C(p)(`console.navigation.settings`)),1)]),_:1}),A(C(H),{to:`/about`,"active-class":`is-active`},{default:u(()=>[t[12]||=k(`span`,{class:`nav-icon nav-icon-about`,"aria-hidden":`true`},null,-1),k(`span`,bt,m(C(p)(`console.navigation.about`)),1)]),_:1})],8,it),k(`div`,xt,[k(`div`,{class:`service-runtime-list`,"aria-label":C(p)(`console.services.aria`)},[k(`div`,Ct,[k(`span`,{class:E([`status-dot`,C(i).runtimeStatus])},null,2),k(`div`,null,[k(`strong`,null,m(C(i).runtimeStatus===`ready`?C(p)(`console.services.localReady`):C(i).runtimeStatus===`error`?C(p)(`console.services.localError`):C(p)(`console.services.localConnecting`)),1),t[13]||=k(`small`,null,`Graphiti / Neo4j`,-1)])]),k(`div`,wt,[k(`span`,{class:E([`status-dot`,C(i).publicRuntimeStatus])},null,2),k(`div`,null,[k(`strong`,null,m(L.value),1),k(`small`,null,m(z.value),1)])])],8,St)])],42,rt),l.value?(c(),j(`button`,{key:0,class:`mobile-nav-backdrop`,type:`button`,tabindex:`-1`,"aria-label":C(p)(`console.navigation.closeMenu`),onClick:q},null,8,Tt)):h(``,!0),k(`main`,{class:`workspace`,inert:l.value||void 0},[k(`header`,{class:E([`topbar`,{"topbar--workbench":O.value}])},[k(`button`,{ref_key:`mobileNavToggleRef`,ref:g,class:`mobile-nav-toggle quiet-button`,type:`button`,"aria-controls":`console-primary-sidebar`,"aria-expanded":l.value,onClick:K},[t[14]||=k(`span`,{class:`mobile-nav-icon`,"aria-hidden":`true`},null,-1),r(` `+m(C(p)(`console.navigation.openMenu`)),1)],8,Dt),O.value?(c(),j(`span`,Ot,`FULI`)):(c(),j(`div`,kt,[k(`h2`,null,m(D.value),1)])),O.value?h(``,!0):(c(),j(`div`,At,[P.value?(c(),j(`span`,jt,m(C(p)(`console.publicReady`)),1)):h(``,!0),C(a).name===`settings`?(c(),j(`button`,{key:1,class:`settings-save-button`,disabled:C(i).settingsSaving,form:`settings-form`,type:`submit`},m(C(p)(`settings.save`)),9,Mt)):h(``,!0),A(Ce),k(`button`,{class:`quiet-button`,type:`button`,disabled:C(i).runtimeStatus===`loading`,onClick:t[0]||=(...e)=>C(i).refresh&&C(i).refresh(...e)},[C(i).runtimeStatus===`loading`?(c(),M(I,{key:0,variant:`inline`,label:C(p)(`common.status.loadingConsole`)},null,8,[`label`])):(c(),j(`span`,Pt,m(C(p)(`common.actions.refresh`)),1))],8,Nt)]))],2),A(De),C(i).feedback?(c(),j(`div`,{key:0,class:E([`feedback feedback-message`,{success:C(i).feedback.tone===`success`}]),role:`status`,"aria-live":`polite`},[k(`span`,null,m(C(i).feedback.message),1),k(`button`,{class:`feedback-dismiss`,type:`button`,"aria-label":C(p)(`common.actions.close`),onClick:t[1]||=(...e)=>C(i).clearFeedback&&C(i).clearFeedback(...e)},`×`,8,Ft)],2)):h(``,!0),A(C(B),null,{default:u(({Component:e})=>[(c(),M(o(e)))]),_:1})],8,Et)]))}}),[[`__scopeId`,`data-v-9fe7a62f`]]),Lt=l({__name:`App`,setup(e){let t=R();return(e,n)=>C(t).meta.publicReport?(c(),M(C(B),{key:0})):(c(),M(It,{key:1}))}}),Rt=`modulepreload`,zt=function(e){return`/`+e},Bt={},Z=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=zt(t,n),t=s(t),t in Bt)return;Bt[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Rt,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};function Vt(e){let t=e.match(/^#\/knowledge\/([^/?#]+)\/([^/?#]+)\/(entity|relationship)\/([^/?#]+)(?:\?([^#]*))?$/);if(!t)return null;let[,n,r,i,a,o]=t;return`/knowledge/${n}/${r}/directory/${i}/${a}${o?`?${o}`:``}`}var Q=V({history:z(`/`),routes:[{path:`/reports/jefa`,name:`shared-jefa-report`,component:()=>Z(()=>import(`./SharedJefaReportPage-CbFtrDCY.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])),meta:{publicReport:!0,title:`employees.share.title`}},{path:`/`,name:`overview`,component:()=>Z(()=>import(`./OverviewPage-BreX_kb4.js`),__vite__mapDeps([12,1,13,7,14,5,15])),meta:{eyebrow:``,title:`routes.overview.title`}},{path:`/preferences`,name:`personal-profile`,component:()=>Z(()=>import(`./PersonalProfilePage-CX1a6_E3.js`),__vite__mapDeps([16,1,13,7,2,3,4,14,5,17,18,19,20,21,22,23,24,25,26,27])),meta:{eyebrow:`PERSONAL LENS`,title:`routes.preferences.title`,description:`routes.preferences.description`}},{path:`/preferences/writing`,name:`writing-taste`,component:()=>Z(()=>import(`./WritingTastePage-B7lSzs2z.js`),__vite__mapDeps([28,1,13,7,2,3,4,14,5,23,17,18,24,20,25,26,29])),meta:{eyebrow:``,title:`routes.writingTaste.title`}},{path:`/personal/:spaceId/projects/:projectId/:mode/:itemKind/:itemId`,name:`personal-project-item`,component:()=>Z(()=>import(`./PersonalProjectsPage-Br1S8ETM.js`),__vite__mapDeps([30,1,31,13,7,2,3,4,5,14,17,15,18,24,19,20,21,22,23,25,32])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/personal/:spaceId/projects/:mode/:itemKind/:itemId`,name:`personal-projects-item`,component:()=>Z(()=>import(`./PersonalProjectsPage-Br1S8ETM.js`),__vite__mapDeps([30,1,31,13,7,2,3,4,5,14,17,15,18,24,19,20,21,22,23,25,32])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:mode`,name:`personal-projects`,component:()=>Z(()=>import(`./PersonalProjectsPage-Br1S8ETM.js`),__vite__mapDeps([30,1,31,13,7,2,3,4,5,14,17,15,18,24,19,20,21,22,23,25,32])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:projectId/:mode`,name:`personal-project`,component:()=>Z(()=>import(`./PersonalProjectsPage-Br1S8ETM.js`),__vite__mapDeps([30,1,31,13,7,2,3,4,5,14,17,15,18,24,19,20,21,22,23,25,32])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/organize`,name:`knowledge-organizer`,component:()=>Z(()=>import(`./KnowledgeOrganizerPage-DMC8Hh43.js`),__vite__mapDeps([33,1,13,7,2,3,4,17,18,24,19,20,21,22,23,25,34])),meta:{eyebrow:`KNOWLEDGE CLASSIFICATION`,title:`routes.organizer.title`}},{path:`/project-agents`,name:`project-agents`,component:()=>Z(()=>import(`./AgentsDirectoryPage-CKZfrcuD.js`),__vite__mapDeps([35,1,13,7,2,3,4,5,14,36,37,38,39,40,41,42,43,8,9,44,45,17,15,18,46])),meta:{eyebrow:``,title:`routes.projectAgents.title`}},{path:`/agents/:spaceId/:agentId`,name:`agent-profile`,component:()=>Z(()=>import(`./AgentProfilePage-BPQEfMhB.js`),__vite__mapDeps([47,1,13,7,2,3,4,5,14,45,38,39,40,42,41,43])),meta:{eyebrow:``,title:`agentProfiles.profile`}},{path:`/project-agents/manage`,name:`agent-management`,component:()=>Z(()=>import(`./ProjectAgentsPage-CA04h1Uf.js`),__vite__mapDeps([48,1,13,7,2,3,4,5,14,45,36,37,17,42,8,9,18,44,15,46,49])),meta:{eyebrow:``,title:`agentProfiles.advanced`}},{path:`/employees/:templateId`,name:`employee-workbench`,component:()=>Z(()=>import(`./EmployeeWorkbenchPage-HUd-gne2.js`),__vite__mapDeps([50,1,13,7,2,3,4,5,14,45,36,37,38,17,39,40,8,9,44,15,18,46,6,10,51,52])),meta:{eyebrow:``,title:`routes.employeeWorkbench.title`,dedicatedWorkspace:!0}},{path:`/public-projects`,name:`public-projects`,component:()=>Z(()=>import(`./PublicProjectsPage-CtctKml1.js`),__vite__mapDeps([53,1,13,7,2,3,4,5,17,15,18,24])),meta:{eyebrow:`PUBLIC PROJECTS`,title:`routes.publicProjects.title`,description:`routes.publicProjects.description`}},{path:`/knowledge`,name:`knowledge-default`,component:()=>Z(()=>import(`./KnowledgePage-uXW1Eovz.js`),__vite__mapDeps([54,1,31,13,7,2,3,4,5,14,17,15,18,24,19,20,21,22,23,25,32])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode/:itemKind/:itemId`,name:`project-knowledge-item`,component:()=>Z(()=>import(`./KnowledgePage-uXW1Eovz.js`),__vite__mapDeps([54,1,31,13,7,2,3,4,5,14,17,15,18,24,19,20,21,22,23,25,32])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode/:itemKind/:itemId`,name:`knowledge-item`,component:()=>Z(()=>import(`./KnowledgePage-uXW1Eovz.js`),__vite__mapDeps([54,1,31,13,7,2,3,4,5,14,17,15,18,24,19,20,21,22,23,25,32])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode`,name:`project-knowledge`,component:()=>Z(()=>import(`./KnowledgePage-uXW1Eovz.js`),__vite__mapDeps([54,1,31,13,7,2,3,4,5,14,17,15,18,24,19,20,21,22,23,25,32])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode`,name:`knowledge`,component:()=>Z(()=>import(`./KnowledgePage-uXW1Eovz.js`),__vite__mapDeps([54,1,31,13,7,2,3,4,5,14,17,15,18,24,19,20,21,22,23,25,32])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/review`,name:`review`,component:()=>Z(()=>import(`./ReviewPage-DUqaK-do.js`),__vite__mapDeps([55,1,13,7,2,3,4,18,24,20])),meta:{eyebrow:`REVIEW WORKSPACE`,title:`routes.review.title`,description:`routes.review.description`}},{path:`/connections`,name:`connections`,component:()=>Z(()=>import(`./ConnectionsPage-COb56qnk.js`),__vite__mapDeps([56,1,13,7,2,3,4,18,24,57])),meta:{eyebrow:`SERVICE CONNECTIONS`,title:`routes.connections.title`,description:`routes.connections.description`}},{path:`/settings`,name:`settings`,component:()=>Z(()=>import(`./SettingsPage-CB4ymLr8.js`),__vite__mapDeps([58,1,13,7,2,3,4,18,21,59])),meta:{eyebrow:``,title:`routes.settings.title`}},{path:`/about`,name:`about`,component:()=>Z(()=>import(`./AboutPage-fBq5VFoQ.js`),__vite__mapDeps([60,1,3,61,62])),meta:{eyebrow:`FULI`,title:`routes.about.title`}},{path:`/:pathMatch(.*)*`,name:`not-found`,component:()=>Z(()=>import(`./NotFoundPage-C0yOR9T9.js`),__vite__mapDeps([63,1,14,5])),meta:{title:`common.errors.pageNotFound`}}],scrollBehavior:(e,t,n)=>n??(e.path!==t.path&&{top:0})});we(Q),Q.beforeEach(e=>e.path!==`/`||typeof window>`u`?!0:Vt(window.location.hash)??!0),Q.afterEach(e=>{tt(e.meta.title)});var $=D(Lt);$.use(P()),$.use(T),$.use(Q),await Q.isReady().catch(()=>void 0),$.mount(`#app`);