Prechádzať zdrojové kódy

fix(session-query): rename session log export package

imccyu 2 mesiacov pred
rodič
commit
34dd480ae5
45 zmenil súbory, kde vykonal 66 pridanie a 66 odobranie
  1. 2 2
      .agents/notes/implemented/feature/2026-08-11-web-export-command-and-dialog.i18n.yaml
  2. 1 1
      .agents/notes/implemented/feature/2026-08-11-web-export-command-and-dialog.md
  3. 1 1
      .agents/notes/implemented/feature/2026-08-11-web-export-command-and-dialog.zh.md
  4. 2 2
      .agents/notes/proposed/architecture/2026-08-11-repository-naming-contract-and-rename-ledger.i18n.yaml
  5. 1 1
      .agents/notes/proposed/architecture/2026-08-11-repository-naming-contract-and-rename-ledger.md
  6. 1 1
      .agents/notes/proposed/architecture/2026-08-11-repository-naming-contract-and-rename-ledger.zh.md
  7. 1 1
      apps/web/tests/assembled-boot.ts
  8. 1 1
      apps/web/tests/smoke-real.e2e.ts
  9. 2 2
      docs/config-catalog.i18n.yaml
  10. 1 1
      docs/config-catalog.md
  11. 1 1
      docs/config-catalog.zh.md
  12. 2 2
      docs/module-graph.i18n.yaml
  13. 10 10
      docs/module-graph.md
  14. 10 10
      docs/module-graph.zh.md
  15. 1 1
      packages/bundle/web-app/cordis.patch.yml
  16. 1 1
      packages/bundle/web-app/package.json
  17. 2 2
      packages/session-query/README.i18n.yaml
  18. 1 1
      packages/session-query/README.md
  19. 1 1
      packages/session-query/README.zh.md
  20. 0 3
      packages/session-query/session-log-download/tsdown.config.ts
  21. 3 3
      packages/session-query/session-log-export/README.i18n.yaml
  22. 2 2
      packages/session-query/session-log-export/README.md
  23. 2 2
      packages/session-query/session-log-export/README.zh.md
  24. 2 2
      packages/session-query/session-log-export/package.json
  25. 0 0
      packages/session-query/session-log-export/src/client/Dialog.tsx
  26. 0 0
      packages/session-query/session-log-export/src/client/HeaderAction.module.css
  27. 0 0
      packages/session-query/session-log-export/src/client/HeaderAction.tsx
  28. 0 0
      packages/session-query/session-log-export/src/client/controller.ts
  29. 0 0
      packages/session-query/session-log-export/src/client/index.ts
  30. 0 0
      packages/session-query/session-log-export/src/client/locales.ts
  31. 0 0
      packages/session-query/session-log-export/src/css-modules.d.ts
  32. 0 0
      packages/session-query/session-log-export/src/index.ts
  33. 2 2
      packages/session-query/session-log-export/src/invariant.ts
  34. 0 0
      packages/session-query/session-log-export/tests/client-apply.client.spec.tsx
  35. 0 0
      packages/session-query/session-log-export/tests/command.client.spec.ts
  36. 0 0
      packages/session-query/session-log-export/tests/controller.client.spec.ts
  37. 0 0
      packages/session-query/session-log-export/tests/dialog.client.spec.tsx
  38. 0 0
      packages/session-query/session-log-export/tests/header-action.client.spec.tsx
  39. 2 2
      packages/session-query/session-log-export/tests/invariant.client.spec.ts
  40. 3 3
      packages/session-query/session-log-export/tests/loader-composition.client.spec.ts
  41. 0 0
      packages/session-query/session-log-export/tsconfig.json
  42. 3 0
      packages/session-query/session-log-export/tsdown.config.ts
  43. 3 3
      pnpm-lock.yaml
  44. 1 1
      scripts/gen-cordis-catalog.ts
  45. 1 1
      tsconfig.client.json

+ 2 - 2
.agents/notes/implemented/feature/2026-08-11-web-export-command-and-dialog.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-08-11-web-export-command-and-dialog.md
-2026-08-11-web-export-command-and-dialog.md: db4d63331282fbe06e87b282f9056187f2cd3e5e
-2026-08-11-web-export-command-and-dialog.zh.md: 971749963d309008a3b7727b7b485d1094ea7911
+2026-08-11-web-export-command-and-dialog.md: d28925500a45111d348b6151df9d4c62cc6de54b
+2026-08-11-web-export-command-and-dialog.zh.md: a9a9c4a5cc019a3242561e0cc5f8445625c7cb86

+ 1 - 1
.agents/notes/implemented/feature/2026-08-11-web-export-command-and-dialog.md

@@ -10,7 +10,7 @@ Session export needs a stable Session-level visible action and an equivalent sla
 
 ## Decision
 
-`@deepseek-ai/dsh-session-log-download` registers a Web-only `/export` human command and provides the browser `ctx.sessionLogDownload` controller. The command records an ordinary `command/run` and `command/done`; after `command.execute` returns a successful result, `dsh-client-ui-commands` emits a local acknowledgment that asks this browser's controller to download ApiProxy's existing `GET /api/session.export` ZIP. Other clients render the broadcast command nodes without repeating the browser side effect. The 111×32 `Session log` capsule in the Session Header calls that controller directly. Both paths use a `HEAD` preflight for preparation errors, then hand the GET URL to the browser download manager so JavaScript never buffers the ZIP; they share the same in-flight state and Modal.
+`@deepseek-ai/dsh-session-log-export` registers a Web-only `/export` human command and provides the browser `ctx.sessionLogDownload` controller. The command records an ordinary `command/run` and `command/done`; after `command.execute` returns a successful result, `dsh-client-ui-commands` emits a local acknowledgment that asks this browser's controller to download ApiProxy's existing `GET /api/session.export` ZIP. Other clients render the broadcast command nodes without repeating the browser side effect. The 111×32 `Session log` capsule in the Session Header calls that controller directly. Both paths use a `HEAD` preflight for preparation errors, then hand the GET URL to the browser download manager so JavaScript never buffers the ZIP; they share the same in-flight state and Modal.
 
 The Header contribution occupies the right-aligned `conversation.session.header.utilities` list and renders the `Session log` text capsule with its trailing download icon plus the shared Modal. The title-adjacent `conversation.session.header.actions` list continues to own mode, Subagent, and Task entries, so mounting Session export does not reorder or move them. The export contribution does not observe Session history. A per-Session controller collapses concurrent gestures, aborts active preflights when its plugin disposes, ignores late requests after disposal, and preserves a user's closed state when the request later completes.
 

