fuli-context 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,19 +1,162 @@
1
1
  # 复利(Fuli)
2
2
 
3
- 复利是一个面向 AI Agent 的本地优先上下文图谱。它让 Codex、Claude Code 和
4
- Cursor 在会话之间复用个人偏好、项目约束、历史决策与 Runbook,同时保留来源和
5
- 知识边界。
3
+ [English](README.en.md)
6
4
 
7
- 当前 npm 版本是个人版:个人知识与管理界面运行在本机。团队共享 Provider 是独立的
8
- 服务部署单元,不作为第二个用户 npm 包发布。
5
+ 复利是一个面向 AI Agent 的本地优先协作上下文图谱。它把人与 AI 在项目中产生的、经得起
6
+ 复用的知识、经验、决策理由和偏好组织成有来源、有作用域、有时间关系的资产,让 Codex、
7
+ Claude Code 和 Cursor 在后续任务中少重复学习一次。
8
+
9
+ 复利不是聊天记录仓库,也不试图建立一个替代人的“人格模型”。AI 负责检索、提醒、归纳和
10
+ 执行;人始终保留最终判断权。
11
+
12
+ 当前 npm 包是个人版:个人知识、图数据库和管理界面都运行在本机。团队共享 Provider 是
13
+ 独立部署的服务单元,不会把个人品味、个性或判断偏好发布到公共层。
14
+
15
+ ## 项目理念
16
+
17
+ ### 1. 衡量复用价值,而不是知识数量
18
+
19
+ 复利的核心问题是:
20
+
21
+ > 如果没有 Fuli,Agent 是否需要重新学习一条已经确认、仍然有效且与当前任务相关的信息?
22
+
23
+ 节点数、对话数和图谱规模不是成功指标。真正需要验证的是:历史资产能否在正确的项目、时间
24
+ 和权威边界内被再次使用,并减少重复解释、修正和返工。
25
+
26
+ ### 2. 每个任务都检查价值,但不强迫每个任务沉淀
27
+
28
+ 一次任务可能产生:
29
+
30
+ - 可复用知识:API 约定、Runbook、发布方式或项目约束;
31
+ - 经验:为什么某个做法有效或失败;
32
+ - 决策轨迹:候选方案、人的选择、理由和后续验证;
33
+ - 判断辅助:偏好、原则、品味或个性倾向。
34
+
35
+ 也可能只有临时输出、猜测或一次性选择。此时正确结果是 `retain_nothing`。复利要求每个任务
36
+ 结束前做一次知识价值检查,并不是把每次聊天都变成长久记忆。
37
+
38
+ ### 3. 人的权威高于 Agent 的重复判断
39
+
40
+ AI 可以发现候选、指出冲突、建议公共化,也可以在得到授权后处理延迟冲突;它不能仅凭语义
41
+ 相似、重复出现或自己的判断伪造人工确认。公共知识提升和有风险的项目写入必须先预览,再由
42
+ 明确的人类选择触发一次性、原子执行。
43
+
44
+ ### 4. 先组装上下文,再按需取证
45
+
46
+ Fuli 不会在会话开始时把全部历史塞给模型。入口阶段只加载当前任务实际生效的个人全局偏好
47
+ 和精确项目偏好;详细知识由 Agent 根据任务按需检索。只有真正影响回答、实现或决策的知识
48
+ 才记录为一次使用,单纯检索不会增加权重。
49
+
50
+ ### 5. 保留知识演化,而不是覆盖历史
51
+
52
+ 旧方案可能在当时正确,后来因条件变化被替代。Fuli 保存来源、确认权威、时间、理由、修订、
53
+ 替代和负面证据,让 Agent 能解释“现在应该用什么”以及“为什么过去曾经不同”。负面反馈会
54
+ 降低相关内容的排序或触发复核,但不会静默抹掉历史。
55
+
56
+ ### 6. 公共知识归属上级,项目差异留在子项目
57
+
58
+ 例如,酒店和机票项目可以只保存自己的 PRD、配置和领域规则,把共同的本地运行、Mock、测试
59
+ 和发布方式收敛到活动平台项目:
60
+
61
+ ```text
62
+ 活动平台(父项目:共享 Runbook)
63
+ ├── 酒店项目(子项目:酒店 PRD / 配置 / 覆盖项)
64
+ └── 机票项目(子项目:机票 PRD / 配置 / 覆盖项)
65
+ ```
66
+
67
+ Agent 在酒店项目工作时先搜索酒店本地知识,再沿显式的 `PART_OF` 或
68
+ `USES_KNOWLEDGE_FROM` 关系向上搜索允许继承的知识,最多两跳。同稳定键的子项目内容覆盖
69
+ 父项目内容;普通 `RELATED_TO` 关系不会扩大作用域,项目级个人偏好也不会向下继承。
70
+
71
+ 多个子项目中相似的内容只会形成公共化候选。当前聚类是词法启发式信号,不是语义等价证明;
72
+ 必须由人选择规范项、重复项、上级项目和理由后,才能原子提升。
73
+
74
+ ### 7. 本地优先,公开层不包含个人模型
75
+
76
+ 个人图谱默认留在本机。Fuli 保存结构化、可复用的知识,不保存整段会话、凭据、临时日志或
77
+ 原始命令输出。团队共享层只承载经过确认、具有上下文和来源的项目或领域知识,不包含个人的
78
+ 品味、个性和判断偏好。
79
+
80
+ ## Agent 交互时序
81
+
82
+ 下面是日常任务的简化时序。更完整的项目继承、使用计数、写入预览和来源标记流程见
83
+ [智能体调用时序图](acceptance/智能体调用时序图.md)。
84
+
85
+ ```mermaid
86
+ sequenceDiagram
87
+ autonumber
88
+ actor U as 用户
89
+ participant A as Agent
90
+ participant L as 生命周期接入
91
+ participant F as Fuli MCP
92
+ participant G as 本地图谱
93
+
94
+ U->>A: 在当前项目提交任务
95
+ alt Claude Code(Hook 强制)
96
+ L->>F: UserPromptSubmit → begin_task_context
97
+ F-->>A: 生效偏好、项目和任务令牌
98
+ else Codex / Cursor(Prompt fallback)
99
+ A->>F: get_collaboration_preferences(projectPath)
100
+ F-->>A: 生效偏好和精确项目
101
+ end
102
+
103
+ opt 任务依赖历史知识
104
+ A->>F: search_current_project_knowledge
105
+ F->>G: 先查子项目,再查获授权的上级
106
+ G-->>A: 有界正文、状态、来源和历史
107
+ opt 知识实际影响结果
108
+ A->>F: record_knowledge_usage
109
+ end
110
+ end
111
+
112
+ A->>A: 完成实现、验证或回答
113
+ opt 产生决策、反证或失效证据
114
+ A->>F: 记录理由或知识反馈
115
+ end
116
+ A->>F: checkpoint_task_knowledge
117
+ alt 有少量可复用候选
118
+ F->>G: capture_candidates
119
+ else 没有值得长期保留的内容
120
+ F-->>A: retain_nothing
121
+ end
122
+
123
+ alt Claude Code Stop Hook
124
+ L->>F: verify_task_checkpoint
125
+ F-->>L: 已检查才允许结束
126
+ else Prompt fallback Agent
127
+ Note over A,F: 遵循同一契约,但宿主不能确定性阻止漏检
128
+ end
129
+ A-->>U: 返回结果与实际使用的 Fuli 来源
130
+ ```
131
+
132
+ ## 当前能力与证据边界
133
+
134
+ 已经由实现和自动化测试覆盖的核心机制包括:
135
+
136
+ - 本地个人空间、精确项目作用域和选择性上级继承;
137
+ - 偏好确认、延迟冲突处理、修订历史和来源标记;
138
+ - 任务入口、任务末尾知识检查,以及 Claude Code 的入口 / Stop Hook;
139
+ - 决策选项、决策理由和首次记录时附带的验证结果;
140
+ - 知识使用事件、负面反馈和内容代际隔离;
141
+ - 公共知识候选发现,以及预览令牌保护的原子提升。
142
+
143
+ 仍需与“已经证明”区分的内容:
144
+
145
+ - `FULI_ALIGNMENT_BENCHMARK.md` 中 A/B 阈值是验收约定;只有完成足量、同条件的真实配对任务
146
+ 后,才能声称 Fuli 已降低重复解释或返工;
147
+ - Benchmark 的测试项目和对话是明确标注的 **MOCK / 合成数据**,不是用户或生产数据;
148
+ - 当前决策工具可在首次记录时附带验证,但还没有面向既有 `Decision` 单独追加不可变验证结果
149
+ 的专用入口;
150
+ - Claude Code 具备确定性的生命周期 Hook;Codex 和 Cursor 当前是 Prompt fallback,不能把两者
151
+ 表述为同等强制能力。
9
152
 
10
153
  ## 安装
11
154
 
12
155
  准备:
13
156
 
14
- - Node.js 24.12 或更高版本
15
- - Docker Compose v2;Docker Desktop 或 Rancher Desktop 均可
16
- - 至少约 4 GB 可供容器使用的内存
157
+ - Node.js 24.12 或更高版本;
158
+ - Docker Compose v2;Docker Desktop 或 Rancher Desktop 均可;
159
+ - 至少约 4 GB 可供容器使用的内存。
17
160
 
18
161
  全局安装并初始化:
19
162
 
@@ -22,12 +165,9 @@ npm install --global fuli-context
22
165
  fuli setup
23
166
  ```
24
167
 
25
- `fuli setup` 会先展示即将进行的操作,再请求确认。它会检查容器运行时、初始化本机
26
- Graphiti / Neo4j、创建个人空间、安装配套 Agent Skills,并为检测到的 Agent 注册
27
- `fuli` MCP。Codex 接入还会在用户级 `AGENTS.md` 中合并一段很短的 Bootstrap:每个
28
- 用户任务开始时先调用协作偏好工具,并把当前工作目录作为 `projectPath` 传给 Fuli。
29
- 偏好正文仍以 Fuli 为唯一来源,不会复制到 Codex 配置中。默认不会连接或模拟团队共享
30
- Provider。
168
+ `fuli setup` 会先展示操作计划并请求确认,然后检查容器运行时、初始化本机
169
+ Graphiti / Neo4j、创建个人空间、安装配套 Agent Skills,并为检测到的 Agent 注册 `fuli`
170
+ MCP。默认只连接个人 Provider,不会模拟团队共享服务。
31
171
 
32
172
  初始化完成后:
33
173
 
@@ -37,179 +177,101 @@ fuli open
37
177
 
38
178
  管理界面默认位于 `http://127.0.0.1:2727`。
39
179
 
40
- ## CLI 使用
41
-
42
- 全局安装会提供两个等价命令:
43
-
44
- - `fuli`:完整命令名,文档默认使用它;
45
- - `fl`:短别名,例如 `fl status` 与 `fuli status` 完全相同。
180
+ ## CLI
46
181
 
47
- 查看版本和内置帮助:
48
-
49
- ```bash
50
- fuli --version
51
- fuli --help
52
- ```
53
-
54
- ### 本地服务与安装
182
+ 全局安装提供两个等价命令:`fuli` 和短别名 `fl`。
55
183
 
56
184
  | 命令 | 用途 |
57
185
  | --- | --- |
58
186
  | `fuli setup [选项]` | 初始化 Provider、管理界面、Agent 接入和 Skills;可重复执行 |
59
187
  | `fuli start [选项]` | 启动本机服务 |
60
- | `fuli stop [--data-dir DIR]` | 安全停止本机服务并保留数据 |
188
+ | `fuli stop [--data-dir DIR]` | 停止服务并保留数据 |
61
189
  | `fuli restart [选项]` | 重启本机服务 |
62
- | `fuli status [--json]` | 查看服务状态;`--json` 输出机器可读结果 |
63
- | `fuli open` | 在浏览器中打开管理界面 |
64
- | `fuli update [setup 选项]` | 更新全局 npm 包,并用新版 CLI 刷新本机接入 |
190
+ | `fuli status [--json]` | 查看服务状态 |
191
+ | `fuli open` | 打开管理界面 |
192
+ | `fuli update [setup 选项]` | 更新 npm 包并刷新本机接入 |
65
193
  | `fuli uninstall [--yes]` | 清理 Agent 接入和服务,保留知识数据 |
66
194
 
67
195
  常用示例:
68
196
 
69
197
  ```bash
70
- fuli start
71
- fuli start --open
198
+ fuli --version
72
199
  fuli status
73
- fuli status --json
74
- fuli restart
75
200
  fuli restart --rebuild
201
+ fuli start --lan
76
202
  fuli stop
77
203
  ```
78
204
 
79
- `fuli stop` 只停止本机服务,不删除图谱数据。
205
+ `start`、`restart` 和 `setup` 支持 `--data-dir DIR`、`--personal-space NAME`、
206
+ `--port PORT` 等选项。`start` 和 `restart` 还支持显式的 `--lan`:管理界面会监听
207
+ 私有 IPv4 局域网地址,并在终端输出可访问地址、用户名 `fuli` 和本次启动生成的临时访问
208
+ 口令。默认启动仍只监听 `127.0.0.1`;内部 Provider、Neo4j Browser 和 Bolt 不会随
209
+ `--lan` 开放。局域网模式使用 HTTP Basic Auth,只适合可信家庭或办公 Wi-Fi,不等同于
210
+ HTTPS 公网部署。
80
211
 
81
- `start` 和 `restart` 可使用 `--data-dir DIR`、`--personal-space NAME`、`--port PORT`;
82
- `--open` 会在启动后打开管理界面,`--rebuild` 会重新构建本机 Provider 容器。
83
-
84
- ### setup 选项
212
+ `setup` 还支持:
85
213
 
86
214
  | 选项 | 用途 |
87
215
  | --- | --- |
88
216
  | `--yes` | 跳过确认,适合无人值守执行 |
89
- | `--data-dir DIR` | 使用指定数据目录;后续命令应继续传入同一路径 |
90
- | `--personal-space NAME` | 设置首次初始化时的个人空间名称,默认是 `我` |
91
- | `--port PORT` | 设置管理界面端口,默认是 `2727` |
92
217
  | `--codex-only` | 只接入 Codex |
93
- | `--skip-agents` | 不修改 Agent 配置,也不刷新 Agent Skills |
218
+ | `--skip-agents` | 不修改 Agent 配置或 Skills |
94
219
  | `--no-start` | 初始化 Provider,但不启动管理界面 |
