fuli-context 0.7.6 → 0.7.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +69 -13
  2. package/README.zh-CN.md +60 -14
  3. package/dist/web/assets/{AboutPage-sLV9WChi.js → AboutPage-9CVX91tr.js} +1 -1
  4. package/dist/web/assets/{ConnectionsPage-BWn4ywGJ.js → ConnectionsPage-CWbCVFdv.js} +1 -1
  5. package/dist/web/assets/EmployeeRecruitDialog-CQgNpGJ_.js +1 -0
  6. package/dist/web/assets/EmployeeRecruitDialog-CfFlyKSh.css +1 -0
  7. package/dist/web/assets/EmployeeWorkbenchPage-CWg4WJhr.css +1 -0
  8. package/dist/web/assets/EmployeeWorkbenchPage-CwU4qBgD.js +1 -0
  9. package/dist/web/assets/KnowledgeEditDialog-B6TGAcFH.js +1 -0
  10. package/dist/web/assets/{KnowledgeEditDialog-DWUV_NPp.css → KnowledgeEditDialog-iv-dgUeD.css} +1 -1
  11. package/dist/web/assets/{KnowledgeInspector-CRQWOaos.js → KnowledgeInspector-M2pLY0bR.js} +1 -1
  12. package/dist/web/assets/{KnowledgeOrganizerPage-Dfj3vIpU.js → KnowledgeOrganizerPage-DzeAlk9b.js} +1 -1
  13. package/dist/web/assets/KnowledgePage-BJu9w0fF.js +1 -0
  14. package/dist/web/assets/{KnowledgeWorkspace-ChEB5Bwk.js → KnowledgeWorkspace-CCt8rnBb.js} +1 -1
  15. package/dist/web/assets/{OverviewPage-Cd66M0RT.js → OverviewPage-CZswVqui.js} +1 -1
  16. package/dist/web/assets/{PersonalProfilePage-RCFHL0Wz.js → PersonalProfilePage-f1nSF6kx.js} +1 -1
  17. package/dist/web/assets/PersonalProjectsPage-D__eJf0t.js +1 -0
  18. package/dist/web/assets/ProjectAgentsPage-C3vW6wmk.css +1 -0
  19. package/dist/web/assets/ProjectAgentsPage-LrwagMGj.js +11 -0
  20. package/dist/web/assets/{PublicProjectsPage-mstPEjHe.js → PublicProjectsPage-BdC2Qk4n.js} +1 -1
  21. package/dist/web/assets/{ReviewPage-6Y1SmfZy.js → ReviewPage-Cbgl8_Si.js} +1 -1
  22. package/dist/web/assets/SearchableSelect-ERm-k4KI.js +1 -0
  23. package/dist/web/assets/{SettingsPage--LdTMUm7.js → SettingsPage-DWso4x29.js} +1 -1
  24. package/dist/web/assets/{WritingTastePage-CIpKswvs.js → WritingTastePage-CFpCjmIY.js} +1 -1
  25. package/dist/web/assets/catalog-WGLn7ERJ.js +1 -0
  26. package/dist/web/assets/{console-BT1P2Db4.js → console-DQgu0JIA.js} +1 -1
  27. package/dist/web/assets/conversation-launcher-settings-0KtlG_LV.js +1 -0
  28. package/dist/web/assets/{i18n-js6gfc7j.js → i18n-ByRiA3pJ.js} +3 -3
  29. package/dist/web/assets/{identity-CfDfanpa.js → identity-CxdPRMwH.js} +1 -1
  30. package/dist/web/assets/index-JAZe6lfX.js +2 -0
  31. package/dist/web/assets/index-wcXzzggp.css +1 -0
  32. package/dist/web/assets/{model-DJkLAJsg.js → model-Db4-KefQ.js} +1 -1
  33. package/dist/web/assets/{useApi-CROJJdhE-BdSti7Y2.js → useApi-CROJJdhE-CePMjc08.js} +1 -1
  34. package/dist/web/assets/{vue-router-Kk67EaCP.js → vue-router-CzX-hn3P.js} +1 -1
  35. package/dist/web/index.html +7 -6
  36. package/docs/employee-agents.md +99 -0
  37. package/docs/project-agent-memory.md +479 -0
  38. package/graph-provider/fuli_graph/knowledge_audit_models.py +171 -0
  39. package/graph-provider/fuli_graph/model_base.py +5 -0
  40. package/graph-provider/fuli_graph/model_validation.py +32 -0
  41. package/graph-provider/fuli_graph/models.py +26 -170
  42. package/graph-provider/fuli_graph/project_agent_context_models.py +29 -0
  43. package/graph-provider/fuli_graph/project_agent_executor_models.py +35 -7
  44. package/graph-provider/fuli_graph/project_agent_memory_models.py +79 -0
  45. package/graph-provider/fuli_graph/project_agent_memory_routes.py +46 -0
  46. package/graph-provider/fuli_graph/project_agent_models.py +9 -0
  47. package/graph-provider/fuli_graph/project_agent_recruitment_values.py +48 -0
  48. package/graph-provider/fuli_graph/project_agent_routes.py +21 -1
  49. package/graph-provider/fuli_graph/project_agent_task_models.py +217 -29
  50. package/graph-provider/fuli_graph/runtime.py +37 -1
  51. package/graph-provider/fuli_graph/store.py +6 -0
  52. package/graph-provider/fuli_graph/store_project_agent_context.py +65 -0
  53. package/graph-provider/fuli_graph/store_project_agent_executor_learning.py +175 -11
  54. package/graph-provider/fuli_graph/store_project_agent_executor_routing.py +33 -10
  55. package/graph-provider/fuli_graph/store_project_agent_executors.py +181 -14
  56. package/graph-provider/fuli_graph/store_project_agent_memory.py +174 -0
  57. package/graph-provider/fuli_graph/store_project_agent_task_activity.py +423 -0
  58. package/graph-provider/fuli_graph/store_project_agent_task_persistence.py +152 -0
  59. package/graph-provider/fuli_graph/store_project_agent_task_reads.py +187 -21
  60. package/graph-provider/fuli_graph/store_project_agent_task_recruitment.py +748 -162
  61. package/graph-provider/fuli_graph/store_project_agent_task_staffing.py +230 -18
  62. package/graph-provider/fuli_graph/store_project_agent_tasks.py +261 -468
  63. package/graph-provider/fuli_graph/store_project_agents.py +214 -46
  64. package/graph-provider/fuli_graph/store_task_contexts.py +217 -0
  65. package/graph-provider/fuli_graph/store_transactions.py +40 -0
  66. package/graph-provider/fuli_graph/task_context_models.py +50 -0
  67. package/graph-provider/fuli_graph/task_context_routes.py +31 -0
  68. package/graph-provider/fuli_graph/workflow_observation_models.py +1 -1
  69. package/graph-provider/pyproject.toml +1 -1
  70. package/npm-shrinkwrap.json +8 -8
  71. package/package.json +5 -2
  72. package/skills/capturing-session-knowledge/SKILL.md +18 -6
  73. package/src/adaptive-runtime/executor-pool.js +46 -5
  74. package/src/adaptive-runtime/graph-services.js +10 -3
  75. package/src/adaptive-runtime/lease-client.js +66 -14
  76. package/src/adaptive-runtime/runtime-broker.js +24 -9
  77. package/src/agent-tools/employee-definitions.js +43 -0
  78. package/src/agent-tools/graph-definitions.js +25 -6
  79. package/src/agent-tools/graph-handlers.js +11 -0
  80. package/src/agent-tools/project-agent-definitions.js +35 -4
  81. package/src/agent-tools/project-agent-memory-definitions.js +36 -0
  82. package/src/agent-tools.js +6 -2
  83. package/src/agents/codex/lifecycle-hook.js +107 -0
  84. package/src/agents/codex/lifecycle-hooks.js +231 -0
  85. package/src/agents/cursor/lifecycle-hook.js +133 -0
  86. package/src/agents/cursor/lifecycle-hooks.js +50 -0
  87. package/src/agents/lifecycle-message.js +19 -0
  88. package/src/app/agent-request-context.js +23 -0
  89. package/src/cli/command-registry.js +2 -0
  90. package/src/cli/employee-command.js +17 -0
  91. package/src/cli/remote-mcp-command.js +282 -0
  92. package/src/cli/setup-command.js +5 -0
  93. package/src/cli/update-command.js +6 -43
  94. package/src/cli.js +10 -0
  95. package/src/employees/catalog/jefa.json +21 -0
  96. package/src/employees/install-package.js +77 -0
  97. package/src/employees/management-policy.js +88 -0
  98. package/src/employees/manifest.js +53 -0
  99. package/src/employees/package-registry.js +107 -0
  100. package/src/employees/project-selection.js +50 -0
  101. package/src/employees/recruitment.js +199 -0
  102. package/src/employees/service.js +83 -0
  103. package/src/employees/task-entry.js +39 -0
  104. package/src/graphiti/agent-knowledge-workflows.js +135 -25
  105. package/src/graphiti/federated-application.js +78 -35
  106. package/src/graphiti/project-agent-control-plane.js +20 -3
  107. package/src/graphiti/project-agent-mapping.js +155 -5
  108. package/src/graphiti/project-agent-memory.js +115 -0
  109. package/src/graphiti/project-agent-task-entry.js +126 -0
  110. package/src/graphiti/project-agent-workflows.js +30 -14
  111. package/src/graphiti/provider-client.js +66 -4
  112. package/src/http/api-router.js +30 -5
  113. package/src/http/employee-api-router.js +64 -0
  114. package/src/http/error-mapping.js +4 -0
  115. package/src/http/graph-api-router.js +2 -0
  116. package/src/http/request-policy.js +6 -3
  117. package/src/http/static-handler.js +4 -3
  118. package/src/mcp/create-mcp-server.js +98 -37
  119. package/src/mcp/direct-call.js +38 -0
  120. package/src/mcp/instructions.js +8 -7
  121. package/src/mcp/provider-task-context-registry.js +74 -0
  122. package/src/mcp/remote-http-server.js +761 -0
  123. package/src/mcp/session-id.js +29 -3
  124. package/src/mcp/task-context-registry.js +88 -29
  125. package/src/mcp/tool-annotations.js +10 -2
  126. package/src/mcp/tool-result.js +8 -3
  127. package/src/mcp-server.js +20 -8
  128. package/src/native-runtime/runtime.js +58 -8
  129. package/src/semantic-version.js +42 -0
  130. package/src/server.js +76 -28
  131. package/src/setup/agent-installation-status.js +38 -6
  132. package/src/setup/agents.js +20 -8
  133. package/src/setup/claude-code-config.js +55 -13
  134. package/src/setup/codex-bootstrap.js +11 -10
  135. package/src/setup/codex-config.js +74 -7
  136. package/src/setup/config-backup.js +18 -2
  137. package/src/setup/cursor-config.js +22 -5
  138. package/src/setup/setup.js +30 -22
  139. package/src/storage/json-file.js +11 -3
  140. package/src/system/package-version-checker.js +72 -0
  141. package/src/system/system-service.js +3 -0
  142. package/dist/web/assets/KnowledgeEditDialog-CZ5ziPrD.js +0 -1
  143. package/dist/web/assets/KnowledgePage-BRYC9S5Y.js +0 -1
  144. package/dist/web/assets/PersonalProjectsPage-DEh8XWby.js +0 -1
  145. package/dist/web/assets/ProjectAgentsPage-Crh7PrXa.css +0 -1
  146. package/dist/web/assets/ProjectAgentsPage-DPnaH-TR.js +0 -11
  147. package/dist/web/assets/SearchableSelect-D3HM8YF8.js +0 -1
  148. package/dist/web/assets/conversation-launcher-settings-DrJEotdf.js +0 -1
  149. package/dist/web/assets/index-BnH5mcZx.css +0 -1
  150. package/dist/web/assets/index-GqJf1xqg.js +0 -2