+ 1 - 1
.agents/notes/implemented/feature/2026-08-11-web-export-command-and-dialog.zh.md

@@ -10,7 +10,7 @@ Session 导出需要一个稳定的 Session 级外显入口,以及语义等价
 
 ## Decision
 
-`@deepseek-ai/dsh-session-log-download` 注册 Web 专用的 `/export` 用户命令,并提供浏览器 `ctx.sessionLogDownload` 控制器。该命令记录普通的 `command/run` 和 `command/done`;`command.execute` 返回成功结果后,`dsh-client-ui-commands` 会发布本地确认,请求当前浏览器的控制器下载 ApiProxy 现有的 `GET /api/session.export` ZIP。其他客户端会渲染广播的命令节点,但不会重复执行浏览器副作用。Session Header 中 111×32 的 `Session log` 胶囊按钮会直接调用该控制器。两种入口通过 `HEAD` 预检获得准备阶段错误,再把 GET URL 交给浏览器下载管理器,因此 JavaScript 不会缓冲 ZIP;两种入口共用进行中状态和 Modal。
+`@deepseek-ai/dsh-session-log-export` 注册 Web 专用的 `/export` 用户命令,并提供浏览器 `ctx.sessionLogDownload` 控制器。该命令记录普通的 `command/run` 和 `command/done`;`command.execute` 返回成功结果后,`dsh-client-ui-commands` 会发布本地确认,请求当前浏览器的控制器下载 ApiProxy 现有的 `GET /api/session.export` ZIP。其他客户端会渲染广播的命令节点,但不会重复执行浏览器副作用。Session Header 中 111×32 的 `Session log` 胶囊按钮会直接调用该控制器。两种入口通过 `HEAD` 预检获得准备阶段错误,再把 GET URL 交给浏览器下载管理器,因此 JavaScript 不会缓冲 ZIP;两种入口共用进行中状态和 Modal。
 
 Header 贡献占用最右侧的 `conversation.session.header.utilities` 列表,渲染带尾部下载图标的 `Session log` 文字 capsule 和共享 Modal。标题旁的 `conversation.session.header.actions` 列表继续承载模式、Subagent 和 Task 配置项,挂载 Session export 不会改变它们的顺序或位置。导出贡献不观察 Session 历史。逐 Session 控制器会折叠并发操作,在插件释放时取消活动预检,忽略释放后的迟到请求,并在请求后来完成时保留用户已经关闭弹窗的状态。
 

+ 2 - 2
.agents/notes/proposed/architecture/2026-08-11-repository-naming-contract-and-rename-ledger.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write .agents/notes/proposed/architecture/2026-08-11-repository-naming-contract-and-rename-ledger.md
-2026-08-11-repository-naming-contract-and-rename-ledger.md: 440ab360e0bd34071de244120aca75116a56ff30
-2026-08-11-repository-naming-contract-and-rename-ledger.zh.md: e5f8d37bdee790b374ecf18be41c04ad8588da46
+2026-08-11-repository-naming-contract-and-rename-ledger.md: ad5a2061c40011b3f8c32ecbb62a0b545f82f9f6
+2026-08-11-repository-naming-contract-and-rename-ledger.zh.md: 8f1b3505f0cc16a6e3e6429b5924cabda231f00f

+ 1 - 1
.agents/notes/proposed/architecture/2026-08-11-repository-naming-contract-and-rename-ledger.md

@@ -208,7 +208,7 @@ Keep `/compact`, the command package, and the rejected decision to preserve sepa
 | `AgentDefaultModelService` | `AgentDefaultModelConfig` | The object stores one default model selection. It does not run a service or general registry. Keep its package, key, settings namespace, and type. |
 | `SessionReferenceService`, `ctx.sessionReferences` | `SessionReferenceResolver`, `ctx.sessionReferenceResolver` | It resolves one session reference from a URI or input. It does not own a reference collection. |
 | `SessionQueryService`, `SessionQuerySqlite` | `SessionQueryEngine`, `SqliteSessionQueryEngine` | The classes execute a query model and its SQLite implementation. Keep package names, key, and tool. |
-| `@deepseek-ai/dsh-session-export`, `session-export/`, Loader id `session-export`, `ctx.sessionExport` | `@deepseek-ai/dsh-session-log-download`, `session-log-download/`, Loader id `session-log-download`, `ctx.sessionLogDownload` | This package does not implement general Session export. It controls the Web download of one Host-streamed Session-log ZIP. The subject and browser side effect must be in its name. |
+| `@deepseek-ai/dsh-session-export`, `session-export/`, Loader id `session-export`, `ctx.sessionExport` | `@deepseek-ai/dsh-session-log-export`, `session-log-export/`, Loader id `session-log-download`, `ctx.sessionLogDownload` | The npm package names the Session-log export because npm rejects `download` in package names. The Loader id and browser API retain `download` because they describe the browser side effect. |
 | `SessionExportDownloadController`, other `SessionExport*` browser types, `useSessionExport`, `SessionExportHeader` | `SessionLogDownloadController`, corresponding `SessionLogDownload*` types, `useSessionLogDownload`, `SessionLogDownloadHeaderAction` | The controller owns preflight, duplicate-request collapse, modal state, and browser save. `ExportDownload` repeats the action, and the component contributes one Header action rather than the Header. |
 | `CommandService` in the host command package | `CommandRuntime` | The object registers and executes host commands across live calls. Keep its package, key, types, and events. |
 | `TokenMeterService` | `TokenMeter` | The object measures token use. `Service` adds no scope. |