95
- | `--personal-only` | 只使用个人 Provider;这是默认模式 |
96
- | `--with-dev-public` | 同时启动本机开发用公共 Provider,仅用于开发或联调 |
97
-
98
- 例如,无人值守地完成默认初始化:
99
-
100
- ```bash
101
- fuli setup --yes
102
- ```
103
-
104
- 使用自定义数据目录和管理界面端口:
105
-
106
- ```bash
107
- fuli setup --data-dir "./fuli-data" --port 3727
108
- ```
220
+ | `--personal-only` | 只使用个人 Provider;默认模式 |
221
+ | `--with-dev-public` | 同时启动开发用公共 Provider,仅用于开发或联调 |
109
222
 
110
- 只初始化 Provider、不启动管理界面:
111
-
112
- ```bash
113
- fuli setup --no-start
114
- ```
115
-
116
- ## 更新
223
+ 更新:
117
224
 
118
225
  ```bash
119
226
  fuli update
120
227
  ```
121
228
 
122
- `fuli update` 默认先展示更新计划并请求确认。需要无人值守执行时:
123
-
124
- ```bash
125
- fuli update --yes
126
- ```
127
-
128
- 更新流程会先查询 npm 的 `latest` 版本;确认不会降级后,才安全停止旧版服务、安装当时
129
- 的 `fuli-context@latest` 对应版本,再直接使用新安装版本的 CLI 执行 `setup --yes`。
130
- 既有知识数据、配置备份和 Neo4j 数据卷不会删除;即使 npm 上已经是当前版本,也会刷新
131
- Agent 接入和配套 Skills。`update` 支持上表中的全部 setup 选项;使用过自定义数据目录、
132
- 端口或 Provider 模式时,应在更新时重复传入相同选项。
133
-
134
- 如果当前 CLI 来自尚未发布的工作区版本,并且版本号高于 npm `latest`,更新会在停止服务
135
- 和安装包之前退出,避免把开发版本降级。
229
+ 更新会先确认不会降级,再停止旧服务、安装 `fuli-context@latest` 并刷新 Agent 接入。
230
+ 既有知识、配置备份和 Neo4j 数据卷会保留。使用过自定义 setup 选项时,更新时应继续传入
231
+ 相同选项。
136
232
 
137
- 如果当前已安装版本尚不识别 `update`,需要先手动升级一次到包含该命令的版本:
138
-
139
- ```bash
140
- npm install --global fuli-context@latest
141
- fuli setup --yes
142
- ```
143
-
144
- 如果自动更新在 npm 安装或新版 setup 阶段失败,知识数据仍会保留。检查命令输出后可用
145
- 上面两条命令恢复;使用过自定义 setup 选项时也要一并带上。
146
-
147
- ## 卸载
148
-
149
- 先清理 Agent 接入,再移除全局 npm 包:
233
+ 卸载:
150
234
 
151
235
  ```bash
152
236
  fuli uninstall
153
237
  npm uninstall --global fuli-context
154
238
  ```
155
239
 
156
- `fuli uninstall` 会:
157
-
158
- - 停止本机 Fuli 服务;
159
- - 从 Codex、Claude Code 和 Cursor 中移除 Fuli MCP 接入;
160
- - 只删除仍与当前安装包完全一致的 Fuli Skills,有本地修改的 Skill 会保留;
161
- - 保留个人图谱、配置备份与 Neo4j 数据卷。
162
-
163
- 这样重新安装时可以继续使用原数据。数据永久删除不包含在自动卸载流程中,避免误删。
164
-
165
- ## 个人版边界
240
+ 自动卸载不会永久删除个人图谱,避免误删。重新安装后可以继续使用原数据。
166
241
 
167
- - 个人知识写入本机 Provider。
168
- - Agent 归纳结构化知识,不保存整段会话。
169
- - Token、Cookie、私钥、凭据、临时日志与原始命令输出不会写入图谱。
170
- - Graphiti 的远程 LLM 路径被禁用;当前嵌入在本机计算。
171
- - 搜索按个人空间和项目范围显式限定,不会默认混入所有项目。
172
- - Fuli 不是实时监控或 Git 服务;实时错误和代码状态应从对应的监控、日志或 Git
173
- 工具获取。
242
+ ## Agent 接入与主要工具
174
243
 
175
- 团队共享能力将通过单独部署的 Provider 提供。个人版 npm 继续作为本地 CLI、管理界面
176
- 和 Agent 接入客户端,避免用户同时安装两个容易混淆的全局命令包。
177
-
178
- ## Agent 工作方式
179
-
180
- Fuli 为支持的 Agent 安装两个用户级 Skills:
181
-
182
- - `capturing-session-knowledge`:按稳定知识边界检索和静默沉淀上下文;
183
- - `grilling-project`:帮助用户审视和补全个人项目资料。
184
-
185
- Codex 的用户级 Bootstrap 要求 Agent 在每个用户任务开始时、调用其他工具或回答之前,
186
- 调用 `get_collaboration_preferences`。调用只把当前工作目录作为瞬时 `projectPath`
187
- 传给本机 Fuli;绝对路径不会写入图谱,也不会出现在工具结果中。Fuli 在 MCP 服务端
188
- 完成匹配:个人全局的品味、个性与判断偏好始终生效;只有仓库根、Codex worktree 的
189
- 原仓库,或工作区内唯一的精确子项目对应一个已登记个人项目时,才叠加该项目偏好。
190
- 模糊、多项目、待确认、已失效、冲突或其他项目的偏好不会进入实际生效列表。首次写入
191
- 或更新 Bootstrap 后,新建或重新打开一个 Codex 任务,让用户级 `AGENTS.md` 重新加载;
192
- 此后偏好修改会在下一次用户任务中重新读取,不需要重启 Codex。
193
-
194
- 疑似冲突既可以立即人工处理,也可以标记为“交给 AI,使用时处理”。后者不会提前覆盖
195
- 任何一条记录;只有后续任务确实需要相关偏好时,Agent 才会先比较双方并调用专用解决
196
- 工具。解决结果会保留修订历史,并标明该偏好曾发生冲突、由 AI 处理及其判断依据。
197
- 协作偏好页顶部的“已确认”“待确认”“疑似冲突”均为可点击入口;“待确认”会筛出对应
198
- 记录并打开首条详情,可继续确认、纠正或标记失效。
199
-
200
- 主要 MCP 工具包括:
244
+ Fuli 为支持的 Agent 安装 `capturing-session-knowledge` 和 `grilling-project` Skills。Claude
245
+ Code 使用 `UserPromptSubmit` 和 `Stop` Hook 接入任务生命周期;Codex 的用户级
246
+ `AGENTS.md` 与 Cursor 指令使用 Prompt fallback。偏好正文始终以本机 Fuli 为唯一来源,
247
+ 不会复制到 Agent 配置中。
201
248
 
202
249
  | 工具 | 用途 |
203
250
  | --- | --- |
204
- | `get_collaboration_preferences` | 获取当前会话实际生效的全局与项目级协作偏好 |
205
- | `resolve_deferred_preference_conflict` | 在相关任务首次使用前解决已交给 AI 的偏好冲突并留下审计标记 |
206
- | `capture_session_knowledge` | 批量写入个人知识或创建发布预审草稿 |
207
- | `search_knowledge_graph` | 在明确范围内查询个人偏好与项目知识 |
208
- | `get_knowledge_graph` | 获取有界节点—关系图 |
209
- | `list_knowledge_spaces` | 查看个人空间、项目与订阅 |
210
- | `upsert_personal_project` | 新建或更新个人项目资料 |
211
- | `revise_personal_knowledge` | 修正、失效或恢复个人知识 |
212
- | `get_graphiti_status` | 检查 Provider 与 Graphiti 状态 |
251
+ | `begin_task_context` | Hook 入口:创建任务令牌并返回生效上下文 |
252
+ | `get_collaboration_preferences` | Fallback 入口:读取全局与精确项目偏好 |
253
+ | `search_current_project_knowledge` | 子项目优先、按授权关系向上检索 |
254
+ | `search_knowledge_graph` | 在明确的有界范围内执行更通用的查询 |
255
+ | `record_knowledge_usage` | 记录真正影响结果的引用或应用 |
256
+ | `record_knowledge_feedback` | 保存拒绝、验证失败、冲突或过时证据 |
257
+ | `record_decision_trace` | 保存选择、被拒方案、理由和可选初始验证 |
258
+ | `capture_session_knowledge` | 批量写入少量、结构化的候选知识 |
259
+ | `checkpoint_task_knowledge` | 以 `capture_candidates` 或 `retain_nothing` 结束知识检查 |
260
+ | `discover_common_knowledge_candidates` | 只读发现可能属于上级项目的公共候选 |
261
+ | `preview_common_knowledge_promotion` | 预览人类确认的公共知识提升 |
262
+ | `apply_common_knowledge_promotion` | 使用一次性令牌原子执行提升 |
263
+ | `resolve_deferred_preference_conflict` | 在实际需要时处理已授权给 AI 的冲突 |
264
+
265
+ ## 隐私与安全边界
266
+
267
+ - 个人知识写入本机 Provider;
268
+ - Agent 归纳结构化知识,不保存原始会话;
269
+ - Token、Cookie、私钥、凭据、私人联系信息、临时日志和原始命令输出不得进入图谱;
270
+ - Graphiti 远程 LLM 路径被禁用,当前嵌入在本机计算;
271
+ - 搜索按个人空间和项目范围限定,不默认混入所有项目;
272
+ - 公共提升需要可审计的人工确认,Agent 自己的使用证据最多晋级为
273
+ `agent_confirmed`;
274
+ - Fuli 不是实时监控或 Git 服务,实时状态应从对应系统重新读取。
213
275
 
214
276
  ## 本机服务
215
277
 
@@ -219,10 +281,18 @@ Codex 的用户级 Bootstrap 要求 Agent 在每个用户任务开始时、调
219
281
  | 个人 Provider | `127.0.0.1:8787` |
220
282
  | Fuli 管理界面 | `127.0.0.1:2727` |
221
283
 
222
- 如果端口被占用、Docker Compose 不可用或容器引擎未启动,setup 会在修改 Agent 配置前
223
- 停止,并给出对应错误。
284
+ 需要同一 Wi-Fi 下的其他设备访问时,执行 `fuli start --lan`。若当前已经以本机模式运行,
285
+ 命令会安全重启管理界面并保持 Provider 与图谱数据不变。退出局域网模式可执行
286
+ `fuli restart`;再次进入局域网模式会更换临时访问口令。
287
+
288
+ 如果端口被占用、Docker Compose 不可用或容器引擎未启动,setup 会在修改 Agent 配置前停止
289
+ 并报告原因。
290
+
291
+ ## 验收与源码开发
224
292
 
225
- ## 源码开发
293
+ - [Alignment Benchmark](FULI_ALIGNMENT_BENCHMARK.md)
294
+ - [中文验收索引](acceptance/README.md)
295
+ - [知识检索与确认流程图](acceptance/知识检索与确认流程图.md)
226
296
 
227
297
  ```bash
228
298
  npm install
@@ -239,8 +309,8 @@ docker compose -f compose.graphiti.yml config --quiet
239
309
  ```
240
310
 
241
311
  `npm run test:package` 会构建前端、生成真实 npm tarball、安装到隔离的全局前缀,并验证
242
- `fuli` / `fl`、版本号、帮助信息和已发布 Web UI。测试源码、QA 截图与内部设计文档
243
- 都不会进入 npm 包。
312
+ `fuli` / `fl`、版本号、帮助信息和 Web UI。测试源码、QA 截图和内部设计文档不会进入 npm
313
+ 包。
244
314
 
245
315
  ## License
246
316
 
