fuli-context 0.7.4-beta.2 → 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.
Files changed (133) hide show
  1. package/README.md +93 -7
  2. package/README.zh-CN.md +84 -7
  3. package/compose.graphiti.yml +6 -6
  4. package/dist/web/assets/AboutPage-ByCUor-j.js +1 -0
  5. package/dist/web/assets/ConnectionsPage-DkdkZ40Q.js +1 -0
  6. package/dist/web/assets/KnowledgeEditDialog-DSe3Gwep.js +1 -0
  7. package/dist/web/assets/KnowledgeInspector-CYAjAb9J.js +1 -0
  8. package/dist/web/assets/KnowledgeOrganizerPage-CV4F54R_.js +1 -0
  9. package/dist/web/assets/KnowledgePage-vYYXipOi.js +1 -0
  10. package/dist/web/assets/KnowledgeWorkspace-z4u5mXOG.js +4 -0
  11. package/dist/web/assets/OverviewPage-BWOfeS6k.js +1 -0
  12. package/dist/web/assets/PersonalProfilePage-c3w4-h7a.js +1 -0
  13. package/dist/web/assets/PersonalProjectsPage-B7AlLEwf.js +1 -0
  14. package/dist/web/assets/ProjectAgentsPage-CgftpIPB.css +1 -0
  15. package/dist/web/assets/ProjectAgentsPage-DTHcL_ox.js +11 -0
  16. package/dist/web/assets/PublicProjectsPage-DdH0oGB3.js +1 -0
  17. package/dist/web/assets/ReviewPage-BYIpcIHG.js +1 -0
  18. package/dist/web/assets/SearchableSelect-Dz13ClQb.js +1 -0
  19. package/dist/web/assets/SettingsPage-2VkbXgZi.js +1 -0
  20. package/dist/web/assets/SettingsPage-CwZp2ka4.css +1 -0
  21. package/dist/web/assets/WritingTastePage-BOPQZuva.js +1 -0
  22. package/dist/web/assets/{console-DMvHxKf9.js → console-BlAhujsH.js} +1 -1
  23. package/dist/web/assets/{conversation-launcher-settings-Dnlcw7Rj.js → conversation-launcher-settings-DTYxiLJt.js} +1 -1
  24. package/dist/web/assets/i18n-Ci3heuiL.js +9 -0
  25. package/dist/web/assets/{identity-C9mLdR8L.js → identity-4_-v6cB7.js} +1 -1
  26. package/dist/web/assets/index-BnH5mcZx.css +1 -0
  27. package/dist/web/assets/index-C67Q0JY2.js +2 -0
  28. package/dist/web/assets/{model-CsYAR8O3.js → model-yG0YqUyZ.js} +1 -1
  29. package/dist/web/assets/{useApi-CROJJdhE-BLQiPVw0.js → useApi-CROJJdhE-twhdZArA.js} +1 -1
  30. package/dist/web/assets/vue-router-C-wot_Di.js +1 -0
  31. package/dist/web/index.html +6 -6
  32. package/docs/public-personal-architecture.md +73 -0
  33. package/graph-provider/fuli_graph/app.py +8 -0
  34. package/graph-provider/fuli_graph/collaboration_context.py +69 -6
  35. package/graph-provider/fuli_graph/knowledge_search.py +84 -5
  36. package/graph-provider/fuli_graph/model_validation.py +134 -0
  37. package/graph-provider/fuli_graph/models.py +24 -5
  38. package/graph-provider/fuli_graph/project_agent_access.py +54 -0
  39. package/graph-provider/fuli_graph/project_agent_executor_models.py +635 -0
  40. package/graph-provider/fuli_graph/project_agent_models.py +278 -0
  41. package/graph-provider/fuli_graph/project_agent_routes.py +597 -0
  42. package/graph-provider/fuli_graph/project_agent_task_models.py +542 -0
  43. package/graph-provider/fuli_graph/runtime.py +259 -0
  44. package/graph-provider/fuli_graph/search_projection.py +3 -0
  45. package/graph-provider/fuli_graph/store.py +6 -0
  46. package/graph-provider/fuli_graph/store_knowledge.py +62 -9
  47. package/graph-provider/fuli_graph/store_project_agent_executor_learning.py +756 -0
  48. package/graph-provider/fuli_graph/store_project_agent_executor_routing.py +601 -0
  49. package/graph-provider/fuli_graph/store_project_agent_executors.py +1087 -0
  50. package/graph-provider/fuli_graph/store_project_agent_task_reads.py +458 -0
  51. package/graph-provider/fuli_graph/store_project_agent_task_recruitment.py +699 -0
  52. package/graph-provider/fuli_graph/store_project_agent_task_staffing.py +409 -0
  53. package/graph-provider/fuli_graph/store_project_agent_tasks.py +1144 -0
  54. package/graph-provider/fuli_graph/store_project_agents.py +965 -0
  55. package/graph-provider/pyproject.toml +2 -1
  56. package/npm-shrinkwrap.json +2 -2
  57. package/package.json +2 -1
  58. package/skills/capturing-session-knowledge/SKILL.md +43 -2
  59. package/src/adaptive-runtime/executor-pool.js +127 -0
  60. package/src/adaptive-runtime/graph-services.js +166 -0
  61. package/src/adaptive-runtime/lease-client.js +335 -0
  62. package/src/adaptive-runtime/runtime-broker.js +318 -0
  63. package/src/adaptive-runtime/settings.js +111 -0
  64. package/src/adaptive-runtime/state.js +74 -0
  65. package/src/agent-tools/graph-definitions.js +396 -0
  66. package/src/agent-tools/graph-handlers.js +61 -0
  67. package/src/agent-tools/project-agent-definitions.js +307 -0
  68. package/src/backup/graph-backup.js +289 -0
  69. package/src/backup/identity-reconciliation.js +208 -0
  70. package/src/backup/runtime-adapters.js +269 -0
  71. package/src/cli/command-registry.js +7 -2
  72. package/src/cli/graph-data-command.js +112 -0
  73. package/src/cli/local-runtime-command.js +16 -2
  74. package/src/cli/setup-command.js +19 -3
  75. package/src/cli/update-command.js +4 -0
  76. package/src/cli/workspace-connection-command.js +333 -0
  77. package/src/cli.js +11 -0
  78. package/src/graphiti/collaboration-preference-projection.js +29 -1
  79. package/src/graphiti/collaboration-preference-workflow.js +121 -0
  80. package/src/graphiti/federated-application.js +74 -112
  81. package/src/graphiti/knowledge-provider-mapping.js +7 -1
  82. package/src/graphiti/project-agent-control-plane.js +263 -0
  83. package/src/graphiti/project-agent-mapping.js +1003 -0
  84. package/src/graphiti/project-agent-workflows.js +557 -0
  85. package/src/graphiti/provider-client.js +270 -1
  86. package/src/graphiti/runtime-config.js +6 -1
  87. package/src/graphiti/workspace-provider-client.js +403 -0
  88. package/src/http/api-router.js +63 -9
  89. package/src/http/graph-api-router.js +278 -0
  90. package/src/local-runtime/lifecycle.js +46 -10
  91. package/src/mcp/context-resources.js +15 -6
  92. package/src/mcp/create-mcp-server.js +51 -16
  93. package/src/mcp/instructions.js +7 -5
  94. package/src/mcp/runtime.js +17 -5
  95. package/src/mcp/session-id.js +38 -1
  96. package/src/mcp/tool-annotations.js +69 -0
  97. package/src/mcp-server.js +23 -6
  98. package/src/native-runtime/runtime.js +717 -0
  99. package/src/server.js +6 -2
  100. package/src/setup/agent-installation-status.js +7 -1
  101. package/src/setup/agents.js +3 -1
  102. package/src/setup/claude-code-config.js +3 -1
  103. package/src/setup/codex-bootstrap.js +11 -10
  104. package/src/setup/codex-config.js +7 -1
  105. package/src/setup/cursor-config.js +3 -1
  106. package/src/setup/graph-runtime.js +158 -13
  107. package/src/setup/neo4j-memory-profile.js +43 -0
  108. package/src/setup/options.js +38 -2
  109. package/src/setup/paths.js +14 -0
  110. package/src/setup/setup.js +37 -1
  111. package/src/system/resource-monitor.js +181 -16
  112. package/src/system/runtime-settings.js +10 -1
  113. package/src/system/system-service.js +27 -2
  114. package/dist/web/assets/AboutPage-CftRexSY.js +0 -1
  115. package/dist/web/assets/ConnectionsPage-D5J91x6d.js +0 -1
  116. package/dist/web/assets/KnowledgeEditDialog-wotVahvr.js +0 -1
  117. package/dist/web/assets/KnowledgeInspector-BzkW0mVs.js +0 -1
  118. package/dist/web/assets/KnowledgeOrganizerPage-BebUDiHt.js +0 -1
  119. package/dist/web/assets/KnowledgePage-OUT07aKH.js +0 -1
  120. package/dist/web/assets/KnowledgeWorkspace-1pHJ0MNZ.js +0 -4
  121. package/dist/web/assets/OverviewPage-CHE6XhdS.js +0 -1
  122. package/dist/web/assets/PersonalProfilePage-CXXiabUy.js +0 -1
  123. package/dist/web/assets/PersonalProjectsPage-d2wYGW8n.js +0 -1
  124. package/dist/web/assets/PublicProjectsPage-hxLShtnZ.js +0 -1
  125. package/dist/web/assets/ReviewPage-DUeyu7E8.js +0 -1
  126. package/dist/web/assets/SearchableSelect-C5RiB5F8.js +0 -1
  127. package/dist/web/assets/SettingsPage-BMuASSzQ.js +0 -1
  128. package/dist/web/assets/SettingsPage-CAfz4qiV.css +0 -1
  129. package/dist/web/assets/WritingTastePage-B9BCYIwQ.js +0 -1
  130. package/dist/web/assets/i18n-CWfd8Dtt.js +0 -5
  131. package/dist/web/assets/index-X2j29j8i.css +0 -1
  132. package/dist/web/assets/index-nP5p5OaY.js +0 -2
  133. package/dist/web/assets/vue-router-DN8x6iY1.js +0 -1