+ 1 - 1
.agents/notes/proposed/architecture/2026-08-11-repository-naming-contract-and-rename-ledger.zh.md

@@ -208,7 +208,7 @@ PascalCase 标识符中的首字母缩略词使用首字母大写格式:`Ui`
 | `AgentDefaultModelService` | `AgentDefaultModelConfig` | 该对象存储一项默认模型选择。它不运行服务,也不是通用注册表。保留其包、键、设置命名空间和类型。 |
 | `SessionReferenceService`, `ctx.sessionReferences` | `SessionReferenceResolver`, `ctx.sessionReferenceResolver` | 它从 URI 或输入解析一个会话引用,并不拥有引用集合。 |
 | `SessionQueryService`, `SessionQuerySqlite` | `SessionQueryEngine`, `SqliteSessionQueryEngine` | 这些类执行查询模型及其 SQLite 实现。保留包名、键和工具。 |
-| `@deepseek-ai/dsh-session-export`, `session-export/`, Loader id `session-export`, `ctx.sessionExport` | `@deepseek-ai/dsh-session-log-download`, `session-log-download/`, Loader id `session-log-download`, `ctx.sessionLogDownload` | 该包不实现通用 Session 导出。它控制 Web 下载一个由 Host 流式输出的 Session 日志 ZIP。名称必须说明对象和浏览器副作用。 |
+| `@deepseek-ai/dsh-session-export`, `session-export/`, Loader id `session-export`, `ctx.sessionExport` | `@deepseek-ai/dsh-session-log-export`, `session-log-export/`, Loader id `session-log-download`, `ctx.sessionLogDownload` | npm 包名使用 Session 日志导出语义,因为 npm 禁止包名包含 `download`。Loader id 与浏览器 API 保留 `download`,因为它们描述浏览器副作用。 |
 | `SessionExportDownloadController`, 其他 `SessionExport*` 浏览器类型、`useSessionExport`、`SessionExportHeader` | `SessionLogDownloadController`, 对应的 `SessionLogDownload*` 类型、`useSessionLogDownload`、`SessionLogDownloadHeaderAction` | 该 controller 拥有预检、重复请求合并、弹窗状态和浏览器保存。`ExportDownload` 重复表达同一动作,该组件贡献的是一个 Header action,不是整个 Header。 |
 | 宿主命令包中的 `CommandService` | `CommandRuntime` | 该对象跨实时调用注册并执行宿主命令。保留其包、键、类型和事件。 |
 | `TokenMeterService` | `TokenMeter` | 该对象测量 token 用量。`Service` 没有补充作用域信息。 |

+ 1 - 1
apps/web/tests/assembled-boot.ts

@@ -43,7 +43,7 @@ const PLUGINS: readonly (WebBootEntry & { bundlePath: string })[] = [
       '@deepseek-ai/dsh-client-ui-sidebar',
     ],
   },
-  { id: '@deepseek-ai/dsh-session-log-download', bundlePath: 'packages/session-query/session-log-download/lib/client.js', url: '/plugins/session-log-download.js', rev: 'fx', inject: ['@deepseek-ai/dsh-client-ui-commands', '@deepseek-ai/dsh-client-ui-conversation'] },
+  { id: '@deepseek-ai/dsh-session-log-export', bundlePath: 'packages/session-query/session-log-export/lib/client.js', url: '/plugins/session-log-download.js', rev: 'fx', inject: ['@deepseek-ai/dsh-client-ui-commands', '@deepseek-ai/dsh-client-ui-conversation'] },
   { id: '@deepseek-ai/dsh-client-ui-trajectory', bundlePath: 'packages/client/ui-trajectory/lib/client.js', url: '/plugins/ui-trajectory.js', rev: 'fx', inject: ['@deepseek-ai/dsh-client-ui-conversation'] },
 ]
 

+ 1 - 1
apps/web/tests/smoke-real.e2e.ts