@@ -1,6 +1,7 @@
1
1
  import { existsSync } from 'node:fs';
2
2
 
3
3
  import { readJsonFile, writeJsonFileAtomic } from '../storage/json-file.js';
4
+ import { withCursorLifecycleHooks, withoutCursorLifecycleHooks } from '../agents/cursor/lifecycle-hooks.js';
4
5
 
5
6
  export function connectCursor(agent, context, {
6
7
  readConfig = readJsonFile,
@@ -11,8 +12,10 @@ export function connectCursor(agent, context, {
11
12
 
12
13
  const currentServers = current.mcpServers ?? {};
13
14
  assertObject(currentServers, 'Cursor mcpServers');
15
+ const currentHooks = agent.hooksPath ? readConfig(agent.hooksPath, {}) : null;
16
+ const nextHooks = agent.hooksPath ? withCursorLifecycleHooks(currentHooks, context) : null;
14
17
 
15
- writeConfig(agent.configPath, {
18
+ const next = {
16
19
  ...current,
17
20
  mcpServers: {
18
21
  ...currentServers,
@@ -27,9 +30,16 @@ export function connectCursor(agent, context, {
27
30
  ]
28
31
  }
29
32
  }
30
- });
33
+ };
34
+ const registrationChanged = JSON.stringify(current) !== JSON.stringify(next);
35
+ if (registrationChanged) writeConfig(agent.configPath, next);
36
+ const hooksChanged = nextHooks && JSON.stringify(currentHooks) !== JSON.stringify(nextHooks);
37
+ if (hooksChanged) writeConfig(agent.hooksPath, nextHooks);
31
38
 
32
- return { id: agent.id, label: agent.label, status: 'connected' };
39
+ return { id: agent.id, label: agent.label, status: 'connected',
40
+ ...(agent.hooksPath
41
+ ? { newTaskRequired: registrationChanged || Boolean(hooksChanged) }
42
+ : {}) };
33
43
  }
34
44
 
35
45
  export function disconnectCursor(agent, {
@@ -37,15 +47,22 @@ export function disconnectCursor(agent, {
37
47
  readConfig = readJsonFile,
38
48
  writeConfig = writeJsonFileAtomic
39
49
  } = {}) {
50
+ let hooksChanged = false;
51
+ if (agent.hooksPath && fileExists(agent.hooksPath)) {
52
+ const currentHooks = readConfig(agent.hooksPath, {});
53
+ const nextHooks = withoutCursorLifecycleHooks(currentHooks);
54
+ hooksChanged = JSON.stringify(currentHooks) !== JSON.stringify(nextHooks);
55
+ if (hooksChanged) writeConfig(agent.hooksPath, nextHooks);
56
+ }
40
57
  if (!fileExists(agent.configPath)) {
41
- return { id: agent.id, label: agent.label, status: 'not_connected' };
58
+ return { id: agent.id, label: agent.label, status: hooksChanged ? 'disconnected' : 'not_connected' };
42
59
  }
43
60
  const current = readConfig(agent.configPath, {});
44
61
  assertObject(current, 'Cursor MCP config');
45
62
  const currentServers = current.mcpServers ?? {};
46
63
  assertObject(currentServers, 'Cursor mcpServers');
47
64
  if (!Object.hasOwn(currentServers, 'fuli')) {
48
- return { id: agent.id, label: agent.label, status: 'not_connected' };
65
+ return { id: agent.id, label: agent.label, status: hooksChanged ? 'disconnected' : 'not_connected' };
49
66
  }
50
67
 
51
68
  const { fuli: _removed, ...remainingServers } = currentServers;
@@ -109,36 +109,44 @@ export async function applyLocalSetup(plan, options, dependencies = {}) {
109
109
  for (const agent of plan.agents.filter(
110
110
  ({ available, selected }) => available && selected !== false
111
111
  )) {
112
+ let backupPath;
113
+ let connected;
114
+ const skills = [];
112
115
  try {
113
- const backupPath = backupConfig(agent, { backupDir: plan.paths.backupDir });
114
- const connected = connect(agent, context);
115
- const skills = [
116
- installSkill(agent, {
117
- sourcePath: plan.paths.sessionSkillPath,
116
+ backupPath = backupConfig(agent, { backupDir: plan.paths.backupDir });
117
+ connected = connect(agent, context);
118
+ for (const [target, sourcePath] of [
119
+ [agent, plan.paths.sessionSkillPath],
120
+ [{ ...agent, skillPath: agent.projectSkillPath }, plan.paths.projectSkillPath],
121
+ [{ ...agent, skillPath: agent.reviewSkillPath }, plan.paths.reviewSkillPath]
122
+ ]) {
123
+ skills.push(await installSkill(target, {
124
+ sourcePath,
118
125
  backupDir: plan.paths.backupDir
119
- }),
120
- installSkill({ ...agent, skillPath: agent.projectSkillPath }, {
121
- sourcePath: plan.paths.projectSkillPath,
122
- backupDir: plan.paths.backupDir
123
- }),
124
- installSkill({ ...agent, skillPath: agent.reviewSkillPath }, {
125
- sourcePath: plan.paths.reviewSkillPath,
126
- backupDir: plan.paths.backupDir
127
- })
128
- ];
126
+ }));
127
+ }
129
128
  agents.push({ ...connected, backupPath, skills });
130
129
  } catch (error) {
131
- agents.push({
132
- id: agent.id,
133
- label: agent.label,
134
- status: 'failed',
135
- message: error instanceof Error ? error.message : 'Agent connection failed'
136
- });
130
+ const message = error instanceof Error ? error.message : 'Agent connection failed';
131
+ agents.push(connected
132
+ ? {
133
+ ...connected,
134
+ status: 'partial',
135
+ backupPath,
136
+ skills,
137
+ message
138
+ }
139
+ : {
140
+ id: agent.id,
141
+ label: agent.label,
142
+ status: 'failed',
143
+ message
144
+ });
137
145
  }
138
146
  }
139
147
 
140
148
  return {
141
- status: agents.some(({ status }) => status === 'failed') ? 'partial' : 'ready',
149
+ status: agents.some(({ status }) => status !== 'connected') ? 'partial' : 'ready',
142
150
  runtime,
143
151
  agents
144
152
  };
@@ -5,11 +5,12 @@ import {
5
5
  readFileSync,
6
6
  renameSync,
7
7
  rmSync,
8
+ statSync,
8
9
  writeFileSync
9
10
  } from 'node:fs';
10
11
  import { basename, dirname, join } from 'node:path';
11
12
 
12
- const DEFAULT_IO = Object.freeze({ mkdirSync, renameSync, rmSync, writeFileSync });
13
+ const DEFAULT_IO = Object.freeze({ mkdirSync, renameSync, rmSync, statSync, writeFileSync });
13
14
 
14
15
  export function readJsonFile(filePath, fallback) {
15
16
  if (!existsSync(filePath)) return fallback;
@@ -22,12 +23,19 @@ export function writeJsonFileAtomic(filePath, value, io = {}) {
22
23
  const fileIo = { ...DEFAULT_IO, ...io };
23
24
  const directory = dirname(filePath);
24
25
  const tempPath = join(directory, `.${basename(filePath)}.${randomUUID()}.tmp`);
26
+ let mode = 0o600;
27
+ try {
28
+ mode = fileIo.statSync(filePath).mode & 0o777;
29
+ } catch (error) {
30
+ if (error?.code !== 'ENOENT') throw error;
31
+ }
25
32
 
26
- fileIo.mkdirSync(directory, { recursive: true });
33
+ fileIo.mkdirSync(directory, { recursive: true, mode: 0o700 });
27
34
  try {
28
35
  fileIo.writeFileSync(tempPath, `${JSON.stringify(value, null, 2)}\n`, {
29
36
  encoding: 'utf8',
30
- flag: 'wx'
37
+ flag: 'wx',
38
+ mode
31
39
  });
32
40
  fileIo.renameSync(tempPath, filePath);
33
41
  } catch (error) {
@@ -0,0 +1,72 @@
1
+ import { FULI_PACKAGE_NAME, FULI_VERSION } from '../package-metadata.js';
2
+ import { compareSemanticVersions, parseSemanticVersion } from '../semantic-version.js';
3
+
4
+ const DEFAULT_TIMEOUT_MS = 3_000;
5
+ const DEFAULT_SUCCESS_CACHE_MS = 6 * 60 * 60 * 1_000;
6
+ const DEFAULT_FAILURE_CACHE_MS = 5 * 60 * 1_000;
7
+
8
+ export function createPackageVersionChecker({
9
+ fetchImpl = globalThis.fetch,
10
+ now = () => Date.now(),
11
+ packageName = FULI_PACKAGE_NAME,
12
+ currentVersion = FULI_VERSION,
13
+ timeoutMs = DEFAULT_TIMEOUT_MS,
14
+ successCacheMs = DEFAULT_SUCCESS_CACHE_MS,
15
+ failureCacheMs = DEFAULT_FAILURE_CACHE_MS
16
+ } = {}) {
17
+ const registryUrl = `https://registry.npmjs.org/${encodeURIComponent(packageName)}/latest`;
18
+ const packageUrl = `https://www.npmjs.com/package/${encodeURIComponent(packageName)}`;
19
+ let cached = null;
20
+ let expiresAt = 0;
21
+ let inFlight = null;
22
+
23
+ async function resolveStatus() {
24
+ const checkedAt = new Date(now()).toISOString();
25
+ try {
26
+ parseSemanticVersion(currentVersion);
27
+ const response = await fetchImpl(registryUrl, {
28
+ headers: { accept: 'application/json' },
29
+ signal: AbortSignal.timeout(timeoutMs)
30
+ });
31
+ if (!response.ok) throw new Error(`npm registry returned ${response.status}`);
32
+ const body = await response.json();
33
+ const latestVersion = String(body?.version ?? '').trim();
34
+ parseSemanticVersion(latestVersion);
35
+ return {
36
+ status: 'ready',
37
+ currentVersion,
38
+ latestVersion,
39
+ updateAvailable: compareSemanticVersions(latestVersion, currentVersion) > 0,
40
+ packageUrl,
41
+ checkedAt
42
+ };
43
+ } catch {
44
+ return {
45
+ status: 'unavailable',
46
+ currentVersion,
47
+ latestVersion: null,
48
+ updateAvailable: false,
49
+ packageUrl,
50
+ checkedAt
51
+ };
52
+ }
53
+ }
54
+
55
+ async function check() {
56
+ const timestamp = now();
57
+ if (cached && timestamp < expiresAt) return cached;
58
+ if (inFlight) return inFlight;
59
+ inFlight = resolveStatus()
60
+ .then((result) => {
61
+ cached = result;
62
+ expiresAt = now() + (result.status === 'ready' ? successCacheMs : failureCacheMs);
63
+ return result;
64
+ })
65
+ .finally(() => {
66
+ inFlight = null;
67
+ });
68
+ return inFlight;
69
+ }
70
+
71
+ return { check };
72
+ }
@@ -9,6 +9,7 @@ import {
9
9
  import { createResourceMonitor } from './resource-monitor.js';
10
10
  import { createAdaptiveRuntimeBroker } from '../adaptive-runtime/runtime-broker.js';
11
11
  import { readAdaptiveRuntimeSettings } from '../adaptive-runtime/settings.js';
12
+ import { createPackageVersionChecker } from './package-version-checker.js';
12
13
 
13
14
  export function createSystemService({
14
15
  paths,
@@ -19,6 +20,7 @@ export function createSystemService({
19
20
  readSettings = readRuntimeSettings,
20
21
  writeSettings = writeRuntimeSettings,
21
22
  executorAdapters = new Map(),
23
+ versionChecker = createPackageVersionChecker(),
22
24
  runtimeBroker = createAdaptiveRuntimeBroker({
23
25
  paths,
24
26
  settings: readAdaptiveRuntimeSettings(paths.adaptiveRuntimeSettingsPath),
@@ -59,6 +61,7 @@ export function createSystemService({
59
61
  getSettings,
60
62
  updateSettings,
61
63
  resources: () => resourceMonitor.sample(),
64
+ versionStatus: () => versionChecker.check(),
62
65
  runtimeStatus: () => runtimeBroker.status(),
63
66
  acquireRuntimeLease: (input) => runtimeBroker.acquire(input),
64
67
  refreshRuntimeLease: (leaseId) => runtimeBroker.refresh(leaseId),
@@ -1 +0,0 @@
1
- import{B as e,C as t,J as n,L as r,S as i,Y as a,a as o,b as s,et as c,g as l,h as u,j as d,k as f,m as p,p as m,q as h,rt as g,s as _,u as v,v as y,x as b,y as x}from"./i18n-js6gfc7j.js";import{a as S,i as C,t as w}from"./console-BT1P2Db4.js";import{t as T}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as E}from"./SearchableSelect-D3HM8YF8.js";import{r as D,t as O}from"./identity-CfDfanpa.js";import{E as k,T as A}from"./model-DJkLAJsg.js";var j={class:`view-loading growth-loading`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`},M={class:`growth-loading__content`},N={class:`growth-loading__label`},P=T(t({__name:`GrowthLoading`,props:{label:{}},setup(e){return(t,n)=>(d(),x(`div`,j,[l(`div`,M,[n[0]||=s(`<div class="growth-loading__chart" aria-hidden="true" data-v-f65da374><span class="growth-loading__bar growth-loading__bar--1" data-v-f65da374><i data-v-f65da374></i></span><span class="growth-loading__bar growth-loading__bar--2" data-v-f65da374><i data-v-f65da374></i></span><span class="growth-loading__bar growth-loading__bar--3" data-v-f65da374><i data-v-f65da374></i></span><span class="growth-loading__bar growth-loading__bar--4" data-v-f65da374><i data-v-f65da374></i></span><span class="growth-loading__bar growth-loading__bar--5" data-v-f65da374><i data-v-f65da374></i></span><span class="growth-loading__baseline" data-v-f65da374></span></div>`,1),l(`span`,N,g(e.label),1)])]))}}),[[`__scopeId`,`data-v-f65da374`]]),F=`testLoading`;function I(e=typeof window>`u`?``:window.location.search){return new URLSearchParams(e).get(F)===`1`}function L(e,t=500){let i=a(!1),o=0,s=null;function c(){s!==null&&(clearTimeout(s),s=null)}return r(e,e=>{if(c(),e){i.value||(o=Date.now()),i.value=!0;return}if(!i.value)return;let n=Math.max(0,t-(Date.now()-o));if(n===0){i.value=!1;return}s=setTimeout(()=>{s=null,i.value=!1},n)},{immediate:!0,flush:`sync`}),f(c),n(i)}var R={key:0,open:``,class:`knowledge-confirm-dialog vue-dialog`},z={class:`project-dialog-header`},B=[`disabled`],V={class:`knowledge-confirm-summary`},H={class:`knowledge-confirm-fields`},U={class:`knowledge-confirm-acknowledgement`},W={key:0,class:`publish-dialog-error`,role:`alert`},ee={class:`project-profile-dialog-actions`},te=[`disabled`],ne=[`disabled`],G=T(t({__name:`KnowledgeConfirmDialog`,props:{item:{},personalSpaceId:{},personalProjectId:{}},emits:[`close`,`saved`],setup(t,{emit:n}){let i=t,s=n,f=w(),p=a(``),h=a(``),b=a(``),S=a(!1),T=a(!1),E=a(``),D=a({kind:`import`,label:o(`knowledge.domain.actors.historicalRecord`)}),O=u(()=>i.item?.profileAspect?o(`knowledge.dialogs.confirm.preferenceSubject`):o(`knowledge.dialogs.confirm.knowledgeSubject`));r(()=>i.item,e=>{if(!e)return;let t=e.evidence.at(0),n=e.confirmationBasis;p.value=n?.existence_reason||t?.source_description||t?.summary||o(`knowledge.dialogs.confirm.sourceSupport`),h.value=n?.quadrant_reason||e.reasoningSummary||o(`knowledge.dialogs.confirm.quadrantReason`,{quadrant:k(e.originQuadrant),description:A(e.originQuadrant)}),D.value=n?.proposed_by??M(t),b.value=o(`knowledge.dialogs.confirm.confirmationReason`),S.value=!1,E.value=``},{immediate:!0});async function j(){let e=i.item;if(!(!e||T.value)){if(!e.classificationExplicit)return N(o(`knowledge.dialogs.confirm.errors.quadrantRequired`));if(!p.value.trim())return N(o(`knowledge.dialogs.confirm.errors.existenceRequired`));if(!h.value.trim())return N(o(`knowledge.dialogs.confirm.errors.quadrantReasonRequired`));if(!b.value.trim())return N(o(`knowledge.dialogs.confirm.errors.confirmationReasonRequired`));if(!S.value)return N(o(`knowledge.dialogs.confirm.errors.acknowledgmentRequired`));T.value=!0,E.value=``;try{await C(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}`,{personalSpaceId:i.personalSpaceId,personalProjectId:i.personalProjectId,action:`confirm`,reason:b.value.trim(),confirmationStatus:`confirmed`,confirmationBasis:{existenceReason:p.value.trim(),quadrantReason:h.value.trim(),proposedBy:D.value,confirmedBy:{kind:`user`,label:o(`knowledge.domain.actors.currentUser`)},confirmedAt:new Date().toISOString()}}),f.notify(o(`knowledge.dialogs.confirm.confirmed`,{subject:O.value})),s(`saved`),s(`close`)}catch(e){E.value=e instanceof Error?e.message:o(`knowledge.dialogs.confirm.errors.failed`),f.reportError(e)}finally{T.value=!1}}}function M(e){let t={codex:`Codex`,claude_code:`Claude Code`,cursor:`Cursor`,kiro:`Kiro`,other:o(`knowledge.domain.actors.otherAgent`)}[e?.source_application??``];return t?{kind:`agent`,label:t}:{kind:`import`,label:o(`knowledge.domain.actors.historicalRecord`)}}function N(e){E.value=e}return(n,r)=>t.item?(d(),x(`dialog`,R,[l(`form`,{class:`knowledge-confirm-dialog-shell`,onSubmit:m(j,[`prevent`])},[l(`header`,z,[l(`div`,null,[r[6]||=l(`p`,{class:`eyebrow`},`KNOWLEDGE CONFIRMATION`,-1),l(`h3`,null,g(c(o)(`knowledge.dialogs.confirm.title`,{subject:O.value})),1),l(`p`,null,g(c(o)(`knowledge.dialogs.confirm.intro`)),1)]),l(`button`,{class:`secondary-action`,type:`button`,disabled:T.value,onClick:r[0]||=e=>s(`close`)},g(c(o)(`common.actions.close`)),9,B)]),l(`section`,V,[l(`span`,null,g(t.item.profileAspect?c(o)(`knowledge.dialogs.confirm.preference`):c(o)(`knowledge.dialogs.confirm.knowledge`)),1),l(`strong`,null,g(t.item.title),1),l(`p`,null,g(t.item.body),1),l(`small`,null,g(c(o)(`knowledge.dialogs.confirm.quadrant`,{quadrant:c(k)(t.item.originQuadrant)})),1)]),l(`div`,H,[l(`label`,null,[l(`span`,null,g(c(o)(`knowledge.dialogs.confirm.whyExists`)),1),e(l(`textarea`,{"onUpdate:modelValue":r[1]||=e=>p.value=e,name:`confirmation-existence-reason`,maxlength:`4096`,rows:`3`,required:``},null,512),[[v,p.value]])]),l(`label`,null,[l(`span`,null,g(c(o)(`knowledge.dialogs.confirm.whyQuadrant`)),1),e(l(`textarea`,{"onUpdate:modelValue":r[2]||=e=>h.value=e,name:`confirmation-quadrant-reason`,maxlength:`4096`,rows:`3`,required:``},null,512),[[v,h.value]])]),l(`label`,null,[l(`span`,null,g(c(o)(`knowledge.dialogs.confirm.confirmationCopy`)),1),e(l(`textarea`,{"onUpdate:modelValue":r[3]||=e=>b.value=e,name:`confirmation-reason`,maxlength:`2000`,rows:`2`,required:``},null,512),[[v,b.value]])])]),l(`label`,U,[e(l(`input`,{"onUpdate:modelValue":r[4]||=e=>S.value=e,name:`confirmation-acknowledged`,type:`checkbox`},null,512),[[_,S.value]]),l(`span`,null,g(c(o)(`knowledge.dialogs.confirm.acknowledgment`)),1)]),E.value?(d(),x(`p`,W,g(E.value),1)):y(``,!0),l(`footer`,ee,[l(`button`,{class:`secondary-action`,type:`button`,disabled:T.value,onClick:r[5]||=e=>s(`close`)},g(c(o)(`common.actions.cancel`)),9,te),l(`button`,{class:`primary-action`,type:`submit`,disabled:T.value||!S.value},g(T.value?c(o)(`knowledge.dialogs.confirm.confirming`):c(o)(`knowledge.dialogs.confirm.confirmSubject`,{subject:O.value})),9,ne)])],32)])):y(``,!0)}}),[[`__scopeId`,`data-v-26170b1a`]]),re={key:0,open:``,class:`project-dialog knowledge-edit-dialog vue-dialog`},ie={class:`project-dialog-shell`},ae={class:`project-dialog-header`},oe={class:`knowledge-edit-columns`},se={key:0},ce={key:1},le={key:2},ue={class:`knowledge-taxonomy-fields`},de={class:`knowledge-classification-warning`},fe={key:3,class:`knowledge-classification-warning`},pe={class:`knowledge-confirmation-fields`},me={class:`knowledge-taxonomy-fields`},he=[`placeholder`],ge=[`placeholder`],_e={key:4,class:`knowledge-replacement-fields`},ve={key:0},ye={class:`knowledge-replacement-fields`},be={key:5,class:`publish-dialog-error`,role:`alert`},xe={class:`knowledge-editor-actions`},Se=[`disabled`],Ce=[`disabled`],we=[`disabled`],Te=[`disabled`],Ee={key:0},De=[`disabled`],Oe={key:1},ke={key:0},Ae=[`disabled`],K=t({__name:`KnowledgeEditDialog`,props:{item:{},personalSpaceId:{},personalProjectId:{},projects:{},replacementItems:{default:()=>[]}},emits:[`close`,`saved`],setup(t,{emit:n}){let s=t,f=n,_=w(),T=a(!1),A=a(``),j=a(``),M=a(``),N=a(`global`),P=a(``),F=a(``),I=a(``),L=a(``),R=h({name:``,summary:``,fact:``,currentQuadrant:``,confirmationStatus:`pending`,existenceReason:``,quadrantReason:``,proposedByKind:`agent`,proposedByLabel:``,confirmedByKind:`user`,confirmedByLabel:``,profileAspect:`none`,inheritanceMode:`local_only`,reason:``}),z=u(()=>s.item?.itemKind===`relationship`),B=u(()=>!!s.item?.invalidAt),V=u(()=>!!s.item?.raw.profile_aspect),H=u(()=>s.projects.map(e=>({value:e.project_id,label:e.profile.name,meta:`#${O(e.project_id,26)}`,search:D(e.project_id)}))),U=u(()=>[`known_known`,`known_unknown`,`unknown_known`,`unknown_unknown`].map(e=>({value:e,label:o(`knowledge.dialogs.edit.quadrants.${e}`)}))),W=u(()=>[{value:`pending`,label:o(`knowledge.dialogs.edit.confirmationStates.pending`)},{value:`confirmed`,label:o(`knowledge.dialogs.edit.confirmationStates.confirmed`)}]),ee=u(()=>[{value:`local_only`,label:o(`knowledge.dialogs.edit.inheritance.local`)},{value:`descendants`,label:o(`knowledge.dialogs.edit.inheritance.descendants`)},{value:`selected_projects`,label:o(`knowledge.dialogs.edit.inheritance.selected`)}]),te=u(()=>[`user`,`agent`,`authoritative_source`,`import`].map(e=>({value:e,label:o(`knowledge.domain.actors.${e}`)}))),ne=u(()=>[`user`,`authoritative_source`].map(e=>({value:e,label:o(`knowledge.domain.actors.${e}`)}))),G=u(()=>[{value:`none`,label:o(`knowledge.dialogs.edit.profiles.none`)},...[`taste`,`personality`,`judgment_preference`].map(e=>({value:e,label:o(`knowledge.domain.profiles.${e}`)}))]),K=u(()=>[{value:`global`,label:o(`knowledge.dialogs.edit.scopes.global`)},{value:`project`,label:o(`knowledge.dialogs.edit.scopes.project`),disabled:s.projects.length===0}]),je=u(()=>[{value:``,label:o(`knowledge.dialogs.edit.replacementNone`)},...s.replacementItems.filter(e=>!e.invalidAt&&(e.itemKind!==s.item?.itemKind||e.id!==s.item?.id)).map(e=>({value:Z(e.itemKind,e.id),label:e.title,meta:e.type,search:`${e.body} ${e.id}`}))]),q=u(()=>{if(!L.value)return null;try{let[e,t]=JSON.parse(L.value);return e!==`entity`&&e!==`relationship`||typeof t!=`string`?null:{itemKind:e,id:t}}catch{return null}}),J=u(()=>s.item?.assignments.at(0)?.project_id??s.item?.evidence.find(({personal_project_id:e})=>e)?.personal_project_id??s.personalProjectId??null);r(()=>s.item,e=>{if(!e)return;let t=e.raw;R.name=e.itemKind===`entity`?t.name:``,R.summary=e.itemKind===`entity`?t.summary??``:``,R.fact=e.itemKind===`relationship`?t.fact??``:``;let n=e.confirmationBasis,r=e.evidence.at(0);R.currentQuadrant=e.classificationExplicit?t.current_quadrant??t.origin_quadrant??`known_known`:``,R.confirmationStatus=e.confirmationStatus===`confirmed`?`confirmed`:`pending`,R.existenceReason=n?.existence_reason??r?.source_description??r?.summary??``,R.quadrantReason=n?.quadrant_reason??t.reasoning_summary??``,R.proposedByKind=n?.proposed_by.kind??`agent`,R.proposedByLabel=n?.proposed_by.label??``,R.confirmedByKind=n?.confirmed_by?.kind??`user`,R.confirmedByLabel=n?.confirmed_by?.label??``,R.profileAspect=t.profile_aspect??`none`,R.inheritanceMode=t.profile_aspect?`local_only`:t.inheritance_mode??`local_only`,I.value=t.inherited_project_ids?.at(0)??s.projects[0]?.project_id??``,R.reason=``,j.value=``,M.value=J.value??s.projects[0]?.project_id??``,N.value=t.preference_scope??`global`,P.value=t.preference_project_id??s.projects[0]?.project_id??``,F.value=``,L.value=e.replacedByItemId&&e.replacedByItemKind?Z(e.replacedByItemKind,e.replacedByItemId):``,A.value=``},{immediate:!0});async function Me(){let e=s.item;if(!e)return;if(!R.reason.trim())return $(o(`knowledge.dialogs.edit.errors.reasonRequired`));if(!z.value&&!R.name.trim())return $(o(`knowledge.dialogs.edit.errors.nameRequired`));if(z.value&&!R.fact.trim())return $(o(`knowledge.dialogs.edit.errors.factRequired`));if(!R.currentQuadrant||!R.confirmationStatus)return $(o(`knowledge.dialogs.edit.errors.classificationRequired`));if(!R.existenceReason.trim())return $(o(`knowledge.dialogs.edit.errors.existenceRequired`));if(!R.quadrantReason.trim())return $(o(`knowledge.dialogs.edit.errors.quadrantRequired`));if(!R.proposedByKind)return $(o(`knowledge.dialogs.edit.errors.proposerRequired`));if(R.confirmationStatus===`confirmed`&&!R.confirmedByKind)return $(o(`knowledge.dialogs.edit.errors.confirmerRequired`));if(R.inheritanceMode===`selected_projects`&&!I.value)return $(o(`knowledge.dialogs.edit.errors.inheritedProjectsRequired`));let t={...X(`update`),confirmationStatus:R.confirmationStatus,confirmationBasis:{existenceReason:R.existenceReason.trim(),quadrantReason:R.quadrantReason.trim(),proposedBy:{kind:R.proposedByKind,label:R.proposedByLabel.trim()||null},confirmedBy:R.confirmationStatus===`confirmed`?{kind:R.confirmedByKind,label:R.confirmedByLabel.trim()||null}:null,confirmedAt:R.confirmationStatus===`confirmed`?new Date().toISOString():null},profileAspect:R.profileAspect,inheritanceMode:R.profileAspect===`none`?R.inheritanceMode:`local_only`,inheritedProjectIds:R.profileAspect===`none`&&R.inheritanceMode===`selected_projects`?[I.value]:[],reasoningSummary:R.quadrantReason.trim()};s.item.classificationExplicit?t.currentQuadrant=R.currentQuadrant:t.originQuadrant=R.currentQuadrant,z.value?t.fact=R.fact.trim():(t.name=R.name.trim(),t.summary=R.summary.trim()),await Q(async()=>{await C(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}`,t),_.notify(o(`knowledge.dialogs.edit.notices.corrected`))})}async function Y(e){let t=s.item;if(t){if(!R.reason.trim())return $(o(e===`invalidate`?`knowledge.dialogs.edit.errors.statusReasonRequired`:`knowledge.dialogs.edit.errors.restoreReasonRequired`));await Q(async()=>{let n=X(e);e===`invalidate`&&q.value&&(n.replacementItemId=q.value.id,n.replacementItemKind=q.value.itemKind),await C(`/api/knowledge/${t.itemKind}/${encodeURIComponent(t.id)}`,n),_.notify(e===`invalidate`?q.value?o(`knowledge.dialogs.edit.notices.invalidatedWithReplacement`):o(`knowledge.dialogs.edit.notices.invalidated`):o(`knowledge.dialogs.edit.notices.restored`))})}}async function Ne(){let e=s.item,t=q.value;if(!(!e||!B.value)){if(!t)return $(o(`knowledge.dialogs.edit.errors.replacementRequired`));if(!R.reason.trim())return $(o(`knowledge.dialogs.edit.errors.replacementReasonRequired`));await Q(async()=>{await C(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}`,{...X(`link_replacement`),replacementItemId:t.id,replacementItemKind:t.itemKind}),_.notify(o(`knowledge.dialogs.edit.notices.replacementSaved`))})}}async function Pe(){let e=s.item;if(e){if(!M.value)return $(o(`knowledge.dialogs.edit.errors.projectRequired`));if(!j.value.trim())return $(o(`knowledge.dialogs.edit.errors.assignmentReasonRequired`));if(M.value===J.value)return $(o(`knowledge.dialogs.edit.errors.alreadyAssigned`));await Q(async()=>{await S(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}/assignment`,{personalSpaceId:s.personalSpaceId,targetProjectId:M.value,reason:j.value.trim()}),_.notify(o(`knowledge.dialogs.edit.notices.assignmentChanged`))})}}async function Fe(){let e=s.item;if(!e)return;let t=N.value===`project`?P.value:null;if(N.value===`project`&&!t)return $(o(`knowledge.dialogs.edit.errors.preferenceProjectRequired`));if(!F.value.trim())return $(o(`knowledge.dialogs.edit.errors.preferenceReasonRequired`));await Q(async()=>{await S(`/api/knowledge/${e.itemKind}/${encodeURIComponent(e.id)}/preference-scope`,{personalSpaceId:s.personalSpaceId,scope:N.value,projectId:t,reason:F.value.trim()}),_.notify(N.value===`global`?o(`knowledge.dialogs.edit.notices.preferenceGlobal`):o(`knowledge.dialogs.edit.notices.preferenceProject`))})}function X(e){return{personalSpaceId:s.personalSpaceId,personalProjectId:s.personalProjectId,action:e,reason:R.reason.trim()}}function Z(e,t){return JSON.stringify([e,t])}async function Q(e){T.value=!0,A.value=``;try{await e(),f(`close`),f(`saved`)}catch(e){A.value=e instanceof Error?e.message:o(`knowledge.dialogs.edit.errors.saveFailed`),_.reportError(e)}finally{T.value=!1}}function $(e){A.value=e}return(n,r)=>t.item?(d(),x(`dialog`,re,[l(`div`,ie,[l(`header`,ae,[l(`div`,null,[r[24]||=l(`p`,{class:`eyebrow`},`PERSONAL KNOWLEDGE`,-1),l(`h3`,null,g(B.value?c(o)(`knowledge.dialogs.edit.titleRestore`):c(o)(`knowledge.dialogs.edit.titleCorrect`)),1),l(`p`,null,g(c(o)(`knowledge.dialogs.edit.intro`)),1)]),l(`button`,{class:`secondary-action`,type:`button`,onClick:r[0]||=e=>f(`close`)},g(c(o)(`common.actions.close`)),1)]),l(`div`,oe,[l(`section`,null,[l(`h4`,null,g(c(o)(`knowledge.dialogs.edit.currentContent`)),1),l(`form`,{class:`knowledge-editor-form`,onSubmit:m(Me,[`prevent`])},[z.value?y(``,!0):(d(),x(`label`,se,[b(g(c(o)(`knowledge.dialogs.edit.name`)),1),e(l(`input`,{"onUpdate:modelValue":r[1]||=e=>R.name=e,maxlength:`512`},null,512),[[v,R.name]])])),z.value?(d(),x(`label`,le,[b(g(c(o)(`knowledge.dialogs.edit.fact`)),1),e(l(`textarea`,{"onUpdate:modelValue":r[3]||=e=>R.fact=e,maxlength:`8192`,rows:`5`},null,512),[[v,R.fact]])])):(d(),x(`label`,ce,[b(g(c(o)(`knowledge.dialogs.edit.description`)),1),e(l(`textarea`,{"onUpdate:modelValue":r[2]||=e=>R.summary=e,maxlength:`4096`,rows:`5`},null,512),[[v,R.summary]])])),l(`div`,ue,[l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.classification`))+` `,1),i(E,{modelValue:R.currentQuadrant,"onUpdate:modelValue":r[4]||=e=>R.currentQuadrant=e,options:U.value,label:c(o)(`knowledge.dialogs.edit.classification`)},null,8,[`modelValue`,`options`,`label`])]),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.confirmationStatus`))+` `,1),i(E,{modelValue:R.confirmationStatus,"onUpdate:modelValue":r[5]||=e=>R.confirmationStatus=e,options:W.value,label:c(o)(`knowledge.dialogs.edit.confirmationStatus`)},null,8,[`modelValue`,`options`,`label`])]),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.preferenceDimension`))+` `,1),i(E,{modelValue:R.profileAspect,"onUpdate:modelValue":r[6]||=e=>R.profileAspect=e,options:G.value,label:c(o)(`knowledge.dialogs.edit.preferenceDimension`)},null,8,[`modelValue`,`options`,`label`])])]),l(`p`,de,g(c(o)(`knowledge.dialogs.edit.originQuadrant`,{quadrant:c(k)(t.item.originQuadrant)})),1),t.item.classificationExplicit?y(``,!0):(d(),x(`p`,fe,g(c(o)(`knowledge.dialogs.edit.missingQuadrant`)),1)),l(`fieldset`,pe,[l(`legend`,null,g(c(o)(`knowledge.dialogs.edit.basis`)),1),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.whyExists`))+` `,1),e(l(`textarea`,{"onUpdate:modelValue":r[7]||=e=>R.existenceReason=e,maxlength:`4096`,rows:`3`,required:``},null,512),[[v,R.existenceReason]])]),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.whyQuadrant`))+` `,1),e(l(`textarea`,{"onUpdate:modelValue":r[8]||=e=>R.quadrantReason=e,maxlength:`4096`,rows:`3`,required:``},null,512),[[v,R.quadrantReason]])]),l(`div`,me,[l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.proposer`))+` `,1),i(E,{modelValue:R.proposedByKind,"onUpdate:modelValue":r[9]||=e=>R.proposedByKind=e,options:te.value,label:c(o)(`knowledge.dialogs.edit.proposer`)},null,8,[`modelValue`,`options`,`label`])]),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.proposerDescription`))+` `,1),e(l(`input`,{"onUpdate:modelValue":r[10]||=e=>R.proposedByLabel=e,maxlength:`160`,placeholder:c(o)(`knowledge.dialogs.edit.proposerPlaceholder`)},null,8,he),[[v,R.proposedByLabel]])]),R.confirmationStatus===`confirmed`?(d(),x(p,{key:0},[l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.confirmer`))+` `,1),i(E,{modelValue:R.confirmedByKind,"onUpdate:modelValue":r[11]||=e=>R.confirmedByKind=e,options:ne.value,label:c(o)(`knowledge.dialogs.edit.confirmer`)},null,8,[`modelValue`,`options`,`label`])]),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.confirmerDescription`))+` `,1),e(l(`input`,{"onUpdate:modelValue":r[12]||=e=>R.confirmedByLabel=e,maxlength:`160`,placeholder:c(o)(`knowledge.dialogs.edit.confirmerPlaceholder`)},null,8,ge),[[v,R.confirmedByLabel]])])],64)):y(``,!0)]),l(`p`,null,g(c(o)(`knowledge.dialogs.edit.agentConfirmedBoundary`)),1)]),V.value?y(``,!0):(d(),x(`fieldset`,_e,[l(`legend`,null,g(c(o)(`knowledge.dialogs.edit.crossProjectInheritance`)),1),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.inheritanceScope`))+` `,1),i(E,{modelValue:R.inheritanceMode,"onUpdate:modelValue":r[13]||=e=>R.inheritanceMode=e,options:ee.value,label:c(o)(`knowledge.dialogs.edit.inheritanceScope`)},null,8,[`modelValue`,`options`,`label`])]),R.inheritanceMode===`selected_projects`?(d(),x(`label`,ve,[b(g(c(o)(`knowledge.dialogs.edit.inheritedProjects`))+` `,1),i(E,{modelValue:I.value,"onUpdate:modelValue":r[14]||=e=>I.value=e,options:H.value,label:c(o)(`knowledge.dialogs.edit.inheritedProjects`),searchable:``},null,8,[`modelValue`,`options`,`label`])])):y(``,!0),l(`p`,null,g(c(o)(`knowledge.dialogs.edit.inheritanceBoundary`)),1)])),l(`fieldset`,ye,[l(`legend`,null,g(B.value?c(o)(`knowledge.dialogs.edit.replacement`):c(o)(`knowledge.dialogs.edit.optionalReplacement`)),1),l(`label`,null,[b(g(B.value?c(o)(`knowledge.dialogs.edit.historicalReplacement`):c(o)(`knowledge.dialogs.edit.activeReplacement`))+` `,1),i(E,{modelValue:L.value,"onUpdate:modelValue":r[15]||=e=>L.value=e,options:je.value,label:c(o)(`knowledge.dialogs.edit.replacement`),searchable:``},null,8,[`modelValue`,`options`,`label`])]),l(`p`,null,g(c(o)(`knowledge.dialogs.edit.replacementBoundary`)),1)]),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.correctionReason`)),1),e(l(`textarea`,{"onUpdate:modelValue":r[16]||=e=>R.reason=e,maxlength:`2000`,rows:`3`,required:``},null,512),[[v,R.reason]])]),A.value?(d(),x(`p`,be,g(A.value),1)):y(``,!0),l(`div`,xe,[B.value?(d(),x(p,{key:1},[l(`button`,{class:`secondary-action`,type:`button`,disabled:T.value,onClick:r[18]||=e=>Y(`restore`)},g(c(o)(`knowledge.dialogs.edit.restore`)),9,Ce),l(`button`,{class:`secondary-action`,type:`button`,disabled:T.value,onClick:Ne},g(c(o)(`knowledge.dialogs.edit.saveReplacement`)),9,we)],64)):(d(),x(`button`,{key:0,class:`secondary-action`,type:`button`,disabled:T.value,onClick:r[17]||=e=>Y(`invalidate`)},g(c(o)(`knowledge.dialogs.edit.invalidate`)),9,Se)),l(`button`,{class:`primary-action`,type:`submit`,disabled:T.value},g(T.value?c(o)(`knowledge.dialogs.edit.saving`):R.confirmationStatus===`confirmed`?c(o)(`knowledge.dialogs.edit.saveConfirmed`):c(o)(`knowledge.dialogs.edit.savePending`)),9,Te)])],32)]),V.value?(d(),x(`section`,Oe,[l(`h4`,null,g(c(o)(`knowledge.dialogs.edit.preferenceScope`)),1),l(`p`,null,g(c(o)(`knowledge.dialogs.edit.preferenceScopeCopy`)),1),l(`form`,{class:`knowledge-editor-form`,onSubmit:m(Fe,[`prevent`])},[l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.effectiveScope`))+` `,1),i(E,{modelValue:N.value,"onUpdate:modelValue":r[21]||=e=>N.value=e,options:K.value,label:c(o)(`knowledge.dialogs.edit.preferenceScope`)},null,8,[`modelValue`,`options`,`label`])]),N.value===`project`?(d(),x(`label`,ke,[b(g(c(o)(`knowledge.dialogs.edit.personalProject`))+` `,1),i(E,{modelValue:P.value,"onUpdate:modelValue":r[22]||=e=>P.value=e,options:H.value,label:c(o)(`knowledge.dialogs.edit.personalProject`),searchable:``},null,8,[`modelValue`,`options`,`label`])])):y(``,!0),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.assignmentReason`)),1),e(l(`textarea`,{"onUpdate:modelValue":r[23]||=e=>F.value=e,maxlength:`2000`,rows:`3`,required:``},null,512),[[v,F.value]])]),l(`button`,{class:`primary-action`,type:`submit`,disabled:T.value},g(c(o)(`knowledge.dialogs.edit.saveScope`)),9,Ae)],32)])):(d(),x(`section`,Ee,[l(`h4`,null,g(c(o)(`knowledge.dialogs.edit.projectOwnership`)),1),l(`p`,null,g(c(o)(`knowledge.dialogs.edit.ownershipCopy`)),1),l(`form`,{class:`knowledge-editor-form`,onSubmit:m(Pe,[`prevent`])},[l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.targetProject`))+` `,1),i(E,{modelValue:M.value,"onUpdate:modelValue":r[19]||=e=>M.value=e,options:H.value,label:c(o)(`knowledge.dialogs.edit.targetProject`),searchable:``,required:``},null,8,[`modelValue`,`options`,`label`])]),l(`label`,null,[b(g(c(o)(`knowledge.dialogs.edit.assignmentReason`)),1),e(l(`textarea`,{"onUpdate:modelValue":r[20]||=e=>j.value=e,maxlength:`2000`,rows:`3`,required:``},null,512),[[v,j.value]])]),l(`button`,{class:`primary-action`,type:`submit`,disabled:T.value||t.projects.length===0},g(c(o)(`knowledge.dialogs.edit.adjustOwnership`)),9,De)],32)]))])])])):y(``,!0)}});export{P as a,L as i,G as n,I as r,K as t};
@@ -1 +0,0 @@
1
- import{C as e,_ as t,j as n}from"./i18n-js6gfc7j.js";import{t as r}from"./KnowledgeWorkspace-ChEB5Bwk.js";var i=e({__name:`KnowledgePage`,setup(e){return(e,i)=>(n(),t(r))}});export{i as default};
@@ -1 +0,0 @@
1
- import{C as e,_ as t,j as n}from"./i18n-js6gfc7j.js";import{t as r}from"./KnowledgeWorkspace-ChEB5Bwk.js";var i=e({__name:`PersonalProjectsPage`,setup(e){return(e,i)=>(n(),t(r,{"personal-projects-only":``}))}});export{i as default};
@@ -1 +0,0 @@
1
- .project-agent-assignment-dialog[data-v-27954ba8]{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-27954ba8]{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-27954ba8],.project-agent-assignment-dialog-actions[data-v-27954ba8]{justify-content:space-between;align-items:center;gap:16px;padding:16px 18px;display:flex}.project-agent-assignment-dialog-header[data-v-27954ba8]{border-bottom:1px solid #e1e6e2}.project-agent-assignment-dialog-header h3[data-v-27954ba8]{color:#283a31;font-size:16px}.project-agent-assignment-dialog-fields[data-v-27954ba8]{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-27954ba8]{color:#626d66;gap:6px;font-size:11px;font-weight:650;display:grid}.project-agent-assignment-dialog-fields input[data-v-27954ba8],.project-agent-assignment-dialog-fields textarea[data-v-27954ba8]{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-27954ba8]{resize:vertical}.project-agent-assignment-dialog-fields input[data-v-27954ba8]:focus-visible,.project-agent-assignment-dialog-fields textarea[data-v-27954ba8]:focus-visible{outline-offset:1px;outline:2px solid #91a398}.project-agent-assignment-wide-field[data-v-27954ba8]{grid-column:1/-1}.project-agent-assignment-dialog-error[data-v-27954ba8]{color:#8b3f38;margin:0 18px;font-size:11px}.project-agent-assignment-dialog-actions[data-v-27954ba8]{border-top:1px solid #e1e6e2;justify-content:flex-end}.project-agent-primary-action[data-v-27954ba8]{color:#fff;background:#344c3d;border:0;border-radius:8px;padding:8px 13px;font-size:11px;font-weight:700}.project-agent-primary-action[data-v-27954ba8]:focus-visible{outline-offset:2px;outline:2px solid #91a398}@media (width<=620px){.project-agent-assignment-dialog-fields[data-v-27954ba8]{grid-template-columns:1fr}.project-agent-assignment-wide-field[data-v-27954ba8]{grid-column:auto}}.project-agent-dialog-check[data-v-6b96c90d]{align-items:center;gap:7px!important;display:flex!important}.project-agent-dialog-check input[data-v-6b96c90d]{width:auto!important}.project-agent-dialog-note[data-v-6b96c90d]{color:#7b857e;font-size:10px;line-height:1.55}.project-agent-automation-policy[data-v-4160a96e]{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-4160a96e]{min-width:0}.project-agent-automation-policy h3[data-v-4160a96e]{color:#31453a;font-size:12px;line-height:1.35}.project-agent-automation-policy header span[data-v-4160a96e]{color:#68756d;text-overflow:ellipsis;white-space:nowrap;margin-top:3px;font-size:9px;display:block;overflow:hidden}.project-agent-policy-options[data-v-4160a96e]{grid-template-columns:repeat(2,minmax(0,1fr));min-width:0;display:grid}.project-agent-policy-options label[data-v-4160a96e]{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-4160a96e]{border-inline-start:1px solid #e2e7e3}.project-agent-policy-options label>span[data-v-4160a96e]{gap:3px;min-width:0;display:grid}.project-agent-policy-options strong[data-v-4160a96e]{color:#3d5045;font-size:10px;line-height:1.4}.project-agent-policy-options small[data-v-4160a96e]{color:#6d7971;overflow-wrap:anywhere;max-width:54ch;font-size:9px;line-height:1.45}.project-agent-policy-options input[data-v-4160a96e]{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-4160a96e]: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-4160a96e]:checked{background:#4d8164;border-color:#3f7658}.project-agent-policy-options input[data-v-4160a96e]:checked:after{transform:translate(15px)}.project-agent-policy-options input[data-v-4160a96e]:focus-visible{outline-offset:3px;outline:2px solid #355f49}.project-agent-policy-options input[data-v-4160a96e]:disabled{cursor:wait;opacity:.62}.project-agent-policy-feedback[data-v-4160a96e]{grid-column:2;min-height:14px;padding-inline:16px}.project-agent-policy-state[data-v-4160a96e],.project-agent-policy-feedback p[data-v-4160a96e]{color:#66736b;font-size:9px;line-height:1.45}.project-agent-policy-feedback p[role=alert][data-v-4160a96e]{color:#874b43}.project-agent-policy-feedback button[data-v-4160a96e]{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-4160a96e],.project-agent-policy-options[data-v-4160a96e]{grid-template-columns:minmax(0,1fr)}.project-agent-policy-options label[data-v-4160a96e]{padding:8px 0}.project-agent-policy-options label+label[data-v-4160a96e]{border-block-start:1px solid #e2e7e3;border-inline-start:0}.project-agent-policy-feedback[data-v-4160a96e]{grid-column:1;padding-inline:0}}.project-agent-source-state[data-v-f174e20d]{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-f174e20d]{color:#8c4f49;background:#fbf3f1;border-color:#ebd5d0}.project-agent-dialog[data-v-83825f22]{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-83825f22]{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-83825f22],.project-agent-dialog-actions[data-v-83825f22]{justify-content:space-between;align-items:center;gap:16px;padding:18px 20px;display:flex}.project-agent-dialog-header[data-v-83825f22]{border-bottom:1px solid #e1e6e2}.project-agent-dialog-header h3[data-v-83825f22]{color:#283a31;font-size:17px}.project-agent-dialog-fields[data-v-83825f22]{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-83825f22]{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-83825f22],.project-agent-dialog-fields select[data-v-83825f22],.project-agent-dialog-fields textarea[data-v-83825f22]{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-83825f22]{resize:vertical}.project-agent-dialog-fields input[data-v-83825f22]:focus-visible,.project-agent-dialog-fields select[data-v-83825f22]:focus-visible,.project-agent-dialog-fields textarea[data-v-83825f22]:focus-visible{outline-offset:1px;outline:2px solid #91a398}.project-agent-wide-field[data-v-83825f22],.project-agent-id-note[data-v-83825f22]{grid-column:1/-1}.project-agent-strategy-fields[data-v-83825f22]{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-83825f22]{color:#59665d;padding:0 5px;font-size:10px;font-weight:700}.project-agent-strategy-fields>small[data-v-83825f22]{color:#818a84;grid-column:1/-1;font-size:9px;line-height:1.5}.project-agent-id-note[data-v-83825f22]{color:#7b847e;margin-top:-8px;font-size:10px}.project-agent-dialog-error[data-v-83825f22]{color:#8b3f38;margin:0 20px;font-size:11px}.project-agent-dialog-actions[data-v-83825f22]{border-top:1px solid #e1e6e2;justify-content:flex-end}.project-agent-primary-action[data-v-83825f22]{color:#fff;background:#344c3d;border:0;border-radius:8px;padding:8px 14px;font-size:12px;font-weight:700}.project-agent-primary-action[data-v-83825f22]:hover{background:#2b4234}.project-agent-primary-action[data-v-83825f22]:focus-visible{outline-offset:2px;outline:2px solid #91a398}.project-agent-primary-action[data-v-83825f22]:disabled,.project-agent-dialog-fields[data-v-83825f22] :disabled{cursor:not-allowed;opacity:.6}@media (width<=720px){.project-agent-dialog-fields[data-v-83825f22]{grid-template-columns:1fr}.project-agent-wide-field[data-v-83825f22],.project-agent-id-note[data-v-83825f22]{grid-column:1}}.project-agents-view[data-v-5eac051f]{flex-direction:column;gap:12px;min-height:0;padding:18px 32px 20px;display:flex;overflow:hidden}.project-agents-header[data-v-5eac051f],.project-agent-section-heading[data-v-5eac051f],.project-agent-section-tools[data-v-5eac051f],.project-agent-detail-actions[data-v-5eac051f],.project-agent-assignment-card header[data-v-5eac051f],.project-agent-task-card header[data-v-5eac051f],.project-agent-learning-card header[data-v-5eac051f],.project-agent-day-detail header[data-v-5eac051f]{justify-content:space-between;align-items:center;gap:12px;display:flex}.project-agents-header h2[data-v-5eac051f]{color:#283a31;font-size:18px}.project-agents-header-meta[data-v-5eac051f]{color:#7a847d;font-size:10px}.project-agents-summary[data-v-5eac051f]{color:#737d76;background:#f9faf9;border:1px solid #d6ddd8;border-radius:10px;gap:18px;padding:9px 14px;font-size:11px;display:flex}.project-agents-summary span[data-v-5eac051f]:first-child{color:#2f493b;font-weight:700}.project-agent-add[data-v-5eac051f]{color:#fff;background:#344c3d;border:0;border-radius:8px;padding:8px 13px;font-size:11px;font-weight:700}.project-agent-add[data-v-5eac051f]:hover{background:#2b4234}.project-agent-add[data-v-5eac051f]:focus-visible,.quiet-button[data-v-5eac051f]:focus-visible{outline-offset:2px;outline:2px solid #91a398}.project-agent-add[data-v-5eac051f]:disabled{cursor:not-allowed;opacity:.55}.project-agents-toolbar[data-v-5eac051f]{grid-template-columns:minmax(220px,300px) minmax(240px,1fr) auto;align-items:center;gap:10px;display:grid}.project-agents-search input[data-v-5eac051f]{color:#2e3932;background:#fff;border:1px solid #cfd7d1;border-radius:8px;width:100%;min-height:34px;padding:7px 10px;font-size:11px}.project-agents-search input[data-v-5eac051f]:focus-visible{outline-offset:1px;outline:2px solid #91a398}.project-agents-status-filter[data-v-5eac051f]{background:#f5f7f5;border:1px solid #d8ded9;border-radius:8px;gap:3px;padding:3px;display:flex}.project-agents-status-filter button[data-v-5eac051f],.quiet-button[data-v-5eac051f]{color:#6d7770;background:0 0;border:0;border-radius:6px;padding:6px 9px;font-size:10px}.project-agents-status-filter button[aria-pressed=true][data-v-5eac051f]{color:#315440;background:#fff;font-weight:700;box-shadow:0 1px 3px #27392f1f}.project-agents-directory[data-v-5eac051f]{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-5eac051f]{border-right:1px solid #dfe4e0;min-width:0;min-height:0;overflow:auto}.project-agent-row[data-v-5eac051f]{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-5eac051f]:hover{background:#f7f9f7}.project-agent-row.selected[data-v-5eac051f]{background:#edf3ef;box-shadow:inset 3px 0 #64816f}.project-agent-row[data-v-5eac051f]:focus-visible{z-index:1;outline-offset:-3px;outline:2px solid #91a398;position:relative}.project-agent-row-heading[data-v-5eac051f]{align-items:center;gap:7px;min-width:0;display:flex}.project-agent-occupation-emoji[data-v-5eac051f]{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-5eac051f]{color:#293b31;text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.project-agent-row-heading i[data-v-5eac051f],.project-agent-assignment-card header i[data-v-5eac051f],.project-agent-task-card header i[data-v-5eac051f],.project-agent-learning-card header i[data-v-5eac051f]{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-5eac051f]{color:#2f6947;background:#e1eee6}.project-agent-row-heading i.is-archived[data-v-5eac051f]{color:#75695d;background:#eeeae5}.project-agent-kind[data-v-5eac051f]{color:#53647b!important;background:#eef2f7!important}.project-agent-row-id[data-v-5eac051f]{color:#8a938d;overflow-wrap:anywhere;text-align:right;font-size:9px}.project-agent-row-projects[data-v-5eac051f]{flex-wrap:wrap;grid-column:1/-1;gap:4px;display:flex}.project-agent-row-projects b[data-v-5eac051f],.project-agent-tags span[data-v-5eac051f],.project-agent-inline-list span[data-v-5eac051f]{color:#5f6b64;background:#eef1ef;border-radius:999px;padding:3px 7px;font-size:9px;font-weight:650}.project-agent-row-projects em[data-v-5eac051f]{color:#8a938d;font-size:9px;font-style:normal}.project-agent-row-responsibility[data-v-5eac051f]{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-5eac051f]{color:#59645d;grid-column:1/-1;font-size:10px;line-height:1.5}.project-agent-work-dot[data-v-5eac051f]{background:#4b8d63;border-radius:50%;width:6px;height:6px;margin-right:4px;display:inline-block}.project-agent-row-capabilities[data-v-5eac051f]{flex-wrap:wrap;grid-column:1/-1;gap:5px;min-height:20px;display:flex}.project-agent-row-capabilities b[data-v-5eac051f]{color:#68736c;background:#f1f3f1;border-radius:999px;padding:3px 7px;font-size:9px;font-weight:650}.project-agent-detail[data-v-5eac051f]{min-width:0;min-height:0;padding:20px;overflow:auto;container-type:inline-size}.project-agent-detail>header[data-v-5eac051f]{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-5eac051f]{min-width:0}.project-agent-detail h3[data-v-5eac051f]{color:#263b30;text-wrap:balance;font-size:17px;line-height:1.32}.project-agent-detail header p[data-v-5eac051f]{color:#7a847d;overflow-wrap:anywhere;max-width:72ch;margin-top:5px;font-size:10px;line-height:1.5}.project-agent-detail-actions[data-v-5eac051f]{grid-auto-columns:78px;grid-auto-flow:column;justify-content:end;gap:8px;display:grid}.project-agent-detail-actions .quiet-button[data-v-5eac051f]{white-space:nowrap;width:78px}.project-agent-detail-meta[data-v-5eac051f],.project-agent-compact-meta[data-v-5eac051f]{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:16px 0 0;display:grid}.project-agent-detail-meta div[data-v-5eac051f],.project-agent-compact-meta div[data-v-5eac051f]{min-width:0}.project-agent-detail-meta dt[data-v-5eac051f],.project-agent-compact-meta dt[data-v-5eac051f],.project-agent-detail-section h4[data-v-5eac051f]{color:#7a847d;letter-spacing:.06em;text-transform:uppercase;font-size:9px;font-weight:700}.project-agent-detail-meta dd[data-v-5eac051f],.project-agent-compact-meta dd[data-v-5eac051f]{overflow-wrap:anywhere;color:#39483f;margin:4px 0 0;font-size:11px}.project-agent-detail-meta dd small[data-v-5eac051f]{color:#818a84;margin-top:3px;font-size:9px;line-height:1.4;display:block}.project-agent-detail-section[data-v-5eac051f]{margin-top:22px}.project-agent-detail-section.is-responsibility[data-v-5eac051f]{background:#f2f5f2;border-radius:10px;padding:14px}.project-agent-detail-section p[data-v-5eac051f],.project-agent-detail-section li[data-v-5eac051f]{color:#4f5c54;font-size:11px;line-height:1.65}.project-agent-tags[data-v-5eac051f],.project-agent-inline-list[data-v-5eac051f]{flex-wrap:wrap;gap:6px;margin-top:9px;display:flex}.project-agent-muted[data-v-5eac051f]{color:#8a928d!important}.project-agent-detail-notice[data-v-5eac051f]{background:#f5f5f1;border-radius:7px;margin:12px 0 0;padding:8px 10px;color:#6f705f!important}.project-agent-detail-placeholder[data-v-5eac051f],.project-agents-state[data-v-5eac051f]{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-5eac051f]{background:#fafbfa;border:1px solid #d9dfda;border-radius:10px;flex:1}.project-agents-state strong[data-v-5eac051f]{color:#36473e;font-size:14px}.project-agents-state p[data-v-5eac051f]{max-width:52ch;line-height:1.6}.project-agents-state.is-error[data-v-5eac051f]{color:#8b3f38}.project-agent-assignment-list[data-v-5eac051f],.project-agent-task-list[data-v-5eac051f],.project-agent-learning-list[data-v-5eac051f],.project-agent-recruitment-list[data-v-5eac051f]{gap:8px;margin-top:9px;display:grid}.project-agent-execution-summary[data-v-5eac051f]{border-top:1px solid #dfe5e0;margin-top:13px;padding-top:12px}.project-agent-worker-event-evidence[data-v-5eac051f]{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-5eac051f]{gap:8px}.project-agent-execution-summary h5[data-v-5eac051f]{color:#65736a;letter-spacing:.06em;text-transform:uppercase;margin:0;font-size:9px;font-weight:700}.project-agent-execution-summary-list[data-v-5eac051f]{margin:7px 0 0;padding:0;list-style:none;display:grid}.project-agent-execution-summary-row[data-v-5eac051f]{border-top:1px solid #e6ebe7;min-width:0;padding:10px 0}.project-agent-execution-summary-row[data-v-5eac051f]:first-child{border-top:0}.project-agent-execution-summary-row header[data-v-5eac051f]{align-items:flex-start}.project-agent-execution-summary-row header strong[data-v-5eac051f]{overflow-wrap:anywhere;color:#3f5647;align-items:center;gap:5px;min-width:0;font-size:10px;display:flex}.project-agent-execution-summary-row header strong small[data-v-5eac051f]{color:#89948c;margin:0;font-size:8px;font-weight:500;display:inline}.project-agent-execution-summary-row header i[data-v-5eac051f]{color:#66716a;background:#e6eae7;border-radius:999px;flex:none;padding:2px 6px;font-size:8px;font-style:normal;font-weight:700}.project-agent-execution-summary-row header i.is-completed[data-v-5eac051f]{color:#2f6947;background:#e1eee6}.project-agent-execution-summary-row header i.is-failed[data-v-5eac051f]{color:#8c4f49;background:#f7e9e6}.project-agent-execution-summary-row header i.is-cancelled[data-v-5eac051f]{color:#75695d;background:#eeeae5}.project-agent-execution-summary-meta[data-v-5eac051f]{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-5eac051f]{min-width:0}.project-agent-execution-summary-meta dt[data-v-5eac051f]{color:#89948c;letter-spacing:.04em;text-transform:uppercase;font-size:8px;font-weight:700}.project-agent-execution-summary-meta dd[data-v-5eac051f]{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-5eac051f]{color:#89948c;margin-top:2px;font-size:8px;display:block}.project-agent-assignment-card[data-v-5eac051f],.project-agent-task-card[data-v-5eac051f],.project-agent-learning-card[data-v-5eac051f],.project-agent-recruitment-card[data-v-5eac051f]{background:#fbfcfb;border:1px solid #e0e6e1;border-radius:9px;padding:11px 12px}.project-agent-assignment-card header strong[data-v-5eac051f],.project-agent-task-card header strong[data-v-5eac051f],.project-agent-learning-card header strong[data-v-5eac051f]{color:#33483a;font-size:11px}.project-agent-card-actions[data-v-5eac051f]{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:4px;display:flex}.project-agent-assignment-card p[data-v-5eac051f],.project-agent-task-card p[data-v-5eac051f],.project-agent-learning-card p[data-v-5eac051f]{margin:7px 0 0}.project-agent-assignment-card small[data-v-5eac051f],.project-agent-task-card small[data-v-5eac051f],.project-agent-learning-card small[data-v-5eac051f]{color:#818a84;margin-top:6px;font-size:9px;line-height:1.5;display:block}.project-agent-assignment-card header i.is-ended[data-v-5eac051f],.project-agent-assignment-card header i.is-replaced[data-v-5eac051f]{color:#75695d;background:#eeeae5}.project-agent-strategy-note[data-v-5eac051f],.project-agent-execution-line[data-v-5eac051f]{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-5eac051f],.project-agent-execution-line strong[data-v-5eac051f]{color:#53685a;font-size:10px}.project-agent-strategy-note small[data-v-5eac051f]{color:#8c5d54;flex-basis:100%}.project-agent-routing-decision[data-v-5eac051f]{color:#65736a;background:#f3f7f3;border-left:3px solid #7c9c86;border-radius:0 7px 7px 0;gap:5px;margin-top:10px;padding:9px 10px;font-size:9px;display:grid}.project-agent-routing-decision .project-agent-section-heading[data-v-5eac051f]{align-items:baseline;gap:8px}.project-agent-routing-decision .project-agent-section-heading strong[data-v-5eac051f]{color:#3f604b;font-size:10px}.project-agent-routing-decision small[data-v-5eac051f]{color:#65736a;line-height:1.45}.project-agent-blocked[data-v-5eac051f]{color:#8c5d54!important}.project-agent-task-card header[data-v-5eac051f]{align-items:flex-start}.project-agent-task-card header small[data-v-5eac051f]{margin-top:3px}.project-agent-task-card header i[data-v-5eac051f]{color:#53647b;background:#eef2f7}.project-agent-task-card header i.is-completed[data-v-5eac051f]{color:#2f6947;background:#e1eee6}.project-agent-task-card header i.is-failed[data-v-5eac051f]{color:#8c4f49;background:#f7e9e6}.project-agent-task-card header i.is-cancelled[data-v-5eac051f]{color:#75695d;background:#eeeae5}.project-agent-heatmap-viewport[data-v-5eac051f]{contain:layout inline-size paint;min-width:0;max-width:100%;overflow-x:clip}.project-agent-heatmap[data-v-5eac051f]{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-5eac051f]{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-5eac051f]{background:#dce9df}.project-agent-heat-cell.intensity-2[data-v-5eac051f]{background:#b9d3bf}.project-agent-heat-cell.intensity-3[data-v-5eac051f]{background:#87b493}.project-agent-heat-cell.intensity-4[data-v-5eac051f]{background:#548466}.project-agent-heat-cell[data-v-5eac051f]:focus-visible,.project-agent-heat-cell.selected[data-v-5eac051f]{box-shadow:none;border:2px solid #2f5740;outline:none}.project-agent-day-detail[data-v-5eac051f]{background:#f6f8f6;border-radius:8px;margin-top:10px;padding:10px}.project-agent-day-detail ul[data-v-5eac051f]{margin:8px 0 0;padding-left:17px}.project-agent-day-detail li[data-v-5eac051f]{margin-top:6px}.project-agent-day-detail li strong[data-v-5eac051f],.project-agent-day-detail li span[data-v-5eac051f],.project-agent-day-detail li small[data-v-5eac051f]{display:block}.project-agent-day-detail li span[data-v-5eac051f]{color:#66736b;font-size:9px}.project-agent-day-detail li small[data-v-5eac051f]{color:#7e8981;font-size:9px}.project-agent-client-list[data-v-5eac051f],.project-agent-rule-list[data-v-5eac051f]{gap:5px;margin-top:9px;display:grid}.project-agent-client-row[data-v-5eac051f],.project-agent-rule-row[data-v-5eac051f]{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-5eac051f],.project-agent-rule-row strong[data-v-5eac051f]{color:#43584a;font-size:10px}.project-agent-client-row small[data-v-5eac051f]{color:#8a938d;grid-column:1/-1}.project-agent-executor-list[data-v-5eac051f]{gap:5px;margin-top:9px;display:grid}.project-agent-executor-row[data-v-5eac051f]{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-5eac051f]{color:#43584a;font-size:10px}.project-agent-executor-row small[data-v-5eac051f]{color:#8a938d;grid-column:1/-1}.project-agent-learning-card header i[data-v-5eac051f]{color:#6c776f;background:#f1f3f1}.project-agent-evidence-list[data-v-5eac051f]{margin:8px 0 0;padding-left:17px}.project-agent-evidence-list li[data-v-5eac051f]{color:#768179;font-size:9px}.project-agent-learning-actions[data-v-5eac051f]{gap:6px;margin-top:8px;display:flex}.project-agent-note[data-v-5eac051f]{color:#818a84;margin-top:9px;font-size:9px;line-height:1.5;display:block}.sr-only[data-v-5eac051f]{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-5eac051f]{grid-template-columns:minmax(220px,280px) 1fr}.project-agents-status-filter[data-v-5eac051f]{grid-column:1/-1;justify-self:start}.project-agents-directory[data-v-5eac051f]{grid-template-columns:minmax(320px,.9fr) minmax(330px,1fr)}.project-agent-detail-meta[data-v-5eac051f],.project-agent-compact-meta[data-v-5eac051f]{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (width<=420px){.project-agent-detail>header[data-v-5eac051f]{grid-template-columns:minmax(0,1fr)}.project-agent-detail-actions[data-v-5eac051f]{justify-content:start}}@media (width<=760px){.project-agents-view[data-v-5eac051f]{padding:14px 16px 18px;overflow:auto}.project-agents-header[data-v-5eac051f],.project-agents-summary[data-v-5eac051f],.project-agent-section-heading[data-v-5eac051f],.project-agent-assignment-card header[data-v-5eac051f]{flex-wrap:wrap;align-items:flex-start}.project-agents-toolbar[data-v-5eac051f]{grid-template-columns:minmax(0,1fr)}.project-agents-project-filter[data-v-5eac051f],.project-agents-search[data-v-5eac051f],.project-agents-status-filter[data-v-5eac051f]{grid-column:1}.project-agents-status-filter[data-v-5eac051f]{flex-wrap:wrap;justify-self:stretch;width:100%}.project-agents-directory[data-v-5eac051f]{flex:none;grid-template-columns:minmax(0,1fr);overflow:visible}.project-agent-list[data-v-5eac051f]{border-bottom:1px solid #dfe4e0;border-right:0;max-height:340px}.project-agent-detail[data-v-5eac051f]{min-height:520px;padding:16px}.project-agent-client-row[data-v-5eac051f],.project-agent-rule-row[data-v-5eac051f],.project-agent-executor-row[data-v-5eac051f]{grid-template-columns:minmax(0,1fr);align-items:start}.project-agent-client-row small[data-v-5eac051f],.project-agent-executor-row small[data-v-5eac051f]{grid-column:1}.project-agent-execution-summary-meta[data-v-5eac051f]{grid-template-columns:minmax(0,1fr)}.project-agent-execution-summary-row header[data-v-5eac051f]{gap:8px}}