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.
- package/README.md +11 -7
- package/README.zh-CN.md +8 -7
- package/dist/web/assets/{AboutPage-fBq5VFoQ.js → AboutPage-HLhChD_Q.js} +1 -1
- package/dist/web/assets/{AgentHand-CMZk5GjY.js → AgentHand-BaLSbn08.js} +1 -1
- package/dist/web/assets/{AgentName-DRZHAIB2.js → AgentName-0PIU7MOX.js} +1 -1
- package/dist/web/assets/{AgentProfilePage-BPQEfMhB.js → AgentProfilePage-9cSsZHnk.js} +1 -1
- package/dist/web/assets/{AgentsDirectoryPage-CKZfrcuD.js → AgentsDirectoryPage-7G02Xm6C.js} +1 -1
- package/dist/web/assets/{ConnectionsPage-COb56qnk.js → ConnectionsPage-D0wPYbwd.js} +1 -1
- package/dist/web/assets/{EmployeeRecruitDialog-BLTpjCcK.js → EmployeeRecruitDialog-BrPH3e50.js} +1 -1
- package/dist/web/assets/{EmployeeWorkbenchPage-HUd-gne2.js → EmployeeWorkbenchPage-u-jw38PW.js} +1 -1
- package/dist/web/assets/{GrowthLoading-Bu_kH-I8.js → GrowthLoading-DFOy-mEl.js} +1 -1
- package/dist/web/assets/{KnowledgeEditDialog-BTwXXRCD.js → KnowledgeEditDialog-DBsjlkDr.js} +1 -1
- package/dist/web/assets/{KnowledgeInspector-Ct5hl2--.js → KnowledgeInspector-C79hbuOo.js} +1 -1
- package/dist/web/assets/{KnowledgeOrganizerPage-DMC8Hh43.js → KnowledgeOrganizerPage-Cz1BnAtz.js} +1 -1
- package/dist/web/assets/KnowledgePage-JyfFFUrg.js +1 -0
- package/dist/web/assets/{KnowledgeWorkspace-DmHIc0jb.js → KnowledgeWorkspace-B2vj12QG.js} +1 -1
- package/dist/web/assets/{NotFoundPage-C0yOR9T9.js → NotFoundPage-D340EQJP.js} +1 -1
- package/dist/web/assets/{OverviewPage-BreX_kb4.js → OverviewPage-BKiYudrC.js} +1 -1
- package/dist/web/assets/{PersonalProfilePage-CX1a6_E3.js → PersonalProfilePage-BIGTcem2.js} +1 -1
- package/dist/web/assets/PersonalProjectsPage-CzjDCIi0.js +1 -0
- package/dist/web/assets/{ProjectAgentsPage-CA04h1Uf.js → ProjectAgentsPage-C5F2WgwJ.js} +4 -4
- package/dist/web/assets/ProjectAgentsPage-C89ZEDgi.css +1 -0
- package/dist/web/assets/{ProjectScopePicker-DVHfXX1f.js → ProjectScopePicker-8hrgvmg-.js} +1 -1
- package/dist/web/assets/{PublicProjectsPage-CtctKml1.js → PublicProjectsPage-b5zx0dFS.js} +1 -1
- package/dist/web/assets/{ReviewPage-DUqaK-do.js → ReviewPage-BLdWYDmj.js} +1 -1
- package/dist/web/assets/{SearchableSelect-BZtyYmZN.js → SearchableSelect-vaoSDq1g.js} +1 -1
- package/dist/web/assets/{SettingsPage-CB4ymLr8.js → SettingsPage-Dxjrkq1g.js} +1 -1
- package/dist/web/assets/{SharedJefaReportPage-CbFtrDCY.js → SharedJefaReportPage-YG2xwQQy.js} +1 -1
- package/dist/web/assets/{WritingTastePage-B7lSzs2z.js → WritingTastePage-CPPduPb1.js} +1 -1
- 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
- package/dist/web/assets/{catalog-DU4Kfd-N.js → catalog-B9tlJAp9.js} +1 -1
- package/dist/web/assets/{client-CEHkJJ-5.js → client-InXscj8J.js} +1 -1
- package/dist/web/assets/{console--CZxc3PW.js → console-hUns2aD-.js} +1 -1
- package/dist/web/assets/{conversation-launcher-settings-Co1RlTFH.js → conversation-launcher-settings-DEtJ6pZg.js} +1 -1
- package/dist/web/assets/{i18n-BtOOoyJd.js → i18n-75woNt31.js} +2 -2
- package/dist/web/assets/{identity-CsowvtIm.js → identity-Wt2Xio_B.js} +1 -1
- package/dist/web/assets/index-pleRuLpw.js +2 -0
- package/dist/web/assets/{model-CGpllrds.js → model-C1GwBvd9.js} +1 -1
- package/dist/web/assets/{personal-profile-graph-BNTG4PSY.js → personal-profile-graph-BdV_3I1u.js} +1 -1
- package/dist/web/assets/{shared-report-BFUJqqQe.js → shared-report-tRQV1iJl.js} +1 -1
- package/dist/web/assets/{useApi-CROJJdhE-raNlHRDl.js → useApi-CROJJdhE-QfNm4ADP.js} +1 -1
- package/dist/web/assets/{useModalDialog-CroGk2Cs.js → useModalDialog-BopF-KHN.js} +1 -1
- package/dist/web/assets/{vue-router-JFYBLXB1.js → vue-router-COCNAJJn.js} +1 -1
- package/dist/web/index.html +10 -10
- package/docs/agent-conversations-and-collaboration.md +18 -1
- package/graph-provider/fuli_graph/store_project_agent_context.py +18 -1
- package/graph-provider/fuli_graph/store_project_agent_task_staffing.py +86 -11
- package/graph-provider/pyproject.toml +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
- package/skills/operating-fuli/SKILL.md +8 -0
- package/src/agents/identity-receipt.js +29 -0
- package/src/conversations/task-context-view.js +3 -1
- package/src/employees/service.js +9 -2
- package/src/employees/task-entry.js +5 -1
- package/src/graphiti/agent-conversations.js +15 -1
- package/src/graphiti/federated-application.js +6 -40
- package/src/graphiti/project-agent-mention.js +35 -0
- package/src/graphiti/project-agent-task-entry.js +22 -3
- package/src/graphiti/project-agent-workflows.js +3 -1
- package/src/graphiti/task-entry-preferences.js +50 -0
- package/dist/web/assets/KnowledgePage-uXW1Eovz.js +0 -1
- package/dist/web/assets/PersonalProjectsPage-Br1S8ETM.js +0 -1
- package/dist/web/assets/ProjectAgentsPage-CZWWV4Kw.css +0 -1
- package/dist/web/assets/index-7X3LGByg.js +0 -2
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fuli-context",
|
|
3
|
-
"version": "0.8.
|
|
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.
|
|
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.
|
|
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.
|
|
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) {
|
package/src/employees/service.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
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:
|
|
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 (
|
|
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`);
|