@@ -144,7 +144,7 @@ async function detailsTrack(page: Page): Promise<number> {
 const UI_PLUGIN_DIRS = [
   'connection', 'runtime', 'ui-theme', 'locale', 'ui-layout', 'ui-sidebar',
   'ui-settings', 'ui-settings-general', 'ui-settings-models', 'ui-conversation',
-  'ui-model-selection', 'ui-user-questions', 'ui-trajectory', '../session-query/session-log-download',
+  'ui-model-selection', 'ui-user-questions', 'ui-trajectory', '../session-query/session-log-export',
 ]
 const ROUND_DONE_MARKER = 'WEB_ROUND_DONE'
 const notReady = UI_PLUGIN_DIRS.filter((dir) => {

+ 2 - 2
docs/config-catalog.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write docs/config-catalog.md
-config-catalog.md: 25a9b02f91bd7c5a3fef49e6e61dd34dd7afea57
-config-catalog.zh.md: 674c60e74aaa1a65838da78bb290c4159b6fe63b
+config-catalog.md: 09c6064c2c6bb3c1da6283a885db33a5b4a674df
+config-catalog.zh.md: 0bd95a5ab24b7acf85ba7ca00125ea9135e7dd82

+ 1 - 1
docs/config-catalog.md

@@ -2847,7 +2847,7 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
 - `@deepseek-ai/dsh-schedule` — requires `agents` · `sessions` · `tools` · `sessionPersistence` ([`packages/schedule/schedule/src/index.ts`](../packages/schedule/schedule/src/index.ts))
 - `@deepseek-ai/dsh-session` ([`packages/core/session/src/index.ts`](../packages/core/session/src/index.ts))
 - `@deepseek-ai/dsh-session-checkpoint-policy` — requires `llm` · `sessionPersistence` · `sessions` · `tools` ([`packages/session/session-checkpoint-policy/src/index.ts`](../packages/session/session-checkpoint-policy/src/index.ts))
-- `@deepseek-ai/dsh-session-log-download` — requires `commands` ([`packages/session-query/session-log-download/src/index.ts`](../packages/session-query/session-log-download/src/index.ts))
+- `@deepseek-ai/dsh-session-log-export` — requires `commands` ([`packages/session-query/session-log-export/src/index.ts`](../packages/session-query/session-log-export/src/index.ts))
 - `@deepseek-ai/dsh-session-projection` ([`packages/session/session-projection/src/index.ts`](../packages/session/session-projection/src/index.ts))
 - `@deepseek-ai/dsh-session-stats` — requires `sessionProjections` ([`packages/session/session-stats/src/index.ts`](../packages/session/session-stats/src/index.ts))
 - `@deepseek-ai/dsh-skill-badge` — requires `skills` ([`packages/skill/skill-badge/src/index.ts`](../packages/skill/skill-badge/src/index.ts))

+ 1 - 1
docs/config-catalog.zh.md

@@ -2849,7 +2849,7 @@ export interface Config {
 - `@deepseek-ai/dsh-schedule` — 需要 `agents` · `sessions` · `tools` · `sessionPersistence`([`packages/schedule/schedule/src/index.ts`](../packages/schedule/schedule/src/index.ts))
 - `@deepseek-ai/dsh-session`([`packages/core/session/src/index.ts`](../packages/core/session/src/index.ts))
 - `@deepseek-ai/dsh-session-checkpoint-policy` — 需要 `llm` · `sessionPersistence` · `sessions` · `tools`([`packages/session/session-checkpoint-policy/src/index.ts`](../packages/session/session-checkpoint-policy/src/index.ts))
-- `@deepseek-ai/dsh-session-log-download` — 需要 `commands`([`packages/session-query/session-log-download/src/index.ts`](../packages/session-query/session-log-download/src/index.ts))
+- `@deepseek-ai/dsh-session-log-export` — 需要 `commands`([`packages/session-query/session-log-export/src/index.ts`](../packages/session-query/session-log-export/src/index.ts))
 - `@deepseek-ai/dsh-session-projection`([`packages/session/session-projection/src/index.ts`](../packages/session/session-projection/src/index.ts))
 - `@deepseek-ai/dsh-session-stats` — 需要 `sessionProjections`([`packages/session/session-stats/src/index.ts`](../packages/session/session-stats/src/index.ts))
 - `@deepseek-ai/dsh-skill-badge` — 需要 `skills`([`packages/skill/skill-badge/src/index.ts`](../packages/skill/skill-badge/src/index.ts))

+ 2 - 2
docs/module-graph.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write docs/module-graph.md
-module-graph.md: d8b80d228251eddad4c91f73748a853207dce86e
-module-graph.zh.md: 1085b6f7adc1226502ef599387be6f5b3ec92bda
+module-graph.md: 24ee9a4815b4236336ae37f6c926dba4718dafb9
+module-graph.zh.md: d87feb946a43a2f9d391e7894b4a143af4e18406

+ 10 - 10
docs/module-graph.md

@@ -92,7 +92,7 @@ flowchart TD
     pkg_hooks_codex["hooks-codex"]
   end
   subgraph group_session_query["packages/session-query"]
-    pkg_session_log_download["session-log-download"]
+    pkg_session_log_export["session-log-export"]
     pkg_session_query["session-query"]
     pkg_session_query_sqlite["session-query-sqlite"]
     pkg_tool_session_query["tool-session-query"]
@@ -1363,14 +1363,14 @@ flowchart TD
   pkg_host_directory_picker_auto --> pkg_host_directory_picker_native
   pkg_host_directory_picker_auto --> pkg_host_webserver
   pkg_host_directory_picker_auto --> pkg_invariants
-  pkg_session_log_download --> pkg_client_locale
-  pkg_session_log_download --> pkg_client_runtime
-  pkg_session_log_download --> pkg_client_ui_commands
-  pkg_session_log_download --> pkg_client_ui_conversation
-  pkg_session_log_download --> pkg_client_ui_primitives
-  pkg_session_log_download --> pkg_client_ui_slots
-  pkg_session_log_download --> pkg_commands
-  pkg_session_log_download --> pkg_invariants
+  pkg_session_log_export --> pkg_client_locale
+  pkg_session_log_export --> pkg_client_runtime
+  pkg_session_log_export --> pkg_client_ui_commands
+  pkg_session_log_export --> pkg_client_ui_conversation
+  pkg_session_log_export --> pkg_client_ui_primitives
+  pkg_session_log_export --> pkg_client_ui_slots
+  pkg_session_log_export --> pkg_commands
+  pkg_session_log_export --> pkg_invariants
   pkg_client_ui_model_selection --> pkg_api_remotes
   pkg_client_ui_model_selection --> pkg_client_connection
   pkg_client_ui_model_selection --> pkg_client_locale
@@ -1631,7 +1631,7 @@ flowchart TD
 | [`client-ui-tool`](../packages/client/ui-tool) | `client` | [`api-remotes`](../packages/api/remotes), [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`invariants`](../packages/runtime-diagnostics/invariants) |
 | [`client-ui-workflow-run`](../packages/client/ui-workflow-run) | `client` | [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`invariants`](../packages/runtime-diagnostics/invariants), [`session`](../packages/core/session), [`tool-workflow`](../packages/workflow/tool-workflow), [`workflow`](../packages/workflow/workflow) |
 | [`host-directory-picker-auto`](../packages/host/directory-picker-auto) | `host` | [`client-ui-directory-picker-browse`](../packages/client/ui-directory-picker-browse), [`client-ui-directory-picker-native`](../packages/client/ui-directory-picker-native), [`host-directory-picker-browse`](../packages/host/directory-picker-browse), [`host-directory-picker-native`](../packages/host/directory-picker-native), [`host-webserver`](../packages/host/webserver), [`invariants`](../packages/runtime-diagnostics/invariants) |
-| [`session-log-download`](../packages/session-query/session-log-download) | `session-query` | [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-commands`](../packages/client/ui-commands), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`commands`](../packages/interaction/commands), [`invariants`](../packages/runtime-diagnostics/invariants) |
+| [`session-log-export`](../packages/session-query/session-log-export) | `session-query` | [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-commands`](../packages/client/ui-commands), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`commands`](../packages/interaction/commands), [`invariants`](../packages/runtime-diagnostics/invariants) |
 | [`client-ui-model-selection`](../packages/client/ui-model-selection) | `client` | [`api-remotes`](../packages/api/remotes), [`client-connection`](../packages/client/connection), [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-commands`](../packages/client/ui-commands), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-input-trigger`](../packages/client/ui-input-trigger), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`invariants`](../packages/runtime-diagnostics/invariants) |
 | [`client-ui-permission-presets`](../packages/client/ui-permission-presets) | `client` | [`api-remotes`](../packages/api/remotes), [`client-connection`](../packages/client/connection), [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-schema-form`](../packages/client/schema-form), [`client-ui-commands`](../packages/client/ui-commands), [`client-ui-input-trigger`](../packages/client/ui-input-trigger), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-settings`](../packages/client/ui-settings), [`client-ui-slots`](../packages/client/ui-slots), [`invariants`](../packages/runtime-diagnostics/invariants), [`permission-presets`](../packages/interaction/permission-presets) |
 | [`client-ui-skill`](../packages/client/ui-skill) | `client` | [`api-remotes`](../packages/api/remotes), [`client-connection`](../packages/client/connection), [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-input-trigger`](../packages/client/ui-input-trigger), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`client-ui-tool`](../packages/client/ui-tool), [`invariants`](../packages/runtime-diagnostics/invariants) |

+ 10 - 10
docs/module-graph.zh.md

@@ -94,7 +94,7 @@ flowchart TD
     pkg_hooks_codex["hooks-codex"]
   end
   subgraph group_session_query["packages/session-query"]
-    pkg_session_log_download["session-log-download"]
+    pkg_session_log_export["session-log-export"]
     pkg_session_query["session-query"]
     pkg_session_query_sqlite["session-query-sqlite"]
     pkg_tool_session_query["tool-session-query"]
@@ -1365,14 +1365,14 @@ flowchart TD
   pkg_host_directory_picker_auto --> pkg_host_directory_picker_native
   pkg_host_directory_picker_auto --> pkg_host_webserver
   pkg_host_directory_picker_auto --> pkg_invariants
-  pkg_session_log_download --> pkg_client_locale
-  pkg_session_log_download --> pkg_client_runtime
-  pkg_session_log_download --> pkg_client_ui_commands
-  pkg_session_log_download --> pkg_client_ui_conversation
-  pkg_session_log_download --> pkg_client_ui_primitives
-  pkg_session_log_download --> pkg_client_ui_slots
-  pkg_session_log_download --> pkg_commands
-  pkg_session_log_download --> pkg_invariants
+  pkg_session_log_export --> pkg_client_locale
+  pkg_session_log_export --> pkg_client_runtime
+  pkg_session_log_export --> pkg_client_ui_commands
+  pkg_session_log_export --> pkg_client_ui_conversation
+  pkg_session_log_export --> pkg_client_ui_primitives
+  pkg_session_log_export --> pkg_client_ui_slots
+  pkg_session_log_export --> pkg_commands
+  pkg_session_log_export --> pkg_invariants
   pkg_client_ui_model_selection --> pkg_api_remotes
   pkg_client_ui_model_selection --> pkg_client_connection
   pkg_client_ui_model_selection --> pkg_client_locale
@@ -1633,7 +1633,7 @@ flowchart TD
 | [`client-ui-tool`](../packages/client/ui-tool) | `client` | [`api-remotes`](../packages/api/remotes), [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`invariants`](../packages/runtime-diagnostics/invariants) |
 | [`client-ui-workflow-run`](../packages/client/ui-workflow-run) | `client` | [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`invariants`](../packages/runtime-diagnostics/invariants), [`session`](../packages/core/session), [`tool-workflow`](../packages/workflow/tool-workflow), [`workflow`](../packages/workflow/workflow) |
 | [`host-directory-picker-auto`](../packages/host/directory-picker-auto) | `host` | [`client-ui-directory-picker-browse`](../packages/client/ui-directory-picker-browse), [`client-ui-directory-picker-native`](../packages/client/ui-directory-picker-native), [`host-directory-picker-browse`](../packages/host/directory-picker-browse), [`host-directory-picker-native`](../packages/host/directory-picker-native), [`host-webserver`](../packages/host/webserver), [`invariants`](../packages/runtime-diagnostics/invariants) |
-| [`session-log-download`](../packages/session-query/session-log-download) | `session-query` | [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-commands`](../packages/client/ui-commands), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`commands`](../packages/interaction/commands), [`invariants`](../packages/runtime-diagnostics/invariants) |
+| [`session-log-export`](../packages/session-query/session-log-export) | `session-query` | [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-commands`](../packages/client/ui-commands), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`commands`](../packages/interaction/commands), [`invariants`](../packages/runtime-diagnostics/invariants) |
 | [`client-ui-model-selection`](../packages/client/ui-model-selection) | `client` | [`api-remotes`](../packages/api/remotes), [`client-connection`](../packages/client/connection), [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-commands`](../packages/client/ui-commands), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-input-trigger`](../packages/client/ui-input-trigger), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`invariants`](../packages/runtime-diagnostics/invariants) |
 | [`client-ui-permission-presets`](../packages/client/ui-permission-presets) | `client` | [`api-remotes`](../packages/api/remotes), [`client-connection`](../packages/client/connection), [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-schema-form`](../packages/client/schema-form), [`client-ui-commands`](../packages/client/ui-commands), [`client-ui-input-trigger`](../packages/client/ui-input-trigger), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-settings`](../packages/client/ui-settings), [`client-ui-slots`](../packages/client/ui-slots), [`invariants`](../packages/runtime-diagnostics/invariants), [`permission-presets`](../packages/interaction/permission-presets) |
 | [`client-ui-skill`](../packages/client/ui-skill) | `client` | [`api-remotes`](../packages/api/remotes), [`client-connection`](../packages/client/connection), [`client-locale`](../packages/client/locale), [`client-runtime`](../packages/client/runtime), [`client-ui-input-trigger`](../packages/client/ui-input-trigger), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-slots`](../packages/client/ui-slots), [`client-ui-tool`](../packages/client/ui-tool), [`invariants`](../packages/runtime-diagnostics/invariants) |