package/README.md CHANGED
@@ -383,7 +383,7 @@ user; the optional Agent-decision policy applies to the current response only an
383
383
  invalidate, or rewrite any source. Direct external-to-public binding, reviewed public promotion,
384
384
  scheduled sync, webhooks, and full deletion reconciliation remain **TODO**.
385
385
 
386
- See the [external-knowledge architecture and connector contract](docs/external-knowledge-architecture.md).
386
+ See the [external-knowledge architecture and connector contract](docs/external-knowledge-architecture.md), and the [public-workspace and personal-graph architecture](docs/public-personal-architecture.md).
387
387
 
388
388
  ## Current capabilities and evidence boundaries
389
389
 
@@ -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 another compatible runtime;
421
- - approximately 4 GB of memory available to the containers.
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, Agent access,
444
- UI language, and the resource refresh interval. Run `fuli restart` after saving port or LAN changes;
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. Browser-tab memory and shared
449
- container-VM overhead are excluded from the Fuli total.
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,9 +479,25 @@ 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
 
486
+ Connect a deployed `fuli-workspace` service:
487
+
488
+ ```bash
489
+ fuli connect-workspace \
490
+ --url http://127.0.0.1:8789 \
491
+ --token-file /path/to/private-token
492
+ fuli restart
493
+ ```
494
+
495
+ The command verifies discovery, protocol version, and token scope before atomically updating the
496
+ local runtime configuration with mode `0600`. It never prints the token, token-file path, or remote
497
+ principal ID. Non-loopback services must use HTTPS. The current `fuli-workspace-v1` adapter enables
498
+ discovery, explicit subscriptions, and queries; publishing, contributions, and review remain off
499
+ until those protocol mappings are implemented.
500
+
480
501
  `start` and `restart` accept `--data-dir DIR`, `--personal-space NAME`, `--port PORT`, `--open`,