@@ -0,0 +1 @@
1
+ .batch-confirm-dialog[data-v-5b6ea24b]{width:min(980px,100vw - 64px)}.batch-confirm-form[data-v-5b6ea24b]{grid-template-columns:320px minmax(0,1fr);gap:24px;padding-top:20px;display:grid}.batch-confirm-controls[data-v-5b6ea24b]{align-content:start;gap:14px;display:grid}.batch-confirm-controls>label[data-v-5b6ea24b],.batch-confirmer-fields label[data-v-5b6ea24b]{color:#5f6962;gap:6px;font-size:10px;font-weight:600;display:grid}.batch-confirm-controls[data-v-5b6ea24b] .searchable-select{width:100%}.batch-group-summary[data-v-5b6ea24b]{border-top:1px solid #e1e5e2;border-bottom:1px solid #e1e5e2;gap:4px;padding:12px 0;display:grid}.batch-group-summary span[data-v-5b6ea24b],.batch-group-summary small[data-v-5b6ea24b]{color:#89918b;font-size:8px}.batch-group-summary strong[data-v-5b6ea24b]{color:#35443b;font-size:12px}.batch-group-summary p[data-v-5b6ea24b]{color:#6e7871;font-size:9px;line-height:1.5}.batch-confirmer-fields[data-v-5b6ea24b]{grid-template-columns:112px minmax(0,1fr);gap:8px;display:grid}.batch-confirm-rule[data-v-5b6ea24b],.batch-limit-note[data-v-5b6ea24b]{color:#7c857f;font-size:9px;line-height:1.5}.batch-confirm-review[data-v-5b6ea24b]{border-left:1px solid #e1e5e2;min-width:0;padding-left:24px}.batch-review-heading[data-v-5b6ea24b]{justify-content:space-between;align-items:center;gap:16px;padding-bottom:10px;display:flex}.batch-review-heading h4[data-v-5b6ea24b]{color:#344239;font-size:13px}.batch-review-heading p[data-v-5b6ea24b]{color:#858e87;margin-top:2px;font-size:9px}.batch-review-list[data-v-5b6ea24b]{border-top:1px solid #e3e6e3;border-bottom:1px solid #e3e6e3;max-height:410px;overflow:auto}.batch-review-item[data-v-5b6ea24b]{cursor:pointer;border-bottom:1px solid #eceeec;grid-template-columns:auto minmax(0,1fr);gap:9px;padding:10px 2px;display:grid}.batch-review-item[data-v-5b6ea24b]:last-child{border-bottom:0}.batch-review-item>input[data-v-5b6ea24b]{margin-top:2px}.batch-review-item>span[data-v-5b6ea24b]{gap:3px;min-width:0;display:grid}.batch-review-item strong[data-v-5b6ea24b]{color:#3a4740;font-size:10px}.batch-review-item small[data-v-5b6ea24b]{color:#77817a;font-size:8px}.batch-review-item em[data-v-5b6ea24b]{color:#848d87;text-overflow:ellipsis;white-space:nowrap;font-size:8px;font-style:normal;line-height:1.4;overflow:hidden}.batch-confirm-acknowledgement[data-v-5b6ea24b]{color:#4f5d55;cursor:pointer;align-items:flex-start;gap:8px;margin-top:12px;font-size:9px;line-height:1.5;display:flex}.batch-confirm-form>.publish-dialog-error[data-v-5b6ea24b],.batch-confirm-form>.publish-dialog-actions[data-v-5b6ea24b]{grid-column:1/-1}@media (width<=820px){.batch-confirm-form[data-v-5b6ea24b]{grid-template-columns:1fr}.batch-confirm-review[data-v-5b6ea24b]{border-left:0;padding:0}}.knowledge-organizer[data-v-0b61f3ed]{flex-direction:column;gap:12px;padding:18px 24px 20px;display:flex;overflow:hidden}.organizer-head[data-v-0b61f3ed]{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px 24px;min-width:0;display:grid}.organizer-principle[data-v-0b61f3ed]{align-self:center;min-width:0;padding:0 2px}.organizer-principle h3[data-v-0b61f3ed]{font-size:16px}.organizer-principle>p[data-v-0b61f3ed]:last-child{color:#6e7771;max-width:760px;margin-top:5px;font-size:11px;line-height:1.55}.organizer-attention[data-v-0b61f3ed]{text-align:right;border-left:1px solid #dde2de;grid-area:1/2;min-width:152px;padding-left:20px}.organizer-attention strong[data-v-0b61f3ed],.organizer-attention span[data-v-0b61f3ed],.organizer-attention small[data-v-0b61f3ed]{display:block}.organizer-attention strong[data-v-0b61f3ed]{color:#6f582b;font-size:23px;font-weight:620}.organizer-attention span[data-v-0b61f3ed]{color:#5f675f;font-size:10px;font-weight:650}.organizer-attention small[data-v-0b61f3ed]{color:#8a918b;margin-top:2px;font-size:8px}.organizer-loading-inline[data-v-0b61f3ed]{color:#7b847e;text-align:center;font-size:10px}.organizer-toolbar[data-v-0b61f3ed]{align-items:center;gap:8px;min-height:34px;display:flex}.organizer-search[data-v-0b61f3ed]{flex:300px;min-width:180px;max-width:360px}.organizer-search>span[data-v-0b61f3ed]{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.organizer-search input[data-v-0b61f3ed]{width:100%}.review-state-filter[data-v-0b61f3ed],.quadrant-filter[data-v-0b61f3ed]{white-space:nowrap;background:#f1f4f1;border:1px solid #d7ddd8;border-radius:7px;flex:none;align-items:center;gap:2px;height:31px;padding:2px;display:flex}.quadrant-filter[data-v-0b61f3ed]{max-width:470px;overflow-x:auto}.review-state-filter>span[data-v-0b61f3ed],.quadrant-filter>span[data-v-0b61f3ed]{color:#7a847d;padding:0 6px;font-size:8px;font-weight:650}.review-state-filter button[data-v-0b61f3ed],.quadrant-filter button[data-v-0b61f3ed]{color:#626d66;white-space:nowrap;background:0 0;border:0;border-radius:5px;height:25px;padding:0 7px;font-size:9px}.review-state-filter button[data-v-0b61f3ed]:hover,.quadrant-filter button[data-v-0b61f3ed]:hover{color:#35473d;background:#ffffffa8}.review-state-filter button.active[data-v-0b61f3ed],.quadrant-filter button.active[data-v-0b61f3ed]{color:#30483a;background:#fff;box-shadow:0 1px 3px #2f3d341f}.review-state-filter button.state-pending.active[data-v-0b61f3ed]{color:#765d2e}.review-state-filter button.state-agent_confirmed.active[data-v-0b61f3ed]{color:#4d5f78}.review-state-filter button.state-confirmed.active[data-v-0b61f3ed]{color:#356047}.review-state-filter button strong[data-v-0b61f3ed],.quadrant-filter button strong[data-v-0b61f3ed]{margin-left:2px;font-size:8px;font-weight:720}.organizer-result-summary[data-v-0b61f3ed]{color:#7b847e;white-space:nowrap;flex:none;font-size:9px}.organizer-toolbar .batch-confirm-action[data-v-0b61f3ed]{margin-left:auto}.organizer-toolbar .toolbar-action+.toolbar-action[data-v-0b61f3ed]{margin-left:0}.organizer-truncated[data-v-0b61f3ed]{color:#806536;margin:-4px 0 0;font-size:9px}.organizer-layout[data-v-0b61f3ed]{background:#fff;border:1px solid #cfd7d1;border-radius:8px;flex:1;grid-template-columns:minmax(0,1fr);min-height:0;display:grid;overflow:hidden}.organizer-layout.has-selection[data-v-0b61f3ed]{grid-template-columns:minmax(0,1fr) 340px}.organizer-layout[data-v-0b61f3ed]:not(.has-selection) .graph-inspector{display:none}.organizer-directory[data-v-0b61f3ed]{overscroll-behavior:contain;min-width:0;overflow:auto}.organizer-table-head[data-v-0b61f3ed],.organizer-row[data-v-0b61f3ed]{grid-template-columns:minmax(230px,1.35fr) 114px 130px minmax(160px,.8fr) 118px;align-items:center;gap:12px;min-width:920px;display:grid}.organizer-table-head[data-v-0b61f3ed]{z-index:2;color:#8b938d;background:#f7f8f6;border-bottom:1px solid #e0e4e0;padding:10px 15px;font-size:9px;font-weight:680;position:sticky;top:0}.organizer-row[data-v-0b61f3ed]{color:#4f5952;text-align:left;background:#fff;border:0;border-bottom:1px solid #e8ebe8;width:100%;min-height:68px;padding:11px 15px}.organizer-row[data-v-0b61f3ed]:hover{background:#f8faf8}.organizer-row.selected[data-v-0b61f3ed]{background:#f1f6f3;box-shadow:inset 2px 0 #557863}.organizer-item-copy[data-v-0b61f3ed]{gap:4px;min-width:0;display:grid}.organizer-item-copy strong[data-v-0b61f3ed],.organizer-item-copy small[data-v-0b61f3ed]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.organizer-item-copy strong[data-v-0b61f3ed]{color:#2f3933;font-size:11px;font-weight:630}.organizer-item-copy small[data-v-0b61f3ed],.organizer-basis[data-v-0b61f3ed],.organizer-row time[data-v-0b61f3ed]{color:#7b847e;font-size:9px}.quadrant-chip[data-v-0b61f3ed],.review-chip[data-v-0b61f3ed]{white-space:nowrap;border-radius:999px;width:fit-content;padding:4px 7px;font-size:9px;font-weight:650}.quadrant-chip[data-v-0b61f3ed]{color:#59655e;background:#f0f2ef;gap:1px;display:grid}.quadrant-chip small[data-v-0b61f3ed]{color:inherit;opacity:.75;font-size:7px;font-weight:520}.quadrant-chip.known_known[data-v-0b61f3ed]{color:#356047;background:#edf6f0}.quadrant-chip.known_unknown[data-v-0b61f3ed]{color:#77602f;background:#f7f2e5}.quadrant-chip.unknown_known[data-v-0b61f3ed]{color:#4d5f78;background:#eef2f7}.quadrant-chip.unknown_unknown[data-v-0b61f3ed]{color:#725d70;background:#f5eff4}.review-chip.state-confirmed[data-v-0b61f3ed]{color:#356047;background:#edf6f0}.review-chip.state-agent_confirmed[data-v-0b61f3ed]{color:#4d5f78;background:#eef2f7}.review-chip.state-pending[data-v-0b61f3ed]{color:#77602f;background:#f7f2e5}.organizer-basis[data-v-0b61f3ed]{overflow-wrap:anywhere}@media (width<=1260px){.review-state-filter>span[data-v-0b61f3ed],.quadrant-filter>span[data-v-0b61f3ed],.organizer-result-summary[data-v-0b61f3ed]{display:none}.organizer-table-head[data-v-0b61f3ed],.organizer-row[data-v-0b61f3ed]{grid-template-columns:minmax(210px,1fr) 108px 104px minmax(140px,.8fr) 104px;min-width:760px}}@media (width<=1040px){.organizer-layout.has-selection[data-v-0b61f3ed]{grid-template-columns:minmax(0,1fr) 280px}.organizer-table-head[data-v-0b61f3ed],.organizer-row[data-v-0b61f3ed]{grid-template-columns:minmax(210px,1fr) 108px 104px;min-width:470px}.organizer-table-head[data-v-0b61f3ed]>:nth-child(n+4),.organizer-basis[data-v-0b61f3ed],.organizer-row time[data-v-0b61f3ed]{display:none}.batch-confirm-action[data-v-0b61f3ed]{text-overflow:ellipsis;white-space:nowrap;max-width:108px;overflow:hidden}}
@@ -1 +1 @@
1
- import{C as e,D as t,E as n,F as r,J as i,K as a,N as o,R as s,S as c,T as l,U as u,V as d,_ as f,a as p,b as m,d as h,m as g,q as _,r as v,t as ee,v as y,w as b,x,y as S}from"./console-B_Ena2DS.js";import{i as C,r as w,t as T}from"./identity-CjBwYSMX.js";import{E,T as D,_ as O,a as k,g as A,h as j,l as M,n as N,t as P}from"./model-C-5RVIJ2.js";import{i as F,n as I,r as te,t as L}from"./KnowledgeInspector-BZkB2wJn.js";var R={open:``,class:`project-dialog batch-confirm-dialog vue-dialog`},z={class:`project-dialog-shell`},B={class:`project-dialog-header`},V={class:`batch-confirm-controls`},H={key:0,class:`batch-group-summary`},U={class:`batch-confirmer-fields`},ne=[`required`,`placeholder`],re=[`placeholder`],ie={class:`batch-confirm-rule`},W={class:`batch-confirm-review`},ae={class:`batch-review-heading`},oe={key:0,class:`batch-limit-note`},G={class:`batch-review-list`},K=[`value`],se={class:`batch-confirm-acknowledgement`},q={key:0,class:`publish-dialog-error`,role:`alert`},ce={class:`publish-dialog-actions`},le=[`disabled`],ue=[`disabled`],J=F(t({__name:`KnowledgeBatchConfirmDialog`,props:{groups:{},personalSpaceId:{}},emits:[`close`,`saved`],setup(t,{emit:c}){let _=t,v=c,E=ee(),O=u(``),k=u([]),A=u(`user`),j=u(``),M=u(``),N=u(!1),F=u(!1),I=u(``),te=m(()=>_.groups.map(e=>({value:e.key,label:e.label,meta:h(`knowledge.dialogs.batch.groupMeta`,{kind:e.kind===`source`?h(`knowledge.dialogs.batch.sameSource`):h(`knowledge.dialogs.batch.sameSession`),count:e.items.length}),search:`${w(e.value)} ${e.description}`}))),L=m(()=>_.groups.find(({key:e})=>e===O.value)??null),J=m(()=>L.value?.items.slice(0,200)??[]),Y=m(()=>{let e=new Set(k.value);return J.value.filter(t=>e.has(Z(t)))}),X=m(()=>J.value.length>0&&Y.value.length===J.value.length),de=m(()=>!F.value&&Y.value.length>=2&&!!M.value.trim()&&N.value&&(A.value!==`authoritative_source`||!!j.value.trim())),fe=m(()=>[{value:`user`,label:h(`knowledge.domain.actors.user`)},{value:`authoritative_source`,label:h(`knowledge.domain.actors.authoritative_source`)}]);s(()=>_.groups,e=>{e.some(({key:e})=>e===O.value)||(O.value=e[0]?.key??``)},{immediate:!0}),s(O,()=>{k.value=J.value.map(Z),N.value=!1,I.value=``},{immediate:!0});function Z(e){return`${e.itemKind}:${e.id}`}function pe(){k.value=X.value?[]:J.value.map(Z),N.value=!1}function Q(e){let t=L.value;return t?P(e,t):null}async function me(){let e=L.value;if(!e)return $(h(`knowledge.dialogs.batch.errors.groupRequired`));if(Y.value.length<2)return $(h(`knowledge.dialogs.batch.errors.itemsRequired`));if(!M.value.trim())return $(h(`knowledge.dialogs.batch.errors.reasonRequired`));if(A.value===`authoritative_source`&&!j.value.trim())return $(h(`knowledge.dialogs.batch.errors.sourceNameRequired`));if(!N.value)return $(h(`knowledge.dialogs.batch.errors.acknowledgmentRequired`));F.value=!0,I.value=``;try{let t=await p(`/api/knowledge/batch-confirmation`,{personalSpaceId:_.personalSpaceId,groupKind:e.kind,groupValue:e.value,reason:M.value.trim(),confirmer:{kind:A.value,label:j.value.trim()||null},items:Y.value.map(e=>{let t=Q(e);return{itemId:e.id,itemKind:e.itemKind,existenceReason:t.existenceReason,quadrantReason:t.quadrantReason,proposedBy:t.proposedBy}})});E.notify(h(`knowledge.dialogs.batch.confirmed`,{count:t.confirmed_count})),v(`saved`),v(`close`)}catch(e){I.value=e instanceof Error?e.message:h(`knowledge.dialogs.batch.errors.failed`),E.reportError(e)}finally{F.value=!1}}function $(e){I.value=e}return(t,s)=>(o(),b(`dialog`,R,[x(`div`,z,[x(`header`,B,[x(`div`,null,[s[8]||=x(`p`,{class:`eyebrow`},`BATCH CONFIRMATION`,-1),x(`h3`,null,i(a(h)(`knowledge.dialogs.batch.title`)),1),x(`p`,null,i(a(h)(`knowledge.dialogs.batch.intro`)),1)]),x(`button`,{class:`secondary-action`,type:`button`,onClick:s[0]||=e=>v(`close`)},i(a(h)(`common.actions.close`)),1)]),x(`form`,{class:`batch-confirm-form`,onSubmit:y(me,[`prevent`])},[x(`section`,V,[x(`label`,null,[l(i(a(h)(`knowledge.dialogs.batch.range`))+` `,1),n(C,{modelValue:O.value,"onUpdate:modelValue":s[1]||=e=>O.value=e,options:te.value,label:a(h)(`knowledge.dialogs.batch.rangeLabel`),searchable:``},null,8,[`modelValue`,`options`,`label`])]),L.value?(o(),b(`div`,H,[x(`span`,null,i(L.value.kind===`source`?a(h)(`knowledge.dialogs.batch.sameSource`):a(h)(`knowledge.dialogs.batch.sameSession`)),1),x(`strong`,null,i(L.value.label),1),x(`p`,null,i(L.value.description),1),x(`small`,null,`#`+i(a(T)(L.value.value,28)),1)])):e(``,!0),x(`div`,U,[x(`label`,null,[l(i(a(h)(`knowledge.dialogs.batch.confirmer`))+` `,1),n(C,{modelValue:A.value,"onUpdate:modelValue":s[2]||=e=>A.value=e,options:fe.value,label:a(h)(`knowledge.dialogs.batch.confirmerLabel`)},null,8,[`modelValue`,`options`,`label`])]),x(`label`,null,[l(i(a(h)(`knowledge.dialogs.batch.confirmerDescription`))+` `,1),d(x(`input`,{"onUpdate:modelValue":s[3]||=e=>j.value=e,maxlength:`160`,required:A.value===`authoritative_source`,placeholder:A.value===`user`?a(h)(`knowledge.dialogs.batch.userPlaceholder`):a(h)(`knowledge.dialogs.batch.sourcePlaceholder`)},null,8,ne),[[f,j.value]])])]),x(`label`,null,[l(i(a(h)(`knowledge.dialogs.batch.basis`))+` `,1),d(x(`textarea`,{"onUpdate:modelValue":s[4]||=e=>M.value=e,maxlength:`2000`,rows:`3`,required:``,placeholder:a(h)(`knowledge.dialogs.batch.basisPlaceholder`)},null,8,re),[[f,M.value]])]),x(`p`,ie,i(a(h)(`knowledge.dialogs.batch.agentBoundary`)),1)]),x(`section`,W,[x(`div`,ae,[x(`div`,null,[x(`h4`,null,i(a(h)(`knowledge.dialogs.batch.itemReview`)),1),x(`p`,null,i(a(h)(`knowledge.dialogs.batch.selected`,{selected:Y.value.length,total:J.value.length})),1)]),x(`button`,{class:`secondary-action`,type:`button`,onClick:pe},i(X.value?a(h)(`knowledge.dialogs.batch.clearAll`):a(h)(`knowledge.dialogs.batch.selectAll`)),1)]),(L.value?.items.length??0)>200?(o(),b(`p`,oe,i(a(h)(`knowledge.dialogs.batch.limit`)),1)):e(``,!0),x(`div`,G,[(o(!0),b(S,null,r(J.value,e=>(o(),b(`label`,{key:Z(e),class:`batch-review-item`},[d(x(`input`,{"onUpdate:modelValue":s[5]||=e=>k.value=e,type:`checkbox`,value:Z(e)},null,8,K),[[g,k.value]]),x(`span`,null,[x(`strong`,null,i(e.title),1),x(`small`,null,i(a(D)(e.originQuadrant))+` · `+i(e.type),1),x(`em`,null,i(Q(e)?.existenceReason),1),x(`em`,null,i(Q(e)?.quadrantReason),1)])]))),128))]),x(`label`,se,[d(x(`input`,{"onUpdate:modelValue":s[6]||=e=>N.value=e,type:`checkbox`},null,512),[[g,N.value]]),x(`span`,null,i(a(h)(`knowledge.dialogs.batch.acknowledgment`)),1)])]),I.value?(o(),b(`p`,q,i(I.value),1)):e(``,!0),x(`div`,ce,[x(`button`,{class:`secondary-action`,type:`button`,disabled:F.value,onClick:s[7]||=e=>v(`close`)},i(a(h)(`common.actions.cancel`)),9,le),x(`button`,{class:`primary-action`,type:`submit`,disabled:!de.value},i(F.value?a(h)(`knowledge.dialogs.batch.confirming`):a(h)(`knowledge.dialogs.batch.confirmItems`,{count:Y.value.length})),9,ue)])],32)])]))}}),[[`__scopeId`,`data-v-5b6ea24b`]]),Y={class:`view knowledge-organizer`},X={class:`organizer-head`},de={class:`organizer-principle`},fe={class:`organizer-attention`},Z={class:`organizer-toolbar`},pe={class:`organizer-search`},Q=[`placeholder`],me=[`aria-label`],$=[`aria-pressed`],he=[`data-quadrant`,`aria-pressed`,`title`,`onClick`],ge=[`aria-label`],_e=[`aria-pressed`],ve=[`data-review-state`,`aria-pressed`,`title`,`onClick`],ye={class:`organizer-result-summary`},be={key:0},xe={key:0,class:`organizer-truncated`},Se={key:1,class:`view-loading`},Ce=[`aria-label`],we={class:`organizer-table-head`,"aria-hidden":`true`},Te={class:`organizer-list`},Ee=[`onClick`],De={class:`organizer-item-copy`},Oe={class:`organizer-basis`},ke={key:0,class:`empty-state`},Ae=F(t({__name:`KnowledgeOrganizerPage`,setup(t){let p=ee(),g=u(null),y=u(!1),C=u(``),w=u(`all`),T=u(`all`),P=u(null),F=u(null),R=u(null),z=u(!1),B=m(()=>[{value:`known_unknown`,short:h(`knowledge.workspace.organizer.quadrants.known_unknown.short`),coordinate:h(`knowledge.workspace.organizer.quadrants.known_unknown.coordinate`)},{value:`known_known`,short:h(`knowledge.workspace.organizer.quadrants.known_known.short`),coordinate:h(`knowledge.workspace.organizer.quadrants.known_known.coordinate`)},{value:`unknown_unknown`,short:h(`knowledge.workspace.organizer.quadrants.unknown_unknown.short`),coordinate:h(`knowledge.workspace.organizer.quadrants.unknown_unknown.coordinate`)},{value:`unknown_known`,short:h(`knowledge.workspace.organizer.quadrants.unknown_known.short`),coordinate:h(`knowledge.workspace.organizer.quadrants.unknown_known.coordinate`)}]),V=m(()=>[{value:`pending`,label:h(`knowledge.domain.reviewStates.pending`),hint:h(`knowledge.workspace.organizer.review.pendingHint`)},{value:`agent_confirmed`,label:h(`knowledge.domain.reviewStates.agent_confirmed`),hint:h(`knowledge.workspace.organizer.review.agentConfirmedHint`)},{value:`confirmed`,label:h(`knowledge.domain.reviewStates.confirmed`),hint:h(`knowledge.workspace.organizer.review.confirmedHint`)}]),H=m(()=>j(g.value)),U=m(()=>N(H.value)),ne=m(()=>Object.fromEntries([...B.value.map(({value:e})=>e),`unclassified`].map(e=>[e,H.value.filter(t=>t.originQuadrant===e).length]))),re=m(()=>Object.fromEntries(V.value.map(({value:e})=>[e,H.value.filter(t=>A(t)===e).length]))),ie=m(()=>w.value!==`all`),W=m(()=>ie.value?H.value.filter(e=>e.originQuadrant===w.value):H.value),ae=m(()=>Object.fromEntries(V.value.map(({value:e})=>[e,W.value.filter(t=>A(t)===e).length]))),oe=m(()=>re.value.pending),G=m(()=>{let e=C.value.trim().toLocaleLowerCase();return H.value.filter(t=>w.value!==`all`&&t.originQuadrant!==w.value||T.value!==`all`&&A(t)!==T.value?!1:!e||[t.title,t.body,t.type,D(t.originQuadrant),E(t),...t.evidence.flatMap(e=>[e.name,e.summary,e.source_description])].filter(Boolean).join(` `).toLocaleLowerCase().includes(e))});s(()=>p.activePersonalSpace?.id,e=>{e&&K(e)},{immediate:!0}),s(G,e=>{P.value&&!e.some(({id:e,itemKind:t})=>e===P.value?.id&&t===P.value?.itemKind)&&(P.value=null)});async function K(e=p.activePersonalSpace?.id){if(e){y.value=!0;try{let t=new URLSearchParams({spaceId:e,limit:`500`});g.value=await v(`/api/graph?${t}`),P.value&&=H.value.find(({id:e})=>e===P.value?.id)??null}catch(e){g.value=null,p.reportError(e)}finally{y.value=!1}}}function se(e){w.value=w.value===e?`all`:e}function q(e){T.value=e}function ce(e){C.value=``,w.value=e.originQuadrant,T.value=`all`,P.value=e}return(t,s)=>(o(),b(`section`,Y,[x(`div`,X,[x(`div`,de,[s[13]||=x(`p`,{class:`eyebrow`},`HOW CLASSIFICATION WORKS`,-1),x(`h3`,null,i(a(h)(`knowledge.workspace.organizer.title`)),1),x(`p`,null,i(a(h)(`knowledge.workspace.organizer.copy`)),1)]),x(`div`,fe,[x(`strong`,null,i(oe.value),1),x(`span`,null,i(a(h)(`knowledge.workspace.organizer.needsAttention`)),1),x(`small`,null,i(a(h)(`knowledge.workspace.organizer.legacyAttention`)),1)])]),x(`template`,null,[x(`div`,Z,[x(`label`,pe,[x(`span`,null,i(a(h)(`knowledge.workspace.organizer.filterKnowledge`)),1),d(x(`input`,{"onUpdate:modelValue":s[0]||=e=>C.value=e,type:`search`,placeholder:a(h)(`knowledge.workspace.organizer.searchPlaceholder`)},null,8,Q),[[f,C.value]])]),x(`div`,{class:`quadrant-filter`,"aria-label":a(h)(`knowledge.workspace.organizer.quadrantFilterAria`)},[x(`span`,null,i(a(h)(`knowledge.workspace.organizer.discoverySource`)),1),x(`button`,{type:`button`,"data-quadrant":`all`,class:_({active:w.value===`all`}),"aria-pressed":w.value===`all`,onClick:s[1]||=e=>w.value=`all`},[l(i(a(h)(`common.status.all`))+` `,1),x(`strong`,null,i(H.value.length),1)],10,$),(o(!0),b(S,null,r(B.value,e=>(o(),b(`button`,{key:e.value,type:`button`,"data-quadrant":e.value,class:_({active:w.value===e.value}),"aria-pressed":w.value===e.value,title:e.coordinate,onClick:t=>se(e.value)},[l(i(e.short)+` `,1),x(`strong`,null,i(ne.value[e.value]),1)],10,he))),128))],8,me),x(`div`,{class:`review-state-filter`,"aria-label":a(h)(`knowledge.workspace.organizer.reviewFilterAria`)},[x(`span`,null,i(a(h)(`knowledge.workspace.organizer.reviewStatus`)),1),x(`button`,{type:`button`,"data-review-state":`all`,class:_({active:T.value===`all`}),"aria-pressed":T.value===`all`,onClick:s[2]||=e=>q(`all`)},[l(i(a(h)(`common.status.all`))+` `,1),x(`strong`,null,i(W.value.length),1)],10,_e),(o(!0),b(S,null,r(V.value,e=>(o(),b(`button`,{key:e.value,type:`button`,"data-review-state":e.value,class:_([`state-${e.value}`,{active:T.value===e.value}]),"aria-pressed":T.value===e.value,title:e.hint,onClick:t=>q(e.value)},[l(i(e.label)+` `,1),x(`strong`,null,i(ae.value[e.value]),1)],10,ve))),128))],8,ge),x(`p`,ye,[l(i(a(h)(`knowledge.workspace.organizer.showing`,{visible:G.value.length,total:W.value.length}))+` `,1),T.value===`all`?e(``,!0):(o(),b(`span`,be,` · `+i(V.value.find(({value:e})=>e===T.value)?.label),1))]),U.value.length?(o(),b(`button`,{key:0,class:`toolbar-action batch-confirm-action`,type:`button`,onClick:s[3]||=e=>z.value=!0},i(a(h)(`knowledge.workspace.organizer.batchConfirm`,{count:U.value.length})),1)):e(``,!0),x(`button`,{class:`toolbar-action`,type:`button`,onClick:s[4]||=e=>K()},i(a(h)(`common.actions.refresh`)),1)]),g.value?.truncated?(o(),b(`p`,xe,i(a(h)(`knowledge.workspace.organizer.truncated`)),1)):e(``,!0),y.value&&!g.value?(o(),b(`div`,Se,i(a(h)(`common.status.loadingKnowledge`)),1)):(o(),b(`div`,{key:2,class:_([`organizer-layout`,{"has-selection":P.value}])},[x(`section`,{class:`organizer-directory`,"aria-label":a(h)(`knowledge.workspace.organizer.directoryAria`)},[x(`div`,we,[x(`span`,null,i(a(h)(`knowledge.workspace.workspace.view.knowledgeContent`)),1),x(`span`,null,i(a(h)(`knowledge.workspace.workspace.view.columns.quadrant`)),1),x(`span`,null,i(a(h)(`knowledge.workspace.workspace.view.columns.review`)),1),x(`span`,null,i(a(h)(`knowledge.workspace.organizer.confirmationBasis`)),1),x(`span`,null,i(a(h)(`knowledge.workspace.organizer.updated`)),1)]),x(`div`,Te,[(o(!0),b(S,null,r(G.value,e=>(o(),b(`button`,{key:`${e.itemKind}:${e.id}`,type:`button`,class:_([`organizer-row`,{selected:P.value?.id===e.id}]),onClick:t=>P.value=e},[x(`span`,De,[x(`strong`,null,i(e.title),1),x(`small`,null,i(e.body),1)]),x(`span`,{class:_([`quadrant-chip`,e.originQuadrant])},i(a(D)(e.originQuadrant)),3),x(`span`,{class:_([`review-chip`,`state-${a(A)(e)}`])},i(a(E)(e)),3),x(`span`,Oe,i(a(k)(e)),1),x(`time`,null,i(a(M)(a(O)(e))),1)],10,Ee))),128))]),G.value.length?e(``,!0):(o(),b(`div`,ke,i(H.value.length?a(h)(`knowledge.workspace.organizer.noFilteredContent`):a(h)(`knowledge.workspace.organizer.noContent`)),1))],8,Ce),n(L,{item:P.value,graph:g.value,editable:``,onConfirm:s[5]||=e=>F.value=e,onEdit:s[6]||=e=>R.value=e,onOpenReplacement:ce},null,8,[`item`,`graph`])],2))]),n(I,{item:R.value,"personal-space-id":a(p).activePersonalSpace?.id??``,"personal-project-id":null,projects:a(p).state?.personalProjects??[],"replacement-items":H.value,onClose:s[7]||=e=>R.value=null,onSaved:s[8]||=e=>K()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),n(te,{item:F.value,"personal-space-id":a(p).activePersonalSpace?.id??``,"personal-project-id":null,onClose:s[9]||=e=>F.value=null,onSaved:s[10]||=e=>K()},null,8,[`item`,`personal-space-id`]),z.value?(o(),c(J,{key:0,groups:U.value,"personal-space-id":a(p).activePersonalSpace?.id??``,onClose:s[11]||=e=>z.value=!1,onSaved:s[12]||=e=>K()},null,8,[`groups`,`personal-space-id`])):e(``,!0)]))}}),[[`__scopeId`,`data-v-e7137842`]]);export{Ae as default};
1
+ import{C as e,D as t,E as n,F as r,J as i,K as a,N as o,R as s,S as c,T as l,U as u,V as d,_ as f,a as p,b as m,d as h,m as g,q as _,r as v,t as ee,v as y,w as b,x,y as S}from"./console-B_Ena2DS.js";import{i as C,r as w,t as T}from"./identity-CjBwYSMX.js";import{E,T as D,_ as O,a as k,g as A,h as j,l as M,n as N,t as P}from"./model-C-5RVIJ2.js";import{i as F,n as I,r as te,t as L}from"./KnowledgeInspector-BZkB2wJn.js";var R={open:``,class:`project-dialog batch-confirm-dialog vue-dialog`},z={class:`project-dialog-shell`},B={class:`project-dialog-header`},V={class:`batch-confirm-controls`},H={key:0,class:`batch-group-summary`},U={class:`batch-confirmer-fields`},ne=[`required`,`placeholder`],re=[`placeholder`],ie={class:`batch-confirm-rule`},W={class:`batch-confirm-review`},ae={class:`batch-review-heading`},oe={key:0,class:`batch-limit-note`},G={class:`batch-review-list`},K=[`value`],se={class:`batch-confirm-acknowledgement`},q={key:0,class:`publish-dialog-error`,role:`alert`},ce={class:`publish-dialog-actions`},le=[`disabled`],ue=[`disabled`],J=F(t({__name:`KnowledgeBatchConfirmDialog`,props:{groups:{},personalSpaceId:{}},emits:[`close`,`saved`],setup(t,{emit:c}){let _=t,v=c,E=ee(),O=u(``),k=u([]),A=u(`user`),j=u(``),M=u(``),N=u(!1),F=u(!1),I=u(``),te=m(()=>_.groups.map(e=>({value:e.key,label:e.label,meta:h(`knowledge.dialogs.batch.groupMeta`,{kind:e.kind===`source`?h(`knowledge.dialogs.batch.sameSource`):h(`knowledge.dialogs.batch.sameSession`),count:e.items.length}),search:`${w(e.value)} ${e.description}`}))),L=m(()=>_.groups.find(({key:e})=>e===O.value)??null),J=m(()=>L.value?.items.slice(0,200)??[]),Y=m(()=>{let e=new Set(k.value);return J.value.filter(t=>e.has(Z(t)))}),X=m(()=>J.value.length>0&&Y.value.length===J.value.length),de=m(()=>!F.value&&Y.value.length>=2&&!!M.value.trim()&&N.value&&(A.value!==`authoritative_source`||!!j.value.trim())),fe=m(()=>[{value:`user`,label:h(`knowledge.domain.actors.user`)},{value:`authoritative_source`,label:h(`knowledge.domain.actors.authoritative_source`)}]);s(()=>_.groups,e=>{e.some(({key:e})=>e===O.value)||(O.value=e[0]?.key??``)},{immediate:!0}),s(O,()=>{k.value=J.value.map(Z),N.value=!1,I.value=``},{immediate:!0});function Z(e){return`${e.itemKind}:${e.id}`}function pe(){k.value=X.value?[]:J.value.map(Z),N.value=!1}function Q(e){let t=L.value;return t?P(e,t):null}async function me(){let e=L.value;if(!e)return $(h(`knowledge.dialogs.batch.errors.groupRequired`));if(Y.value.length<2)return $(h(`knowledge.dialogs.batch.errors.itemsRequired`));if(!M.value.trim())return $(h(`knowledge.dialogs.batch.errors.reasonRequired`));if(A.value===`authoritative_source`&&!j.value.trim())return $(h(`knowledge.dialogs.batch.errors.sourceNameRequired`));if(!N.value)return $(h(`knowledge.dialogs.batch.errors.acknowledgmentRequired`));F.value=!0,I.value=``;try{let t=await p(`/api/knowledge/batch-confirmation`,{personalSpaceId:_.personalSpaceId,groupKind:e.kind,groupValue:e.value,reason:M.value.trim(),confirmer:{kind:A.value,label:j.value.trim()||null},items:Y.value.map(e=>{let t=Q(e);return{itemId:e.id,itemKind:e.itemKind,existenceReason:t.existenceReason,quadrantReason:t.quadrantReason,proposedBy:t.proposedBy}})});E.notify(h(`knowledge.dialogs.batch.confirmed`,{count:t.confirmed_count})),v(`saved`),v(`close`)}catch(e){I.value=e instanceof Error?e.message:h(`knowledge.dialogs.batch.errors.failed`),E.reportError(e)}finally{F.value=!1}}function $(e){I.value=e}return(t,s)=>(o(),b(`dialog`,R,[x(`div`,z,[x(`header`,B,[x(`div`,null,[s[8]||=x(`p`,{class:`eyebrow`},`BATCH CONFIRMATION`,-1),x(`h3`,null,i(a(h)(`knowledge.dialogs.batch.title`)),1),x(`p`,null,i(a(h)(`knowledge.dialogs.batch.intro`)),1)]),x(`button`,{class:`secondary-action`,type:`button`,onClick:s[0]||=e=>v(`close`)},i(a(h)(`common.actions.close`)),1)]),x(`form`,{class:`batch-confirm-form`,onSubmit:y(me,[`prevent`])},[x(`section`,V,[x(`label`,null,[l(i(a(h)(`knowledge.dialogs.batch.range`))+` `,1),n(C,{modelValue:O.value,"onUpdate:modelValue":s[1]||=e=>O.value=e,options:te.value,label:a(h)(`knowledge.dialogs.batch.rangeLabel`),searchable:``},null,8,[`modelValue`,`options`,`label`])]),L.value?(o(),b(`div`,H,[x(`span`,null,i(L.value.kind===`source`?a(h)(`knowledge.dialogs.batch.sameSource`):a(h)(`knowledge.dialogs.batch.sameSession`)),1),x(`strong`,null,i(L.value.label),1),x(`p`,null,i(L.value.description),1),x(`small`,null,`#`+i(a(T)(L.value.value,28)),1)])):e(``,!0),x(`div`,U,[x(`label`,null,[l(i(a(h)(`knowledge.dialogs.batch.confirmer`))+` `,1),n(C,{modelValue:A.value,"onUpdate:modelValue":s[2]||=e=>A.value=e,options:fe.value,label:a(h)(`knowledge.dialogs.batch.confirmerLabel`)},null,8,[`modelValue`,`options`,`label`])]),x(`label`,null,[l(i(a(h)(`knowledge.dialogs.batch.confirmerDescription`))+` `,1),d(x(`input`,{"onUpdate:modelValue":s[3]||=e=>j.value=e,maxlength:`160`,required:A.value===`authoritative_source`,placeholder:A.value===`user`?a(h)(`knowledge.dialogs.batch.userPlaceholder`):a(h)(`knowledge.dialogs.batch.sourcePlaceholder`)},null,8,ne),[[f,j.value]])])]),x(`label`,null,[l(i(a(h)(`knowledge.dialogs.batch.basis`))+` `,1),d(x(`textarea`,{"onUpdate:modelValue":s[4]||=e=>M.value=e,maxlength:`2000`,rows:`3`,required:``,placeholder:a(h)(`knowledge.dialogs.batch.basisPlaceholder`)},null,8,re),[[f,M.value]])]),x(`p`,ie,i(a(h)(`knowledge.dialogs.batch.agentBoundary`)),1)]),x(`section`,W,[x(`div`,ae,[x(`div`,null,[x(`h4`,null,i(a(h)(`knowledge.dialogs.batch.itemReview`)),1),x(`p`,null,i(a(h)(`knowledge.dialogs.batch.selected`,{selected:Y.value.length,total:J.value.length})),1)]),x(`button`,{class:`secondary-action`,type:`button`,onClick:pe},i(X.value?a(h)(`knowledge.dialogs.batch.clearAll`):a(h)(`knowledge.dialogs.batch.selectAll`)),1)]),(L.value?.items.length??0)>200?(o(),b(`p`,oe,i(a(h)(`knowledge.dialogs.batch.limit`)),1)):e(``,!0),x(`div`,G,[(o(!0),b(S,null,r(J.value,e=>(o(),b(`label`,{key:Z(e),class:`batch-review-item`},[d(x(`input`,{"onUpdate:modelValue":s[5]||=e=>k.value=e,type:`checkbox`,value:Z(e)},null,8,K),[[g,k.value]]),x(`span`,null,[x(`strong`,null,i(e.title),1),x(`small`,null,i(a(D)(e.originQuadrant))+` · `+i(e.type),1),x(`em`,null,i(Q(e)?.existenceReason),1),x(`em`,null,i(Q(e)?.quadrantReason),1)])]))),128))]),x(`label`,se,[d(x(`input`,{"onUpdate:modelValue":s[6]||=e=>N.value=e,type:`checkbox`},null,512),[[g,N.value]]),x(`span`,null,i(a(h)(`knowledge.dialogs.batch.acknowledgment`)),1)])]),I.value?(o(),b(`p`,q,i(I.value),1)):e(``,!0),x(`div`,ce,[x(`button`,{class:`secondary-action`,type:`button`,disabled:F.value,onClick:s[7]||=e=>v(`close`)},i(a(h)(`common.actions.cancel`)),9,le),x(`button`,{class:`primary-action`,type:`submit`,disabled:!de.value},i(F.value?a(h)(`knowledge.dialogs.batch.confirming`):a(h)(`knowledge.dialogs.batch.confirmItems`,{count:Y.value.length})),9,ue)])],32)])]))}}),[[`__scopeId`,`data-v-5b6ea24b`]]),Y={class:`view knowledge-organizer`},X={class:`organizer-head`},de={class:`organizer-principle`},fe={class:`organizer-attention`},Z={class:`organizer-toolbar`},pe={class:`organizer-search`},Q=[`placeholder`],me=[`aria-label`],$=[`aria-pressed`],he=[`data-quadrant`,`aria-pressed`,`title`,`onClick`],ge=[`aria-label`],_e=[`aria-pressed`],ve=[`data-review-state`,`aria-pressed`,`title`,`onClick`],ye={class:`organizer-result-summary`},be={key:0},xe={key:0,class:`organizer-truncated`},Se={key:1,class:`view-loading`},Ce=[`aria-label`],we={class:`organizer-table-head`,"aria-hidden":`true`},Te={class:`organizer-list`},Ee=[`onClick`],De={class:`organizer-item-copy`},Oe={class:`organizer-basis`},ke={key:0,class:`empty-state`},Ae=F(t({__name:`KnowledgeOrganizerPage`,setup(t){let p=ee(),g=u(null),y=u(!1),C=u(``),w=u(`all`),T=u(`all`),P=u(null),F=u(null),R=u(null),z=u(!1),B=m(()=>[{value:`known_unknown`,short:h(`knowledge.workspace.organizer.quadrants.known_unknown.short`),coordinate:h(`knowledge.workspace.organizer.quadrants.known_unknown.coordinate`)},{value:`known_known`,short:h(`knowledge.workspace.organizer.quadrants.known_known.short`),coordinate:h(`knowledge.workspace.organizer.quadrants.known_known.coordinate`)},{value:`unknown_unknown`,short:h(`knowledge.workspace.organizer.quadrants.unknown_unknown.short`),coordinate:h(`knowledge.workspace.organizer.quadrants.unknown_unknown.coordinate`)},{value:`unknown_known`,short:h(`knowledge.workspace.organizer.quadrants.unknown_known.short`),coordinate:h(`knowledge.workspace.organizer.quadrants.unknown_known.coordinate`)}]),V=m(()=>[{value:`pending`,label:h(`knowledge.domain.reviewStates.pending`),hint:h(`knowledge.workspace.organizer.review.pendingHint`)},{value:`agent_confirmed`,label:h(`knowledge.domain.reviewStates.agent_confirmed`),hint:h(`knowledge.workspace.organizer.review.agentConfirmedHint`)},{value:`confirmed`,label:h(`knowledge.domain.reviewStates.confirmed`),hint:h(`knowledge.workspace.organizer.review.confirmedHint`)}]),H=m(()=>j(g.value)),U=m(()=>N(H.value)),ne=m(()=>Object.fromEntries([...B.value.map(({value:e})=>e),`unclassified`].map(e=>[e,H.value.filter(t=>t.originQuadrant===e).length]))),re=m(()=>Object.fromEntries(V.value.map(({value:e})=>[e,H.value.filter(t=>A(t)===e).length]))),ie=m(()=>w.value!==`all`),W=m(()=>ie.value?H.value.filter(e=>e.originQuadrant===w.value):H.value),ae=m(()=>Object.fromEntries(V.value.map(({value:e})=>[e,W.value.filter(t=>A(t)===e).length]))),oe=m(()=>re.value.pending),G=m(()=>{let e=C.value.trim().toLocaleLowerCase();return H.value.filter(t=>w.value!==`all`&&t.originQuadrant!==w.value||T.value!==`all`&&A(t)!==T.value?!1:!e||[t.title,t.body,t.type,D(t.originQuadrant),E(t),...t.evidence.flatMap(e=>[e.name,e.summary,e.source_description])].filter(Boolean).join(` `).toLocaleLowerCase().includes(e))});s(()=>p.activePersonalSpace?.id,e=>{e&&K(e)},{immediate:!0}),s(G,e=>{P.value&&!e.some(({id:e,itemKind:t})=>e===P.value?.id&&t===P.value?.itemKind)&&(P.value=null)});async function K(e=p.activePersonalSpace?.id){if(e){y.value=!0;try{let t=new URLSearchParams({spaceId:e,limit:`500`});g.value=await v(`/api/graph?${t}`),P.value&&=H.value.find(({id:e})=>e===P.value?.id)??null}catch(e){g.value=null,p.reportError(e)}finally{y.value=!1}}}function se(e){w.value=w.value===e?`all`:e}function q(e){T.value=e}function ce(e){C.value=``,w.value=e.originQuadrant,T.value=`all`,P.value=e}return(t,s)=>(o(),b(`section`,Y,[x(`div`,X,[x(`div`,de,[s[13]||=x(`p`,{class:`eyebrow`},`HOW CLASSIFICATION WORKS`,-1),x(`h3`,null,i(a(h)(`knowledge.workspace.organizer.title`)),1),x(`p`,null,i(a(h)(`knowledge.workspace.organizer.copy`)),1)]),x(`div`,fe,[x(`strong`,null,i(oe.value),1),x(`span`,null,i(a(h)(`knowledge.workspace.organizer.needsAttention`)),1),x(`small`,null,i(a(h)(`knowledge.workspace.organizer.legacyAttention`)),1)])]),x(`div`,Z,[x(`label`,pe,[x(`span`,null,i(a(h)(`knowledge.workspace.organizer.filterKnowledge`)),1),d(x(`input`,{"onUpdate:modelValue":s[0]||=e=>C.value=e,type:`search`,placeholder:a(h)(`knowledge.workspace.organizer.searchPlaceholder`)},null,8,Q),[[f,C.value]])]),x(`div`,{class:`quadrant-filter`,"aria-label":a(h)(`knowledge.workspace.organizer.quadrantFilterAria`)},[x(`span`,null,i(a(h)(`knowledge.workspace.organizer.discoverySource`)),1),x(`button`,{type:`button`,"data-quadrant":`all`,class:_({active:w.value===`all`}),"aria-pressed":w.value===`all`,onClick:s[1]||=e=>w.value=`all`},[l(i(a(h)(`common.status.all`))+` `,1),x(`strong`,null,i(H.value.length),1)],10,$),(o(!0),b(S,null,r(B.value,e=>(o(),b(`button`,{key:e.value,type:`button`,"data-quadrant":e.value,class:_({active:w.value===e.value}),"aria-pressed":w.value===e.value,title:e.coordinate,onClick:t=>se(e.value)},[l(i(e.short)+` `,1),x(`strong`,null,i(ne.value[e.value]),1)],10,he))),128))],8,me),x(`div`,{class:`review-state-filter`,"aria-label":a(h)(`knowledge.workspace.organizer.reviewFilterAria`)},[x(`span`,null,i(a(h)(`knowledge.workspace.organizer.reviewStatus`)),1),x(`button`,{type:`button`,"data-review-state":`all`,class:_({active:T.value===`all`}),"aria-pressed":T.value===`all`,onClick:s[2]||=e=>q(`all`)},[l(i(a(h)(`common.status.all`))+` `,1),x(`strong`,null,i(W.value.length),1)],10,_e),(o(!0),b(S,null,r(V.value,e=>(o(),b(`button`,{key:e.value,type:`button`,"data-review-state":e.value,class:_([`state-${e.value}`,{active:T.value===e.value}]),"aria-pressed":T.value===e.value,title:e.hint,onClick:t=>q(e.value)},[l(i(e.label)+` `,1),x(`strong`,null,i(ae.value[e.value]),1)],10,ve))),128))],8,ge),x(`p`,ye,[l(i(a(h)(`knowledge.workspace.organizer.showing`,{visible:G.value.length,total:W.value.length}))+` `,1),T.value===`all`?e(``,!0):(o(),b(`span`,be,` · `+i(V.value.find(({value:e})=>e===T.value)?.label),1))]),U.value.length?(o(),b(`button`,{key:0,class:`toolbar-action batch-confirm-action`,type:`button`,onClick:s[3]||=e=>z.value=!0},i(a(h)(`knowledge.workspace.organizer.batchConfirm`,{count:U.value.length})),1)):e(``,!0),x(`button`,{class:`toolbar-action`,type:`button`,onClick:s[4]||=e=>K()},i(a(h)(`common.actions.refresh`)),1)]),g.value?.truncated?(o(),b(`p`,xe,i(a(h)(`knowledge.workspace.organizer.truncated`)),1)):e(``,!0),y.value&&!g.value?(o(),b(`div`,Se,i(a(h)(`common.status.loadingKnowledge`)),1)):(o(),b(`div`,{key:2,class:_([`organizer-layout`,{"has-selection":P.value}])},[x(`section`,{class:`organizer-directory`,"aria-label":a(h)(`knowledge.workspace.organizer.directoryAria`)},[x(`div`,we,[x(`span`,null,i(a(h)(`knowledge.workspace.workspace.view.knowledgeContent`)),1),x(`span`,null,i(a(h)(`knowledge.workspace.workspace.view.columns.quadrant`)),1),x(`span`,null,i(a(h)(`knowledge.workspace.workspace.view.columns.review`)),1),x(`span`,null,i(a(h)(`knowledge.workspace.organizer.confirmationBasis`)),1),x(`span`,null,i(a(h)(`knowledge.workspace.organizer.updated`)),1)]),x(`div`,Te,[(o(!0),b(S,null,r(G.value,e=>(o(),b(`button`,{key:`${e.itemKind}:${e.id}`,type:`button`,class:_([`organizer-row`,{selected:P.value?.id===e.id}]),onClick:t=>P.value=e},[x(`span`,De,[x(`strong`,null,i(e.title),1),x(`small`,null,i(e.body),1)]),x(`span`,{class:_([`quadrant-chip`,e.originQuadrant])},i(a(D)(e.originQuadrant)),3),x(`span`,{class:_([`review-chip`,`state-${a(A)(e)}`])},i(a(E)(e)),3),x(`span`,Oe,i(a(k)(e)),1),x(`time`,null,i(a(M)(a(O)(e))),1)],10,Ee))),128))]),G.value.length?e(``,!0):(o(),b(`div`,ke,i(H.value.length?a(h)(`knowledge.workspace.organizer.noFilteredContent`):a(h)(`knowledge.workspace.organizer.noContent`)),1))],8,Ce),n(L,{item:P.value,graph:g.value,editable:``,onConfirm:s[5]||=e=>F.value=e,onEdit:s[6]||=e=>R.value=e,onOpenReplacement:ce},null,8,[`item`,`graph`])],2)),n(I,{item:R.value,"personal-space-id":a(p).activePersonalSpace?.id??``,"personal-project-id":null,projects:a(p).state?.personalProjects??[],"replacement-items":H.value,onClose:s[7]||=e=>R.value=null,onSaved:s[8]||=e=>K()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),n(te,{item:F.value,"personal-space-id":a(p).activePersonalSpace?.id??``,"personal-project-id":null,onClose:s[9]||=e=>F.value=null,onSaved:s[10]||=e=>K()},null,8,[`item`,`personal-space-id`]),z.value?(o(),c(J,{key:3,groups:U.value,"personal-space-id":a(p).activePersonalSpace?.id??``,onClose:s[11]||=e=>z.value=!1,onSaved:s[12]||=e=>K()},null,8,[`groups`,`personal-space-id`])):e(``,!0)]))}}),[[`__scopeId`,`data-v-0b61f3ed`]]);export{Ae as default};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-ul7g7HXh.js","assets/console-B_Ena2DS.js","assets/PersonalProfilePage-CC40Pw2L.js","assets/identity-CjBwYSMX.js","assets/model-C-5RVIJ2.js","assets/KnowledgeInspector-BZkB2wJn.js","assets/KnowledgeInspector-CrGYxEob.css","assets/PersonalProfilePage-S8ZcG2LU.css","assets/PersonalProjectsPage-CPIEcShD.js","assets/KnowledgeWorkspace-CXPE4GCD.js","assets/paths-BkULqmGI.js","assets/vue-router-DnD3hUm7.js","assets/KnowledgeOrganizerPage-PXH-TlGt.js","assets/KnowledgeOrganizerPage-CJCNI2Wd.css","assets/PublicProjectsPage-C700sR7z.js","assets/KnowledgePage-CNQXd15y.js","assets/ReviewPage-7MDDUDgA.js","assets/ConnectionsPage-CCKWm-6p.js"])))=>i.map(i=>d[i]);
2
- import{B as e,C as t,D as n,E as r,F as i,I as a,J as o,K as s,M as c,N as l,S as u,b as d,c as f,d as p,f as m,l as h,p as g,q as _,s as v,t as ee,u as y,w as b,x,y as S,z as te}from"./console-B_Ena2DS.js";import{_ as ne,n as C,r as w,t as T}from"./paths-BkULqmGI.js";import{i as E,n as re,r as D,t as O}from"./vue-router-DnD3hUm7.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 ie=`/assets/fuli-logo-DGuyqchQ.png`,k=[`aria-label`],A=[`lang`,`aria-label`,`aria-pressed`,`onClick`],ae=n({__name:`LocaleSwitcher`,setup(e){let t=d(()=>f()),n={"zh-CN":`中`,"en-US":`EN`};function r(e){e!==t.value&&y(e)}return(e,a)=>(l(),b(`div`,{class:`locale-switcher`,role:`group`,"aria-label":s(p)(`common.language.label`)},[(l(!0),b(S,null,i(s(v),e=>(l(),b(`button`,{key:e,type:`button`,lang:e,"aria-label":s(p)(e===`zh-CN`?`common.language.chinese`:`common.language.english`),"aria-pressed":t.value===e,onClick:t=>r(e)},o(n[e]),9,A))),128))],8,k))}}),j=[`routes.`,`common.`];function M(e,t=``){let n=typeof e==`string`&&e?e:t;return j.some(e=>n.startsWith(e))?p(n):n}function N(e){if(typeof document>`u`)return;let t=M(e,`routes.overview.title`);document.title=`${t} · ${p(`common.brand`)}`}var oe={class:`app-shell`},se={class:`sidebar`},ce={class:`brand-block`},le=[`src`],ue=[`aria-label`],de={class:`nav-section-label`},fe={class:`nav-label`},P={class:`nav-section-label nav-space-label`},F={class:`nav-copy`},I={class:`nav-copy`},L={class:`nav-copy`},R={class:`nav-section-label nav-public-label`},z={class:`nav-copy`},B={class:`nav-section-label nav-tool-label`},V={class:`nav-label`},pe={class:`nav-label`},me={class:`nav-label`},he={class:`sidebar-foot`},ge=[`aria-label`],_e={class:`runtime-status`},ve={class:`runtime-status`},ye=[`data-enabled`,`title`],be=[`aria-label`,`aria-checked`,`checked`,`disabled`],xe=[`data-enabled`,`title`],Se=[`aria-label`,`aria-checked`,`checked`,`disabled`],Ce={class:`workspace`},we={class:`topbar`},Te={class:`topbar-heading`},Ee={class:`eyebrow`},De={key:0,class:`topbar-description`},Oe={class:`topbar-actions`},ke={key:0,class:`mode-chip`},H=n({__name:`ConsoleLayout`,setup(n){let i=ee(),f=ne(),m=d(()=>i.activePersonalSpace?.id??`current`),h=d(()=>C(m.value,`graph`)),g=d(()=>T(`personal`,m.value,`directory`)),v=d(()=>M(f.meta.title,`routes.overview.title`)),y=d(()=>String(f.meta.eyebrow??`LOCAL + FEDERATED`)),w=d(()=>M(f.meta.description)),E=d(()=>i.publicRuntimeStatus===`ready`),D=d(()=>i.publicRuntimeStatus===`ready`?p(`console.services.publicReady`):i.publicRuntimeStatus===`error`?p(`console.services.publicError`):p(`console.services.publicOffline`)),k=d(()=>i.publicRuntimeStatus===`ready`?p(`console.services.publicAvailable`):i.publicRuntimeStatus===`error`?p(`console.services.localUnaffected`):p(`console.services.localOnly`)),A=d(()=>i.state?.capturePolicy?.enabled!==!1),j=d(()=>i.state?.agentAccessPolicy?.enabled!==!1),H=d(()=>i.state?.capabilities?.browsePublicProjects!==!1),U=d(()=>{let e=i.state?.capabilities;return e?.submitKnowledge!==!1||e?.reviewProposals===!0});c(()=>{i.runtimeStatus===`idle`&&i.refresh()}),te(()=>{N(f.meta.title)});function W(e){let t=e.currentTarget;i.updateCapturePolicy(t.checked)}function G(e){let t=e.currentTarget;i.updateAgentAccessPolicy(t.checked)}return(n,c)=>(l(),b(`div`,oe,[x(`aside`,se,[x(`div`,ce,[x(`img`,{class:`brand-mark`,src:s(ie),alt:``,"aria-hidden":`true`},null,8,le),x(`div`,null,[x(`h1`,null,o(s(p)(`common.brand`)),1),c[2]||=x(`p`,null,`Context Graph`,-1)])]),x(`nav`,{class:`primary-nav`,"aria-label":s(p)(`console.navigation.aria`)},[x(`p`,de,o(s(p)(`console.navigation.workspace`)),1),r(s(O),{to:`/`,"exact-active-class":`is-active`},{default:e(()=>[c[3]||=x(`span`,{class:`nav-icon nav-icon-overview`,"aria-hidden":`true`},null,-1),x(`span`,fe,o(s(p)(`console.navigation.overview`)),1)]),_:1}),x(`p`,P,o(s(p)(`console.navigation.personalSpace`)),1),r(s(O),{class:`space-nav-button personal-profile-button`,to:`/preferences`,"active-class":`is-active`},{default:e(()=>[c[4]||=x(`span`,{class:`nav-icon nav-icon-personal-profile`,"aria-hidden":`true`},null,-1),x(`span`,F,[x(`strong`,null,o(s(p)(`console.navigation.preferences`)),1),x(`small`,null,o(s(p)(`console.navigation.preferencesMeta`)),1)])]),_:1}),r(s(O),{class:`space-nav-button knowledge-organizer-button`,to:`/organize`,"active-class":`is-active`},{default:e(()=>[c[5]||=x(`span`,{class:`nav-icon nav-icon-knowledge-organizer`,"aria-hidden":`true`},null,-1),x(`span`,I,[x(`strong`,null,o(s(p)(`console.navigation.organizer`)),1),x(`small`,null,o(s(p)(`console.navigation.organizerMeta`)),1)])]),_:1}),r(s(O),{class:`space-nav-button personal-space-button`,to:h.value,"active-class":`is-active`},{default:e(()=>[c[6]||=x(`span`,{class:`nav-icon nav-icon-personal-project`,"aria-hidden":`true`},null,-1),x(`span`,L,[x(`strong`,null,o(s(p)(`console.navigation.personalProjects`)),1),x(`small`,null,o(s(p)(`console.navigation.personalProjectsMeta`)),1)])]),_:1},8,[`to`]),H.value?(l(),b(S,{key:0},[x(`p`,R,o(s(p)(`console.navigation.publicSpace`)),1),r(s(O),{class:`space-nav-button public-space-button`,to:`/public-projects`,"active-class":`is-active`},{default:e(()=>[c[7]||=x(`span`,{class:`nav-icon nav-icon-public-project`,"aria-hidden":`true`},null,-1),x(`span`,z,[x(`strong`,null,o(s(p)(`console.navigation.publicProjects`)),1),x(`small`,null,o(s(p)(`console.navigation.publicProjectsMeta`)),1)])]),_:1})],64)):t(``,!0),x(`p`,B,o(s(p)(`console.navigation.governance`)),1),r(s(O),{to:g.value,"active-class":`is-active`},{default:e(()=>[c[8]||=x(`span`,{class:`nav-icon nav-icon-knowledge-graph`,"aria-hidden":`true`},null,-1),x(`span`,V,o(s(p)(`console.navigation.knowledge`)),1)]),_:1},8,[`to`]),U.value?(l(),u(s(O),{key:1,to:`/review`,"active-class":`is-active`},{default:e(()=>[c[9]||=x(`span`,{class:`nav-icon nav-icon-review`,"aria-hidden":`true`},null,-1),x(`span`,pe,o(s(p)(`console.navigation.review`)),1)]),_:1})):t(``,!0),r(s(O),{to:`/connections`,"active-class":`is-active`},{default:e(()=>[c[10]||=x(`span`,{class:`nav-icon nav-icon-connections`,"aria-hidden":`true`},null,-1),x(`span`,me,o(s(p)(`console.navigation.connections`)),1)]),_:1})],8,ue),x(`div`,he,[x(`div`,{class:`service-runtime-list`,"aria-label":s(p)(`console.services.aria`)},[x(`div`,_e,[x(`span`,{class:_([`status-dot`,s(i).runtimeStatus])},null,2),x(`div`,null,[x(`strong`,null,o(s(i).runtimeStatus===`ready`?s(p)(`console.services.localReady`):s(i).runtimeStatus===`error`?s(p)(`console.services.localError`):s(p)(`console.services.localConnecting`)),1),c[11]||=x(`small`,null,`Graphiti / Neo4j`,-1)])]),x(`div`,ve,[x(`span`,{class:_([`status-dot`,s(i).publicRuntimeStatus])},null,2),x(`div`,null,[x(`strong`,null,o(D.value),1),x(`small`,null,o(k.value),1)])])],8,ge),x(`label`,{class:`capture-setting`,"data-enabled":A.value,title:A.value?s(p)(`console.capture.enabledTitle`):s(p)(`console.capture.disabledTitle`)},[x(`span`,null,o(s(p)(`console.capture.label`)),1),x(`input`,{type:`checkbox`,role:`switch`,"aria-label":s(p)(`console.capture.aria`),"aria-checked":A.value,checked:A.value,disabled:s(i).runtimeStatus!==`ready`,onChange:W},null,40,be),c[12]||=x(`i`,{"aria-hidden":`true`},null,-1)],8,ye),x(`label`,{class:`capture-setting agent-access-setting`,"data-enabled":j.value,title:j.value?s(p)(`console.agentAccess.enabledTitle`):s(p)(`console.agentAccess.disabledTitle`)},[x(`span`,null,[x(`strong`,null,o(s(p)(`console.agentAccess.label`)),1),x(`small`,null,o(j.value?s(p)(`console.agentAccess.enabledCopy`):s(p)(`console.agentAccess.disabledCopy`)),1)]),x(`input`,{type:`checkbox`,role:`switch`,"aria-label":s(p)(`console.agentAccess.aria`),"aria-checked":j.value,checked:j.value,disabled:s(i).runtimeStatus!==`ready`,onChange:G},null,40,Se),c[13]||=x(`i`,{"aria-hidden":`true`},null,-1)],8,xe)])]),x(`main`,Ce,[x(`header`,we,[x(`div`,Te,[x(`p`,Ee,o(y.value),1),x(`h2`,null,o(v.value),1),w.value?(l(),b(`p`,De,o(w.value),1)):t(``,!0)]),x(`div`,Oe,[E.value?(l(),b(`span`,ke,o(s(p)(`console.publicReady`)),1)):t(``,!0),r(ae),x(`button`,{class:`quiet-button`,type:`button`,onClick:c[0]||=(...e)=>s(i).refresh&&s(i).refresh(...e)},o(s(p)(`common.actions.refresh`)),1)])]),s(i).feedback?(l(),b(`button`,{key:0,class:_([`feedback feedback-button`,{success:s(i).feedback.tone===`success`}]),type:`button`,"aria-live":`polite`,onClick:c[1]||=(...e)=>s(i).clearFeedback&&s(i).clearFeedback(...e)},o(s(i).feedback.message),3)):t(``,!0),r(s(re),null,{default:e(({Component:e})=>[(l(),u(a(e)))]),_:1})])]))}}),U=n({__name:`App`,setup(e){return(e,t)=>(l(),u(H))}}),W=new Set([`overview`,`personal-profile`,`personal-projects`,`public-projects`,`graph`,`review`,`connections`]);function G(e){let t=Ae(e.hash);if(t)return t;let n=q(e.searchParams.get(`view`));if(!n||!W.has(n))return null;let r={overview:`/`,"personal-profile":`/preferences`,"public-projects":`/public-projects`,review:`/review`,connections:`/connections`};if(r[n])return{path:r[n]};let i=q(e.searchParams.get(`scope`)),a=q(e.searchParams.get(`space`)),o=q(e.searchParams.get(`project`)),s=K(e.searchParams.get(`mode`),n),c=w(e.searchParams);return n===`personal-projects`?a?{path:C(a,s,o),query:c}:{path:`/personal/current/projects/graph`,query:c}:n===`graph`?!a||i!==`personal`&&i!==`public`?{path:`/knowledge`,query:c}:{path:T(i,a,s,{projectId:o}),query:c}:null}function Ae(e){let t=e.match(/^#\/knowledge\/(personal|project)\/([^/]+)\/(entity|relationship)\/(.+)$/);if(!t)return null;let[,n,r,i,a]=t;return{path:T(n===`project`?`public`:`personal`,J(r),`directory`,{itemKind:i,itemId:J(a)})}}function K(e,t){return e===`directory`||e===`graph`?e:t===`personal-projects`?`graph`:`directory`}function q(e,t=512){return e&&e.length<=t?e:null}function J(e){try{return decodeURIComponent(e)}catch{return e}}var je=`modulepreload`,Me=function(e){return`/`+e},Y={},X=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=Me(t,n),t=s(t),t in Y)return;Y[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`:je,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)})},Z=D({history:E(`/`),routes:[{path:`/`,name:`overview`,component:()=>X(()=>import(`./OverviewPage-ul7g7HXh.js`),__vite__mapDeps([0,1])),meta:{eyebrow:`LOCAL + FEDERATED`,title:`routes.overview.title`}},{path:`/preferences`,name:`personal-profile`,component:()=>X(()=>import(`./PersonalProfilePage-CC40Pw2L.js`),__vite__mapDeps([2,1,3,4,5,6,7])),meta:{eyebrow:`PERSONAL LENS`,title:`routes.preferences.title`,description:`routes.preferences.description`}},{path:`/personal/:spaceId/projects/:projectId/:mode/:itemKind/:itemId`,name:`personal-project-item`,component:()=>X(()=>import(`./PersonalProjectsPage-CPIEcShD.js`),__vite__mapDeps([8,1,9,10,11,3,4,5,6])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/personal/:spaceId/projects/:mode/:itemKind/:itemId`,name:`personal-projects-item`,component:()=>X(()=>import(`./PersonalProjectsPage-CPIEcShD.js`),__vite__mapDeps([8,1,9,10,11,3,4,5,6])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:mode`,name:`personal-projects`,component:()=>X(()=>import(`./PersonalProjectsPage-CPIEcShD.js`),__vite__mapDeps([8,1,9,10,11,3,4,5,6])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:projectId/:mode`,name:`personal-project`,component:()=>X(()=>import(`./PersonalProjectsPage-CPIEcShD.js`),__vite__mapDeps([8,1,9,10,11,3,4,5,6])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/organize`,name:`knowledge-organizer`,component:()=>X(()=>import(`./KnowledgeOrganizerPage-PXH-TlGt.js`),__vite__mapDeps([12,1,3,4,5,6,13])),meta:{eyebrow:`KNOWLEDGE CLASSIFICATION`,title:`routes.organizer.title`,description:`routes.organizer.description`}},{path:`/public-projects`,name:`public-projects`,component:()=>X(()=>import(`./PublicProjectsPage-C700sR7z.js`),__vite__mapDeps([14,1,10,3])),meta:{eyebrow:`PUBLIC PROJECTS`,title:`routes.publicProjects.title`,description:`routes.publicProjects.description`}},{path:`/knowledge`,name:`knowledge-default`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode/:itemKind/:itemId`,name:`project-knowledge-item`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode/:itemKind/:itemId`,name:`knowledge-item`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode`,name:`project-knowledge`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode`,name:`knowledge`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/review`,name:`review`,component:()=>X(()=>import(`./ReviewPage-7MDDUDgA.js`),__vite__mapDeps([16,1,3,4])),meta:{eyebrow:`REVIEW WORKSPACE`,title:`routes.review.title`,description:`routes.review.description`}},{path:`/connections`,name:`connections`,component:()=>X(()=>import(`./ConnectionsPage-CCKWm-6p.js`),__vite__mapDeps([17,1,3])),meta:{eyebrow:`SERVICE CONNECTIONS`,title:`routes.connections.title`,description:`routes.connections.description`}},{path:`/:pathMatch(.*)*`,redirect:`/`}],scrollBehavior:()=>({top:0})}),Q=!1;Z.beforeEach(()=>Q||typeof window>`u`?!0:(Q=!0,G(new URL(window.location.href))??!0)),Z.afterEach(e=>{N(e.meta.title)});var $=g(U);$.use(m()),$.use(h),$.use(Z),await Z.isReady(),$.mount(`#app`);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OverviewPage-ul7g7HXh.js","assets/console-B_Ena2DS.js","assets/PersonalProfilePage-CC40Pw2L.js","assets/identity-CjBwYSMX.js","assets/model-C-5RVIJ2.js","assets/KnowledgeInspector-BZkB2wJn.js","assets/KnowledgeInspector-CrGYxEob.css","assets/PersonalProfilePage-S8ZcG2LU.css","assets/PersonalProjectsPage-CPIEcShD.js","assets/KnowledgeWorkspace-CXPE4GCD.js","assets/paths-BkULqmGI.js","assets/vue-router-DnD3hUm7.js","assets/KnowledgeOrganizerPage-DlvcLwlL.js","assets/KnowledgeOrganizerPage-CZAF_OlN.css","assets/PublicProjectsPage-C700sR7z.js","assets/KnowledgePage-CNQXd15y.js","assets/ReviewPage-7MDDUDgA.js","assets/ConnectionsPage-CCKWm-6p.js"])))=>i.map(i=>d[i]);
2
+ import{B as e,C as t,D as n,E as r,F as i,I as a,J as o,K as s,M as c,N as l,S as u,b as d,c as f,d as p,f as m,l as h,p as g,q as _,s as v,t as ee,u as y,w as b,x,y as S,z as te}from"./console-B_Ena2DS.js";import{_ as ne,n as C,r as w,t as T}from"./paths-BkULqmGI.js";import{i as E,n as re,r as D,t as O}from"./vue-router-DnD3hUm7.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 ie=`/assets/fuli-logo-DGuyqchQ.png`,k=[`aria-label`],A=[`lang`,`aria-label`,`aria-pressed`,`onClick`],ae=n({__name:`LocaleSwitcher`,setup(e){let t=d(()=>f()),n={"zh-CN":`中`,"en-US":`EN`};function r(e){e!==t.value&&y(e)}return(e,a)=>(l(),b(`div`,{class:`locale-switcher`,role:`group`,"aria-label":s(p)(`common.language.label`)},[(l(!0),b(S,null,i(s(v),e=>(l(),b(`button`,{key:e,type:`button`,lang:e,"aria-label":s(p)(e===`zh-CN`?`common.language.chinese`:`common.language.english`),"aria-pressed":t.value===e,onClick:t=>r(e)},o(n[e]),9,A))),128))],8,k))}}),j=[`routes.`,`common.`];function M(e,t=``){let n=typeof e==`string`&&e?e:t;return j.some(e=>n.startsWith(e))?p(n):n}function N(e){if(typeof document>`u`)return;let t=M(e,`routes.overview.title`);document.title=`${t} · ${p(`common.brand`)}`}var oe={class:`app-shell`},se={class:`sidebar`},ce={class:`brand-block`},le=[`src`],ue=[`aria-label`],de={class:`nav-section-label`},fe={class:`nav-label`},P={class:`nav-section-label nav-space-label`},F={class:`nav-copy`},I={class:`nav-copy`},L={class:`nav-copy`},R={class:`nav-section-label nav-public-label`},z={class:`nav-copy`},B={class:`nav-section-label nav-tool-label`},V={class:`nav-label`},pe={class:`nav-label`},me={class:`nav-label`},he={class:`sidebar-foot`},ge=[`aria-label`],_e={class:`runtime-status`},ve={class:`runtime-status`},ye=[`data-enabled`,`title`],be=[`aria-label`,`aria-checked`,`checked`,`disabled`],xe=[`data-enabled`,`title`],Se=[`aria-label`,`aria-checked`,`checked`,`disabled`],Ce={class:`workspace`},we={class:`topbar`},Te={class:`topbar-heading`},Ee={class:`eyebrow`},De={key:0,class:`topbar-description`},Oe={class:`topbar-actions`},ke={key:0,class:`mode-chip`},H=n({__name:`ConsoleLayout`,setup(n){let i=ee(),f=ne(),m=d(()=>i.activePersonalSpace?.id??`current`),h=d(()=>C(m.value,`graph`)),g=d(()=>T(`personal`,m.value,`directory`)),v=d(()=>M(f.meta.title,`routes.overview.title`)),y=d(()=>String(f.meta.eyebrow??`LOCAL + FEDERATED`)),w=d(()=>M(f.meta.description)),E=d(()=>i.publicRuntimeStatus===`ready`),D=d(()=>i.publicRuntimeStatus===`ready`?p(`console.services.publicReady`):i.publicRuntimeStatus===`error`?p(`console.services.publicError`):p(`console.services.publicOffline`)),k=d(()=>i.publicRuntimeStatus===`ready`?p(`console.services.publicAvailable`):i.publicRuntimeStatus===`error`?p(`console.services.localUnaffected`):p(`console.services.localOnly`)),A=d(()=>i.state?.capturePolicy?.enabled!==!1),j=d(()=>i.state?.agentAccessPolicy?.enabled!==!1),H=d(()=>i.state?.capabilities?.browsePublicProjects!==!1),U=d(()=>{let e=i.state?.capabilities;return e?.submitKnowledge!==!1||e?.reviewProposals===!0});c(()=>{i.runtimeStatus===`idle`&&i.refresh()}),te(()=>{N(f.meta.title)});function W(e){let t=e.currentTarget;i.updateCapturePolicy(t.checked)}function G(e){let t=e.currentTarget;i.updateAgentAccessPolicy(t.checked)}return(n,c)=>(l(),b(`div`,oe,[x(`aside`,se,[x(`div`,ce,[x(`img`,{class:`brand-mark`,src:s(ie),alt:``,"aria-hidden":`true`},null,8,le),x(`div`,null,[x(`h1`,null,o(s(p)(`common.brand`)),1),c[2]||=x(`p`,null,`Context Graph`,-1)])]),x(`nav`,{class:`primary-nav`,"aria-label":s(p)(`console.navigation.aria`)},[x(`p`,de,o(s(p)(`console.navigation.workspace`)),1),r(s(O),{to:`/`,"exact-active-class":`is-active`},{default:e(()=>[c[3]||=x(`span`,{class:`nav-icon nav-icon-overview`,"aria-hidden":`true`},null,-1),x(`span`,fe,o(s(p)(`console.navigation.overview`)),1)]),_:1}),x(`p`,P,o(s(p)(`console.navigation.personalSpace`)),1),r(s(O),{class:`space-nav-button personal-profile-button`,to:`/preferences`,"active-class":`is-active`},{default:e(()=>[c[4]||=x(`span`,{class:`nav-icon nav-icon-personal-profile`,"aria-hidden":`true`},null,-1),x(`span`,F,[x(`strong`,null,o(s(p)(`console.navigation.preferences`)),1),x(`small`,null,o(s(p)(`console.navigation.preferencesMeta`)),1)])]),_:1}),r(s(O),{class:`space-nav-button knowledge-organizer-button`,to:`/organize`,"active-class":`is-active`},{default:e(()=>[c[5]||=x(`span`,{class:`nav-icon nav-icon-knowledge-organizer`,"aria-hidden":`true`},null,-1),x(`span`,I,[x(`strong`,null,o(s(p)(`console.navigation.organizer`)),1),x(`small`,null,o(s(p)(`console.navigation.organizerMeta`)),1)])]),_:1}),r(s(O),{class:`space-nav-button personal-space-button`,to:h.value,"active-class":`is-active`},{default:e(()=>[c[6]||=x(`span`,{class:`nav-icon nav-icon-personal-project`,"aria-hidden":`true`},null,-1),x(`span`,L,[x(`strong`,null,o(s(p)(`console.navigation.personalProjects`)),1),x(`small`,null,o(s(p)(`console.navigation.personalProjectsMeta`)),1)])]),_:1},8,[`to`]),H.value?(l(),b(S,{key:0},[x(`p`,R,o(s(p)(`console.navigation.publicSpace`)),1),r(s(O),{class:`space-nav-button public-space-button`,to:`/public-projects`,"active-class":`is-active`},{default:e(()=>[c[7]||=x(`span`,{class:`nav-icon nav-icon-public-project`,"aria-hidden":`true`},null,-1),x(`span`,z,[x(`strong`,null,o(s(p)(`console.navigation.publicProjects`)),1),x(`small`,null,o(s(p)(`console.navigation.publicProjectsMeta`)),1)])]),_:1})],64)):t(``,!0),x(`p`,B,o(s(p)(`console.navigation.governance`)),1),r(s(O),{to:g.value,"active-class":`is-active`},{default:e(()=>[c[8]||=x(`span`,{class:`nav-icon nav-icon-knowledge-graph`,"aria-hidden":`true`},null,-1),x(`span`,V,o(s(p)(`console.navigation.knowledge`)),1)]),_:1},8,[`to`]),U.value?(l(),u(s(O),{key:1,to:`/review`,"active-class":`is-active`},{default:e(()=>[c[9]||=x(`span`,{class:`nav-icon nav-icon-review`,"aria-hidden":`true`},null,-1),x(`span`,pe,o(s(p)(`console.navigation.review`)),1)]),_:1})):t(``,!0),r(s(O),{to:`/connections`,"active-class":`is-active`},{default:e(()=>[c[10]||=x(`span`,{class:`nav-icon nav-icon-connections`,"aria-hidden":`true`},null,-1),x(`span`,me,o(s(p)(`console.navigation.connections`)),1)]),_:1})],8,ue),x(`div`,he,[x(`div`,{class:`service-runtime-list`,"aria-label":s(p)(`console.services.aria`)},[x(`div`,_e,[x(`span`,{class:_([`status-dot`,s(i).runtimeStatus])},null,2),x(`div`,null,[x(`strong`,null,o(s(i).runtimeStatus===`ready`?s(p)(`console.services.localReady`):s(i).runtimeStatus===`error`?s(p)(`console.services.localError`):s(p)(`console.services.localConnecting`)),1),c[11]||=x(`small`,null,`Graphiti / Neo4j`,-1)])]),x(`div`,ve,[x(`span`,{class:_([`status-dot`,s(i).publicRuntimeStatus])},null,2),x(`div`,null,[x(`strong`,null,o(D.value),1),x(`small`,null,o(k.value),1)])])],8,ge),x(`label`,{class:`capture-setting`,"data-enabled":A.value,title:A.value?s(p)(`console.capture.enabledTitle`):s(p)(`console.capture.disabledTitle`)},[x(`span`,null,o(s(p)(`console.capture.label`)),1),x(`input`,{type:`checkbox`,role:`switch`,"aria-label":s(p)(`console.capture.aria`),"aria-checked":A.value,checked:A.value,disabled:s(i).runtimeStatus!==`ready`,onChange:W},null,40,be),c[12]||=x(`i`,{"aria-hidden":`true`},null,-1)],8,ye),x(`label`,{class:`capture-setting agent-access-setting`,"data-enabled":j.value,title:j.value?s(p)(`console.agentAccess.enabledTitle`):s(p)(`console.agentAccess.disabledTitle`)},[x(`span`,null,[x(`strong`,null,o(s(p)(`console.agentAccess.label`)),1),x(`small`,null,o(j.value?s(p)(`console.agentAccess.enabledCopy`):s(p)(`console.agentAccess.disabledCopy`)),1)]),x(`input`,{type:`checkbox`,role:`switch`,"aria-label":s(p)(`console.agentAccess.aria`),"aria-checked":j.value,checked:j.value,disabled:s(i).runtimeStatus!==`ready`,onChange:G},null,40,Se),c[13]||=x(`i`,{"aria-hidden":`true`},null,-1)],8,xe)])]),x(`main`,Ce,[x(`header`,we,[x(`div`,Te,[x(`p`,Ee,o(y.value),1),x(`h2`,null,o(v.value),1),w.value?(l(),b(`p`,De,o(w.value),1)):t(``,!0)]),x(`div`,Oe,[E.value?(l(),b(`span`,ke,o(s(p)(`console.publicReady`)),1)):t(``,!0),r(ae),x(`button`,{class:`quiet-button`,type:`button`,onClick:c[0]||=(...e)=>s(i).refresh&&s(i).refresh(...e)},o(s(p)(`common.actions.refresh`)),1)])]),s(i).feedback?(l(),b(`button`,{key:0,class:_([`feedback feedback-button`,{success:s(i).feedback.tone===`success`}]),type:`button`,"aria-live":`polite`,onClick:c[1]||=(...e)=>s(i).clearFeedback&&s(i).clearFeedback(...e)},o(s(i).feedback.message),3)):t(``,!0),r(s(re),null,{default:e(({Component:e})=>[(l(),u(a(e)))]),_:1})])]))}}),U=n({__name:`App`,setup(e){return(e,t)=>(l(),u(H))}}),W=new Set([`overview`,`personal-profile`,`personal-projects`,`public-projects`,`graph`,`review`,`connections`]);function G(e){let t=Ae(e.hash);if(t)return t;let n=q(e.searchParams.get(`view`));if(!n||!W.has(n))return null;let r={overview:`/`,"personal-profile":`/preferences`,"public-projects":`/public-projects`,review:`/review`,connections:`/connections`};if(r[n])return{path:r[n]};let i=q(e.searchParams.get(`scope`)),a=q(e.searchParams.get(`space`)),o=q(e.searchParams.get(`project`)),s=K(e.searchParams.get(`mode`),n),c=w(e.searchParams);return n===`personal-projects`?a?{path:C(a,s,o),query:c}:{path:`/personal/current/projects/graph`,query:c}:n===`graph`?!a||i!==`personal`&&i!==`public`?{path:`/knowledge`,query:c}:{path:T(i,a,s,{projectId:o}),query:c}:null}function Ae(e){let t=e.match(/^#\/knowledge\/(personal|project)\/([^/]+)\/(entity|relationship)\/(.+)$/);if(!t)return null;let[,n,r,i,a]=t;return{path:T(n===`project`?`public`:`personal`,J(r),`directory`,{itemKind:i,itemId:J(a)})}}function K(e,t){return e===`directory`||e===`graph`?e:t===`personal-projects`?`graph`:`directory`}function q(e,t=512){return e&&e.length<=t?e:null}function J(e){try{return decodeURIComponent(e)}catch{return e}}var je=`modulepreload`,Me=function(e){return`/`+e},Y={},X=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=Me(t,n),t=s(t),t in Y)return;Y[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`:je,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)})},Z=D({history:E(`/`),routes:[{path:`/`,name:`overview`,component:()=>X(()=>import(`./OverviewPage-ul7g7HXh.js`),__vite__mapDeps([0,1])),meta:{eyebrow:`LOCAL + FEDERATED`,title:`routes.overview.title`}},{path:`/preferences`,name:`personal-profile`,component:()=>X(()=>import(`./PersonalProfilePage-CC40Pw2L.js`),__vite__mapDeps([2,1,3,4,5,6,7])),meta:{eyebrow:`PERSONAL LENS`,title:`routes.preferences.title`,description:`routes.preferences.description`}},{path:`/personal/:spaceId/projects/:projectId/:mode/:itemKind/:itemId`,name:`personal-project-item`,component:()=>X(()=>import(`./PersonalProjectsPage-CPIEcShD.js`),__vite__mapDeps([8,1,9,10,11,3,4,5,6])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/personal/:spaceId/projects/:mode/:itemKind/:itemId`,name:`personal-projects-item`,component:()=>X(()=>import(`./PersonalProjectsPage-CPIEcShD.js`),__vite__mapDeps([8,1,9,10,11,3,4,5,6])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:mode`,name:`personal-projects`,component:()=>X(()=>import(`./PersonalProjectsPage-CPIEcShD.js`),__vite__mapDeps([8,1,9,10,11,3,4,5,6])),meta:{eyebrow:`PERSONAL PROJECTS`,title:`routes.personalProjects.title`,description:`routes.personalProjects.description`}},{path:`/personal/:spaceId/projects/:projectId/:mode`,name:`personal-project`,component:()=>X(()=>import(`./PersonalProjectsPage-CPIEcShD.js`),__vite__mapDeps([8,1,9,10,11,3,4,5,6])),meta:{eyebrow:`PERSONAL PROJECT`,title:`routes.personalProjects.title`}},{path:`/organize`,name:`knowledge-organizer`,component:()=>X(()=>import(`./KnowledgeOrganizerPage-DlvcLwlL.js`),__vite__mapDeps([12,1,3,4,5,6,13])),meta:{eyebrow:`KNOWLEDGE CLASSIFICATION`,title:`routes.organizer.title`,description:`routes.organizer.description`}},{path:`/public-projects`,name:`public-projects`,component:()=>X(()=>import(`./PublicProjectsPage-C700sR7z.js`),__vite__mapDeps([14,1,10,3])),meta:{eyebrow:`PUBLIC PROJECTS`,title:`routes.publicProjects.title`,description:`routes.publicProjects.description`}},{path:`/knowledge`,name:`knowledge-default`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode/:itemKind/:itemId`,name:`project-knowledge-item`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode/:itemKind/:itemId`,name:`knowledge-item`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:projectId/:mode`,name:`project-knowledge`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/knowledge/:scope/:spaceId/:mode`,name:`knowledge`,component:()=>X(()=>import(`./KnowledgePage-CNQXd15y.js`),__vite__mapDeps([15,1,9,10,11,3,4,5,6])),meta:{eyebrow:`KNOWLEDGE BASE`,title:`routes.knowledge.title`}},{path:`/review`,name:`review`,component:()=>X(()=>import(`./ReviewPage-7MDDUDgA.js`),__vite__mapDeps([16,1,3,4])),meta:{eyebrow:`REVIEW WORKSPACE`,title:`routes.review.title`,description:`routes.review.description`}},{path:`/connections`,name:`connections`,component:()=>X(()=>import(`./ConnectionsPage-CCKWm-6p.js`),__vite__mapDeps([17,1,3])),meta:{eyebrow:`SERVICE CONNECTIONS`,title:`routes.connections.title`,description:`routes.connections.description`}},{path:`/:pathMatch(.*)*`,redirect:`/`}],scrollBehavior:()=>({top:0})}),Q=!1;Z.beforeEach(()=>Q||typeof window>`u`?!0:(Q=!0,G(new URL(window.location.href))??!0)),Z.afterEach(e=>{N(e.meta.title)});var $=g(U);$.use(m()),$.use(h),$.use(Z),await Z.isReady(),$.mount(`#app`);
@@ -9,7 +9,7 @@
9
9
  />
10
10
  <link rel="icon" type="image/png" href="/assets/fuli-logo-DGuyqchQ.png" />
11
11
  <title>复利 · Context Graph</title>
12
- <script type="module" crossorigin src="/assets/index-BQRkOwPx.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-DAzeFJSc.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/assets/console-B_Ena2DS.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/paths-BkULqmGI.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/vue-router-DnD3hUm7.js">