+ 1 - 1
packages/bundle/web-app/cordis.patch.yml

@@ -67,7 +67,7 @@
 
     # Browser Session export: `/export` command plus the shared download dialog.
     - id: session-log-download
-      name: '@deepseek-ai/dsh-session-log-download'
+      name: '@deepseek-ai/dsh-session-log-export'
 
     - id: workspace
       name: '@deepseek-ai/dsh-workspace'

+ 1 - 1
packages/bundle/web-app/package.json

@@ -95,7 +95,7 @@
     "@deepseek-ai/dsh-host-webserver": "workspace:^",
     "@deepseek-ai/dsh-message-feedback": "workspace:^",
     "@deepseek-ai/dsh-session-projection-cache": "workspace:^",
-    "@deepseek-ai/dsh-session-log-download": "workspace:^",
+    "@deepseek-ai/dsh-session-log-export": "workspace:^",
     "@deepseek-ai/dsh-session-stats": "workspace:^",
     "@deepseek-ai/dsh-storage": "workspace:^",
     "@deepseek-ai/dsh-storage-domain": "workspace:^",

+ 2 - 2
packages/session-query/README.i18n.yaml

@@ -2,5 +2,5 @@
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
 #   pnpm run verify-translation-pairing --write packages/session-query/README.md
-README.md: 75f447f667261fe3005d1a95e285120bebe6338d
-README.zh.md: b89ca7441ed825c7d76e9fec4dd6c400c6c6811e
+README.md: b955a7f6e19f5a49e48e564523cc343e32816dd2
+README.zh.md: d1e6c645050f4e58f9409e328552b5f9209bc3a5