481
502
  `--rebuild`, `--lan`, and `--no-lan`. When port or LAN flags are omitted, the saved Settings values
482
503
  are used. LAN mode listens on private IPv4 addresses and prints the reachable URLs, the
@@ -496,11 +517,76 @@ and tells you to run `fuli setup`; it never applies setup changes implicitly.
496
517
  | `--data-dir DIR` | Use a specific data and configuration directory |
497
518
  | `--personal-space NAME` | Set the personal-space name; defaults to `Personal` |
498
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 |
499
524
  | `--skip-agents` | Do not change agent configuration or Skills |
500
525
  | `--no-start` | Initialize the Provider without starting the UI |
501
526
  | `--personal-only` | Use only the personal Provider; this is the default |
502
527
  | `--with-dev-public` | Start a development shared Provider for local integration work only |
503
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
+
504
590
  Update:
505
591
 
506
592
  ```bash
package/README.zh-CN.md CHANGED
@@ -338,7 +338,7 @@ Agent 上下文。
338
338
  展示并询问用户;可选的“Agent 判断”只对本次回答生效,不能确认、失效或改写任何来源。
339
339
  外部知识直接绑定到公共空间或经审核提升到公共空间、后台定时同步、Webhook 和完整删除对账仍是 **TODO**。
340
340
 
341
- 完整边界见[外部知识库只读接入架构](docs/external-knowledge-architecture.md)。
341
+ 完整边界见[外部知识库只读接入架构](docs/external-knowledge-architecture.md),公共空间与个人图谱的联动见[公共空间与个人图谱联动架构](docs/public-personal-architecture.md)。
342
342
 
343
343
  ## 当前能力与证据边界
344
344
 
@@ -370,8 +370,10 @@ Agent 上下文。
370
370
  准备:
371
371
 
372
372
  - Node.js 24.12 或更高版本;
373
- - Docker Compose v2;Docker Desktop 或 Rancher Desktop 均可;
374
- - 至少约 4 GB 可供容器使用的内存。
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 个本机端口、局域网访问、自动沉淀、Agent 使用、界面语言和
396
- 资源刷新频率。端口或局域网设置保存后执行 `fuli restart` 生效;资源刷新频率立即生效。
397
+ “设置”页集中管理 Fuli 使用的 7 个本机端口、图数据库运行方式、局域网访问、自动沉淀、
398
+ Agent 使用、界面语言和资源刷新频率。端口、运行方式或局域网设置保存后执行 `fuli restart`
399
+ 生效;资源刷新频率立即生效。
397
400
  同页按设定间隔采集管理服务、Provider、Neo4j、应用文件和本机数据的真实内存/磁盘占用;
398
401
  内存每次重采,磁盘最多每分钟重采一次,并分别显示采样时间。
399
- 无法取得容器数据时会明确显示为不完整,不使用模拟值。浏览器标签页内存和共享容器虚拟机
400
- 开销不计入 Fuli 合计。
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,9 +430,24 @@ 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
 
437
+ 连接已部署的 `fuli-workspace` 服务:
438
+
439
+ ```bash
440
+ fuli connect-workspace \
441
+ --url http://127.0.0.1:8789 \
442
+ --token-file /path/to/private-token
443
+ fuli restart
444
+ ```
445
+
446
+ 连接命令会先验证服务发现、协议版本和令牌作用域,再以 `0600` 权限原子更新本机运行配置;
447
+ 它不会在输出中显示令牌、令牌文件路径或远端 principal ID。非本机服务必须使用 HTTPS。
448
+ 当前 `fuli-workspace-v1` 适配器开放发现、显式订阅和查询;发布、投稿、审核只会在相应协议映射
449
+ 真正实现后才显示为可用。
450
+
431
451
  `start` 和 `restart` 支持 `--data-dir DIR`、`--personal-space NAME`、`--port PORT`、
432
452
  `--open`、`--rebuild`、`--lan` 和 `--no-lan`。未显式传入端口或局域网参数时会使用“设置”
433
453
  页保存的值。其中 `--lan` 会让管理界面监听
@@ -448,11 +468,68 @@ HTTPS 公网部署。
448
468
  | `--data-dir DIR` | 使用指定的数据与配置目录 |
449
469
  | `--personal-space NAME` | 设置个人空间名称;默认是 `Personal` |
450
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` | 关闭按需休眠,让图服务保持运行 |
451
475
  | `--skip-agents` | 不修改 Agent 配置或 Skills |
452
476
  | `--no-start` | 初始化 Provider,但不启动管理界面 |
453
477
  | `--personal-only` | 只使用个人 Provider;默认模式 |
454
478
  | `--with-dev-public` | 同时启动开发用公共 Provider,仅用于开发或联调 |
455
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
+
456
533
  更新:
457
534
 
458
535
  ```bash
@@ -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};