fuli-context 0.7.4-beta.3 → 0.7.5
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 +77 -6
- package/README.zh-CN.md +69 -6
- package/compose.graphiti.yml +6 -6
- package/dist/web/assets/AboutPage-ByCUor-j.js +1 -0
- package/dist/web/assets/ConnectionsPage-DkdkZ40Q.js +1 -0
- package/dist/web/assets/KnowledgeEditDialog-DSe3Gwep.js +1 -0
- package/dist/web/assets/KnowledgeInspector-CYAjAb9J.js +1 -0
- package/dist/web/assets/KnowledgeOrganizerPage-CV4F54R_.js +1 -0
- package/dist/web/assets/KnowledgePage-vYYXipOi.js +1 -0
- package/dist/web/assets/KnowledgeWorkspace-z4u5mXOG.js +4 -0
- package/dist/web/assets/OverviewPage-BWOfeS6k.js +1 -0
- package/dist/web/assets/PersonalProfilePage-c3w4-h7a.js +1 -0
- package/dist/web/assets/PersonalProjectsPage-B7AlLEwf.js +1 -0
- package/dist/web/assets/ProjectAgentsPage-CgftpIPB.css +1 -0
- package/dist/web/assets/ProjectAgentsPage-DTHcL_ox.js +11 -0
- package/dist/web/assets/PublicProjectsPage-DdH0oGB3.js +1 -0
- package/dist/web/assets/ReviewPage-BYIpcIHG.js +1 -0
- package/dist/web/assets/SearchableSelect-Dz13ClQb.js +1 -0
- package/dist/web/assets/SettingsPage-2VkbXgZi.js +1 -0
- package/dist/web/assets/SettingsPage-CwZp2ka4.css +1 -0
- package/dist/web/assets/WritingTastePage-BOPQZuva.js +1 -0
- package/dist/web/assets/{console-D_2zC4lm.js → console-BlAhujsH.js} +1 -1
- package/dist/web/assets/{conversation-launcher-settings-DQmMH2j7.js → conversation-launcher-settings-DTYxiLJt.js} +1 -1
- package/dist/web/assets/i18n-Ci3heuiL.js +9 -0
- package/dist/web/assets/{identity-DmGcY3Y6.js → identity-4_-v6cB7.js} +1 -1
- package/dist/web/assets/index-BnH5mcZx.css +1 -0
- package/dist/web/assets/index-C67Q0JY2.js +2 -0
- package/dist/web/assets/{model-CVoOdRsL.js → model-yG0YqUyZ.js} +1 -1
- package/dist/web/assets/{useApi-CROJJdhE-CBNg4CdH.js → useApi-CROJJdhE-twhdZArA.js} +1 -1
- package/dist/web/assets/vue-router-C-wot_Di.js +1 -0
- package/dist/web/index.html +6 -6
- package/graph-provider/fuli_graph/app.py +8 -0
- package/graph-provider/fuli_graph/collaboration_context.py +69 -6
- package/graph-provider/fuli_graph/knowledge_search.py +84 -5
- package/graph-provider/fuli_graph/model_validation.py +130 -0
- package/graph-provider/fuli_graph/models.py +24 -5
- package/graph-provider/fuli_graph/project_agent_access.py +54 -0
- package/graph-provider/fuli_graph/project_agent_executor_models.py +635 -0
- package/graph-provider/fuli_graph/project_agent_models.py +278 -0
- package/graph-provider/fuli_graph/project_agent_routes.py +597 -0
- package/graph-provider/fuli_graph/project_agent_task_models.py +542 -0
- package/graph-provider/fuli_graph/runtime.py +259 -0
- package/graph-provider/fuli_graph/search_projection.py +3 -0
- package/graph-provider/fuli_graph/store.py +6 -0
- package/graph-provider/fuli_graph/store_knowledge.py +62 -9
- package/graph-provider/fuli_graph/store_project_agent_executor_learning.py +756 -0
- package/graph-provider/fuli_graph/store_project_agent_executor_routing.py +601 -0
- package/graph-provider/fuli_graph/store_project_agent_executors.py +1087 -0
- package/graph-provider/fuli_graph/store_project_agent_task_reads.py +458 -0
- package/graph-provider/fuli_graph/store_project_agent_task_recruitment.py +699 -0
- package/graph-provider/fuli_graph/store_project_agent_task_staffing.py +409 -0
- package/graph-provider/fuli_graph/store_project_agent_tasks.py +1144 -0
- package/graph-provider/fuli_graph/store_project_agents.py +965 -0
- package/graph-provider/pyproject.toml +2 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/skills/capturing-session-knowledge/SKILL.md +39 -0
- package/src/adaptive-runtime/executor-pool.js +127 -0
- package/src/adaptive-runtime/graph-services.js +166 -0
- package/src/adaptive-runtime/lease-client.js +335 -0
- package/src/adaptive-runtime/runtime-broker.js +318 -0
- package/src/adaptive-runtime/settings.js +111 -0
- package/src/adaptive-runtime/state.js +74 -0
- package/src/agent-tools/graph-definitions.js +396 -0
- package/src/agent-tools/graph-handlers.js +61 -0
- package/src/agent-tools/project-agent-definitions.js +307 -0
- package/src/backup/graph-backup.js +289 -0
- package/src/backup/identity-reconciliation.js +208 -0
- package/src/backup/runtime-adapters.js +269 -0
- package/src/cli/command-registry.js +6 -2
- package/src/cli/graph-data-command.js +112 -0
- package/src/cli/local-runtime-command.js +16 -2
- package/src/cli/setup-command.js +19 -3
- package/src/cli/update-command.js +4 -0
- package/src/cli.js +6 -0
- package/src/graphiti/collaboration-preference-projection.js +29 -1
- package/src/graphiti/collaboration-preference-workflow.js +121 -0
- package/src/graphiti/federated-application.js +53 -90
- package/src/graphiti/project-agent-control-plane.js +263 -0
- package/src/graphiti/project-agent-mapping.js +1003 -0
- package/src/graphiti/project-agent-workflows.js +557 -0
- package/src/graphiti/provider-client.js +270 -1
- package/src/http/api-router.js +63 -9
- package/src/http/graph-api-router.js +278 -0
- package/src/local-runtime/lifecycle.js +46 -10
- package/src/mcp/context-resources.js +15 -6
- package/src/mcp/create-mcp-server.js +51 -16
- package/src/mcp/instructions.js +7 -5
- package/src/mcp/runtime.js +17 -5
- package/src/mcp/session-id.js +38 -1
- package/src/mcp/tool-annotations.js +69 -0
- package/src/mcp-server.js +23 -6
- package/src/native-runtime/runtime.js +717 -0
- package/src/server.js +6 -2
- package/src/setup/agent-installation-status.js +7 -1
- package/src/setup/agents.js +3 -1
- package/src/setup/claude-code-config.js +3 -1
- package/src/setup/codex-bootstrap.js +11 -10
- package/src/setup/codex-config.js +7 -1
- package/src/setup/cursor-config.js +3 -1
- package/src/setup/graph-runtime.js +158 -13
- package/src/setup/neo4j-memory-profile.js +43 -0
- package/src/setup/options.js +38 -2
- package/src/setup/paths.js +14 -0
- package/src/setup/setup.js +37 -1
- package/src/system/resource-monitor.js +181 -16
- package/src/system/runtime-settings.js +10 -1
- package/src/system/system-service.js +27 -2
- package/dist/web/assets/AboutPage-Dpf5fRWv.js +0 -1
- package/dist/web/assets/ConnectionsPage-D21aUDCP.js +0 -1
- package/dist/web/assets/KnowledgeEditDialog-u7lpfN3j.js +0 -1
- package/dist/web/assets/KnowledgeInspector-k4xnHtXd.js +0 -1
- package/dist/web/assets/KnowledgeOrganizerPage-Bdj7Rn84.js +0 -1
- package/dist/web/assets/KnowledgePage-UHVAbC1W.js +0 -1
- package/dist/web/assets/KnowledgeWorkspace-Lq3d-MeC.js +0 -4
- package/dist/web/assets/OverviewPage-CycAgA1V.js +0 -1
- package/dist/web/assets/PersonalProfilePage-U9oIV5FT.js +0 -1
- package/dist/web/assets/PersonalProjectsPage-C5RpXKcA.js +0 -1
- package/dist/web/assets/PublicProjectsPage-DiWxm35E.js +0 -1
- package/dist/web/assets/ReviewPage-jxRfGSJK.js +0 -1
- package/dist/web/assets/SearchableSelect-B3-5IPup.js +0 -1
- package/dist/web/assets/SettingsPage-BqfGDOho.js +0 -1
- package/dist/web/assets/SettingsPage-CAfz4qiV.css +0 -1
- package/dist/web/assets/WritingTastePage-BJxhMqJR.js +0 -1
- package/dist/web/assets/i18n-CwqXDI1C.js +0 -5
- package/dist/web/assets/index-IUGLt4lG.js +0 -2
- package/dist/web/assets/index-X2j29j8i.css +0 -1
- package/dist/web/assets/vue-router-CWSsUUio.js +0 -1
package/README.md
CHANGED
|
@@ -417,8 +417,10 @@ The following must not be presented as already proven:
|
|
|
417
417
|
Requirements:
|
|
418
418
|
|
|
419
419
|
- Node.js 24.12 or later;
|
|
420
|
-
- Docker Compose v2 through Docker Desktop, Rancher Desktop, or
|
|
421
|
-
-
|
|
420
|
+
- the default container mode needs Docker Compose v2 through Docker Desktop, Rancher Desktop, or a compatible runtime;
|
|
421
|
+
- macOS and Linux can use native mode without a VM; it requires Java 21 and `uv` (Python 3.12);
|
|
422
|
+
- on a memory-constrained Mac, use
|
|
423
|
+
`fuli setup --runtime-mode native --memory-profile low --adaptive-memory`. Container mode remains the compatibility default and is never changed automatically.
|
|
422
424
|
|
|
423
425
|
Install globally and initialize:
|
|
424
426
|
|
|
@@ -440,13 +442,14 @@ fuli open
|
|
|
440
442
|
|
|
441
443
|
The default URL is `http://127.0.0.1:2727`.
|
|
442
444
|
|
|
443
|
-
The Settings page manages all seven local Fuli ports, LAN access, automatic capture,
|
|
444
|
-
UI language, and the resource refresh interval. Run `fuli restart` after saving port
|
|
445
|
+
The Settings page manages all seven local Fuli ports, graph runtime mode, LAN access, automatic capture,
|
|
446
|
+
Agent access, UI language, and the resource refresh interval. Run `fuli restart` after saving port,
|
|
447
|
+
runtime, or LAN changes;
|
|
445
448
|
the refresh interval applies immediately. The same page polls real memory and disk usage for the
|
|
446
449
|
management service, Providers, Neo4j, application files, and local data. Memory is sampled on every
|
|
447
450
|
poll; disk usage is sampled at most once per minute, with separate timestamps. Missing container metrics
|
|
448
|
-
are shown as partial instead of being replaced with mock values.
|
|
449
|
-
container-VM overhead
|
|
451
|
+
are shown as partial instead of being replaced with mock values. Native Provider and Neo4j processes
|
|
452
|
+
are included. Browser-tab memory is excluded; shared container-VM overhead is excluded in container mode.
|
|
450
453
|
|
|
451
454
|
## CLI
|
|
452
455
|
|
|
@@ -464,6 +467,8 @@ system locale. User data such as paths and space names is displayed unchanged.
|
|
|
464
467
|
| `fuli restart [options]` | Restart local services using the same runtime options as `start` |
|
|
465
468
|
| `fuli status [--json] [--data-dir DIR] [--port PORT]` | Show UI, personal graph, and shared-service status; `--json` emits machine-readable output |
|
|
466
469
|
| `fuli open [--data-dir DIR]` | Open the current management UI in the default browser |
|
|
470
|
+
| `fuli graph export --output DIR [--mode container\|native]` | Export graph data as a checksummed, copyable offline bundle |
|
|
471
|
+
| `fuli graph import --input DIR [--target-mode container\|native] [--yes]` | Verify and replace target graph data, preserving an automatic pre-import rollback bundle |
|
|
467
472
|
| `fuli update [setup options]` | Update the npm package and refresh local integrations |
|
|
468
473
|
| `fuli uninstall [--yes] [--data-dir DIR]` | Remove agent integrations and services while preserving knowledge data and Neo4j volumes |
|
|
469
474
|
|
|
@@ -474,6 +479,7 @@ fuli --version
|
|
|
474
479
|
fuli status
|
|
475
480
|
fuli restart --rebuild
|
|
476
481
|
fuli start --lan
|
|
482
|
+
fuli graph export --output "$HOME/Backups/fuli-graph"
|
|
477
483
|
fuli stop
|
|
478
484
|
```
|
|
479
485
|
|
|
@@ -511,11 +517,76 @@ and tells you to run `fuli setup`; it never applies setup changes implicitly.
|
|
|
511
517
|
| `--data-dir DIR` | Use a specific data and configuration directory |
|
|
512
518
|
| `--personal-space NAME` | Set the personal-space name; defaults to `Personal` |
|
|
513
519
|
| `--port PORT` | Set the management UI port; defaults to `2727` |
|
|
520
|
+
| `--runtime-mode container\|native` | Select containers or native processes; defaults to `container`, with native mode currently on macOS/Linux |
|
|
521
|
+
| `--memory-profile low\|balanced` | Select Neo4j's memory budget; fresh installs default to `balanced` |
|
|
522
|
+
| `--adaptive-memory` | Enable on-demand wake and staged idle sleep, coordinated by the management service |
|
|
523
|
+
| `--no-adaptive-memory` | Disable idle sleep and keep graph services running |
|
|
514
524
|
| `--skip-agents` | Do not change agent configuration or Skills |
|
|
515
525
|
| `--no-start` | Initialize the Provider without starting the UI |
|
|
516
526
|
| `--personal-only` | Use only the personal Provider; this is the default |
|
|
517
527
|
| `--with-dev-public` | Start a development shared Provider for local integration work only |
|
|
518
528
|
|
|
529
|
+
The `low` profile uses a 128 MiB initial heap, 256 MiB maximum heap, and 64 MiB page cache.
|
|
530
|
+
`balanced` uses 256 MiB, 512 MiB, and 256 MiB respectively. The low profile does not add a hard
|
|
531
|
+
container memory limit: it lowers steady memory use while leaving room for Neo4j's native memory.
|
|
532
|
+
It may cause more garbage collection and disk reads under bulk writes, large traversals, or high
|
|
533
|
+
concurrency, but it does not change transaction semantics, storage format, or data volumes. If those
|
|
534
|
+
workloads become slow or fail for lack of heap, run `fuli setup --memory-profile balanced --yes`.
|
|
535
|
+
The selected profile is saved and reused by later setup, update, start, and restart commands.
|
|
536
|
+
|
|
537
|
+
Adaptive memory is a lifecycle policy independent of the Neo4j memory profile. When enabled, the
|
|
538
|
+
lightweight management service stays available. Real MCP tools, MCP resources, and graph requests
|
|
539
|
+
acquire a runtime lease and wake services on demand. After the final lease is released, the personal
|
|
540
|
+
Provider stops after 60 idle seconds by default and Neo4j stops after 180 idle seconds. Volumes are
|
|
541
|
+
preserved and the next request restores the same data. Active calls renew their leases and cannot be
|
|
542
|
+
interrupted by idle timers; a crashed client lease expires after at most 180 seconds. These durations
|
|
543
|
+
are current product defaults, not measured hardware thresholds.
|
|
544
|
+
|
|
545
|
+
This mode trades idle memory for first-request cold-start latency and additional disk reads. Health,
|
|
546
|
+
runtime-status, and resource polling do not wake the graph, and `fuli status` treats intentional sleep
|
|
547
|
+
as healthy. The management service must remain running to wake graph services, so `--no-start` only
|
|
548
|
+
saves the policy for a later start. In container mode the policy stops only Fuli Provider and Neo4j
|
|
549
|
+
containers; it does not shut down Rancher Desktop, Docker Desktop, Kubernetes, or the container VM
|
|
550
|
+
itself. Native mode directly stops the corresponding Provider and Neo4j processes, so no shared VM
|
|
551
|
+
overhead remains while idle.
|
|
552
|
+
|
|
553
|
+
Project Agent identities remain control-plane records rather than one resident process per identity.
|
|
554
|
+
Physical executors share leases by executor ID. Fuli starts and stops only executors with an explicitly
|
|
555
|
+
injected managed lifecycle adapter; host-owned external executors such as Codex are never started or
|
|
556
|
+
killed implicitly. The current minimum-memory combination is:
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
fuli setup --yes --runtime-mode native --memory-profile low --adaptive-memory
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
The two modes use separate data directories. Switching preserves the old mode's data and never
|
|
563
|
+
merges changes in the background. To migrate, export while the source mode is still active, then
|
|
564
|
+
install or switch to the target mode and import:
|
|
565
|
+
|
|
566
|
+
```bash
|
|
567
|
+
# Rancher / Docker -> native
|
|
568
|
+
fuli graph export --mode container --output "$HOME/Backups/fuli-container"
|
|
569
|
+
fuli setup --yes --runtime-mode native --memory-profile low --adaptive-memory
|
|
570
|
+
fuli graph import --target-mode native --input "$HOME/Backups/fuli-container" --yes
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
Swap `container` and `native` for the reverse direction. Export briefly stops the source database
|
|
574
|
+
and resumes only services that were actually running beforehand. Import validates the manifest and
|
|
575
|
+
every dump's SHA-256 before stopping the target. It preserves the old target under `backups/graph`
|
|
576
|
+
inside the data directory and attempts an immediate rollback if loading fails. Let active Agent graph
|
|
577
|
+
writes finish before either operation.
|
|
578
|
+
|
|
579
|
+
After loading, Fuli uses the target installation's bootstrap token to rotate local Provider access
|
|
580
|
+
credentials and atomically updates the runtime configuration; plaintext access tokens are never added
|
|
581
|
+
to the bundle. Unmanaged external Workspace connections are preserved for a same-device migration.
|
|
582
|
+
Reconnect their credentials separately after moving the bundle to another device.
|
|
583
|
+
|
|
584
|
+
The bundle is a directory containing `manifest.json`, `personal.dump`, and an optional
|
|
585
|
+
`workspace.dump`; it can be copied to another disk or machine. Container mode transfers files through
|
|
586
|
+
the Docker API, so the backup location does not need to be shared with Rancher. Dumps use the pinned
|
|
587
|
+
Neo4j 5.26 format and are intended for the two Fuli runtime modes or a compatible Neo4j 5.26 setup;
|
|
588
|
+
they are not a generic CSV/JSON interchange format for arbitrary databases.
|
|
589
|
+
|
|
519
590
|
Update:
|
|
520
591
|
|
|
521
592
|
```bash
|
package/README.zh-CN.md
CHANGED
|
@@ -370,8 +370,10 @@ Agent 上下文。
|
|
|
370
370
|
准备:
|
|
371
371
|
|
|
372
372
|
- Node.js 24.12 或更高版本;
|
|
373
|
-
- Docker Compose v2
|
|
374
|
-
-
|
|
373
|
+
- 默认容器模式需要 Docker Compose v2,Docker Desktop 或 Rancher Desktop 均可;
|
|
374
|
+
- macOS / Linux 可选择不使用虚拟机的原生模式;它需要 Java 21 和 `uv`(Python 3.12);
|
|
375
|
+
- 内存紧张的 Mac 推荐
|
|
376
|
+
`fuli setup --runtime-mode native --memory-profile low --adaptive-memory`。默认仍是兼容性更高的容器模式,不会自动强制切换。
|
|
375
377
|
|
|
376
378
|
全局安装并初始化:
|
|
377
379
|
|
|
@@ -392,12 +394,13 @@ fuli open
|
|
|
392
394
|
|
|
393
395
|
管理界面默认位于 `http://127.0.0.1:2727`。
|
|
394
396
|
|
|
395
|
-
“设置”页集中管理 Fuli 使用的 7
|
|
396
|
-
|
|
397
|
+
“设置”页集中管理 Fuli 使用的 7 个本机端口、图数据库运行方式、局域网访问、自动沉淀、
|
|
398
|
+
Agent 使用、界面语言和资源刷新频率。端口、运行方式或局域网设置保存后执行 `fuli restart`
|
|
399
|
+
生效;资源刷新频率立即生效。
|
|
397
400
|
同页按设定间隔采集管理服务、Provider、Neo4j、应用文件和本机数据的真实内存/磁盘占用;
|
|
398
401
|
内存每次重采,磁盘最多每分钟重采一次,并分别显示采样时间。
|
|
399
|
-
|
|
400
|
-
|
|
402
|
+
无法取得运行进程数据时会明确显示为不完整,不使用模拟值。原生模式会计入 Provider 和
|
|
403
|
+
Neo4j 进程;容器模式不把共享容器虚拟机开销计入 Fuli 合计。两种模式都不含浏览器标签页。
|
|
401
404
|
|
|
402
405
|
## CLI
|
|
403
406
|
|
|
@@ -415,6 +418,8 @@ CLI 的帮助、交互提示、状态和错误信息固定使用英文,不跟
|
|
|
415
418
|
| `fuli restart [选项]` | 使用与 `start` 相同的运行参数重启本机服务 |
|
|
416
419
|
| `fuli status [--json] [--data-dir DIR] [--port PORT]` | 查看管理界面、个人图谱和公共服务状态;`--json` 输出机器可读结果 |
|
|
417
420
|
| `fuli open [--data-dir DIR]` | 在默认浏览器中打开当前管理界面 |
|
|
421
|
+
| `fuli graph export --output DIR [--mode container\|native]` | 把当前图数据导出为可校验、可复制的离线备份包 |
|
|
422
|
+
| `fuli graph import --input DIR [--target-mode container\|native] [--yes]` | 校验备份并替换目标图数据;导入前自动保留回滚包 |
|
|
418
423
|
| `fuli update [setup 选项]` | 更新 npm 包并刷新本机接入 |
|
|
419
424
|
| `fuli uninstall [--yes] [--data-dir DIR]` | 清理 Agent 接入和服务,保留知识数据和 Neo4j 数据卷 |
|
|
420
425
|
|
|
@@ -425,6 +430,7 @@ fuli --version
|
|
|
425
430
|
fuli status
|
|
426
431
|
fuli restart --rebuild
|
|
427
432
|
fuli start --lan
|
|
433
|
+
fuli graph export --output "$HOME/Backups/fuli-graph"
|
|
428
434
|
fuli stop
|
|
429
435
|
```
|
|
430
436
|
|
|
@@ -462,11 +468,68 @@ HTTPS 公网部署。
|
|
|
462
468
|
| `--data-dir DIR` | 使用指定的数据与配置目录 |
|
|
463
469
|
| `--personal-space NAME` | 设置个人空间名称;默认是 `Personal` |
|
|
464
470
|
| `--port PORT` | 设置管理界面端口;默认是 `2727` |
|
|
471
|
+
| `--runtime-mode container\|native` | 选择容器或原生进程;默认 `container`,原生模式当前支持 macOS / Linux |
|
|
472
|
+
| `--memory-profile low\|balanced` | 选择 Neo4j 内存档位;首次安装默认使用 `balanced` |
|
|
473
|
+
| `--adaptive-memory` | 启用按需唤醒和分阶段休眠;保存后由管理服务协调 |
|
|
474
|
+
| `--no-adaptive-memory` | 关闭按需休眠,让图服务保持运行 |
|
|
465
475
|
| `--skip-agents` | 不修改 Agent 配置或 Skills |
|
|
466
476
|
| `--no-start` | 初始化 Provider,但不启动管理界面 |
|
|
467
477
|
| `--personal-only` | 只使用个人 Provider;默认模式 |
|
|
468
478
|
| `--with-dev-public` | 同时启动开发用公共 Provider,仅用于开发或联调 |
|
|
469
479
|
|
|
480
|
+
`low` 档使用 128 MiB 初始堆、256 MiB 最大堆和 64 MiB 页缓存;`balanced` 档分别使用
|
|
481
|
+
256 MiB、512 MiB 和 256 MiB。低内存档不会设置容器硬内存上限,会在降低常驻内存的同时
|
|
482
|
+
为 Neo4j 原生内存留出余量。批量写入、大范围图遍历或高并发时,垃圾回收和磁盘读取可能
|
|
483
|
+
增多,但事务语义、存储格式和数据卷不变。如果这些负载变慢或因堆不足而失败,可执行
|
|
484
|
+
`fuli setup --memory-profile balanced --yes` 回退。选择的档位会被保存,后续 setup、update、
|
|
485
|
+
start 和 restart 会继续沿用。
|
|
486
|
+
|
|
487
|
+
自适应内存模式是独立于 Neo4j 内存档位的生命周期策略。启用后,管理服务保持轻量常驻:
|
|
488
|
+
实际 MCP 工具、MCP 资源或管理界面的图谱请求会先取得运行租约并按需唤醒服务;最后一个
|
|
489
|
+
租约释放后,个人 Provider 默认空闲 60 秒停止,Neo4j 默认空闲 180 秒停止。数据卷不会被
|
|
490
|
+
删除,下一次请求会自动恢复同一份数据。运行中的调用会持续续租,不会被空闲计时器中断;
|
|
491
|
+
客户端异常退出后,租约最多 180 秒自动过期,避免服务永久被占住。这些秒数是当前产品默认值,
|
|
492
|
+
不是硬件实测阈值。
|
|
493
|
+
|
|
494
|
+
这种模式把空闲内存换成首次请求的冷启动等待和更多磁盘读取。管理界面的健康、运行状态和资源
|
|
495
|
+
采样不会唤醒图服务;`fuli status` 会把主动休眠报告为正常状态。管理服务必须保持运行才能自动
|
|
496
|
+
唤醒,所以 `--no-start` 只会保存策略,不会在本次运行中提供按需唤醒。容器模式下,该策略只
|
|
497
|
+
停止 Fuli 的 Provider / Neo4j 容器,不会自行关闭 Rancher Desktop、Docker Desktop、
|
|
498
|
+
Kubernetes 或整台容器虚拟机;原生模式会直接停止对应 Provider 和 Neo4j 进程,因此空闲时
|
|
499
|
+
不再保留共享虚拟机开销。
|
|
500
|
+
|
|
501
|
+
Project Agent 身份仍是控制面记录,不会每个身份常驻一个进程。实际执行器按 ID 共用租约:
|
|
502
|
+
只有显式注入受管生命周期适配器的执行器才由 Fuli 启停;Codex 等宿主自己拥有的外部执行器
|
|
503
|
+
不会被 Fuli 擅自启动或终止。当前可用的最小内存组合是:
|
|
504
|
+
|
|
505
|
+
```bash
|
|
506
|
+
fuli setup --yes --runtime-mode native --memory-profile low --adaptive-memory
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
两种模式使用彼此独立的数据目录,切换不会删除原模式的数据,也不会在后台自动合并两边的
|
|
510
|
+
新增内容。需要迁移时,先在来源模式仍处于启用状态时导出,再安装或切换目标模式并导入:
|
|
511
|
+
|
|
512
|
+
```bash
|
|
513
|
+
# Rancher / Docker -> 原生
|
|
514
|
+
fuli graph export --mode container --output "$HOME/Backups/fuli-container"
|
|
515
|
+
fuli setup --yes --runtime-mode native --memory-profile low --adaptive-memory
|
|
516
|
+
fuli graph import --target-mode native --input "$HOME/Backups/fuli-container" --yes
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
反向迁移只需交换 `container` 和 `native`。导出会短暂停止来源数据库,完成后只恢复导出前
|
|
520
|
+
确实在运行的服务;导入会先校验清单和每个 dump 的 SHA-256,再停止目标数据库。替换前的
|
|
521
|
+
目标数据会自动保存在数据目录下的 `backups/graph`,导入失败时会立即尝试回滚。执行前应让
|
|
522
|
+
正在写图数据的 Agent 请求结束。
|
|
523
|
+
|
|
524
|
+
导入完成后会使用目标安装自己的 bootstrap token 重新签发本机 Provider 访问令牌,并原子
|
|
525
|
+
更新运行配置;明文访问令牌不会写入迁移包。同一台机器迁移时,非受管的外部 Workspace
|
|
526
|
+
连接配置会继续保留;换到另一台机器后,外部服务凭据需要单独重新连接。
|
|
527
|
+
|
|
528
|
+
备份是一个含 `manifest.json`、`personal.dump` 和可选 `workspace.dump` 的目录,可以复制到
|
|
529
|
+
其他磁盘或机器。容器模式通过 Docker API 复制文件,不要求 Rancher 共享备份所在目录。
|
|
530
|
+
dump 使用项目固定的 Neo4j 5.26 格式,适合在 Fuli 两种运行模式或兼容的 Neo4j 5.26 环境间
|
|
531
|
+
迁移;它不是面向任意数据库的 CSV / JSON 通用交换格式。
|
|
532
|
+
|
|
470
533
|
更新:
|
|
471
534
|
|
|
472
535
|
```bash
|
package/compose.graphiti.yml
CHANGED
|
@@ -5,9 +5,9 @@ services:
|
|
|
5
5
|
image: neo4j:5.26-community
|
|
6
6
|
environment:
|
|
7
7
|
NEO4J_AUTH: neo4j/${FULI_PERSONAL_NEO4J_PASSWORD}
|
|
8
|
-
NEO4J_server_memory_heap_initial__size: 256m
|
|
9
|
-
NEO4J_server_memory_heap_max__size: 512m
|
|
10
|
-
NEO4J_server_memory_pagecache_size: 256m
|
|
8
|
+
NEO4J_server_memory_heap_initial__size: "${FULI_NEO4J_HEAP_INITIAL_SIZE:-256m}"
|
|
9
|
+
NEO4J_server_memory_heap_max__size: "${FULI_NEO4J_HEAP_MAX_SIZE:-512m}"
|
|
10
|
+
NEO4J_server_memory_pagecache_size: "${FULI_NEO4J_PAGECACHE_SIZE:-256m}"
|
|
11
11
|
ports:
|
|
12
12
|
- "127.0.0.1:${FULI_PERSONAL_NEO4J_HTTP_PORT:-8060}:7474"
|
|
13
13
|
- "127.0.0.1:${FULI_PERSONAL_NEO4J_BOLT_PORT:-7687}:7687"
|
|
@@ -24,9 +24,9 @@ services:
|
|
|
24
24
|
image: neo4j:5.26-community
|
|
25
25
|
environment:
|
|
26
26
|
NEO4J_AUTH: neo4j/${FULI_WORKSPACE_NEO4J_PASSWORD}
|
|
27
|
-
NEO4J_server_memory_heap_initial__size: 256m
|
|
28
|
-
NEO4J_server_memory_heap_max__size: 512m
|
|
29
|
-
NEO4J_server_memory_pagecache_size: 256m
|
|
27
|
+
NEO4J_server_memory_heap_initial__size: "${FULI_NEO4J_HEAP_INITIAL_SIZE:-256m}"
|
|
28
|
+
NEO4J_server_memory_heap_max__size: "${FULI_NEO4J_HEAP_MAX_SIZE:-512m}"
|
|
29
|
+
NEO4J_server_memory_pagecache_size: "${FULI_NEO4J_PAGECACHE_SIZE:-256m}"
|
|
30
30
|
ports:
|
|
31
31
|
- "127.0.0.1:${FULI_WORKSPACE_NEO4J_HTTP_PORT:-7475}:7474"
|
|
32
32
|
- "127.0.0.1:${FULI_WORKSPACE_NEO4J_BOLT_PORT:-7688}:7687"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,N as t,S as n,a as r,et as i,g as a,h as o,j as s,m as c,rt as l,y as u}from"./i18n-Ci3heuiL.js";import{t as d}from"./fuli-logo-Bu9WBuQe.js";import{t as f}from"./_plugin-vue_export-helper-BDNMzG2s.js";var p=[`aria-label`],m={class:`label-dimension-strip`},h=[`data-dimension`],g={class:`label-guide-sheet`},_={class:`label-guide-section profile-guide`},v={class:`label-definition-list`},y=[`data-kind`],b={class:`label-guide-section quadrant-guide`},x={class:`quadrant-explainer`},S={class:`quadrant-y-axis`,"aria-hidden":`true`},C={class:`quadrant-grid`},w=[`data-quadrant`],T={class:`quadrant-x-axis`,"aria-hidden":`true`},E={class:`quadrant-notes`},D={class:`label-guide-section confirmation-guide`},O={class:`status-definition-list`},k=[`data-status`],A={class:`status-boundaries`},j={class:`label-example`},M={class:`label-example-tags`,"aria-hidden":`true`},N={class:`label-token profile-token`,"data-kind":`taste`},P={class:`label-token origin-token`},ee={class:`label-token status-token`,"data-status":`confirmed`},F={class:`label-all-note`},I=f(e({__name:`LabelGuide`,setup(e){let n=o(()=>[{key:`profile`,title:r(`about.dimensions.profile.title`),question:r(`about.dimensions.profile.question`),timing:r(`about.dimensions.profile.timing`)},{key:`origin`,title:r(`about.dimensions.origin.title`),question:r(`about.dimensions.origin.question`),timing:r(`about.dimensions.origin.timing`)},{key:`confirmation`,title:r(`about.dimensions.confirmation.title`),question:r(`about.dimensions.confirmation.question`),timing:r(`about.dimensions.confirmation.timing`)}]),d=o(()=>[{key:`taste`,label:r(`about.profiles.taste.label`),short:r(`about.profiles.taste.short`),description:r(`about.profiles.taste.description`)},{key:`personality`,label:r(`about.profiles.personality.label`),short:r(`about.profiles.personality.short`),description:r(`about.profiles.personality.description`)},{key:`judgment`,label:r(`about.profiles.judgment.label`),short:r(`about.profiles.judgment.short`),description:r(`about.profiles.judgment.description`)}]),f=o(()=>[{key:`known-unknown`,label:r(`about.quadrants.knownUnknown.label`),coordinate:r(`about.quadrants.knownUnknown.coordinate`),description:r(`about.quadrants.knownUnknown.description`)},{key:`known-known`,label:r(`about.quadrants.knownKnown.label`),coordinate:r(`about.quadrants.knownKnown.coordinate`),description:r(`about.quadrants.knownKnown.description`)},{key:`unknown-unknown`,label:r(`about.quadrants.unknownUnknown.label`),coordinate:r(`about.quadrants.unknownUnknown.coordinate`),description:r(`about.quadrants.unknownUnknown.description`)},{key:`unknown-known`,label:r(`about.quadrants.unknownKnown.label`),coordinate:r(`about.quadrants.unknownKnown.coordinate`),description:r(`about.quadrants.unknownKnown.description`)}]),I=o(()=>[{key:`pending`,label:r(`about.statuses.pending.label`),description:r(`about.statuses.pending.description`),rule:r(`about.statuses.pending.rule`)},{key:`agent-confirmed`,label:r(`about.statuses.agentConfirmed.label`),description:r(`about.statuses.agentConfirmed.description`),rule:r(`about.statuses.agentConfirmed.rule`)},{key:`confirmed`,label:r(`about.statuses.confirmed.label`),description:r(`about.statuses.confirmed.description`),rule:r(`about.statuses.confirmed.rule`)}]);return(e,o)=>(s(),u(`section`,{class:`label-guide`,"aria-label":i(r)(`about.labelsAria`)},[a(`div`,m,[(s(!0),u(c,null,t(n.value,e=>(s(),u(`article`,{key:e.key,"data-dimension":e.key},[o[0]||=a(`i`,{"aria-hidden":`true`},null,-1),a(`div`,null,[a(`strong`,null,l(e.title),1),a(`p`,null,l(e.question),1),a(`small`,null,l(e.timing),1)])],8,h))),128))]),a(`div`,g,[a(`section`,_,[a(`header`,null,[a(`span`,null,l(i(r)(`about.sections.profile.index`)),1),a(`div`,null,[a(`h3`,null,l(i(r)(`about.sections.profile.title`)),1),a(`p`,null,l(i(r)(`about.sections.profile.meta`)),1)])]),a(`div`,v,[(s(!0),u(c,null,t(d.value,e=>(s(),u(`article`,{key:e.key,class:`label-definition-row`},[a(`span`,{class:`label-token profile-token`,"data-kind":e.key},l(e.label),9,y),a(`div`,null,[a(`strong`,null,l(e.short),1),a(`p`,null,l(e.description),1)])]))),128))])]),a(`section`,b,[a(`header`,null,[a(`span`,null,l(i(r)(`about.sections.origin.index`)),1),a(`div`,null,[a(`h3`,null,l(i(r)(`about.sections.origin.title`)),1),a(`p`,null,l(i(r)(`about.sections.origin.meta`)),1)])]),a(`div`,x,[a(`div`,S,[a(`span`,null,l(i(r)(`about.quadrants.aware`)),1),a(`strong`,null,l(i(r)(`about.quadrants.awareness`)),1),a(`span`,null,l(i(r)(`about.quadrants.unaware`)),1)]),a(`div`,C,[(s(!0),u(c,null,t(f.value,e=>(s(),u(`article`,{key:e.key,"data-quadrant":e.key},[a(`span`,null,l(e.coordinate),1),a(`strong`,null,l(e.label),1),a(`p`,null,l(e.description),1)],8,w))),128))]),a(`div`,T,[a(`span`,null,l(i(r)(`about.quadrants.unmastered`)),1),a(`strong`,null,l(i(r)(`about.quadrants.mastery`)),1),a(`span`,null,l(i(r)(`about.quadrants.mastered`)),1)]),a(`div`,E,[a(`p`,null,l(i(r)(`about.quadrants.immutable`)),1),a(`p`,null,l(i(r)(`about.quadrants.unclassified`)),1)])])]),a(`section`,D,[a(`header`,null,[a(`span`,null,l(i(r)(`about.sections.confirmation.index`)),1),a(`div`,null,[a(`h3`,null,l(i(r)(`about.sections.confirmation.title`)),1),a(`p`,null,l(i(r)(`about.sections.confirmation.meta`)),1)])]),a(`div`,null,[a(`div`,O,[(s(!0),u(c,null,t(I.value,e=>(s(),u(`article`,{key:e.key,class:`status-definition-row`},[a(`span`,{class:`label-token status-token`,"data-status":e.key},l(e.label),9,k),a(`p`,null,l(e.description),1),a(`div`,null,[a(`span`,null,l(i(r)(`about.statuses.entryCondition`)),1),a(`strong`,null,l(e.rule),1)])]))),128))]),a(`div`,A,[a(`p`,null,l(i(r)(`about.statuses.usageBoundary`)),1),a(`p`,null,l(i(r)(`about.statuses.resetBoundary`)),1)])])]),a(`section`,j,[a(`div`,null,[a(`span`,null,l(i(r)(`about.example.title`)),1),a(`strong`,null,l(i(r)(`about.example.item`)),1)]),a(`div`,M,[a(`span`,N,l(i(r)(`about.example.profile`)),1),a(`span`,P,l(i(r)(`about.example.origin`)),1),a(`span`,ee,l(i(r)(`about.example.status`)),1)]),a(`p`,null,l(i(r)(`about.example.description`)),1)]),a(`p`,F,l(i(r)(`about.allFilter`)),1)])],8,p))}}),[[`__scopeId`,`data-v-b79b7e68`]]),L={class:`open-source-credits`},R={class:`credits-roll`},z={class:`credit-grid`},B=[`href`],V={class:`credit-mark`},H=[`src`,`alt`],U={class:`credit-copy`},W={class:`credit-source-note`},G={class:`fuli-finale`},K={class:`finale-brand`},q=[`src`],J=f(e({__name:`OpenSourceCredits`,setup(e){let n=o(()=>[{name:`Vue.js`,role:r(`about.credits.roles.vue`),logo:`https://raw.githubusercontent.com/vuejs/docs/main/src/public/logo.svg`,url:`https://vuejs.org/`},{name:`Vite`,role:r(`about.credits.roles.vite`),logo:`https://raw.githubusercontent.com/vitejs/vite/main/docs/public/logo-without-border.svg`,url:`https://vite.dev/`},{name:`Pinia`,role:r(`about.credits.roles.pinia`),logo:`https://raw.githubusercontent.com/vuejs/pinia/v4/packages/docs/public/logo.svg`,url:`https://pinia.vuejs.org/`},{name:`D3.js`,role:r(`about.credits.roles.d3`),logo:`https://raw.githubusercontent.com/d3/d3-logo/master/d3.svg`,url:`https://d3js.org/`},{name:`Vitest`,role:r(`about.credits.roles.vitest`),logo:`https://raw.githubusercontent.com/vitest-dev/vitest/main/docs/public/logo-without-border.svg`,url:`https://vitest.dev/`},{name:`Hono`,role:r(`about.credits.roles.hono`),logo:`https://raw.githubusercontent.com/honojs/website/main/public/images/logo.svg`,url:`https://hono.dev/`},{name:`Neo4j`,role:r(`about.credits.roles.neo4j`),logo:`https://avatars.githubusercontent.com/u/201120?v=4`,url:`https://neo4j.com/`},{name:`Zod`,role:r(`about.credits.roles.zod`),logo:`https://raw.githubusercontent.com/colinhacks/zod/main/packages/docs/public/logo/logo_square.png`,url:`https://zod.dev/`},{name:`FastAPI`,role:r(`about.credits.roles.fastapi`),logo:`https://raw.githubusercontent.com/fastapi/fastapi/master/docs/en/docs/img/favicon.png`,url:`https://fastapi.tiangolo.com/`},{name:`Graphiti`,role:r(`about.credits.roles.graphiti`),logo:`https://avatars.githubusercontent.com/u/132832125?s=128&v=4`,url:`https://github.com/getzep/graphiti`},{name:`Model Context Protocol`,role:r(`about.credits.roles.mcp`),logo:`https://raw.githubusercontent.com/modelcontextprotocol/docs/main/favicon.svg`,url:`https://modelcontextprotocol.io/`}]);return(e,o)=>(s(),u(`section`,L,[a(`div`,R,[a(`header`,null,[a(`h3`,null,l(i(r)(`about.credits.title`)),1),a(`p`,null,l(i(r)(`about.credits.description`)),1)]),a(`div`,z,[(s(!0),u(c,null,t(n.value,e=>(s(),u(`a`,{key:e.name,href:e.url,target:`_blank`,rel:`noreferrer`},[a(`span`,V,[a(`img`,{src:e.logo,alt:e.name},null,8,H)]),a(`span`,U,[a(`strong`,null,l(e.name),1),a(`small`,null,l(e.role),1)])],8,B))),128))]),a(`p`,W,l(i(r)(`about.credits.sourceNote`)),1)]),a(`footer`,G,[a(`div`,K,[a(`img`,{src:i(d),alt:``,"aria-hidden":`true`},null,8,q),a(`div`,null,[a(`strong`,null,l(i(r)(`common.brand`)),1),o[0]||=a(`span`,null,`Context Graph`,-1)])]),a(`p`,null,l(i(r)(`about.credits.finale`)),1)])]))}}),[[`__scopeId`,`data-v-8676884b`]]),Y={class:`product-principles`},X={class:`principles-lede`},Z={class:`principle-sequence`},Q={class:`principle-boundaries`},$=[`data-boundary`],te=f(e({__name:`ProductPrinciples`,setup(e){let n=o(()=>[{key:`capture`,index:r(`about.philosophy.capture.index`),title:r(`about.philosophy.capture.title`),description:r(`about.philosophy.capture.description`)},{key:`project`,index:r(`about.philosophy.project.index`),title:r(`about.philosophy.project.title`),description:r(`about.philosophy.project.description`)},{key:`review`,index:r(`about.philosophy.review.index`),title:r(`about.philosophy.review.title`),description:r(`about.philosophy.review.description`)},{key:`reuse`,index:r(`about.philosophy.reuse.index`),title:r(`about.philosophy.reuse.title`),description:r(`about.philosophy.reuse.description`)}]),d=o(()=>[{key:`local`,title:r(`about.philosophy.local.title`),description:r(`about.philosophy.local.description`)},{key:`authority`,title:r(`about.philosophy.authority.title`),description:r(`about.philosophy.authority.description`)},{key:`scope`,title:r(`about.philosophy.scope.title`),description:r(`about.philosophy.scope.description`)}]);return(e,o)=>(s(),u(`section`,Y,[a(`header`,X,[a(`h3`,null,l(i(r)(`about.philosophy.title`)),1),a(`p`,null,l(i(r)(`about.philosophy.intro`)),1),a(`p`,null,l(i(r)(`about.philosophy.support`)),1)]),a(`div`,Z,[(s(!0),u(c,null,t(n.value,e=>(s(),u(`article`,{key:e.key},[a(`span`,null,l(e.index),1),a(`div`,null,[a(`h4`,null,l(e.title),1),a(`p`,null,l(e.description),1)])]))),128))]),a(`div`,Q,[a(`strong`,null,l(i(r)(`about.philosophy.boundariesTitle`)),1),a(`div`,null,[(s(!0),u(c,null,t(d.value,e=>(s(),u(`article`,{key:e.key},[a(`i`,{"data-boundary":e.key,"aria-hidden":`true`},null,8,$),a(`h4`,null,l(e.title),1),a(`p`,null,l(e.description),1)]))),128))])])]))}}),[[`__scopeId`,`data-v-d823b02d`]]),ne=[`aria-label`],re={class:`about-content`},ie={class:`about-labels-section`},ae=f(e({__name:`AboutPage`,setup(e){return(e,t)=>(s(),u(`section`,{class:`view about-view`,"aria-label":i(r)(`about.aria`)},[a(`div`,re,[n(te),a(`section`,ie,[a(`header`,null,[a(`h3`,null,l(i(r)(`about.labelsIntro.title`)),1),a(`p`,null,l(i(r)(`about.labelsIntro.description`)),1)]),n(I)]),n(J)])],8,ne))}}),[[`__scopeId`,`data-v-6bd30c79`]]);export{ae as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,B as t,C as n,D as r,I as i,L as ee,N as a,O as o,S as s,Y as c,_ as l,a as u,et as d,g as f,h as p,j as m,k as h,m as g,n as te,p as _,q as v,rt as y,tt as b,u as x,v as S,x as C,y as w}from"./i18n-Ci3heuiL.js";import{a as T,i as E,n as D,r as O,t as k}from"./console-BlAhujsH.js";import{t as A}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as j}from"./SearchableSelect-Dz13ClQb.js";import{r as M,t as N}from"./identity-4_-v6cB7.js";var P=[`data-select-id`],F=[`aria-expanded`,`aria-controls`,`aria-label`,`aria-required`,`disabled`],I={class:`searchable-select-current`},L={class:`searchable-select-current-label`},ne={key:0,class:`searchable-select-current-meta`},re=[`hidden`],ie={key:0,class:`searchable-select-search`},ae=[`placeholder`,`aria-label`],R=[`id`],z=[`aria-selected`,`disabled`,`onClick`],oe={class:`searchable-select-option-copy`},se={key:0},ce={key:1,class:`searchable-select-empty`},le=n({__name:`SearchableMultiSelect`,props:{modelValue:{},options:{},label:{},controlId:{default:void 0},placeholder:{default:void 0},searchPlaceholder:{default:void 0},searchable:{type:Boolean,default:void 0},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1}},emits:[`update:modelValue`,`change`],setup(n,{emit:r}){let s=n,l=r,v=c(null),C=c(null),T=c(null),E=c(null),D=c(!1),O=c(!1),k=c(``),A=i().replace(/[^A-Za-z0-9_-]/g,``),j=p(()=>`${s.controlId||`searchable-multi-select-${A}`}-options`),M=p(()=>new Set(s.modelValue)),N=p(()=>s.options.filter(({value:e})=>M.value.has(e))),le=p(()=>N.value.length===0?s.placeholder??u(`common.searchableSelect.placeholder`):N.value.length===1?N.value[0].label:u(`common.searchableSelect.selectedCount`,{count:N.value.length})),B=p(()=>s.searchPlaceholder??u(`common.searchableSelect.searchPlaceholder`)),V=p(()=>s.searchable??s.options.length>5),H=p(()=>{let e=te(),t=k.value.trim().toLocaleLowerCase(e);return t?s.options.filter(n=>[n.label,n.value,n.meta,n.search].filter(Boolean).join(` `).toLocaleLowerCase(e).includes(t)):s.options});ee(()=>s.disabled,e=>{e&&W()}),e(()=>document.addEventListener(`pointerdown`,he)),h(()=>document.removeEventListener(`pointerdown`,he));async function U(){D.value?W():await ue()}async function ue(){s.disabled||(k.value=``,ve(),D.value=!0,await o(),V.value?T.value?.focus():_e()?.focus())}function W({restoreFocus:e=!1}={}){D.value=!1,O.value=!1,k.value=``,e&&o(()=>C.value?.focus())}function de(e){if(s.disabled||e.disabled)return;let t=M.value.has(e.value)?s.modelValue.filter(t=>t!==e.value):[...s.modelValue,e.value];l(`update:modelValue`,t),l(`change`,t)}function fe(e){[`ArrowDown`,`Enter`,` `].includes(e.key)&&(e.preventDefault(),D.value&&[`Enter`,` `].includes(e.key)?W():ue())}function pe(e){if(e.key===`Escape`){e.preventDefault(),W({restoreFocus:!0});return}if(e.key===`ArrowDown`){e.preventDefault(),K()?.focus();return}e.key===`Enter`&&(e.preventDefault(),K()?.click())}function me(e){if(e.key===`Escape`){e.preventDefault(),W({restoreFocus:!0});return}if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key))return;e.preventDefault();let t=G(),n=t.indexOf(e.currentTarget);t[e.key===`Home`?0:e.key===`End`?t.length-1:e.key===`ArrowDown`?Math.min(t.length-1,n+1):Math.max(0,n-1)]?.focus()}function he(e){D.value&&!v.value?.contains(e.target)&&W()}function ge(e){let t=e.relatedTarget;t&&v.value?.contains(t)||queueMicrotask(()=>{D.value&&!v.value?.contains(document.activeElement)&&W()})}function G(){return[...E.value?.querySelectorAll(`.searchable-select-option:not(:disabled)`)??[]]}function K(){return G()[0]??null}function _e(){return G().find(e=>e.getAttribute(`aria-selected`)===`true`)??K()}function ve(){let e=C.value?.getBoundingClientRect();O.value=!!(e&&window.innerHeight-e.bottom<270&&e.top>270)}return(e,r)=>(m(),w(`div`,{ref_key:`root`,ref:v,class:b([`searchable-select searchable-multi-select`,{open:D.value,"open-up":O.value,disabled:n.disabled}]),"data-select-id":n.controlId,onFocusout:ge},[f(`button`,{ref_key:`trigger`,ref:C,type:`button`,class:`searchable-select-trigger`,role:`combobox`,"aria-haspopup":`listbox`,"aria-expanded":D.value,"aria-controls":j.value,"aria-label":n.label,"aria-required":n.required,disabled:n.disabled,onPointerdown:r[0]||=_(()=>{},[`stop`]),onClick:_(U,[`stop`]),onKeydown:fe},[f(`span`,I,[f(`span`,L,y(le.value),1),N.value.length>1?(m(),w(`small`,ne,y(N.value.map(({label:e})=>e).join(` · `)),1)):S(``,!0)]),r[3]||=f(`i`,{class:`searchable-select-arrow`,"aria-hidden":`true`},null,-1)],40,F),f(`div`,{class:`searchable-select-panel`,hidden:!D.value},[V.value?(m(),w(`div`,ie,[t(f(`input`,{ref_key:`searchInput`,ref:T,"onUpdate:modelValue":r[1]||=e=>k.value=e,type:`search`,autocomplete:`off`,placeholder:B.value,"aria-label":d(u)(`common.searchableSelect.searchAria`,{label:n.label}),onKeydown:pe},null,40,ae),[[x,k.value]])])):S(``,!0),f(`div`,{id:j.value,ref_key:`optionsList`,ref:E,class:`searchable-select-options`,role:`listbox`,"aria-multiselectable":`true`},[(m(!0),w(g,null,a(H.value,e=>(m(),w(`button`,{key:e.value,type:`button`,class:`searchable-select-option`,role:`option`,"aria-selected":M.value.has(e.value),disabled:e.disabled,onMousedown:r[2]||=_(()=>{},[`prevent`]),onClick:t=>de(e),onKeydown:me},[f(`span`,oe,[f(`strong`,null,y(e.label),1),e.meta?(m(),w(`small`,se,y(e.meta),1)):S(``,!0)]),r[4]||=f(`i`,{class:`searchable-select-check`,"aria-hidden":`true`},null,-1)],40,z))),128))],8,R),H.value.length===0?(m(),w(`p`,ce,y(d(u)(`common.searchableSelect.noMatches`)),1)):S(``,!0)],8,re)],42,P))}}),B={class:`text-field`},V=[`id`,`value`,`name`,`placeholder`,`disabled`,`required`,`rows`],H=[`id`,`value`,`name`,`type`,`placeholder`,`disabled`,`required`],U=A(n({inheritAttrs:!1,__name:`TextField`,props:{modelValue:{},label:{},controlId:{default:void 0},type:{default:`text`},placeholder:{default:void 0},disabled:{type:Boolean,default:!1},required:{type:Boolean,default:!1},multiline:{type:Boolean,default:!1},rows:{default:3},name:{default:void 0}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=t;function i(e){n(`update:modelValue`,e.target.value)}return(t,n)=>(m(),w(`label`,B,[f(`span`,null,y(e.label),1),e.multiline?(m(),w(`textarea`,r({key:0},t.$attrs,{id:e.controlId,value:e.modelValue,name:e.name,placeholder:e.placeholder,disabled:e.disabled,required:e.required,rows:e.rows,onInput:i}),null,16,V)):(m(),w(`input`,r({key:1},t.$attrs,{id:e.controlId,value:e.modelValue,name:e.name,type:e.type,placeholder:e.placeholder,disabled:e.disabled,required:e.required,onInput:i}),null,16,H))]))}}),[[`__scopeId`,`data-v-6c32205a`]]),ue={class:`view connections-view`},W={class:`connection-intro`},de=[`aria-label`],fe=[`data-status`],pe={class:`service-state`},me=[`data-status`],he={class:`connection-title-row`},ge={class:`service-state`},G={class:`external-knowledge-section`},K={class:`section-title section-title-with-help`},_e=[`href`,`aria-label`,`title`],ve={class:`external-binding-count`},ye={class:`external-binding-list`},be=[`data-status`],xe={class:`external-binding-copy`},Se={class:`external-binding-targets`},Ce=[`data-status`],we={key:0},Te={key:1},Ee={class:`external-binding-actions`},De=[`disabled`,`onClick`],Oe=[`disabled`,`onClick`],ke=[`disabled`,`onClick`],Ae=[`disabled`,`onClick`],je={key:0,class:`external-binding-editor`},Me={class:`external-target-mode-list`},Ne={class:`external-binding-editor-actions`},Pe=[`disabled`],Fe=[`disabled`,`onClick`],Ie={key:0,class:`compact-empty`},Le={class:`wide-field`},Re={class:`trusted-code-badge`},ze=[`disabled`],Be={key:0,class:`conflict-policy-section`},Ve={class:`section-title section-title-with-help`},He=[`href`,`aria-label`,`title`],Ue={class:`conflict-policy-controls`},We={key:1,class:`connection-subscriptions`},Ge={class:`section-title`},Ke={class:`subscription-list`},qe=[`onClick`],Je={key:0,class:`empty-state`},Ye={type:`submit`},q=n({__name:`ConnectionsPage`,setup(t){let n=k(),r=c(``),i=c([]),o=c([]),h=c(!1),b=c(null),x=c([]),A=c({}),P=c(``),F=c(`ask_human`),I=c(!1),L=v({name:``,connectorType:`mcp`,mode:`hybrid`,personalProjectIds:[],mcpTransport:`http`,mcpUrl:``,mcpCommand:``,mcpArgs:``,mcpTokenEnv:``,mcpResourcePrefix:``,notionTokenEnv:``,notionPageIds:``,notionDataSourceIds:``,feishuTokenEnv:``,feishuRegion:`cn`,feishuSpaceId:``,feishuRootNodeToken:``,feishuNodeTokens:``,feishuWebBaseUrl:``,retrievalUrl:``,retrievalTokenEnv:``,retrievalKnowledgeIds:``,retrievalScoreThreshold:`0.5`,customModule:``,customEnvironmentNames:``,customSourceJson:`{}`}),ne=p(()=>n.state?.providers?.personal?.status===`ready`),re=p(()=>n.state?.providers?.workspaces??[]),ie=p(()=>re.value.filter(({status:e})=>e===`ready`).length),ae=p(()=>{let e=n.state?.capabilities,t=[e?.browsePublicProjects?u(`pages.connections.publicCapability.discovery`):null,e?.subscribeProject?u(`pages.connections.publicCapability.subscription`):null,e?.publishProject?u(`pages.connections.publicCapability.publishing`):null,e?.submitKnowledge?u(`pages.connections.publicCapability.contribution`):null,e?.reviewProposals?u(`pages.connections.publicCapability.review`):null].filter(e=>!!e);return t.length?new Intl.ListFormat(te(),{style:`long`,type:`conjunction`}).format(t):u(`pages.connections.notAvailable`)}),R=p(()=>n.state?.subscriptions??[]),z=p(()=>n.state?.personalProjects??[]),oe=p(()=>wt(`connect-external-knowledge`)),se=p(()=>wt(`external-knowledge-conflict-policy`)),ce=p(()=>new Set(R.value.map(({provider_url:e,project_id:t})=>`${e}::${t}`))),B=p(()=>(n.state?.projects??[]).filter(e=>!ce.value.has(et(e)))),V=p(()=>B.value.map(e=>({value:et(e),label:e.name,meta:`#${N(e.id,26)}`,search:M(e.id)}))),H=p(()=>i.value.map(e=>({value:e.type,label:e.name,meta:e.description}))),q=p(()=>z.value.map(e=>({value:e.project_id,label:e.profile.name,meta:`#${N(e.project_id,26)}`,search:M(e.project_id)}))),Xe=p(()=>[{value:`hybrid`,label:u(`pages.connections.mode.hybrid`),disabled:!Y(L.connectorType,`hybrid`)},{value:`mirror`,label:u(`pages.connections.mode.mirror`),disabled:!Y(L.connectorType,`mirror`)},{value:`live`,label:u(`pages.connections.mode.live`),disabled:!Y(L.connectorType,`live`)}]),Ze=p(()=>[{value:`http`,label:`Streamable HTTP`},{value:`stdio`,label:`stdio`}]),Qe=p(()=>[{value:`cn`,label:`Feishu`},{value:`global`,label:`Lark`}]),$e=p(()=>[{value:`ask_human`,label:u(`pages.connections.askHuman`)},{value:`agent_decide`,label:u(`pages.connections.agentDecide`)}]);ee(z,e=>{let t=new Set(e.map(({project_id:e})=>e)),n=e[0]?.project_id??``;L.personalProjectIds=L.personalProjectIds.filter(e=>t.has(e)),!L.personalProjectIds.length&&n&&(L.personalProjectIds=[n]),x.value=x.value.filter(e=>t.has(e)),t.has(P.value)||(P.value=n,n&&mt())},{immediate:!0}),ee(()=>L.connectorType,e=>{Y(e,L.mode)||(L.mode=_t(e))}),e(async()=>{await J(),P.value&&await mt()});function et(e){return`${e.providerUrl}::${e.id}`}async function tt(){let e=B.value.find(e=>et(e)===r.value);if(e)try{await T(`/api/subscriptions`,{personalSpaceId:n.activePersonalSpace?.id,projectId:e.id,providerUrl:e.providerUrl,projectName:e.name}),r.value=``,n.notify(u(`pages.connections.subscribed`,{name:e.name})),await n.refresh()}catch(e){n.reportError(e)}}async function nt(e){try{let t=new URLSearchParams({personalSpaceId:n.activePersonalSpace?.id??``,providerUrl:e.provider_url});await D(`/api/subscriptions/${encodeURIComponent(e.project_id)}?${t}`),n.notify(u(`pages.connections.unsubscribed`,{name:e.project_name??e.project_id})),await n.refresh()}catch(e){n.reportError(e)}}async function J(){try{let[e,t]=await Promise.all([O(`/api/external-knowledge/connectors`),O(`/api/external-knowledge/bindings`)]);i.value=e,o.value=t}catch(e){n.reportError(e)}}async function rt(){let e=n.activePersonalSpace?.id;if(!(!e||!L.personalProjectIds.length)){h.value=!0;try{let{connectorConfig:t,source:r}=it();await T(`/api/external-knowledge/bindings`,{name:L.name.trim(),connectorType:L.connectorType,connectorConfig:t,source:r,targets:L.personalProjectIds.map(t=>({personalSpaceId:e,personalProjectId:t,mode:L.mode}))}),n.notify(u(`pages.connections.externalCreated`,{name:L.name.trim()})),L.name=``,await J()}catch(e){n.reportError(e)}finally{h.value=!1}}}function it(){if(L.connectorType===`notion`)return{connectorConfig:{tokenEnv:$(L.notionTokenEnv,`Notion token env`)},source:{pageIds:Z(L.notionPageIds),dataSourceIds:Z(L.notionDataSourceIds)}};if(L.connectorType===`feishu`)return{connectorConfig:{accessTokenEnv:$(L.feishuTokenEnv,`Feishu token env`),region:L.feishuRegion},source:Q({spaceId:L.feishuSpaceId.trim(),rootNodeToken:L.feishuRootNodeToken.trim(),nodeTokens:Z(L.feishuNodeTokens),webBaseUrl:L.feishuWebBaseUrl.trim()})};if(L.connectorType===`retrieval_api`){let e=Number(L.retrievalScoreThreshold);if(!Number.isFinite(e)||e<0||e>1)throw TypeError(u(`pages.connections.scoreThresholdInvalid`));return{connectorConfig:Q({url:$(L.retrievalUrl,`Retrieval API URL`),tokenEnv:L.retrievalTokenEnv.trim(),scoreThreshold:e}),source:{knowledgeIds:Ct(L.retrievalKnowledgeIds,`Knowledge IDs`)}}}if(L.connectorType===`custom`){let e=JSON.parse(L.customSourceJson);if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(u(`pages.connections.customSourceObject`));return{connectorConfig:{module:$(L.customModule,`Custom connector module`),environmentNames:Z(L.customEnvironmentNames)},source:e}}return{connectorConfig:L.mcpTransport===`stdio`?Q({transport:`stdio`,command:L.mcpCommand.trim(),args:Z(L.mcpArgs)}):Q({transport:`http`,url:$(L.mcpUrl,`MCP URL`),tokenEnv:L.mcpTokenEnv.trim()}),source:Q({resourceUriPrefix:L.mcpResourcePrefix.trim()})}}async function at(e){await st(e,`check`)}async function ot(e){await st(e,`sync`)}async function st(e,t){h.value=!0;try{let r=await T(`/api/external-knowledge/bindings/${encodeURIComponent(e.id)}/${t}`,{});n.notify(u(t===`sync`&&r.skippedCredentials?`pages.connections.externalSyncedWithSkipped`:t===`sync`?`pages.connections.externalSynced`:`pages.connections.externalChecked`,{name:e.name,count:r.skippedCredentials??0})),await J()}catch(e){n.reportError(e)}finally{h.value=!1}}async function ct(e){h.value=!0;try{await D(`/api/external-knowledge/bindings/${encodeURIComponent(e.id)}`),n.notify(u(`pages.connections.externalDeleted`,{name:e.name})),await J()}catch(e){n.reportError(e)}finally{h.value=!1}}function lt(e){let t=X(e);b.value=e.id,x.value=t.map(({personalProjectId:e})=>e),A.value=Object.fromEntries(t.map(({personalProjectId:e,mode:t})=>[e,t]))}function ut(){b.value=null,x.value=[],A.value={}}function dt(e){let t=o.value.find(({id:e})=>e===b.value);if(!t)return;let n=A.value,r=_t(t.connectorType);A.value=Object.fromEntries(e.map(e=>[e,n[e]??t.mode??r]))}function ft(e,t){A.value={...A.value,[e]:t}}async function pt(e){let t=n.activePersonalSpace?.id;if(!(!t||!x.value.length)){h.value=!0;try{await E(`/api/external-knowledge/bindings/${encodeURIComponent(e.id)}/targets`,{targets:x.value.map(n=>({personalSpaceId:t,personalProjectId:n,mode:A.value[n]??e.mode}))}),n.notify(u(`pages.connections.projectsUpdated`,{name:e.name})),ut(),await J()}catch(e){n.reportError(e)}finally{h.value=!1}}}async function mt(){if(P.value)try{let e=await O(`/api/external-knowledge/conflict-policy?${new URLSearchParams({personalProjectId:P.value})}`);F.value=e.mode}catch(e){n.reportError(e)}}async function ht(){let e=n.activePersonalSpace?.id;if(!(!e||!P.value)){I.value=!0;try{let t=await E(`/api/external-knowledge/conflict-policy?${new URLSearchParams({personalProjectId:P.value})}`,{personalSpaceId:e,personalProjectId:P.value,mode:F.value});F.value=t.mode,n.notify(u(`pages.connections.conflictSaved`))}catch(e){n.reportError(e)}finally{I.value=!1}}}function gt(e){return i.value.find(t=>t.type===e)?.name??e}function Y(e,t){let n=i.value.find(t=>t.type===e)?.capabilities;return!n?.length||(t===`live`||t===`hybrid`?n.includes(`retrieve`):!0)&&(t===`mirror`||t===`hybrid`?n.includes(`sync`):!0)}function _t(e){return[`hybrid`,`mirror`,`live`].find(t=>Y(e,t))??`live`}function vt(e){return[`hybrid`,`mirror`,`live`].map(t=>({value:t,label:u(`pages.connections.mode.${t}`),disabled:!Y(e,t)}))}function X(e){return e.targets?.length?e.targets:[{id:e.id,...e.target,mode:e.mode,status:e.status,sync:e.sync}]}function yt(e){return X(e).some(({mode:e})=>e!==`live`)}function bt(e){return z.value.find(({project_id:t})=>t===e)?.profile.name??e}function xt(e){return X(e).find(({sync:e})=>e?.error)?.sync?.error??e.sync?.error}function St(e){return X(e).reduce((e,t)=>e+(t.sync?.skippedCredentials??0),0)}function Z(e){return[...new Set(e.split(`,`).map(e=>e.trim()).filter(Boolean))]}function Ct(e,t){let n=Z(e);if(!n.length)throw TypeError(`${t} is required`);return n}function Q(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==``&&(!Array.isArray(e)||e.length>0)))}function $(e,t){if(!e.trim())throw TypeError(`${t} is required`);return e.trim()}function wt(e){return`https://github.com/JevonsCode/fuli/blob/main/${te()===`zh-CN`?`README.zh-CN.md`:`README.md`}#${e}`}return(e,t)=>(m(),w(`section`,ue,[f(`div`,W,[f(`h3`,null,y(d(u)(`pages.connections.title`)),1)]),f(`div`,{class:`service-connection-grid`,"aria-label":d(u)(`pages.connections.statusAria`)},[f(`article`,{class:`service-connection-card`,"data-status":ne.value?`ready`:`error`},[f(`header`,null,[t[30]||=f(`span`,{class:`service-connection-icon local`,"aria-hidden":`true`},[f(`span`,{class:`nav-icon nav-icon-personal-project`})],-1),f(`div`,null,[f(`h3`,null,y(d(u)(`pages.connections.localGraphiti`)),1)]),f(`span`,pe,y(ne.value?d(u)(`common.status.connected`):d(u)(`common.status.connectionError`)),1)]),f(`dl`,null,[f(`div`,null,[f(`dt`,null,y(d(u)(`pages.connections.storage`)),1),t[31]||=f(`dd`,null,`Neo4j`,-1)]),f(`div`,null,[f(`dt`,null,y(d(u)(`pages.connections.purpose`)),1),f(`dd`,null,y(d(u)(`pages.connections.localPurpose`)),1)])])],8,fe),f(`article`,{class:`service-connection-card`,"data-status":d(n).publicRuntimeStatus},[f(`header`,null,[t[33]||=f(`span`,{class:`service-connection-icon public`,"aria-hidden":`true`},[f(`span`,{class:`nav-icon nav-icon-public-project`})],-1),f(`div`,he,[f(`h3`,null,y(d(u)(`pages.connections.publicService`)),1),t[32]||=f(`span`,{class:`feature-badge beta`},`BETA`,-1)]),f(`span`,ge,y(d(n).publicRuntimeStatus===`ready`?d(u)(`common.status.connected`):d(n).publicRuntimeStatus===`error`?d(u)(`common.status.connectionError`):d(u)(`common.status.notConnected`)),1)]),f(`dl`,null,[f(`div`,null,[f(`dt`,null,y(d(u)(`pages.connections.currentStatus`)),1),f(`dd`,null,y(d(n).publicRuntimeStatus===`ready`?d(u)(`pages.connections.sharedServicesReady`,{count:ie.value||re.value.length}):d(u)(`pages.connections.notAvailable`)),1)]),f(`div`,null,[f(`dt`,null,y(d(u)(`pages.connections.purpose`)),1),f(`dd`,null,y(ae.value),1)])])],8,me)],8,de),f(`section`,G,[f(`div`,K,[f(`h3`,null,y(d(u)(`pages.connections.externalTitle`)),1),f(`a`,{class:`section-help-link`,"data-testid":`external-knowledge-help`,href:oe.value,"aria-label":d(u)(`pages.connections.externalHelp`),title:d(u)(`pages.connections.externalHelp`),target:`_blank`,rel:`noreferrer`},`?`,8,_e),f(`span`,ve,y(d(u)(`pages.connections.bindingCount`,{count:o.value.length})),1)]),f(`div`,ye,[(m(!0),w(g,null,a(o.value,e=>(m(),w(`article`,{key:e.id,class:`external-binding-row`,"data-status":e.status},[t[34]||=f(`i`,{"aria-hidden":`true`},null,-1),f(`div`,xe,[f(`strong`,null,y(e.name),1),f(`span`,null,y(gt(e.connectorType)),1),f(`div`,Se,[f(`b`,null,y(d(u)(`pages.connections.boundTo`)),1),(m(!0),w(g,null,a(X(e),e=>(m(),w(`span`,{key:e.id,class:`external-binding-target-chip`,"data-status":e.status},y(bt(e.personalProjectId))+` · `+y(d(u)(`pages.connections.mode.${e.mode}`)),9,Ce))),128))]),xt(e)?(m(),w(`small`,we,y(xt(e)),1)):St(e)?(m(),w(`small`,Te,y(d(u)(`pages.connections.credentialsSkipped`,{count:St(e)})),1)):S(``,!0)]),f(`div`,Ee,[f(`button`,{class:`quiet-button`,type:`button`,disabled:h.value,onClick:t=>at(e)},y(d(u)(`pages.connections.check`)),9,De),f(`button`,{class:`quiet-button external-sync-action`,type:`button`,disabled:h.value||!yt(e),onClick:t=>ot(e)},y(d(u)(`pages.connections.sync`)),9,Oe),f(`button`,{class:`quiet-button`,type:`button`,disabled:h.value,onClick:t=>lt(e)},y(d(u)(`pages.connections.manageProjects`)),9,ke),f(`button`,{class:`quiet-button danger`,type:`button`,disabled:h.value,onClick:t=>ct(e)},y(d(u)(`pages.connections.disconnect`)),9,Ae)]),b.value===e.id?(m(),w(`div`,je,[f(`label`,null,[f(`span`,null,y(d(u)(`pages.connections.targetProjects`)),1),s(le,{modelValue:x.value,"onUpdate:modelValue":t[0]||=e=>x.value=e,"control-id":`external-projects-${e.id}`,label:d(u)(`pages.connections.targetProjects`),options:q.value,disabled:h.value,required:``,searchable:``,onChange:dt},null,8,[`modelValue`,`control-id`,`label`,`options`,`disabled`])]),f(`div`,Me,[(m(!0),w(g,null,a(x.value,t=>(m(),w(`div`,{key:t,class:`external-target-mode-row`},[f(`span`,null,y(bt(t)),1),s(j,{"model-value":A.value[t]??e.mode,"control-id":`external-target-mode-${e.id}-${t}`,label:d(u)(`pages.connections.bindingMode`),options:vt(e.connectorType),disabled:h.value,"onUpdate:modelValue":e=>ft(t,e)},null,8,[`model-value`,`control-id`,`label`,`options`,`disabled`,`onUpdate:modelValue`])]))),128))]),f(`div`,Ne,[f(`button`,{class:`quiet-button`,type:`button`,disabled:h.value,onClick:ut},y(d(u)(`common.actions.cancel`)),9,Pe),f(`button`,{class:`primary-action`,type:`button`,disabled:h.value||!x.value.length,onClick:t=>pt(e)},y(d(u)(`pages.connections.saveProjects`)),9,Fe)])])):S(``,!0)],8,be))),128)),o.value.length?S(``,!0):(m(),w(`div`,Ie,y(d(u)(`pages.connections.noExternalBindings`)),1))]),f(`form`,{class:`external-binding-form`,onSubmit:_(rt,[`prevent`])},[s(U,{modelValue:L.name,"onUpdate:modelValue":t[1]||=e=>L.name=e,label:d(u)(`pages.connections.bindingName`),"data-testid":`external-name`,required:``},null,8,[`modelValue`,`label`]),f(`label`,null,[f(`span`,null,y(d(u)(`pages.connections.connector`)),1),s(j,{modelValue:L.connectorType,"onUpdate:modelValue":t[2]||=e=>L.connectorType=e,"control-id":`external-connector`,label:d(u)(`pages.connections.connector`),options:H.value,disabled:h.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),f(`label`,null,[f(`span`,null,y(d(u)(`pages.connections.targetProjects`)),1),s(le,{modelValue:L.personalProjectIds,"onUpdate:modelValue":t[3]||=e=>L.personalProjectIds=e,"control-id":`external-projects`,label:d(u)(`pages.connections.targetProjects`),options:q.value,disabled:h.value,required:``,searchable:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),f(`label`,null,[f(`span`,null,y(d(u)(`pages.connections.bindingMode`)),1),s(j,{modelValue:L.mode,"onUpdate:modelValue":t[4]||=e=>L.mode=e,"control-id":`external-binding-mode`,label:d(u)(`pages.connections.bindingMode`),options:Xe.value,disabled:h.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),L.connectorType===`mcp`?(m(),w(g,{key:0},[f(`label`,null,[f(`span`,null,y(d(u)(`pages.connections.transport`)),1),s(j,{modelValue:L.mcpTransport,"onUpdate:modelValue":t[5]||=e=>L.mcpTransport=e,"control-id":`external-mcp-transport`,label:d(u)(`pages.connections.transport`),options:Ze.value,disabled:h.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),L.mcpTransport===`http`?(m(),l(U,{key:0,modelValue:L.mcpUrl,"onUpdate:modelValue":t[6]||=e=>L.mcpUrl=e,label:`MCP URL`,"data-testid":`mcp-url`,type:`url`,required:``},null,8,[`modelValue`])):(m(),l(U,{key:1,modelValue:L.mcpCommand,"onUpdate:modelValue":t[7]||=e=>L.mcpCommand=e,label:d(u)(`pages.connections.command`),required:``},null,8,[`modelValue`,`label`])),L.mcpTransport===`stdio`?(m(),l(U,{key:2,modelValue:L.mcpArgs,"onUpdate:modelValue":t[8]||=e=>L.mcpArgs=e,label:d(u)(`pages.connections.arguments`)},null,8,[`modelValue`,`label`])):(m(),l(U,{key:3,modelValue:L.mcpTokenEnv,"onUpdate:modelValue":t[9]||=e=>L.mcpTokenEnv=e,label:d(u)(`pages.connections.tokenEnv`),"data-testid":`mcp-token-env`},null,8,[`modelValue`,`label`])),s(U,{modelValue:L.mcpResourcePrefix,"onUpdate:modelValue":t[10]||=e=>L.mcpResourcePrefix=e,label:d(u)(`pages.connections.resourcePrefix`),"data-testid":`mcp-resource-prefix`},null,8,[`modelValue`,`label`])],64)):L.connectorType===`notion`?(m(),w(g,{key:1},[s(U,{modelValue:L.notionTokenEnv,"onUpdate:modelValue":t[11]||=e=>L.notionTokenEnv=e,label:d(u)(`pages.connections.tokenEnv`),required:``},null,8,[`modelValue`,`label`]),s(U,{modelValue:L.notionPageIds,"onUpdate:modelValue":t[12]||=e=>L.notionPageIds=e,label:`Page IDs`},null,8,[`modelValue`]),s(U,{modelValue:L.notionDataSourceIds,"onUpdate:modelValue":t[13]||=e=>L.notionDataSourceIds=e,label:`Data Source IDs`},null,8,[`modelValue`])],64)):L.connectorType===`feishu`?(m(),w(g,{key:2},[s(U,{modelValue:L.feishuTokenEnv,"onUpdate:modelValue":t[14]||=e=>L.feishuTokenEnv=e,label:d(u)(`pages.connections.tokenEnv`),required:``},null,8,[`modelValue`,`label`]),f(`label`,null,[f(`span`,null,y(d(u)(`pages.connections.region`)),1),s(j,{modelValue:L.feishuRegion,"onUpdate:modelValue":t[15]||=e=>L.feishuRegion=e,"control-id":`external-feishu-region`,label:d(u)(`pages.connections.region`),options:Qe.value,disabled:h.value,required:``},null,8,[`modelValue`,`label`,`options`,`disabled`])]),s(U,{modelValue:L.feishuSpaceId,"onUpdate:modelValue":t[16]||=e=>L.feishuSpaceId=e,label:`Space ID`},null,8,[`modelValue`]),s(U,{modelValue:L.feishuRootNodeToken,"onUpdate:modelValue":t[17]||=e=>L.feishuRootNodeToken=e,label:`Root Node Token`},null,8,[`modelValue`]),s(U,{modelValue:L.feishuNodeTokens,"onUpdate:modelValue":t[18]||=e=>L.feishuNodeTokens=e,label:`Node Tokens`},null,8,[`modelValue`]),s(U,{modelValue:L.feishuWebBaseUrl,"onUpdate:modelValue":t[19]||=e=>L.feishuWebBaseUrl=e,label:`Web URL`,type:`url`},null,8,[`modelValue`])],64)):L.connectorType===`retrieval_api`?(m(),w(g,{key:3},[s(U,{modelValue:L.retrievalUrl,"onUpdate:modelValue":t[20]||=e=>L.retrievalUrl=e,label:d(u)(`pages.connections.retrievalUrl`),type:`url`,required:``},null,8,[`modelValue`,`label`]),s(U,{modelValue:L.retrievalTokenEnv,"onUpdate:modelValue":t[21]||=e=>L.retrievalTokenEnv=e,label:d(u)(`pages.connections.tokenEnv`)},null,8,[`modelValue`,`label`]),s(U,{modelValue:L.retrievalKnowledgeIds,"onUpdate:modelValue":t[22]||=e=>L.retrievalKnowledgeIds=e,label:d(u)(`pages.connections.knowledgeIds`),required:``},null,8,[`modelValue`,`label`]),s(U,{modelValue:L.retrievalScoreThreshold,"onUpdate:modelValue":t[23]||=e=>L.retrievalScoreThreshold=e,label:d(u)(`pages.connections.scoreThreshold`),inputmode:`decimal`,required:``},null,8,[`modelValue`,`label`])],64)):(m(),w(g,{key:4},[s(U,{modelValue:L.customModule,"onUpdate:modelValue":t[24]||=e=>L.customModule=e,label:d(u)(`pages.connections.module`),required:``},null,8,[`modelValue`,`label`]),s(U,{modelValue:L.customEnvironmentNames,"onUpdate:modelValue":t[25]||=e=>L.customEnvironmentNames=e,label:d(u)(`pages.connections.environmentNames`)},null,8,[`modelValue`,`label`]),f(`div`,Le,[s(U,{modelValue:L.customSourceJson,"onUpdate:modelValue":t[26]||=e=>L.customSourceJson=e,label:d(u)(`pages.connections.sourceJson`),multiline:``,required:``},null,8,[`modelValue`,`label`])]),f(`span`,Re,y(d(u)(`pages.connections.trustedCode`)),1)],64)),f(`button`,{class:`primary-action external-create-action`,type:`submit`,disabled:h.value||!z.value.length||!L.personalProjectIds.length},[t[35]||=f(`span`,{class:`external-create-action-icon`,"aria-hidden":`true`},null,-1),f(`span`,null,y(d(u)(`pages.connections.connect`)),1)],8,ze)],32)]),z.value.length?(m(),w(`section`,Be,[f(`div`,Ve,[f(`h3`,null,y(d(u)(`pages.connections.conflictTitle`)),1),f(`a`,{class:`section-help-link`,"data-testid":`conflict-policy-help`,href:se.value,"aria-label":d(u)(`pages.connections.conflictHelp`),title:d(u)(`pages.connections.conflictHelp`),target:`_blank`,rel:`noreferrer`},`?`,8,He)]),f(`div`,Ue,[f(`label`,null,[f(`span`,null,y(d(u)(`pages.connections.targetProject`)),1),s(j,{modelValue:P.value,"onUpdate:modelValue":t[27]||=e=>P.value=e,"control-id":`external-conflict-project`,label:d(u)(`pages.connections.targetProject`),options:q.value,disabled:I.value,required:``,onChange:mt},null,8,[`modelValue`,`label`,`options`,`disabled`])]),f(`label`,null,[f(`span`,null,y(d(u)(`pages.connections.conflictAction`)),1),s(j,{modelValue:F.value,"onUpdate:modelValue":t[28]||=e=>F.value=e,"control-id":`external-conflict-mode`,label:d(u)(`pages.connections.conflictAction`),options:$e.value,disabled:I.value,required:``,onChange:ht},null,8,[`modelValue`,`label`,`options`,`disabled`])])])])):S(``,!0),d(n).state?.capabilities?.subscribeProject?(m(),w(`section`,We,[f(`div`,Ge,[f(`h3`,null,[C(y(d(u)(`pages.connections.subscriptionsTitle`))+` `,1),t[36]||=f(`span`,{class:`feature-badge beta`},`BETA`,-1)])]),f(`div`,Ke,[(m(!0),w(g,null,a(R.value,e=>(m(),w(`div`,{key:`${e.provider_url}:${e.project_id}`,class:`subscription-row`},[t[37]||=f(`span`,null,`↗`,-1),f(`div`,null,[f(`strong`,null,y(e.project_name??e.project_id),1),f(`span`,null,y(d(u)(`pages.connections.sharedProject`)),1)]),f(`button`,{class:`secondary-action subscription-action`,type:`button`,onClick:t=>nt(e)},y(d(u)(`pages.connections.unsubscribe`)),9,qe)]))),128)),R.value.length?S(``,!0):(m(),w(`div`,Je,y(d(u)(`pages.connections.noSubscriptions`)),1))]),f(`form`,{class:`subscription-form`,onSubmit:_(tt,[`prevent`])},[s(j,{modelValue:r.value,"onUpdate:modelValue":t[29]||=e=>r.value=e,options:V.value,label:d(u)(`pages.connections.sharedProjectLabel`),placeholder:d(u)(`pages.connections.choosePublicProject`),searchable:``,required:``},null,8,[`modelValue`,`options`,`label`,`placeholder`]),f(`button`,Ye,y(d(u)(`pages.connections.subscribe`)),1)],32)])):S(``,!0)]))}});export{q as default};
|
|
@@ -0,0 +1 @@
|
|
|
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-Ci3heuiL.js";import{a as S,i as C,t as w}from"./console-BlAhujsH.js";import{t as T}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as E}from"./SearchableSelect-Dz13ClQb.js";import{r as D,t as O}from"./identity-4_-v6cB7.js";import{E as k,T as A}from"./model-yG0YqUyZ.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,L as t,N as n,O as r,P as i,Y as a,a as o,et as s,g as c,h as l,j as u,k as d,m as f,nt as p,rt as m,tt as h,v as g,y as _}from"./i18n-Ci3heuiL.js";import{t as v}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{C as y,D as b,E as x,O as S,S as C,T as w,_ as T,a as E,c as D,d as O,f as k,g as A,i as j,p as M,u as N,w as P}from"./model-yG0YqUyZ.js";import{a as F,c as I,i as L,n as ee,s as te}from"./conversation-launcher-settings-DTYxiLJt.js";var R=[`aria-label`],z=[`data-virtual-index`],B={class:`virtual-directory-list__content`},V={class:`virtual-directory-list__watermark`,"aria-hidden":`true`},H=[`aria-label`],U=v(e({__name:`VirtualDirectoryList`,props:{items:{},rowHeight:{},label:{},minWidth:{default:`100%`},overscan:{default:8},resetKey:{default:void 0},activeIndex:{default:-1},watermarkPrefix:{default:`#`},itemKey:{type:Function,default:void 0}},setup(e,{expose:v}){let y=e,b=a(null),x=a(null),S=a(0),C=a(640),w=a(0),T=null,E=l(()=>y.items.length),D=l(()=>Math.max(3,String(E.value).length)),O=l(()=>E.value?Math.min(E.value,Math.floor(S.value/y.rowHeight)+1):0),k=l(()=>{let e=Math.max(0,Math.floor(S.value/y.rowHeight)-y.overscan),t=Math.ceil(C.value/y.rowHeight)+y.overscan*2;return{start:e,end:Math.min(E.value,e+t)}}),A=l(()=>Array.from({length:k.value.end-k.value.start},(e,t)=>k.value.start+t)),j=l(()=>({height:`${E.value*y.rowHeight}px`,minWidth:y.minWidth})),M=l(()=>({minWidth:y.minWidth}));t([b,x],([e,t])=>{T?.disconnect(),T=null,e&&(P(),typeof ResizeObserver==`function`&&(T=new ResizeObserver(P),T.observe(e),t&&T.observe(t)))},{flush:`post`}),t(()=>y.resetKey,async()=>{await r(),I()},{flush:`post`}),t(E,async()=>{await r();let e=b.value;if(!e)return;let t=Math.max(0,e.scrollHeight-e.clientHeight);e.scrollTop>t&&(e.scrollTop=t),P()}),t([b,()=>y.activeIndex],async([e,t])=>{!e||t<0||t>=E.value||(await r(),L(t))},{flush:`post`}),d(()=>T?.disconnect());function N(e){return String(e).padStart(D.value,`0`)}function P(){let e=b.value;e&&(S.value=e.scrollTop,C.value=e.clientHeight||C.value,w.value=x.value?.offsetHeight??0)}function F(e){let t=e.currentTarget;S.value=t.scrollTop}function I(){let e=b.value;e&&(e.scrollTop=0,S.value=0)}function L(e){let t=b.value;if(!t||e<0||e>=E.value)return;let n=e*y.rowHeight,r=n+y.rowHeight,i=t.scrollTop,a=i+t.clientHeight-w.value;n<i?t.scrollTop=n:t.clientHeight&&r>a&&(t.scrollTop=r-t.clientHeight+w.value),S.value=t.scrollTop}return v({scrollToStart:I,scrollIndexIntoView:L}),(t,r)=>(u(),_(`section`,{class:`virtual-directory-list`,"aria-label":e.label},[c(`div`,{ref_key:`scroller`,ref:b,class:`virtual-directory-list__scroller`,onScrollPassive:F},[t.$slots.header?(u(),_(`div`,{key:0,ref_key:`header`,ref:x,class:`virtual-directory-list__header`,style:p(M.value)},[i(t.$slots,`header`,{},void 0,!0)],4)):g(``,!0),c(`div`,{class:`virtual-directory-list__canvas`,style:p(j.value)},[(u(!0),_(f,null,n(A.value,n=>(u(),_(`div`,{key:e.itemKey?.(e.items[n],n)??n,class:h([`virtual-directory-list__row`,{"is-active":n===e.activeIndex}]),"data-virtual-index":n,style:p({height:`${e.rowHeight}px`,transform:`translateY(${n*e.rowHeight}px)`})},[c(`div`,B,[i(t.$slots,`default`,{item:e.items[n],index:n,formattedIndex:N(n+1)},void 0,!0)]),c(`span`,V,m(e.watermarkPrefix)+m(N(n+1)),1)],14,z))),128))],4),!E.value&&t.$slots.empty?(u(),_(`div`,{key:1,class:`virtual-directory-list__empty`,style:p(M.value)},[i(t.$slots,`empty`,{},void 0,!0)],4)):g(``,!0),t.$slots.footer?(u(),_(`div`,{key:2,class:`virtual-directory-list__footer`,style:p(M.value)},[i(t.$slots,`footer`,{},void 0,!0)],4)):g(``,!0)],544),E.value?(u(),_(`output`,{key:0,class:`virtual-directory-list__position`,"aria-label":s(o)(`common.counts.listPosition`,{current:O.value,total:E.value})},[c(`strong`,null,m(N(O.value)),1),c(`span`,null,`/ `+m(N(E.value)),1)],8,H)):g(``,!0)],8,R))}}),[[`__scopeId`,`data-v-dd2afd66`]]),ne={class:`graph-inspector`},re={class:`eyebrow`},ie={class:`inspector-identity`},ae={class:`muted`},oe={key:0,class:`inspector-project-material`},se={key:3,class:`inspector-replacement`},ce={class:`inspector-replacement-heading`},le={key:1},ue={key:2},de={class:`inspector-meta`},fe={key:0},pe={key:1},me={key:2},he={key:3},ge={key:4},_e={key:5},ve={key:6},ye={key:7},be={key:8},xe={key:9},Se={key:10},Ce={key:12},we={class:`inspector-subtitle`},Te={key:0,class:`inspector-meta inspector-confirmation-basis`},Ee={key:0},De={key:1,class:`inspector-reasoning`},Oe={class:`inspector-subtitle`},ke={class:`inspector-meta inspector-attributes`},Ae={class:`inspector-subtitle`},je={class:`inspector-reasoning`},Me={key:7,class:`inspector-actions`},Ne={class:`inspector-subtitle`},Pe={class:`inspector-relations`},Fe={class:`relation-type`},Ie={class:`relation-target`},Le={class:`inspector-subtitle`},Re={class:`inspector-evidence`},ze={key:0,class:`evidence-excerpt`},Be={key:1,class:`evidence-source-actions`},Ve=[`onClick`],He=[`href`,`title`],Ue={class:`inspector-subtitle`},We={class:`inspector-history`},Ge={class:`inspector-subtitle`},Ke={class:`inspector-history inspector-audit-history`},qe={key:0},Je={class:`eyebrow`},Ye={class:`inspector-placeholder`},W=e({__name:`KnowledgeInspector`,props:{item:{},graph:{},editable:{type:Boolean},currentProjectId:{},canPublishProject:{type:Boolean},canManageProject:{type:Boolean},mode:{},conversationLaunchers:{}},emits:[`confirm`,`edit`,`createProject`,`openProject`,`publishProject`,`openDirectory`,`openGraph`,`openReplacement`,`manageProject`],setup(e,{emit:t}){let r=e,i=t,d=l(()=>r.item?.itemKind===`entity`?r.item.raw:null),p=l(()=>r.item?.itemKind===`relationship`?r.item.raw:null),v=l(()=>new Map(r.graph?.nodes.map(e=>[e.id,e.name])??[])),R=l(()=>!d.value||!r.graph?[]:r.graph.edges.filter(e=>D(e.source)===d.value?.id||D(e.target)===d.value?.id).slice(0,12)),z=l(()=>Object.entries(r.item?.raw.attributes??{}).filter(([,e])=>e!=null&&e!==``)),B=l(()=>k(r.item)),V=l(()=>C(r.item)),H=l(()=>r.item?.itemKind===`entity`&&[`PersonalProject`,`RelatedPersonalProject`].includes(r.item.type)),U=l(()=>r.editable&&r.item?.itemKind===`entity`&&!r.item.invalidAt&&!r.item.profileAspect&&!B.value),W=l(()=>r.editable&&!B.value),G=l(()=>r.editable&&!B.value&&!r.item?.invalidAt&&!!r.item?.classificationExplicit&&q.value===`pending`),K=l(()=>B.value&&r.canManageProject&&r.item?.type!==`ExternalKnowledgeSource`),Xe=l(()=>U.value||W.value||G.value||K.value||!!r.mode||H.value&&!!V.value&&V.value!==r.currentProjectId||H.value&&!!V.value&&r.canPublishProject),q=l(()=>r.item?T(r.item):`unclassified`),Ze=l(()=>r.item?j(r.item):``),J=l(()=>r.item?.confirmationBasis??null),Y=a(``),Qe=ee(),X=l(()=>r.conversationLaunchers??Qe.value),Z=l(()=>{let e=r.item?.replacedByItemId,t=r.item?.replacedByItemKind;return!e||!t?null:A(r.graph).find(n=>n.id===e&&n.itemKind===t)??null}),$e=l(()=>{let e=r.item;return e?.humanEdited?e.humanChangeStatus===`unseen`?o(`knowledge.workspace.inspector.humanReview.unseen`):e.humanChangeStatus===`viewed`?o(`knowledge.workspace.inspector.humanReview.viewed`):o(`knowledge.workspace.inspector.humanReview.reviewed`):``});function et(e){return typeof e==`string`?e:JSON.stringify(e)}function Q(e){return`${Math.round(e*100)}%`}function tt(e){return e.inheritanceMode===`descendants`?o(`knowledge.workspace.inspector.inheritance.descendants`):e.inheritanceMode===`selected_projects`?o(`knowledge.workspace.inspector.inheritance.selected`,{count:e.inheritedProjectIds.length}):o(`knowledge.workspace.inspector.inheritance.local`)}function nt(e){if(e.preferenceScope!==`project`||!e.preferenceProjectId)return o(`knowledge.workspace.inspector.personalGlobal`);let t=e.preferenceProjectId,n=r.graph?.nodes.find(e=>e.attributes?.projectId===t)?.name;return o(`knowledge.workspace.inspector.selectedProject`,{project:n&&n.toLocaleLowerCase()!==t.toLocaleLowerCase()?`${n} (${t})`:t})}function rt(e){return I(e,X.value)}function it(e){return te(e,X.value)}function $(e,t){return String(e.id??e.session_id??t)}async function at(e,t){await L(e)&&(Y.value=$(e,t))}return(t,r)=>(u(),_(`aside`,ne,[e.item?(u(),_(f,{key:0},[c(`p`,re,m(B.value?`PROJECT MATERIAL`:e.item.itemKind===`entity`?`ENTITY`:`RELATIONSHIP`),1),c(`h3`,null,m(e.item.itemKind===`entity`?e.item.title:p.value?.type),1),c(`div`,ie,[c(`span`,null,m(B.value?s(o)(`knowledge.workspace.inspector.ids.projection`):e.item.itemKind===`entity`?s(o)(`knowledge.workspace.inspector.ids.node`):s(o)(`knowledge.workspace.inspector.ids.relationship`)),1),c(`code`,null,m(e.item.id),1)]),c(`p`,ae,m(e.item.body),1),B.value?(u(),_(`section`,oe,[c(`div`,null,[c(`span`,null,m(s(o)(`knowledge.workspace.inspector.ownership`)),1),c(`strong`,null,m(s(P)(e.item)),1)]),c(`p`,null,m(s(o)(`knowledge.workspace.inspector.projectionCopy`)),1)])):(u(),_(`section`,{key:1,class:h([`inspector-classification`,`state-${q.value}`])},[c(`div`,null,[c(`span`,null,m(s(o)(`knowledge.workspace.inspector.currentJudgment`)),1),c(`strong`,null,m(s(b)(e.item)),1)]),c(`p`,null,m(Ze.value),1)],2)),!B.value&&e.item.humanEdited?(u(),_(`section`,{key:2,class:h([`inspector-human-change`,`state-${e.item.humanChangeStatus}`])},[c(`div`,null,[c(`span`,null,m(s(o)(`knowledge.workspace.inspector.humanReviewTitle`)),1),c(`strong`,null,m(s(O)(e.item.humanChangeStatus)),1)]),c(`p`,null,m($e.value),1),c(`small`,null,m(s(o)(`knowledge.workspace.inspector.humanVersion`,{version:e.item.humanChangeVersion})),1)],2)):g(``,!0),!B.value&&e.item.invalidAt?(u(),_(`section`,se,[c(`div`,ce,[c(`span`,null,m(s(o)(`knowledge.workspace.inspector.replacement`)),1),c(`strong`,null,m(Z.value?s(o)(`knowledge.workspace.inspector.replacedBy`):s(o)(`knowledge.workspace.inspector.noReplacement`)),1)]),Z.value?(u(),_(`button`,{key:0,class:`inspector-replacement-link`,type:`button`,onClick:r[0]||=e=>i(`openReplacement`,Z.value)},[c(`span`,null,[c(`strong`,null,m(Z.value.title),1),c(`small`,null,m(Z.value.body),1)]),c(`b`,null,m(s(o)(`knowledge.workspace.inspector.viewReplacement`)),1)])):e.item.replacedByItemId?(u(),_(`p`,le,m(s(o)(`knowledge.workspace.inspector.replacementOutOfScope`)),1)):(u(),_(`p`,ue,m(s(o)(`knowledge.workspace.inspector.missingReplacement`)),1))])):g(``,!0),c(`dl`,de,[c(`div`,null,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.type`)),1),c(`dd`,null,m(e.item.type),1)]),B.value?g(``,!0):(u(),_(`div`,fe,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.originQuadrant`)),1),c(`dd`,null,m(s(x)(e.item.originQuadrant)),1)])),B.value?g(``,!0):(u(),_(`div`,pe,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.currentQuadrant`)),1),c(`dd`,null,m(s(x)(e.item.currentQuadrant)),1)])),B.value?g(``,!0):(u(),_(`div`,me,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.quadrantExplanation`)),1),c(`dd`,null,m(s(w)(e.item.originQuadrant)),1)])),B.value?g(``,!0):(u(),_(`div`,he,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.confirmationStatus`)),1),c(`dd`,null,m(s(b)(e.item)),1)])),B.value?g(``,!0):(u(),_(`div`,ge,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.confidence`)),1),c(`dd`,null,m(Q(e.item.confidenceScore)),1)])),B.value?g(``,!0):(u(),_(`div`,_e,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.utility`)),1),c(`dd`,null,m(Q(e.item.utilityScore)),1)])),B.value?g(``,!0):(u(),_(`div`,ve,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.materialUse`)),1),c(`dd`,null,m(s(o)(`knowledge.workspace.inspector.useCount`,{uses:e.item.qualifiedUseCount,tasks:e.item.distinctTaskCount})),1)])),B.value?g(``,!0):(u(),_(`div`,ye,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.recentUse`)),1),c(`dd`,null,m(s(N)(e.item.lastUsedAt)),1)])),!B.value&&!e.item.profileAspect?(u(),_(`div`,be,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.inheritance`)),1),c(`dd`,null,m(tt(e.item)),1)])):g(``,!0),!B.value&&e.item.profileAspect?(u(),_(`div`,xe,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.preference`)),1),c(`dd`,null,m(s(y)(e.item.profileAspect)),1)])):g(``,!0),!B.value&&e.item.profileAspect?(u(),_(`div`,Se,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.effectiveScope`)),1),c(`dd`,null,m(nt(e.item)),1)])):g(``,!0),p.value?(u(),_(f,{key:11},[c(`div`,null,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.source`)),1),c(`dd`,null,m(v.value.get(s(D)(p.value.source))??p.value.source_name??s(D)(p.value.source)),1)]),c(`div`,null,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.target`)),1),c(`dd`,null,m(v.value.get(s(D)(p.value.target))??p.value.target_name??s(D)(p.value.target)),1)])],64)):g(``,!0),B.value?g(``,!0):(u(),_(`div`,Ce,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.fields.status`)),1),c(`dd`,null,m(e.item.invalidAt?s(o)(`knowledge.workspace.inspector.historical`):s(o)(`common.status.current`)),1)]))]),B.value?g(``,!0):(u(),_(f,{key:4},[c(`h4`,we,m(s(o)(`knowledge.workspace.inspector.basisTitle`)),1),J.value?(u(),_(`dl`,Te,[c(`div`,null,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.basis.existence`)),1),c(`dd`,null,m(J.value.existence_reason),1)]),c(`div`,null,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.basis.quadrant`)),1),c(`dd`,null,m(J.value.quadrant_reason),1)]),c(`div`,null,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.basis.proposer`)),1),c(`dd`,null,m(s(E)(J.value.proposed_by)),1)]),c(`div`,null,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.basis.confirmer`)),1),c(`dd`,null,m(s(E)(J.value.confirmed_by)),1)]),c(`div`,null,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.basis.time`)),1),c(`dd`,null,m(s(N)(J.value.confirmed_at)),1)]),J.value.agent_policy_version?(u(),_(`div`,Ee,[c(`dt`,null,m(s(o)(`knowledge.workspace.inspector.basis.agentPolicy`)),1),c(`dd`,null,m(J.value.agent_policy_version),1)])):g(``,!0)])):(u(),_(`p`,De,m(s(o)(`knowledge.workspace.inspector.legacyBasis`)),1))],64)),z.value.length?(u(),_(f,{key:5},[c(`h4`,Oe,m(s(o)(`knowledge.workspace.inspector.contentDetails`)),1),c(`dl`,ke,[(u(!0),_(f,null,n(z.value,([e,t])=>(u(),_(`div`,{key:e},[c(`dt`,null,m(e),1),c(`dd`,null,m(et(t)),1)]))),128))])],64)):g(``,!0),e.item.reasoningSummary?(u(),_(f,{key:6},[c(`h4`,Ae,m(s(o)(`knowledge.workspace.inspector.formation`)),1),c(`p`,je,m(e.item.reasoningSummary),1)],64)):g(``,!0),Xe.value?(u(),_(`div`,Me,[G.value?(u(),_(`button`,{key:0,class:`primary-action inspector-confirm-action`,type:`button`,onClick:r[1]||=t=>i(`confirm`,e.item)},m(e.item.profileAspect?s(o)(`knowledge.workspace.inspector.confirmPreference`):s(o)(`knowledge.workspace.inspector.confirmKnowledge`)),1)):g(``,!0),K.value?(u(),_(`button`,{key:1,class:`primary-action`,type:`button`,onClick:r[2]||=t=>i(`manageProject`,e.item)},m(s(o)(`knowledge.workspace.inspector.editMaterials`)),1)):g(``,!0),e.mode===`graph`?(u(),_(`button`,{key:2,class:`secondary-action`,type:`button`,onClick:r[3]||=t=>i(`openDirectory`,e.item)},m(s(o)(`knowledge.workspace.inspector.locateDirectory`)),1)):g(``,!0),e.mode===`directory`?(u(),_(`button`,{key:3,class:`secondary-action`,type:`button`,onClick:r[4]||=t=>i(`openGraph`,e.item)},m(s(o)(`knowledge.workspace.inspector.locateGraph`)),1)):g(``,!0),H.value&&V.value&&V.value!==e.currentProjectId?(u(),_(`button`,{key:4,class:`primary-action`,type:`button`,onClick:r[5]||=e=>i(`openProject`,V.value)},m(s(o)(`knowledge.workspace.inspector.enterProject`)),1)):g(``,!0),H.value&&V.value&&e.canPublishProject?(u(),_(`button`,{key:5,class:`secondary-action`,type:`button`,onClick:r[6]||=e=>i(`publishProject`,V.value)},m(s(o)(`knowledge.workspace.inspector.publish`)),1)):g(``,!0),U.value?(u(),_(`button`,{key:6,class:`primary-action`,type:`button`,onClick:r[7]||=t=>i(`createProject`,e.item)},m(s(o)(`knowledge.workspace.inspector.createProject`)),1)):g(``,!0),W.value?(u(),_(`button`,{key:7,class:`secondary-action inspector-edit-action`,type:`button`,onClick:r[8]||=t=>i(`edit`,e.item)},m(e.item.profileAspect?s(o)(`knowledge.workspace.inspector.correctPreference`):s(o)(`knowledge.workspace.inspector.correctOrAssign`)),1)):g(``,!0)])):g(``,!0),R.value.length?(u(),_(f,{key:8},[c(`h4`,Ne,m(s(o)(`knowledge.workspace.inspector.relations`)),1),c(`div`,Pe,[(u(!0),_(f,null,n(R.value,e=>(u(),_(`div`,{key:e.id,class:`inspector-relation`},[c(`strong`,Fe,m(e.type),1),c(`p`,Ie,m(e.fact||s(o)(`knowledge.workspace.inspector.relationshipFallback`)),1)]))),128))])],64)):g(``,!0),e.item.evidence.length?(u(),_(f,{key:9},[c(`h4`,Le,m(s(o)(`knowledge.workspace.inspector.evidence`)),1),c(`div`,Re,[(u(!0),_(f,null,n(e.item.evidence,(e,t)=>(u(),_(`article`,{key:$(e,t),class:`evidence-card`},[c(`strong`,null,m(e.name||e.source_description||s(o)(`knowledge.workspace.inspector.sourceRecord`)),1),c(`p`,null,m(e.summary||e.source_description),1),c(`span`,null,m(s(F)(e))+` · `+m(e.source_kind||s(o)(`knowledge.workspace.inspector.source`))+` · `+m(s(N)(e.reference_time||e.created_at)),1),e.source_excerpt?(u(),_(`p`,ze,m(e.source_excerpt),1)):g(``,!0),e.session_id?(u(),_(`div`,Be,[c(`button`,{class:`evidence-source-action`,type:`button`,onClick:n=>at(e,t)},m(Y.value===$(e,t)?s(o)(`knowledge.workspace.inspector.copiedSessionId`):s(o)(`knowledge.workspace.inspector.copySessionId`)),9,Ve),rt(e)?(u(),_(`a`,{key:0,class:`evidence-source-action`,href:rt(e)??void 0,title:s(o)(`knowledge.workspace.inspector.openConversationWith`,{app:it(e)??s(F)(e)})},m(s(o)(`knowledge.workspace.inspector.openConversation`)),9,He)):g(``,!0)])):g(``,!0)]))),128))])],64)):g(``,!0),e.item.revisions.length?(u(),_(f,{key:10},[c(`h4`,Ue,m(s(o)(`knowledge.workspace.inspector.revisions`)),1),c(`div`,We,[(u(!0),_(f,null,n(e.item.revisions,(e,t)=>(u(),_(`article`,{key:String(e.id??t),class:`history-row`},[c(`strong`,null,m(s(S)(e.action)),1),c(`p`,null,m(e.reason??e.summary??s(o)(`knowledge.workspace.inspector.noRevisionCopy`)),1),c(`span`,null,m(s(N)(e.created_at)),1)]))),128))])],64)):g(``,!0),e.item.auditEvents.length?(u(),_(f,{key:11},[c(`h4`,Ge,m(s(o)(`knowledge.workspace.inspector.audit`)),1),c(`div`,Ke,[(u(!0),_(f,null,n(e.item.auditEvents,e=>(u(),_(`article`,{key:e.id,class:`history-row`},[c(`strong`,null,m(s(M)(e.action)),1),c(`p`,null,m(e.reason),1),c(`span`,null,m(s(o)(`knowledge.workspace.inspector.version`,{version:e.human_change_version}))+` · `+m(s(N)(e.created_at)),1),e.action===`agent_review`?(u(),_(`small`,qe,m(s(o)(`knowledge.workspace.inspector.conflictClassification`,{conflict:e.conflict_check===`no_conflict`?s(o)(`knowledge.workspace.inspector.conflictNone`):s(o)(`knowledge.workspace.inspector.conflictFound`),classification:e.classification_check===`reasonable`?s(o)(`knowledge.workspace.inspector.classificationReasonable`):s(o)(`knowledge.workspace.inspector.classificationAdjust`)})),1)):g(``,!0)]))),128))])],64)):g(``,!0)],64)):(u(),_(f,{key:1},[c(`p`,Je,m(s(o)(`knowledge.workspace.inspector.contentDetails`)),1),c(`h3`,null,m(s(o)(`knowledge.workspace.inspector.placeholderTitle`)),1),c(`p`,Ye,m(s(o)(`knowledge.workspace.inspector.placeholderCopy`)),1)],64))]))}});export{U as n,W as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{B as e,C as t,L as n,N as r,O as ee,S as i,Y as a,_ as o,a as s,et as c,g as l,h as u,j as d,k as f,m as p,p as m,rt as h,s as g,tt as _,u as v,v as y,x as b,y as x,z as S}from"./i18n-Ci3heuiL.js";import{a as C,r as w,t as te}from"./console-BlAhujsH.js";import{t as T}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as E}from"./SearchableSelect-Dz13ClQb.js";import{r as D,t as O}from"./identity-4_-v6cB7.js";import{a as k,i as A,n as j,r as M,t as N}from"./KnowledgeEditDialog-DSe3Gwep.js";import{n as ne,t as P}from"./KnowledgeInspector-CYAjAb9J.js";import{D as F,E as I,_ as L,g as R,n as z,o as re,r as ie,t as B,u as ae,v as V}from"./model-yG0YqUyZ.js";var H={open:``,class:`project-dialog batch-confirm-dialog vue-dialog`},U={class:`project-dialog-shell`},W={class:`project-dialog-header`},oe={class:`batch-confirm-controls`},se={key:0,class:`batch-group-summary`},G={class:`batch-confirmer-fields`},K=[`required`,`placeholder`],q=[`placeholder`],J={class:`batch-confirm-rule`},Y={class:`batch-confirm-review`},ce={class:`batch-review-heading`},le={key:0,class:`batch-limit-note`},X={class:`batch-review-list`},ue=[`value`],Z={class:`batch-confirm-acknowledgement`},de={key:0,class:`publish-dialog-error`,role:`alert`},fe={class:`publish-dialog-actions`},Q=[`disabled`],pe=[`disabled`],me=T(t({__name:`KnowledgeBatchConfirmDialog`,props:{groups:{},personalSpaceId:{}},emits:[`close`,`saved`],setup(t,{emit:ee}){let o=t,f=ee,_=te(),S=a(``),w=a([]),T=a(`user`),k=a(``),A=a(``),j=a(!1),M=a(!1),N=a(``),ne=u(()=>o.groups.map(e=>({value:e.key,label:e.label,meta:s(`knowledge.dialogs.batch.groupMeta`,{kind:e.kind===`source`?s(`knowledge.dialogs.batch.sameSource`):s(`knowledge.dialogs.batch.sameSession`),count:e.items.length}),search:`${D(e.value)} ${e.description}`}))),P=u(()=>o.groups.find(({key:e})=>e===S.value)??null),F=u(()=>P.value?.items.slice(0,200)??[]),L=u(()=>{let e=new Set(w.value);return F.value.filter(t=>e.has(B(t)))}),R=u(()=>F.value.length>0&&L.value.length===F.value.length),re=u(()=>!M.value&&L.value.length>=2&&!!A.value.trim()&&j.value&&(T.value!==`authoritative_source`||!!k.value.trim())),ie=u(()=>[{value:`user`,label:s(`knowledge.domain.actors.user`)},{value:`authoritative_source`,label:s(`knowledge.domain.actors.authoritative_source`)}]);n(()=>o.groups,e=>{e.some(({key:e})=>e===S.value)||(S.value=e[0]?.key??``)},{immediate:!0}),n(S,()=>{w.value=F.value.map(B),j.value=!1,N.value=``},{immediate:!0});function B(e){return`${e.itemKind}:${e.id}`}function ae(){w.value=R.value?[]:F.value.map(B),j.value=!1}function V(e){let t=P.value;return t?z(e,t):null}async function me(){let e=P.value;if(!e)return $(s(`knowledge.dialogs.batch.errors.groupRequired`));if(L.value.length<2)return $(s(`knowledge.dialogs.batch.errors.itemsRequired`));if(!A.value.trim())return $(s(`knowledge.dialogs.batch.errors.reasonRequired`));if(T.value===`authoritative_source`&&!k.value.trim())return $(s(`knowledge.dialogs.batch.errors.sourceNameRequired`));if(!j.value)return $(s(`knowledge.dialogs.batch.errors.acknowledgmentRequired`));M.value=!0,N.value=``;try{let t=await C(`/api/knowledge/batch-confirmation`,{personalSpaceId:o.personalSpaceId,groupKind:e.kind,groupValue:e.value,reason:A.value.trim(),confirmer:{kind:T.value,label:k.value.trim()||null},items:L.value.map(e=>{let t=V(e);return{itemId:e.id,itemKind:e.itemKind,existenceReason:t.existenceReason,quadrantReason:t.quadrantReason,proposedBy:t.proposedBy}})});_.notify(s(`knowledge.dialogs.batch.confirmed`,{count:t.confirmed_count})),f(`saved`),f(`close`)}catch(e){N.value=e instanceof Error?e.message:s(`knowledge.dialogs.batch.errors.failed`),_.reportError(e)}finally{M.value=!1}}function $(e){N.value=e}return(t,n)=>(d(),x(`dialog`,H,[l(`div`,U,[l(`header`,W,[l(`div`,null,[n[8]||=l(`p`,{class:`eyebrow`},`BATCH CONFIRMATION`,-1),l(`h3`,null,h(c(s)(`knowledge.dialogs.batch.title`)),1),l(`p`,null,h(c(s)(`knowledge.dialogs.batch.intro`)),1)]),l(`button`,{class:`secondary-action`,type:`button`,onClick:n[0]||=e=>f(`close`)},h(c(s)(`common.actions.close`)),1)]),l(`form`,{class:`batch-confirm-form`,onSubmit:m(me,[`prevent`])},[l(`section`,oe,[l(`label`,null,[b(h(c(s)(`knowledge.dialogs.batch.range`))+` `,1),i(E,{modelValue:S.value,"onUpdate:modelValue":n[1]||=e=>S.value=e,options:ne.value,label:c(s)(`knowledge.dialogs.batch.rangeLabel`),searchable:``},null,8,[`modelValue`,`options`,`label`])]),P.value?(d(),x(`div`,se,[l(`span`,null,h(P.value.kind===`source`?c(s)(`knowledge.dialogs.batch.sameSource`):c(s)(`knowledge.dialogs.batch.sameSession`)),1),l(`strong`,null,h(P.value.label),1),l(`p`,null,h(P.value.description),1),l(`small`,null,`#`+h(c(O)(P.value.value,28)),1)])):y(``,!0),l(`div`,G,[l(`label`,null,[b(h(c(s)(`knowledge.dialogs.batch.confirmer`))+` `,1),i(E,{modelValue:T.value,"onUpdate:modelValue":n[2]||=e=>T.value=e,options:ie.value,label:c(s)(`knowledge.dialogs.batch.confirmerLabel`)},null,8,[`modelValue`,`options`,`label`])]),l(`label`,null,[b(h(c(s)(`knowledge.dialogs.batch.confirmerDescription`))+` `,1),e(l(`input`,{"onUpdate:modelValue":n[3]||=e=>k.value=e,maxlength:`160`,required:T.value===`authoritative_source`,placeholder:T.value===`user`?c(s)(`knowledge.dialogs.batch.userPlaceholder`):c(s)(`knowledge.dialogs.batch.sourcePlaceholder`)},null,8,K),[[v,k.value]])])]),l(`label`,null,[b(h(c(s)(`knowledge.dialogs.batch.basis`))+` `,1),e(l(`textarea`,{"onUpdate:modelValue":n[4]||=e=>A.value=e,maxlength:`2000`,rows:`3`,required:``,placeholder:c(s)(`knowledge.dialogs.batch.basisPlaceholder`)},null,8,q),[[v,A.value]])]),l(`p`,J,h(c(s)(`knowledge.dialogs.batch.agentBoundary`)),1)]),l(`section`,Y,[l(`div`,ce,[l(`div`,null,[l(`h4`,null,h(c(s)(`knowledge.dialogs.batch.itemReview`)),1),l(`p`,null,h(c(s)(`knowledge.dialogs.batch.selected`,{selected:L.value.length,total:F.value.length})),1)]),l(`button`,{class:`secondary-action`,type:`button`,onClick:ae},h(R.value?c(s)(`knowledge.dialogs.batch.clearAll`):c(s)(`knowledge.dialogs.batch.selectAll`)),1)]),(P.value?.items.length??0)>200?(d(),x(`p`,le,h(c(s)(`knowledge.dialogs.batch.limit`)),1)):y(``,!0),l(`div`,X,[(d(!0),x(p,null,r(F.value,t=>(d(),x(`label`,{key:B(t),class:`batch-review-item`},[e(l(`input`,{"onUpdate:modelValue":n[5]||=e=>w.value=e,type:`checkbox`,value:B(t)},null,8,ue),[[g,w.value]]),l(`span`,null,[l(`strong`,null,h(t.title),1),l(`small`,null,h(c(I)(t.originQuadrant))+` · `+h(t.type),1),l(`em`,null,h(V(t)?.existenceReason),1),l(`em`,null,h(V(t)?.quadrantReason),1)])]))),128))]),l(`label`,Z,[e(l(`input`,{"onUpdate:modelValue":n[6]||=e=>j.value=e,type:`checkbox`},null,512),[[g,j.value]]),l(`span`,null,h(c(s)(`knowledge.dialogs.batch.acknowledgment`)),1)])]),N.value?(d(),x(`p`,de,h(N.value),1)):y(``,!0),l(`div`,fe,[l(`button`,{class:`secondary-action`,type:`button`,disabled:M.value,onClick:n[7]||=e=>f(`close`)},h(c(s)(`common.actions.cancel`)),9,Q),l(`button`,{class:`primary-action`,type:`submit`,disabled:!re.value},h(M.value?c(s)(`knowledge.dialogs.batch.confirming`):c(s)(`knowledge.dialogs.batch.confirmItems`,{count:L.value.length})),9,pe)])],32)])]))}}),[[`__scopeId`,`data-v-5b6ea24b`]]),$={class:`view knowledge-organizer`},he={class:`organizer-toolbar`},ge={class:`organizer-search`},_e=[`placeholder`],ve=[`aria-label`],ye=[`aria-pressed`],be=[`data-quadrant`,`aria-pressed`,`title`,`onClick`],xe=[`aria-label`],Se=[`aria-pressed`],Ce=[`data-review-state`,`aria-pressed`,`title`,`onClick`],we={class:`organizer-toolbar-actions`},Te={class:`organizer-result-summary`},Ee={key:0},De={class:`organizer-table-head`,"aria-hidden":`true`},Oe=[`onClick`],ke={class:`organizer-item-copy`},Ae={class:`organizer-basis`},je={key:0,class:`organizer-loading-inline`},Me={class:`empty-state`},Ne=100,Pe=68,Fe=T(t({__name:`KnowledgeOrganizerPage`,setup(t){let m=te(),g=a(null),C=a(!1),T=a(!1),E=a(``),D=a(`all`),O=a(`all`),z=a(null),H=a(null),U=a(null),W=a(!1),oe=M(),se=A(u(()=>oe||C.value&&!g.value)),G=0,K=u(()=>[{value:`known_unknown`,short:s(`knowledge.workspace.organizer.quadrants.known_unknown.short`),coordinate:s(`knowledge.workspace.organizer.quadrants.known_unknown.coordinate`)},{value:`known_known`,short:s(`knowledge.workspace.organizer.quadrants.known_known.short`),coordinate:s(`knowledge.workspace.organizer.quadrants.known_known.coordinate`)},{value:`unknown_unknown`,short:s(`knowledge.workspace.organizer.quadrants.unknown_unknown.short`),coordinate:s(`knowledge.workspace.organizer.quadrants.unknown_unknown.coordinate`)},{value:`unknown_known`,short:s(`knowledge.workspace.organizer.quadrants.unknown_known.short`),coordinate:s(`knowledge.workspace.organizer.quadrants.unknown_known.coordinate`)}]),q=u(()=>[{value:`pending`,label:s(`knowledge.domain.reviewStates.pending`),hint:s(`knowledge.workspace.organizer.review.pendingHint`)},{value:`agent_confirmed`,label:s(`knowledge.domain.reviewStates.agent_confirmed`),hint:s(`knowledge.workspace.organizer.review.agentConfirmedHint`)},{value:`confirmed`,label:s(`knowledge.domain.reviewStates.confirmed`),hint:s(`knowledge.workspace.organizer.review.confirmedHint`)}]),J=u(()=>R(g.value)),Y=u(()=>ie(J.value)),ce=u(()=>Object.fromEntries([...K.value.map(({value:e})=>e),`unclassified`].map(e=>[e,J.value.filter(t=>t.originQuadrant===e).length]))),le=u(()=>D.value!==`all`),X=u(()=>le.value?J.value.filter(e=>e.originQuadrant===D.value):J.value),ue=u(()=>Object.fromEntries(q.value.map(({value:e})=>[e,X.value.filter(t=>L(t)===e).length]))),Z=u(()=>{let e=E.value.trim().toLocaleLowerCase();return J.value.filter(t=>D.value!==`all`&&t.originQuadrant!==D.value||O.value!==`all`&&L(t)!==O.value?!1:!e||[t.title,t.body,t.type,I(t.originQuadrant),F(t),...t.evidence.flatMap(e=>[e.name,e.summary,e.source_description])].filter(Boolean).join(` `).toLocaleLowerCase().includes(e))}),de=u(()=>`${E.value}\u0000${D.value}\u0000${O.value}`),fe=u(()=>z.value?Z.value.findIndex(({id:e,itemKind:t})=>e===z.value?.id&&t===z.value?.itemKind):-1);n(()=>m.activePersonalSpace?.id,e=>{e&&Q(e)},{immediate:!0}),n(Z,e=>{z.value&&!e.some(({id:e,itemKind:t})=>e===z.value?.id&&t===z.value?.itemKind)&&(z.value=null)}),f(()=>{G+=1});async function Q(e=m.activePersonalSpace?.id){if(!e)return;let t=++G;C.value=!0,T.value=!1;let n=!1;try{let r=0;for(;t===G;){let i=await w(`/api/graph?${new URLSearchParams({spaceId:e,limit:String(Ne),offset:String(r)})}`);if(t!==G)return;if(g.value=n?B(g.value,i):i,n=!0,z.value&&=J.value.find(({id:e,itemKind:t})=>e===z.value?.id&&t===z.value?.itemKind)??null,C.value=!1,!i.truncated)break;let a=i.next_offset;if(!Number.isInteger(a)||a<=r)throw Error(s(`knowledge.workspace.organizer.paginationError`));r=a,T.value=!0,await ee()}}catch(e){n||(g.value=null),m.reportError(e)}finally{t===G&&(C.value=!1,T.value=!1)}}function pe(e){return`${e.itemKind}:${e.id}`}function Fe(e){D.value=D.value===e?`all`:e}function Ie(e){O.value=e}function Le(e){E.value=``,D.value=e.originQuadrant,O.value=`all`,z.value=e}return(t,n)=>(d(),x(`section`,$,[l(`div`,he,[l(`label`,ge,[l(`span`,null,h(c(s)(`knowledge.workspace.organizer.filterKnowledge`)),1),e(l(`input`,{"onUpdate:modelValue":n[0]||=e=>E.value=e,type:`search`,placeholder:c(s)(`knowledge.workspace.organizer.searchPlaceholder`)},null,8,_e),[[v,E.value]])]),l(`div`,{class:`quadrant-filter`,"aria-label":c(s)(`knowledge.workspace.organizer.quadrantFilterAria`)},[l(`span`,null,h(c(s)(`knowledge.workspace.organizer.discoverySource`)),1),l(`button`,{type:`button`,"data-quadrant":`all`,class:_({active:D.value===`all`}),"aria-pressed":D.value===`all`,onClick:n[1]||=e=>D.value=`all`},[b(h(c(s)(`common.status.all`))+` `,1),l(`strong`,null,h(J.value.length),1)],10,ye),(d(!0),x(p,null,r(K.value,e=>(d(),x(`button`,{key:e.value,type:`button`,"data-quadrant":e.value,class:_({active:D.value===e.value}),"aria-pressed":D.value===e.value,title:e.coordinate,onClick:t=>Fe(e.value)},[b(h(e.short)+` `,1),l(`strong`,null,h(ce.value[e.value]),1)],10,be))),128))],8,ve),l(`div`,{class:`review-state-filter`,"aria-label":c(s)(`knowledge.workspace.organizer.reviewFilterAria`)},[l(`span`,null,h(c(s)(`knowledge.workspace.organizer.reviewStatus`)),1),l(`button`,{type:`button`,"data-review-state":`all`,class:_({active:O.value===`all`}),"aria-pressed":O.value===`all`,onClick:n[2]||=e=>Ie(`all`)},[b(h(c(s)(`common.status.all`))+` `,1),l(`strong`,null,h(X.value.length),1)],10,Se),(d(!0),x(p,null,r(q.value,e=>(d(),x(`button`,{key:e.value,type:`button`,"data-review-state":e.value,class:_([`state-${e.value}`,{active:O.value===e.value}]),"aria-pressed":O.value===e.value,title:e.hint,onClick:t=>Ie(e.value)},[b(h(e.label)+` `,1),l(`strong`,null,h(ue.value[e.value]),1)],10,Ce))),128))],8,xe),l(`div`,we,[l(`p`,Te,[b(h(c(s)(`knowledge.workspace.organizer.showing`,{visible:Z.value.length,total:X.value.length}))+` `,1),O.value===`all`?y(``,!0):(d(),x(`span`,Ee,` · `+h(q.value.find(({value:e})=>e===O.value)?.label),1))]),Y.value.length?(d(),x(`button`,{key:0,class:`toolbar-action batch-confirm-action`,type:`button`,onClick:n[3]||=e=>W.value=!0},h(c(s)(`knowledge.workspace.organizer.batchConfirm`,{count:Y.value.length})),1)):y(``,!0),l(`button`,{class:`toolbar-action`,type:`button`,onClick:n[4]||=e=>Q()},h(c(s)(`common.actions.refresh`)),1)])]),c(se)?(d(),o(k,{key:0,label:c(s)(`common.status.loadingKnowledge`)},null,8,[`label`])):(d(),x(`div`,{key:1,class:_([`organizer-layout`,{"has-selection":z.value}])},[i(ne,{class:`organizer-directory`,items:Z.value,"row-height":Pe,"active-index":fe.value,"reset-key":de.value,"item-key":pe,"min-width":`var(--organizer-list-min-width)`,label:c(s)(`knowledge.workspace.organizer.directoryAria`)},{header:S(()=>[l(`div`,De,[l(`span`,null,h(c(s)(`knowledge.workspace.workspace.view.knowledgeContent`)),1),l(`span`,null,h(c(s)(`knowledge.workspace.workspace.view.columns.quadrant`)),1),l(`span`,null,h(c(s)(`knowledge.workspace.workspace.view.columns.review`)),1),l(`span`,null,h(c(s)(`knowledge.workspace.organizer.confirmationBasis`)),1),l(`span`,null,h(c(s)(`knowledge.workspace.organizer.updated`)),1)])]),default:S(({item:e})=>[l(`button`,{type:`button`,class:_([`organizer-row`,{selected:z.value?.id===e.id}]),onClick:t=>z.value=e},[l(`span`,ke,[l(`strong`,null,h(e.title),1),l(`small`,null,h(e.body),1)]),l(`span`,{class:_([`quadrant-chip`,e.originQuadrant])},h(c(I)(e.originQuadrant)),3),l(`span`,{class:_([`review-chip`,`state-${c(L)(e)}`])},h(c(F)(e)),3),l(`span`,Ae,h(c(re)(e)),1),l(`time`,null,h(c(ae)(c(V)(e))),1)],10,Oe)]),footer:S(()=>[T.value?(d(),x(`div`,je,h(c(s)(`knowledge.workspace.organizer.loadingMore`)),1)):y(``,!0)]),empty:S(()=>[l(`div`,Me,h(J.value.length?c(s)(`knowledge.workspace.organizer.noFilteredContent`):c(s)(`knowledge.workspace.organizer.noContent`)),1)]),_:1},8,[`items`,`active-index`,`reset-key`,`label`]),i(P,{item:z.value,graph:g.value,editable:``,onConfirm:n[5]||=e=>H.value=e,onEdit:n[6]||=e=>U.value=e,onOpenReplacement:Le},null,8,[`item`,`graph`])],2)),i(N,{item:U.value,"personal-space-id":c(m).activePersonalSpace?.id??``,"personal-project-id":null,projects:c(m).state?.personalProjects??[],"replacement-items":J.value,onClose:n[7]||=e=>U.value=null,onSaved:n[8]||=e=>Q()},null,8,[`item`,`personal-space-id`,`projects`,`replacement-items`]),i(j,{item:H.value,"personal-space-id":c(m).activePersonalSpace?.id??``,"personal-project-id":null,onClose:n[9]||=e=>H.value=null,onSaved:n[10]||=e=>Q()},null,8,[`item`,`personal-space-id`]),W.value?(d(),o(me,{key:2,groups:Y.value,"personal-space-id":c(m).activePersonalSpace?.id??``,onClose:n[11]||=e=>W.value=!1,onSaved:n[12]||=e=>Q()},null,8,[`groups`,`personal-space-id`])):y(``,!0)]))}}),[[`__scopeId`,`data-v-0646b6aa`]]);export{Fe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{C as e,_ as t,j as n}from"./i18n-Ci3heuiL.js";import{t as r}from"./KnowledgeWorkspace-z4u5mXOG.js";var i=e({__name:`KnowledgePage`,setup(e){return(e,i)=>(n(),t(r))}});export{i as default};
|