+ 1 - 1
packages/session-query/README.md

@@ -8,7 +8,7 @@ This family provides authorized retrieval over live and durable session logs, in
 |---|---|---|
 | [`session-query/`](session-query/README.md) | Defines trusted reads, relationship queries, and search operations | `ctx.sessionQuery` |
 | [`session-query-sqlite/`](session-query-sqlite/README.md) | Implements session queries with SQLite full-text search | `ctx.sessionQuery` |
-| [`session-log-download/`](session-log-download/README.md) | Adds the Web `/export` command, shared browser download state, and result modal over the Host ZIP endpoint | `ctx.sessionLogDownload` |
+| [`session-log-export/`](session-log-export/README.md) | Adds the Web `/export` command, shared browser download state, and result modal over the Host ZIP endpoint | `ctx.sessionLogDownload` |
 | [`tool-session-query/`](tool-session-query/README.md) | Exposes workspace-authorized session queries to the model | registers on `ctx.tools` |
 
 The subsystem reference — logical records, bounded reads, traces, filters, result pages — is [docs/subsystems/session-query.md](../../docs/subsystems/session-query.md).

+ 1 - 1
packages/session-query/README.zh.md

@@ -8,7 +8,7 @@
 |---|---|---|
 | [`session-query/`](session-query/README.md) | 定义可信读取、关系查询和搜索操作 | `ctx.sessionQuery` |
 | [`session-query-sqlite/`](session-query-sqlite/README.md) | 使用 SQLite 全文搜索实现会话查询 | `ctx.sessionQuery` |
-| [`session-log-download/`](session-log-download/README.md) | 在 Host ZIP 端点之上增加 Web `/export` 命令、共享浏览器下载状态和结果弹窗 | `ctx.sessionLogDownload` |
+| [`session-log-export/`](session-log-export/README.md) | 在 Host ZIP 端点之上增加 Web `/export` 命令、共享浏览器下载状态和结果弹窗 | `ctx.sessionLogDownload` |
 | [`tool-session-query/`](tool-session-query/README.md) | 向模型公开经过工作区授权的会话查询 | 注册到 `ctx.tools` |
 
 子系统参考——逻辑记录、有界读取、追踪、筛选器、结果页——见 [docs/subsystems/session-query.md](../../docs/subsystems/session-query.md)。

+ 0 - 3
packages/session-query/session-log-download/tsdown.config.ts

@@ -1,3 +0,0 @@
-import { clientBundle } from '../../client/tsdown.client.ts'
-
-export default clientBundle('@deepseek-ai/dsh-session-log-download', ['lib/types/index.js', 'lib/types/invariant.js'])

+ 3 - 3
packages/session-query/session-log-download/README.i18n.yaml → packages/session-query/session-log-export/README.i18n.yaml

@@ -1,6 +1,6 @@
 # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
 # side as of the last confirmed-consistent state. Both languages carry equal authority;
 # after editing either side, bring the other along and re-record with:
-#   pnpm run verify-translation-pairing --write packages/session-query/session-log-download/README.md
-README.md: eb8f26e4c44abfea14a555555ceec4ad1da48c18
-README.zh.md: a1185315469518eb29acaa1a9c9010aa6b4660b4
+#   pnpm run verify-translation-pairing --write packages/session-query/session-log-export/README.md
+README.md: f3625338e85a38ab279c5fa4700a7a9e1124cfb3
+README.zh.md: 5a2fa86d126f6bda808d3036bddc0e26fd310690

+ 2 - 2
packages/session-query/session-log-download/README.md → packages/session-query/session-log-export/README.md

@@ -1,4 +1,4 @@
-# @deepseek-ai/dsh-session-log-download
+# @deepseek-ai/dsh-session-log-export
 
 English | [中文](README.zh.md)
 
@@ -21,7 +21,7 @@ The modal reports preparation, download start, or failure. Closing it does not c
 
 ```yaml
 - id: session-log-download
-  name: '@deepseek-ai/dsh-session-log-download'
+  name: '@deepseek-ai/dsh-session-log-export'
 ```
 
 The Web bundle mounts the package beside `dsh-host-apiproxy`, `dsh-commands`, `dsh-client-ui-commands`, and `dsh-client-ui-conversation`. The package contributes its button and modal to the right-aligned `conversation.session.header.utilities` list, independently of the title-adjacent mode, Subagent, and Task entries in `conversation.session.header.actions`; Trajectory carries no export control.

+ 2 - 2
packages/session-query/session-log-download/README.zh.md → packages/session-query/session-log-export/README.zh.md

@@ -1,4 +1,4 @@
-# @deepseek-ai/dsh-session-log-download
+# @deepseek-ai/dsh-session-log-export
 
 [English](README.md) | 中文
 
@@ -21,7 +21,7 @@ Host 下载端点会在 `readRaw` 前 flush 活动的根 Session,因此斜杠
 
 ```yaml
 - id: session-log-download
-  name: '@deepseek-ai/dsh-session-log-download'
+  name: '@deepseek-ai/dsh-session-log-export'
 ```
 
 Web bundle 将本包与 `dsh-host-apiproxy`、`dsh-commands`、`dsh-client-ui-commands` 和 `dsh-client-ui-conversation` 一起挂载。本包把按钮和弹窗贡献到最右侧的 `conversation.session.header.utilities` 列表,与标题旁 `conversation.session.header.actions` 中的模式、Subagent 和 Task 配置项相互独立;Trajectory 不包含导出入口。

+ 2 - 2
packages/session-query/session-log-download/package.json → packages/session-query/session-log-export/package.json

@@ -1,12 +1,12 @@
 {
-  "name": "@deepseek-ai/dsh-session-log-download",
+  "name": "@deepseek-ai/dsh-session-log-export",
   "description": "Web Session-log export command and shared download dialog",
   "version": "0.0.1-rc.3",
   "publishConfig": { "access": "restricted" },
   "repository": {
     "type": "git",
     "url": "git+https://github.com/deepseek-ai/deepseek-harness.git",
-    "directory": "packages/session-query/session-log-download"
+    "directory": "packages/session-query/session-log-export"
   },
   "type": "module",
   "main": "lib/index.js",

+ 0 - 0
packages/session-query/session-log-download/src/client/Dialog.tsx → packages/session-query/session-log-export/src/client/Dialog.tsx


+ 0 - 0
packages/session-query/session-log-download/src/client/HeaderAction.module.css → packages/session-query/session-log-export/src/client/HeaderAction.module.css


+ 0 - 0
packages/session-query/session-log-download/src/client/HeaderAction.tsx → packages/session-query/session-log-export/src/client/HeaderAction.tsx


+ 0 - 0
packages/session-query/session-log-download/src/client/controller.ts → packages/session-query/session-log-export/src/client/controller.ts


+ 0 - 0
packages/session-query/session-log-download/src/client/index.ts → packages/session-query/session-log-export/src/client/index.ts


+ 0 - 0
packages/session-query/session-log-download/src/client/locales.ts → packages/session-query/session-log-export/src/client/locales.ts


+ 0 - 0
packages/session-query/session-log-download/src/css-modules.d.ts → packages/session-query/session-log-export/src/css-modules.d.ts


+ 0 - 0
packages/session-query/session-log-download/src/index.ts → packages/session-query/session-log-export/src/index.ts


+ 2 - 2
packages/session-query/session-log-download/src/invariant.ts → packages/session-query/session-log-export/src/invariant.ts

@@ -1,10 +1,10 @@
-/** Package invariant companion for `@deepseek-ai/dsh-session-log-download`. */
+/** Package invariant companion for `@deepseek-ai/dsh-session-log-export`. */
 
 /* jscpd:ignore-start */
 import type { Context } from '@deepseek-ai/cordis'
 import type { InvariantInstaller } from '@deepseek-ai/dsh-invariants'
 
-const PACKAGE_NAME = '@deepseek-ai/dsh-session-log-download'
+const PACKAGE_NAME = '@deepseek-ai/dsh-session-log-export'
 
 export const name = 'session-export-invariant'
 export const inject = ['invariants']

+ 0 - 0
packages/session-query/session-log-download/tests/client-apply.client.spec.tsx → packages/session-query/session-log-export/tests/client-apply.client.spec.tsx


+ 0 - 0
packages/session-query/session-log-download/tests/command.client.spec.ts → packages/session-query/session-log-export/tests/command.client.spec.ts


+ 0 - 0
packages/session-query/session-log-download/tests/controller.client.spec.ts → packages/session-query/session-log-export/tests/controller.client.spec.ts


+ 0 - 0
packages/session-query/session-log-download/tests/dialog.client.spec.tsx → packages/session-query/session-log-export/tests/dialog.client.spec.tsx


+ 0 - 0
packages/session-query/session-log-download/tests/header-action.client.spec.tsx → packages/session-query/session-log-export/tests/header-action.client.spec.tsx


+ 2 - 2
packages/session-query/session-log-download/tests/invariant.client.spec.ts → packages/session-query/session-log-export/tests/invariant.client.spec.ts

@@ -2,7 +2,7 @@ import { describe, expect, it, vi } from 'vitest'
 import { Context } from '@deepseek-ai/cordis'
 import { apply, inject, name } from '../src/invariant.ts'
 
-describe('@deepseek-ai/dsh-session-log-download/invariant', () => {
+describe('@deepseek-ai/dsh-session-log-export/invariant', () => {
   it('registers the package-owned empty companion', async () => {
     const register = vi.fn(() => vi.fn())
     const ctx = new Context()
@@ -10,7 +10,7 @@ describe('@deepseek-ai/dsh-session-log-download/invariant', () => {
     const dispose = await apply(ctx)
     expect(name).toBe('session-export-invariant')
     expect(inject).toEqual(['invariants'])
-    expect(register).toHaveBeenCalledWith('@deepseek-ai/dsh-session-log-download', expect.any(Function))
+    expect(register).toHaveBeenCalledWith('@deepseek-ai/dsh-session-log-export', expect.any(Function))
     dispose()
   })
 })

+ 3 - 3
packages/session-query/session-log-download/tests/loader-composition.client.spec.ts → packages/session-query/session-log-export/tests/loader-composition.client.spec.ts

@@ -9,7 +9,7 @@ import Include from '@deepseek-ai/cordis-plugin-include'
 import type { Agent } from '@deepseek-ai/dsh-agent'
 import CommandRuntime from '@deepseek-ai/dsh-commands'
 import SessionStore, { SessionId } from '@deepseek-ai/dsh-session'
-import * as SessionLogDownload from '@deepseek-ai/dsh-session-log-download'
+import * as SessionLogDownload from '@deepseek-ai/dsh-session-log-export'
 
 let root: string | undefined
 let context: Context | undefined
@@ -28,7 +28,7 @@ describe('session-log-download real Loader composition', () => {
     await writeFile(configPath, [
       "- name: '@deepseek-ai/dsh-session'",
       "- name: '@deepseek-ai/dsh-commands'",
-      "- name: '@deepseek-ai/dsh-session-log-download'",
+      "- name: '@deepseek-ai/dsh-session-log-export'",
       '',
     ].join('\n'))
 
@@ -39,7 +39,7 @@ describe('session-log-download real Loader composition', () => {
     const modules = new Map<string, unknown>([
       ['@deepseek-ai/dsh-session', SessionStore],
       ['@deepseek-ai/dsh-commands', CommandRuntime],
-      ['@deepseek-ai/dsh-session-log-download', SessionLogDownload],
+      ['@deepseek-ai/dsh-session-log-export', SessionLogDownload],
     ])
     context.loader.internal = {
       version: 'v2',

+ 0 - 0
packages/session-query/session-log-download/tsconfig.json → packages/session-query/session-log-export/tsconfig.json


+ 3 - 0
packages/session-query/session-log-export/tsdown.config.ts

@@ -0,0 +1,3 @@
+import { clientBundle } from '../../client/tsdown.client.ts'
+
+export default clientBundle('@deepseek-ai/dsh-session-log-export', ['lib/types/index.js', 'lib/types/invariant.js'])

+ 3 - 3
pnpm-lock.yaml

@@ -1411,9 +1411,9 @@ importers:
       '@deepseek-ai/dsh-message-feedback':
         specifier: workspace:^
         version: link:../../feedback/message-feedback
-      '@deepseek-ai/dsh-session-log-download':
+      '@deepseek-ai/dsh-session-log-export':
         specifier: workspace:^
-        version: link:../../session-query/session-log-download
+        version: link:../../session-query/session-log-export
       '@deepseek-ai/dsh-session-projection-cache':
         specifier: workspace:^
         version: link:../../session/session-projection-cache
@@ -5848,7 +5848,7 @@ importers:
         specifier: workspace:^
         version: link:../../subagent/subagent
 
-  packages/session-query/session-log-download:
+  packages/session-query/session-log-export:
     devDependencies:
       '@deepseek-ai/cordis':
         specifier: workspace:^

+ 1 - 1
scripts/gen-cordis-catalog.ts

@@ -147,7 +147,7 @@ export const SERVICE_WALK_EXEMPTIONS: Record<string, string> = {
   modelDirectories: 'client-side interface-typed browser service — packages/client/ui-model-selection/README.md owns the API',
   modules: 'client-side interface-typed browser service — packages/client/modules/README.md owns the API',
   remote: 'client-side interface-typed gateway accessor (ClientRemote) — packages/api/gateway/README.md owns the API',
-  sessionLogDownload: 'client-side browser download controller — packages/session-query/session-log-download/README.md owns the API',
+  sessionLogDownload: 'client-side browser download controller — packages/session-query/session-log-export/README.md owns the API',
   inputTriggers: 'client-side interface-typed browser service — packages/client/ui-input-trigger/README.md owns the API',
   timer: 'client-side dynamic-package timer service — packages/extensions/cordis-client-runner/README.md owns the API',
   slots: 'client-side interface-typed browser service — packages/client/runtime/README.md owns the API',

+ 1 - 1
tsconfig.client.json

@@ -85,7 +85,7 @@
     { "path": "./packages/client/ui-settings-plugins" },
     { "path": "./packages/client/ui-user-questions" },
     { "path": "./packages/client/ui-trajectory" },
-    { "path": "./packages/session-query/session-log-download" },
+    { "path": "./packages/session-query/session-log-export" },
     { "path": "./packages/client/ui-theme" },
     { "path": "./packages/client/ui-settings" },
     { "path": "./packages/client/ui-settings-general" },