dsh-diary-memory 0.1.0 → 0.1.2

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 (67) hide show
  1. package/README.md +71 -15
  2. package/cordis.patch.yml +0 -1
  3. package/lib/bailian-client.js +8 -3
  4. package/lib/bailian-client.js.map +1 -1
  5. package/lib/client/choices.d.ts +53 -0
  6. package/lib/client/choices.js +51 -0
  7. package/lib/client/choices.js.map +1 -0
  8. package/lib/client/controller.d.ts +40 -0
  9. package/lib/client/controller.js +130 -0
  10. package/lib/client/controller.js.map +1 -0
  11. package/lib/client/index.d.ts +5 -0
  12. package/lib/client/index.js +19 -0
  13. package/lib/client/index.js.map +1 -0
  14. package/lib/client/page.d.ts +5 -0
  15. package/lib/client/page.js +24 -0
  16. package/lib/client/page.js.map +1 -0
  17. package/lib/client.js +430 -0
  18. package/lib/client.js.map +7 -0
  19. package/lib/config.d.ts +63 -1
  20. package/lib/config.js +33 -4
  21. package/lib/config.js.map +1 -1
  22. package/lib/diary-runtime.d.ts +10 -0
  23. package/lib/diary-runtime.js +65 -0
  24. package/lib/diary-runtime.js.map +1 -0
  25. package/lib/index.d.ts +3 -3
  26. package/lib/index.js +7 -2
  27. package/lib/index.js.map +1 -1
  28. package/lib/memory-store.d.ts +6 -3
  29. package/lib/memory-store.js +6 -3
  30. package/lib/memory-store.js.map +1 -1
  31. package/lib/model-parameters.d.ts +7 -0
  32. package/lib/model-parameters.js +38 -0
  33. package/lib/model-parameters.js.map +1 -0
  34. package/lib/orchestrator.js +4 -66
  35. package/lib/orchestrator.js.map +1 -1
  36. package/lib/retrieval-service.d.ts +12 -3
  37. package/lib/retrieval-service.js +25 -13
  38. package/lib/retrieval-service.js.map +1 -1
  39. package/lib/session-memory.d.ts +20 -0
  40. package/lib/session-memory.js +161 -0
  41. package/lib/session-memory.js.map +1 -0
  42. package/lib/session-selection.d.ts +1 -0
  43. package/lib/session-selection.js +6 -0
  44. package/lib/session-selection.js.map +1 -0
  45. package/lib/sqlite.d.ts +25 -0
  46. package/lib/sqlite.js +64 -0
  47. package/lib/sqlite.js.map +1 -0
  48. package/lib/tools.d.ts +1 -0
  49. package/lib/tools.js +3 -0
  50. package/lib/tools.js.map +1 -1
  51. package/package.json +140 -26
  52. package/src/bailian-client.ts +7 -3
  53. package/src/client/choices.ts +66 -0
  54. package/src/client/controller.ts +108 -0
  55. package/src/client/index.ts +26 -0
  56. package/src/client/page.tsx +100 -0
  57. package/src/config.ts +41 -4
  58. package/src/diary-runtime.ts +62 -0
  59. package/src/index.ts +11 -5
  60. package/src/memory-store.ts +10 -6
  61. package/src/model-parameters.ts +32 -0
  62. package/src/orchestrator.ts +4 -57
  63. package/src/retrieval-service.ts +27 -14
  64. package/src/session-memory.ts +151 -0
  65. package/src/session-selection.ts +4 -0
  66. package/src/sqlite.ts +78 -0
  67. package/src/tools.ts +4 -0
package/README.md CHANGED
@@ -2,26 +2,70 @@
2
2
 
3
3
  TypeScript 编写的 DSH 插件,为长期陪伴和个人数字分身保存日记、延续情感与自我反思。支持百炼 Embedding + Rerank、SQLite 本地记忆、自动召回,以及 DSH 原生安全压缩。
4
4
 
5
- 目标运行时:**DSH `0.2.1-rc.3`**,已对照该版本原生实现和 [DeepSeek Harness 官方仓库](https://github.com/deepseek-ai/deepseek-harness)。`engines.dsh` 限定了这个版本;升级 DSH 后应先用相应 SDK 验证,再调整版本范围。
5
+ 兼容范围:**DSH `>=0.2.1-rc.2 <0.3.0`**。运行时声明和 DSH SDK 的 peer 依赖均使用这个范围。开发构建使用 `0.2.1-rc.3` SDK;接口依据 [DeepSeek Harness 官方仓库](https://github.com/deepseek-ai/deepseek-harness)。
6
6
 
7
7
  ## 安装与开始使用
8
8
 
9
- 1. 在此项目执行 `npm ci`、`npm run build`;分发包已包含编译后的 `lib/`,使用分发包时不需要编译。
10
- 2. 在 DSH 的插件管理器中安装本地组合包,目标选择这个项目目录或生成的 `dsh-diary-memory-0.1.0.tgz`。也可以让 DSH 的插件管理工具执行:
9
+ ### 通过 npm 安装(推荐)
11
10
 
12
- ```json
13
- { "action": "install_bundle", "target": "E:\\Project\\dsh-diary-memory" }
14
- ```
11
+ 插件已发布到 [npm:dsh-diary-memory](https://www.npmjs.com/package/dsh-diary-memory),可直接用 DSH 命令安装,无需克隆源码或编译。
15
12
 
16
- 由 DSH 的插件管理器维护 profile 配置与依赖。安装结果显示 `restart-required` 时重启 DSH。这是组合包安装,不是 MCP 服务器配置。
13
+ **DSH 桌面端:**先至少启动一次桌面端以初始化 profile,再完全退出应用,使用桌面端附带的 `dsh` 命令执行:
17
14
 
18
- 3. 在插件组件 `diary-memory` 的配置中填写百炼 `apiKey`,或给 **DSH 进程**设置 `DSH_DIARY_BAILIAN_API_KEY` / `DASHSCOPE_API_KEY` 环境变量。Key 在 schema 中标记为 `secret`,不要写进仓库。
19
- 4. 新建会话,选择 **“陪伴日记”**(preset ID `diary-companion`),并配置正常的 DSH 会话模型。日记默认使用该模型生成;百炼负责向量与重排。
20
- 5. 默认完成 20 轮后,在下一次 `agent/pre-step` 触发日记压缩,保留最近 2 个用户输入及其后续消息。`/compact` 手动压缩和原生上下文溢出恢复也会先保存日记。
15
+ ```powershell
16
+ dsh plugin --profile desktop add dsh-diary-memory
17
+ ```
18
+
19
+ 安装完成后重新打开 DSH。管理 `desktop` profile 应使用桌面端附带的命令;通过 npm 单独安装的 DSH CLI 不能修改这个 profile。桌面端的命令与 profile 归属见 [官方说明](https://github.com/deepseek-ai/deepseek-harness/blob/main/apps/desktop/README.zh.md#bundled-command-runtime)。
20
+
21
+ **Web 或其他 CLI profile:**将 `--profile` 设为实际使用的 profile 名称。例如,安装到 `web`:
22
+
23
+ ```sh
24
+ dsh plugin --profile web add dsh-diary-memory
25
+ ```
26
+
27
+ 插件按 profile 安装;安装到 `web` 不会同时装入 `desktop`。如需固定版本,可在包名后追加版本号。由 DSH 管理对应 profile 的依赖与组合包配置;安装结果提示 `restart-required` 时重启对应的 DSH 进程。
28
+
29
+ **0.1.2** 修复了桌面端安装时 `better_sqlite3.node` 缺失 / `ERR_PNPM_IGNORED_BUILDS` 的问题,并加入已有会话选择与专用日记模型。若 npm 的最新版本仍低于 `0.1.2`,请先使用下面的 GitHub Releases 安装包。
21
30
 
22
- 安装包会新增预设,不会给现有的工作型预设添加记忆。已有会话保留原先的预设组合;要用于已有的自定义数字分身,应在其预设的原生 compaction 隔离组中,把 `@deepseek-ai/dsh-compaction-basic` 替换为 `dsh-diary-memory/compaction`,并在预设中加入 `dsh-diary-memory/tools`。保留自己的 persona 与其他工具。**不要在同一隔离组同时启用两个 compaction 提供方。**
31
+ ### 首次配置
23
32
 
24
- `better-sqlite3` 是本机原生模块。安装器若提示它的构建脚本待处理,应按 DSH 的提示处理;其二进制必须匹配 DSH **宿主 Node.js** 的 ABI。开发时如果 npm 禁用了安装脚本,可针对这个依赖执行 `npm rebuild better-sqlite3 --ignore-scripts=false`。无需改用 Electron 渲染进程的 ABI。
33
+ 1. 打开 DSH **设置 → 陪伴日记**,在密码输入框中填写百炼 **API Key**。Embedding 与 Rerank 的模型名、向量维度、召回数量和各自的 JSON 参数均可手填。
34
+ 2. 在 **指定已有会话** 中,按标题或 ID 搜索并勾选要使用记忆的聊天。原会话的人设、聊天模型和工具保持原样。无需新建会话或切换预设。
35
+ 3. 在 **专用写日记模型** 中选择一个已配置的 DSH 模型,或手填 DSH 提供方路由名与模型名。这个模型只负责写日记;留空则跟随原聊天模型。这里只配置模型,不添加日记生成的温度、Top P 等参数。
36
+ 4. 点击 **保存配置**,回到选中的会话继续聊天。默认完成 20 轮后,在下一次 `agent/pre-step` 保存日记并压缩,保留最近 2 个用户输入及其后续消息。`/compact` 手动压缩和原生上下文溢出恢复也会先保存日记。
37
+
38
+ 如果希望从新会话开始,也可选择 **“陪伴日记”**预设(ID `diary-companion`);这个预设自带记忆,不必再勾选。已选会话和该预设共用配置的记忆空间。取消勾选已有会话只停止其日记写入和自动召回,不会删除已保存的日记。
39
+
40
+ 密钥只写入,不回显;留空保存其他字段会保留原 Key。修改只提交编辑过的字段,避免覆盖未回传的密钥。保存失败或出现版本冲突时保留草稿。也可以给 **DSH 进程**设置 `DSH_DIARY_BAILIAN_API_KEY` / `DASHSCOPE_API_KEY` 环境变量。
41
+
42
+ 指定已有会话后,插件接入它原来的原生压缩器,复用 DSH 的锁、工具边界、缩小检查和持久化流程,不切换已经开始的预设。当前仍在上下文 surface 上的历史可在下一次正常压缩时写成日记;**先前已被其他压缩器移出 surface 的旧消息不会自动批量导入**。未勾选的会话继续使用原压缩方式。
43
+
44
+ 自行组合预设时,仍可在 compaction 隔离组中使用 `dsh-diary-memory/compaction`,并加入 `dsh-diary-memory/tools`。**不要在同一隔离组同时启用两个 compaction 提供方。**
45
+
46
+ ### 从本地安装或开发
47
+
48
+ 也可从 [GitHub Releases](https://github.com/cyhddyx/dsh-diary-memory/releases) 下载已编译的 `.tgz` 安装包,在下载目录执行:
49
+
50
+ ```powershell
51
+ dsh plugin --profile desktop add ./dsh-diary-memory-0.1.2.tgz
52
+ ```
53
+
54
+ 桌面端仍需先完全退出。若从源码开始,先生成安装包,再用上面的命令安装:
55
+
56
+ ```powershell
57
+ git clone https://github.com/cyhddyx/dsh-diary-memory.git
58
+ cd dsh-diary-memory
59
+ npm ci
60
+ npm run build
61
+ npm pack
62
+ ```
63
+
64
+ 也可以在 DSH 的插件管理器中添加 npm 包名 `dsh-diary-memory`、本地 `.tgz` 或已构建的源码目录。
65
+
66
+ 运行时优先使用可用的 `better-sqlite3`;未安装、缺少二进制或 ABI 不匹配时,使用 DSH 运行时自带的 `node:sqlite`。两者使用同一 SQLite 文件和向量格式,无需迁移。`better-sqlite3` 已改为可选 peer,不再是安装时必须构建的依赖,因此无需为此插件批准或重建原生模块。
67
+
68
+ 桌面端附带的 `dsh` 实际由 Electron 的 Node 环境执行;系统 Node 的 ABI 可能不同。`0.1.2` 的内置后端已在桌面端 Electron `44.7.0` / Node `24.21.0` / ABI `149` 下验证数据库持久化与向量检索。磁盘、权限和数据库损坏错误仍会报错,不会通过切换后端掩盖。
25
69
 
26
70
  ## 配置
27
71
 
@@ -36,8 +80,13 @@ TypeScript 编写的 DSH 插件,为长期陪伴和个人数字分身保存日
36
80
  namespace: companion
37
81
  embeddingModel: text-embedding-v4
38
82
  embeddingDimensions: 1024
83
+ embeddingParameters: {}
39
84
  rerankModel: gte-rerank-v2
85
+ rerankParameters: {}
40
86
  autoRecall: true
87
+ sessionIds: []
88
+ diaryProvider: ''
89
+ diaryModel: ''
41
90
  ```
42
91
 
43
92
  DSH 的 `config` 覆盖会替换该行的整个配置;未写出的插件字段由 schema 默认值补全。优先用原生配置页面编辑。
@@ -50,9 +99,12 @@ DSH 的 `config` 覆盖会替换该行的整个配置;未写出的插件字段
50
99
  | `namespace` | `companion` | 数字分身的独立记忆空间;同一空间跨会话共享 |
51
100
  | `databasePath` | 当前 profile 的 `diary-memory/memories.sqlite3` | SQLite 文件;使用 `DSH_PROFILE_DIR`,否则回退到 DSH home 中的 profile 目录 |
52
101
  | `embeddingModel` / `embeddingDimensions` | `text-embedding-v4` / `1024` | 文档和查询使用同一向量空间 |
102
+ | `embeddingParameters` | `{}` | 原样传给 Embedding API 的额外 `parameters` JSON 对象 |
53
103
  | `rerankModel` | `gte-rerank-v2` | 候选日记的重排模型 |
104
+ | `rerankParameters` | `{}` | 原样传给 Rerank API 的额外 `parameters` JSON 对象 |
54
105
  | `candidateCount` / `recallCount` | `30` / `6` | 余弦候选数量 / 重排后返回数量 |
55
106
  | `diaryProvider` / `diaryModel` | 空 / 空 | 同时设置可指定 DSH 日记模型,否则继承会话路由 |
107
+ | `sessionIds` | `[]` | 启用记忆的已有会话 ID;图形页可直接勾选 |
56
108
  | `diaryMaxTokens` | `3000` | 日记生成输出预算;截断输出不入库 |
57
109
  | `diaryInputMaxChars` | `200000` | 日记生成输入上限;超限保留上下文并报错,不静默截掉历史 |
58
110
  | `recentDiaryCount` | `3` | 日记生成参考的最近已提交日记数 |
@@ -61,7 +113,9 @@ DSH 的 `config` 覆盖会替换该行的整个配置;未写出的插件字段
61
113
 
62
114
  轮次计数来自 `sessionProjections` 对 `turn/end` 的增量折叠:成功完成的 turn 计一次,多个工具步骤不额外计数。写入压缩 checkpoint 后重新计数。轮次阈值之外,DSH 原生 token 压力与溢出保护仍然启用。
63
115
 
64
- 不同 `namespace` 不会相互检索。默认新预设里的会话共享 `companion` 空间;不同人物或用途应配置不同的空间与组合。修改 embedding 的端点、模型或维度后,旧向量不会被拿来混算;如需继续使用旧记忆,应恢复原配置。当前版本不提供自动重建向量索引。
116
+ 模型参数编辑器接收 JSON **对象**,例如 Embedding 的 `{"output_type":"dense"}`,以及 Rerank 的 `{"return_documents":false}`。只应填写所选模型支持的参数。`dimension` 由“向量维度”控制,`top_n` 由“召回条数”控制,`text_type` 由入库和召回自动设置,不能在额外参数中覆盖。本地索引只支持 dense 向量。
117
+
118
+ 不同 `namespace` 不会相互检索。默认已选会话与新预设里的会话共享 `companion` 空间;不同人物或用途应配置不同的空间与组合。修改 Embedding 的端点、模型、维度或额外参数后,旧向量不会被拿来混算;如需继续使用旧记忆,应恢复原配置。额外参数按规范化 JSON 参与向量空间标识;空参数保留 `0.1.0` 的标识,升级不会使默认配置的旧向量失效。当前版本不提供自动重建向量索引。
65
119
 
66
120
  ## 日记与情感连续性
67
121
 
@@ -89,6 +143,8 @@ DSH 选定并验证 surface 范围,写 compaction/start(原生锁)
89
143
  → SQLite 标记 committed,开放召回
90
144
  ```
91
145
 
146
+ 已有会话通过原生 `agentPresets.serviceFor(agent, 'compaction')` 找到原压缩器,按会话 ID 路由同一个日记扩展点。一次操作固定其选中状态,途中修改配置不会将两个压缩流程混合。卸载时取消并等待日记操作完成、移除该 Agent scope 的召回工具,再恢复原压缩器的方法。
147
+
92
148
  同时使用 `toolPairingBalancedBefore` 和 `toolPairingBalancedAfter`。范围按 **surface 位置**选择与记录,不按数值 seq 排序;重复压缩后,起始 seq 大于结束 seq 仍可能是合法范围。没有安全范围时跳过,不补造工具结果、不截断尚未完成的调用。
93
149
 
94
150
  SQLite 与 DSH 的会话日志是两个存储,无法提供跨存储 ACID 事务。这里实现的是**可恢复的提交协议**:
@@ -139,9 +195,9 @@ npm run build
139
195
  npm pack
140
196
  ```
141
197
 
142
- `src/` 为 TypeScript,`lib/` 为 ESM、声明与 source map。开发依赖固定使用官方 `0.2.1-rc.3` SDK;分发包依赖 DSH 提供的原生模块,不附带一套 DSH。
198
+ `src/` 为 TypeScript,`lib/` 包含 Host ESM、声明、source map 与 DSH 模块工厂格式的 `client.js`。浏览器页面复用 DSH 的原生设置组件和 `configForms` 读写服务。开发依赖固定使用官方 `0.2.1-rc.3` SDK 作为构建基线;分发包的兼容范围为 `>=0.2.1-rc.2 <0.3.0`,依赖 DSH 提供的原生模块,不附带一套 DSH。
143
199
 
144
- 测试使用真实的 Cordis、Session、sessionProjections、TokenMeter 和 BasicCompactionEngine;LLM 与百炼使用测试提供方,另外通过本地 HTTP 服务器验证原生 fetch 请求结构。覆盖工具边界、向量隔离、rerank、同会话并发、手动/自动/溢出压缩、失败重试、取消、SQLite 重开与日志重放恢复。没有使用真实 Key,也没有把真实个人会话传给云服务。
200
+ 测试分别在 `0.2.1-rc.2` 和 `0.2.1-rc.3` SDK 下运行,使用真实的 Cordis、Session、sessionProjections、TokenMeter、BasicCompactionEngine 和隔离预设注册表;LLM 与百炼使用测试提供方,另外通过本地 HTTP 服务器验证原生 fetch 请求结构。覆盖新预设与指定已有会话的工具边界、向量隔离、rerank、同会话并发、手动/自动/溢出压缩、失败重试、取消、SQLite 重开与日志重放恢复,以及原生设置持久化和密钥脱敏、专用日记模型、会话选择、运行中配置更新、表单冲突、浏览器模块注册、两种 SQLite 后端的文件互通与事务回滚。没有使用真实 Key,也没有把真实个人会话传给云服务。
145
201
 
146
202
  参考:
147
203
 
package/cordis.patch.yml CHANGED
@@ -3,7 +3,6 @@
3
3
  - id: diary-memory
4
4
  name: dsh-diary-memory
5
5
  config:
6
- apiKey: ''
7
6
  compressionRounds: 20
8
7
  retainRounds: 2
9
8
  namespace: companion
@@ -1,4 +1,5 @@
1
1
  import { setTimeout as delay } from 'node:timers/promises';
2
+ import { stableParameters } from './model-parameters.js';
2
3
  export class BailianError extends Error {
3
4
  status;
4
5
  requestId;
@@ -29,7 +30,11 @@ export class BailianClient {
29
30
  this.fetch = fetchImpl;
30
31
  this.signal = signal;
31
32
  // Model names alone do not identify the vector space across endpoints/dimensions.
32
- this.embeddingKey = JSON.stringify([config.baseUrl, config.embeddingModel, config.embeddingDimensions]);
33
+ const space = [config.baseUrl, config.embeddingModel, config.embeddingDimensions];
34
+ // Keep the original vector-space key when no extra parameters were chosen.
35
+ if (Object.keys(config.embeddingParameters).length)
36
+ space.push(stableParameters(config.embeddingParameters));
37
+ this.embeddingKey = JSON.stringify(space);
33
38
  }
34
39
  async request(path, body, callerSignal) {
35
40
  const { config } = this;
@@ -88,7 +93,7 @@ export class BailianClient {
88
93
  const output = await this.request('/api/v1/services/embeddings/text-embedding/text-embedding', {
89
94
  model: embeddingModel,
90
95
  input: { texts: [text] },
91
- parameters: { text_type: textType, dimension: embeddingDimensions },
96
+ parameters: { ...this.config.embeddingParameters, text_type: textType, dimension: embeddingDimensions },
92
97
  }, signal);
93
98
  if (output.embeddings?.length !== 1 || output.embeddings[0].text_index !== 0)
94
99
  throw new BailianError('百炼 embedding 的 text_index 无效');
@@ -104,7 +109,7 @@ export class BailianClient {
104
109
  const output = await this.request('/api/v1/services/rerank/text-rerank/text-rerank', {
105
110
  model: this.config.rerankModel,
106
111
  input: { query, documents },
107
- parameters: { top_n: topN, return_documents: false },
112
+ parameters: { return_documents: false, ...this.config.rerankParameters, top_n: topN },
108
113
  }, signal);
109
114
  if (!Array.isArray(output.results) || output.results.length !== topN)
110
115
  throw new BailianError('百炼 rerank 结果数量无效');
@@ -1 +1 @@
1
- {"version":3,"file":"bailian-client.js","sourceRoot":"","sources":["../src/bailian-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bailian-client.js","sourceRoot":"","sources":["../src/bailian-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { ObservableSnapshot } from '@deepseek-ai/dsh-client-store';
2
+ export interface SessionChoice {
3
+ id: string;
4
+ title: string;
5
+ }
6
+ export interface WriterChoice {
7
+ provider: string;
8
+ model: string;
9
+ label: string;
10
+ }
11
+ export interface ChoicesState {
12
+ sessions: SessionChoice[];
13
+ sessionsReady: boolean;
14
+ writers: WriterChoice[];
15
+ modelsStatus: 'loading' | 'ready' | 'error';
16
+ }
17
+ export interface SessionCatalog {
18
+ phase: string;
19
+ ids: readonly string[];
20
+ byId: Record<string, {
21
+ id: string;
22
+ displayTitle: string;
23
+ origin?: string;
24
+ }>;
25
+ }
26
+ export interface ModelCatalogResult {
27
+ ok: boolean;
28
+ value?: {
29
+ groups: readonly {
30
+ id: string;
31
+ name: string;
32
+ models: readonly {
33
+ id: string;
34
+ name: string;
35
+ }[];
36
+ }[];
37
+ };
38
+ }
39
+ /** Read only the native metadata catalog; never open or upload conversation bodies. */
40
+ export declare class DiaryChoices {
41
+ private readonly catalog?;
42
+ private readonly loadModels?;
43
+ private readonly refreshSessions?;
44
+ readonly store: import("@deepseek-ai/dsh-client-store").SnapshotStore<ChoicesState>;
45
+ private readonly unsubscribe?;
46
+ private generation;
47
+ private disposed;
48
+ constructor(catalog?: ObservableSnapshot<SessionCatalog> | undefined, loadModels?: (() => Promise<ModelCatalogResult>) | undefined, refreshSessions?: (() => Promise<void>) | undefined);
49
+ private readSessions;
50
+ refreshModels(): Promise<void>;
51
+ refresh(): Promise<void>;
52
+ dispose(): void;
53
+ }
@@ -0,0 +1,51 @@
1
+ import { createSnapshotStore } from '@deepseek-ai/dsh-client-store';
2
+ /** Read only the native metadata catalog; never open or upload conversation bodies. */
3
+ export class DiaryChoices {
4
+ catalog;
5
+ loadModels;
6
+ refreshSessions;
7
+ store = createSnapshotStore({ sessions: [], sessionsReady: false, writers: [], modelsStatus: 'loading' });
8
+ unsubscribe;
9
+ generation = 0;
10
+ disposed = false;
11
+ constructor(catalog, loadModels, refreshSessions) {
12
+ this.catalog = catalog;
13
+ this.loadModels = loadModels;
14
+ this.refreshSessions = refreshSessions;
15
+ this.unsubscribe = catalog?.subscribe(() => this.readSessions());
16
+ this.readSessions();
17
+ void this.refreshModels();
18
+ }
19
+ readSessions() {
20
+ const value = this.catalog?.getSnapshot();
21
+ this.store.update(state => {
22
+ state.sessionsReady = value?.phase === 'ready';
23
+ state.sessions = value ? value.ids.flatMap(id => {
24
+ const row = value.byId[id];
25
+ return row && row.origin !== 'subagent' ? [{ id, title: row.displayTitle }] : [];
26
+ }) : [];
27
+ });
28
+ }
29
+ async refreshModels() {
30
+ const generation = ++this.generation;
31
+ this.store.update(state => { state.modelsStatus = 'loading'; });
32
+ try {
33
+ const response = await this.loadModels?.();
34
+ if (this.disposed || generation !== this.generation)
35
+ return;
36
+ this.store.update(state => {
37
+ state.writers = response?.ok && response.value ? response.value.groups.flatMap(group => group.models.map(model => ({ provider: group.id, model: model.id, label: `${group.name} / ${model.name}` }))) : [];
38
+ state.modelsStatus = response?.ok ? 'ready' : 'error';
39
+ });
40
+ }
41
+ catch {
42
+ if (!this.disposed && generation === this.generation)
43
+ this.store.update(state => { state.modelsStatus = 'error'; });
44
+ }
45
+ }
46
+ async refresh() {
47
+ await Promise.allSettled([this.refreshSessions?.(), this.refreshModels()]);
48
+ }
49
+ dispose() { this.disposed = true; this.generation++; this.unsubscribe?.(); }
50
+ }
51
+ //# sourceMappingURL=choices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"choices.js","sourceRoot":"","sources":["../../src/client/choices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { SettingsFormModel } from '@deepseek-ai/dsh-client-ui-primitives';
2
+ import type { SettingsFieldState, SettingsFormScope, SettingsFormShell } from '@deepseek-ai/dsh-client-ui-primitives';
3
+ import type { SnapshotStore } from '@deepseek-ai/dsh-client-store';
4
+ import type { DiaryConfig } from '../config.js';
5
+ import { DiaryChoices } from './choices.js';
6
+ import type { ChoicesState } from './choices.js';
7
+ export declare const editableFields: readonly ["apiKey", "baseUrl", "embeddingModel", "embeddingDimensions", "embeddingParameters", "rerankModel", "rerankParameters", "candidateCount", "recallCount", "compressionRounds", "retainRounds", "autoRecall", "sessionIds", "diaryProvider", "diaryModel"];
8
+ export type EditableField = typeof editableFields[number];
9
+ export type FormValues = Partial<Pick<DiaryConfig, EditableField>>;
10
+ export interface DiarySettingsState extends SettingsFormShell, ChoicesState {
11
+ fields: Record<EditableField, SettingsFieldState>;
12
+ keyConfigured: boolean;
13
+ error: string | null;
14
+ selectedSessions: string[];
15
+ }
16
+ /** Native staged form: only edited paths are sent, preserving undisclosed secrets. */
17
+ export declare class DiarySettingsController {
18
+ private readonly scope;
19
+ private readonly keyConfigured;
20
+ readonly choices: DiaryChoices;
21
+ readonly form: SettingsFormModel<FormValues>;
22
+ readonly store: SnapshotStore<DiarySettingsState>;
23
+ private readonly unsubscribeChoices;
24
+ constructor(scope: SettingsFormScope<FormValues>, keyConfigured?: () => boolean, choices?: DiaryChoices);
25
+ private projection;
26
+ save(): Promise<void>;
27
+ inject(): {
28
+ save: () => void;
29
+ toggleSession: (id: string, enabled: boolean) => void;
30
+ chooseWriter: (selection: string) => void;
31
+ refreshChoices: () => void;
32
+ edit: (field: string, text: string) => void;
33
+ resetField: (field: string) => void;
34
+ discard: () => void;
35
+ hooks: {
36
+ diarySettings: SnapshotStore<DiarySettingsState>;
37
+ };
38
+ };
39
+ dispose(): void;
40
+ }
@@ -0,0 +1,130 @@
1
+ import { SettingsFormModel, settingsTextField } from '@deepseek-ai/dsh-client-ui-primitives';
2
+ import { validateModelParameters } from '../model-parameters.js';
3
+ import { validateSessionIds } from '../session-selection.js';
4
+ import { DiaryChoices } from './choices.js';
5
+ export const editableFields = ['apiKey', 'baseUrl', 'embeddingModel', 'embeddingDimensions', 'embeddingParameters', 'rerankModel', 'rerankParameters', 'candidateCount', 'recallCount', 'compressionRounds', 'retainRounds', 'autoRecall', 'sessionIds', 'diaryProvider', 'diaryModel'];
6
+ function numberField(field, min, max) {
7
+ return {
8
+ field, format: value => typeof value === 'number' ? String(value) : '',
9
+ parse: text => !text.trim() ? { kind: 'clear' }
10
+ : Number.isSafeInteger(Number(text)) && Number(text) >= min && Number(text) <= max ? { kind: 'set', value: Number(text) } : undefined,
11
+ };
12
+ }
13
+ function parametersField(field, kind) {
14
+ return {
15
+ field, format: value => value && typeof value === 'object' ? JSON.stringify(value, null, 2) : '{}',
16
+ parse: text => {
17
+ if (!text.trim())
18
+ return { kind: 'clear' };
19
+ try {
20
+ return { kind: 'set', value: validateModelParameters(JSON.parse(text), kind) };
21
+ }
22
+ catch {
23
+ return undefined;
24
+ }
25
+ },
26
+ };
27
+ }
28
+ const specs = [
29
+ ...['apiKey', 'baseUrl', 'embeddingModel', 'rerankModel', 'diaryProvider', 'diaryModel'].map(settingsTextField),
30
+ { field: 'sessionIds', format: value => JSON.stringify(value ?? []), parse: text => {
31
+ try {
32
+ return { kind: 'set', value: validateSessionIds(JSON.parse(text || '[]')) };
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ } },
38
+ numberField('embeddingDimensions', 1, 4096), numberField('candidateCount', 1, 100), numberField('recallCount', 1, 100),
39
+ numberField('compressionRounds', 2, 1000000), numberField('retainRounds', 1, 1000000),
40
+ parametersField('embeddingParameters', 'embedding'), parametersField('rerankParameters', 'rerank'),
41
+ { field: 'autoRecall', format: value => String(value ?? true), parse: text => text === 'true' || text === 'false' ? { kind: 'set', value: text === 'true' } : undefined },
42
+ ];
43
+ /** Native staged form: only edited paths are sent, preserving undisclosed secrets. */
44
+ export class DiarySettingsController {
45
+ scope;
46
+ keyConfigured;
47
+ choices;
48
+ form;
49
+ store;
50
+ unsubscribeChoices;
51
+ constructor(scope, keyConfigured = () => false, choices = new DiaryChoices()) {
52
+ this.scope = scope;
53
+ this.keyConfigured = keyConfigured;
54
+ this.choices = choices;
55
+ this.form = new SettingsFormModel(scope, specs);
56
+ this.store = this.form.bind(() => this.projection());
57
+ this.unsubscribeChoices = choices.store.subscribe(() => this.store.set(this.projection()));
58
+ }
59
+ projection() {
60
+ const fields = Object.fromEntries(editableFields.map(field => [field, this.form.field(field)]));
61
+ const base = this.scope.getSnapshot().base;
62
+ const number = (field, fallback) => fields[field].text.trim() ? Number(fields[field].text) : base?.[field] ?? fallback;
63
+ let error = null;
64
+ let selectedSessions = [];
65
+ try {
66
+ selectedSessions = validateSessionIds(JSON.parse(fields.sessionIds.text || '[]'));
67
+ }
68
+ catch (failure) {
69
+ error = failure.message;
70
+ }
71
+ const writerProvider = fields.diaryProvider.text.trim();
72
+ const writerModel = fields.diaryModel.text.trim();
73
+ if (Boolean(writerProvider) !== Boolean(writerModel))
74
+ error = '写日记的模型提供方与模型名必须同时填写,或同时留空跟随聊天模型。';
75
+ if (writerProvider.length > 200 || writerModel.length > 200)
76
+ error = '写日记的提供方与模型名不能超过 200 字符。';
77
+ if (number('compressionRounds', 20) <= number('retainRounds', 2))
78
+ error = '压缩轮次必须大于保留轮次。';
79
+ if (number('recallCount', 6) > number('candidateCount', 30))
80
+ error = '召回条数不能大于候选数量。';
81
+ for (const kind of ['embedding', 'rerank']) {
82
+ const text = fields[`${kind}Parameters`].text.trim();
83
+ try {
84
+ validateModelParameters(JSON.parse(text || '{}'), kind);
85
+ }
86
+ catch (failure) {
87
+ error = failure instanceof SyntaxError ? `${kind} 参数需要合法的 JSON 对象。` : failure.message;
88
+ }
89
+ }
90
+ const endpoint = fields.baseUrl.text.trim();
91
+ try {
92
+ if (endpoint) {
93
+ const url = new URL(endpoint);
94
+ if (url.username || url.password || url.search || url.hash || url.pathname !== '/' || url.protocol !== 'https:' && !(url.protocol === 'http:' && ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname)))
95
+ throw new Error();
96
+ }
97
+ }
98
+ catch {
99
+ fields.baseUrl.invalid = true;
100
+ error = '百炼端点需要 HTTPS origin,例如 https://dashscope.aliyuncs.com。';
101
+ }
102
+ for (const field of ['embeddingModel', 'rerankModel']) {
103
+ if (fields[field].text.trim().length > 200) {
104
+ fields[field].invalid = true;
105
+ error = '模型名不能超过 200 字符。';
106
+ }
107
+ }
108
+ const shell = this.form.shell();
109
+ return { ...shell, ...this.choices.store.getSnapshot(), selectedSessions, invalid: shell.invalid || Boolean(error) || !shell.writable, fields, keyConfigured: this.keyConfigured(), error };
110
+ }
111
+ async save() { if (!this.projection().invalid)
112
+ await this.form.save(); }
113
+ inject() {
114
+ return {
115
+ hooks: { diarySettings: this.store }, ...this.form.actions(), save: () => { void this.save(); },
116
+ toggleSession: (id, enabled) => {
117
+ const ids = this.projection().selectedSessions;
118
+ this.form.actions().edit('sessionIds', JSON.stringify(enabled ? validateSessionIds([...ids, id]) : ids.filter(item => item !== id)));
119
+ },
120
+ chooseWriter: (selection) => {
121
+ const [provider, model] = selection ? JSON.parse(selection) : ['', ''];
122
+ this.form.actions().edit('diaryProvider', provider);
123
+ this.form.actions().edit('diaryModel', model);
124
+ },
125
+ refreshChoices: () => { void this.choices.refresh(); },
126
+ };
127
+ }
128
+ dispose() { this.unsubscribeChoices(); this.choices.dispose(); this.form.dispose(); }
129
+ }
130
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/client/controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ export { DiarySettingsController } from './controller.js';
3
+ export { DiarySettingsPage } from './page.js';
4
+ export declare const inject: string[];
5
+ export declare function apply(ctx: Context): void;
@@ -0,0 +1,19 @@
1
+ import { DiarySettingsController } from './controller.js';
2
+ import { DiarySettingsPage } from './page.js';
3
+ import { DiaryChoices } from './choices.js';
4
+ export { DiarySettingsController } from './controller.js';
5
+ export { DiarySettingsPage } from './page.js';
6
+ export const inject = ['slots', 'configForms', 'sessions', 'remote', 'remote.session'];
7
+ export function apply(ctx) {
8
+ const sessions = ctx.get('sessions');
9
+ const choices = new DiaryChoices(sessions.list, () => ctx.remote.session.modelCatalog(), () => sessions.refresh());
10
+ const controller = new DiarySettingsController(ctx.configForms.get('diary-memory'), () => {
11
+ const entry = ctx.configForms.describe().getSnapshot().view?.namespaces.find(item => item.ns === 'diary-memory');
12
+ return entry?.secrets?.some(item => item.path.length === 1 && item.path[0] === 'apiKey' && item.set) ?? false;
13
+ }, choices);
14
+ ctx.effect(() => () => controller.dispose(), 'diary-memory: settings form');
15
+ ctx.effect(() => ctx.configForms.whileServed(['diary-memory'], () => ctx.slots.inject('settings.section', () => ctx.slots.register({
16
+ name: 'settings.section', id: 'diary-memory', order: 65, label: '陪伴日记', inject: () => controller.inject(),
17
+ }, DiarySettingsPage))), 'diary-memory: settings page');
18
+ }
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAI3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAA;AAEtF,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAyB,CAAA;IAC5D,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IAClH,MAAM,UAAU,GAAG,IAAI,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAa,cAAc,CAAC,EAAE,GAAG,EAAE;QACnG,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,cAAc,CAAC,CAAA;QAChH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAA;IAC/G,CAAC,EAAE,OAAO,CAAC,CAAA;IACX,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,6BAA6B,CAAC,CAAA;IAC3E,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACjI,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE;KAC1G,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAA;AACzD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { InjectFace } from '@deepseek-ai/dsh-client-ui-slots';
2
+ import type { DiarySettingsController } from './controller.js';
3
+ type PageProps = InjectFace<ReturnType<DiarySettingsController['inject']>>;
4
+ export declare function DiarySettingsPage(props: PageProps): import("react").JSX.Element;
5
+ export {};
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SettingsForm, SettingsSecretField, SettingsValueField, Switch } from '@deepseek-ai/dsh-client-ui-primitives';
3
+ import { useState } from 'react';
4
+ const card = { border: '1px solid var(--dsw-alias-border-l2)', borderRadius: 14, padding: '16px 20px', marginTop: 16, minWidth: 0 };
5
+ const hint = { fontSize: 12, lineHeight: 1.6, color: 'var(--dsw-alias-label-tertiary)', margin: '8px 0 0' };
6
+ const textarea = { display: 'block', width: '100%', boxSizing: 'border-box', minHeight: 110, padding: 12, borderRadius: 8, border: '1px solid var(--dsw-alias-border-l2)', background: 'var(--dsw-alias-bg-layer-3)', color: 'var(--dsw-alias-label-primary)', fontFamily: 'var(--dsw-font-mono, monospace)', fontSize: 12, lineHeight: 1.6, resize: 'vertical' };
7
+ function Group({ title, children }) {
8
+ return _jsxs("section", { "aria-label": title, style: card, children: [_jsx("h3", { style: { fontSize: 14, margin: '0 0 8px' }, children: title }), children] });
9
+ }
10
+ export function DiarySettingsPage(props) {
11
+ const state = props.useDiarySettings(value => value);
12
+ const disabled = !state.writable || state.saving;
13
+ const [sessionFilter, setSessionFilter] = useState('');
14
+ const sessions = [...state.sessions, ...state.selectedSessions.filter(id => !state.sessions.some(item => item.id === id)).map(id => ({ id, title: '已选会话(不在当前列表)' }))]
15
+ .filter(item => `${item.title}\n${item.id}`.toLowerCase().includes(sessionFilter.toLowerCase()));
16
+ const writer = state.fields.diaryProvider.text && state.fields.diaryModel.text ? JSON.stringify([state.fields.diaryProvider.text, state.fields.diaryModel.text]) : '';
17
+ const valueField = (field, label, description, numeric = false) => _jsx(SettingsValueField, { id: `diary-${field}`, label: label, hint: description, numeric: numeric, ...state.fields[field], disabled: disabled, overriddenLabel: "\u5DF2\u81EA\u5B9A\u4E49", resetLabel: "\u6062\u590D\u9ED8\u8BA4", invalidLabel: numeric ? '请填写范围内的整数。' : '请检查填写的内容。', onEdit: text => props.edit(field, text), onReset: () => props.resetField(field) }, field);
18
+ const parameters = (field, description) => _jsxs("div", { style: { padding: '12px 0' }, children: [_jsx("label", { htmlFor: `diary-${field}`, style: { display: 'block', fontSize: 13, fontWeight: 500, marginBottom: 8 }, children: "\u989D\u5916\u53C2\u6570\uFF08JSON\uFF09" }), _jsx("textarea", { id: `diary-${field}`, "aria-describedby": `diary-${field}-hint`, "aria-invalid": state.fields[field].invalid || undefined, value: state.fields[field].text, onChange: event => props.edit(field, event.target.value), disabled: disabled, spellCheck: false, rows: 5, style: textarea }), _jsx("p", { id: `diary-${field}-hint`, style: hint, children: description })] });
19
+ return _jsxs("div", { "data-diary-settings": true, style: { color: 'var(--dsw-alias-label-primary)', paddingBottom: 16 }, children: [_jsx("h2", { style: { fontSize: 18, margin: '0 0 8px' }, children: "\u966A\u4F34\u65E5\u8BB0" }), _jsx("p", { style: hint, children: "\u8BBE\u7F6E\u767E\u70BC\u8FDE\u63A5\u3001\u56DE\u5FC6\u6A21\u578B\u4E0E\u65E5\u8BB0\u538B\u7F29\u65B9\u5F0F\u3002\u586B\u5199\u540E\u70B9\u51FB\u4FDD\u5B58\u3002" }), _jsxs(SettingsForm, { state: state, onSave: props.save, onDiscard: props.discard, labels: {
20
+ unavailable: '正在加载配置;若持续不可用,请检查陪伴日记插件是否已启用。', readOnly: '当前配置只读。',
21
+ saveFailed: '保存失败或配置已在其他窗口修改。输入已保留,请检查后重试。', save: '保存配置', saving: '正在保存…',
22
+ }, children: [_jsxs(Group, { title: "\u6307\u5B9A\u5DF2\u6709\u4F1A\u8BDD", children: [_jsx("p", { style: hint, children: "\u52FE\u9009\u540E\u4FDD\u5B58\uFF0C\u5728\u539F\u4F1A\u8BDD\u7EE7\u7EED\u804A\u5929\u5373\u53EF\u3002\u4FDD\u7559\u539F\u4EBA\u8BBE\u3001\u6A21\u578B\u4E0E\u5DE5\u5177\uFF1B\u672A\u9009\u4F1A\u8BDD\u4FDD\u6301\u539F\u6765\u7684\u538B\u7F29\u65B9\u5F0F\u3002\u201C\u966A\u4F34\u65E5\u8BB0\u201D\u9884\u8BBE\u672C\u8EAB\u5DF2\u542F\u7528\u8BB0\u5FC6\u3002" }), _jsx("label", { htmlFor: "diary-session-filter", style: { display: 'block', fontSize: 13, marginTop: 12 }, children: "\u67E5\u627E\u4F1A\u8BDD" }), _jsx("input", { id: "diary-session-filter", type: "search", value: sessionFilter, onChange: event => setSessionFilter(event.target.value), placeholder: "\u6309\u4F1A\u8BDD\u6807\u9898\u6216 ID \u641C\u7D22", style: { ...textarea, minHeight: 0, height: 36, marginTop: 6 } }), _jsxs("div", { "aria-label": "\u5DF2\u6709\u4F1A\u8BDD\u5217\u8868", style: { maxHeight: 300, overflowY: 'auto', marginTop: 10 }, children: [sessions.map(item => _jsxs("div", { style: { display: 'flex', gap: 12, alignItems: 'center', padding: '10px 0', borderBottom: '1px solid var(--dsw-alias-border-l2)' }, children: [_jsxs("div", { style: { minWidth: 0, flex: 1 }, children: [_jsx("div", { style: { fontSize: 13, overflowWrap: 'anywhere' }, children: item.title }), _jsx("div", { style: { ...hint, margin: 0, overflowWrap: 'anywhere' }, children: item.id })] }), _jsx(Switch, { label: `为 ${item.title} 启用记忆`, checked: state.selectedSessions.includes(item.id), disabled: disabled, onChange: value => props.toggleSession(item.id, value) })] }, item.id)), !sessions.length ? _jsx("p", { style: hint, children: state.sessionsReady ? '没有匹配的会话。' : '正在读取会话列表…' }) : null] }), _jsxs("p", { style: hint, children: ["\u5DF2\u9009 ", state.selectedSessions.length, " \u4E2A\u4F1A\u8BDD\u3002\u540C\u4E00\u8BB0\u5FC6\u7A7A\u95F4\u4E2D\u7684\u5DF2\u9009\u4F1A\u8BDD\u5171\u4EAB\u65E5\u8BB0\uFF1B\u53D6\u6D88\u52FE\u9009\u4E0D\u4F1A\u5220\u9664\u5DF2\u4FDD\u5B58\u7684\u8BB0\u5FC6\u3002"] }), _jsx("button", { type: "button", onClick: props.refreshChoices, disabled: state.saving, style: { marginTop: 10 }, children: "\u5237\u65B0\u4F1A\u8BDD\u4E0E\u6A21\u578B\u5217\u8868" })] }), _jsxs(Group, { title: "\u4E13\u7528\u5199\u65E5\u8BB0\u6A21\u578B", children: [_jsx("label", { htmlFor: "diary-writer", style: { display: 'block', fontSize: 13, marginBottom: 6 }, children: "\u9009\u62E9\u5DF2\u914D\u7F6E\u7684 DSH \u6A21\u578B" }), _jsxs("select", { id: "diary-writer", value: writer, disabled: disabled, onChange: event => props.chooseWriter(event.target.value), style: { ...textarea, minHeight: 0, height: 40, padding: '0 10px', fontFamily: 'inherit' }, children: [_jsx("option", { value: "", children: "\u8DDF\u968F\u5F53\u524D\u4F1A\u8BDD\u7684\u804A\u5929\u6A21\u578B" }), writer && !state.writers.some(item => JSON.stringify([item.provider, item.model]) === writer) ? _jsxs("option", { value: writer, children: ["\u5F53\u524D\u624B\u586B\u6A21\u578B\uFF1A", state.fields.diaryProvider.text, " / ", state.fields.diaryModel.text] }) : null, state.writers.map(item => _jsx("option", { value: JSON.stringify([item.provider, item.model]), children: item.label }, JSON.stringify([item.provider, item.model])))] }), _jsx("p", { style: hint, children: "\u4E13\u7528\u6A21\u578B\u53EA\u8D1F\u8D23\u5199\u65E5\u8BB0\uFF0C\u4E0D\u6539\u53D8\u804A\u5929\u6A21\u578B\u3002\u5148\u5728 DSH \u7684\u6A21\u578B\u8BBE\u7F6E\u91CC\u914D\u7F6E\u63D0\u4F9B\u65B9\uFF0C\u4E5F\u53EF\u4EE5\u5728\u4E0B\u9762\u624B\u586B\u5176\u8DEF\u7531\u540D\u4E0E\u6A21\u578B\u540D\u3002" }), state.modelsStatus === 'error' ? _jsx("p", { style: hint, children: "\u6A21\u578B\u5217\u8868\u6682\u4E0D\u53EF\u7528\uFF0C\u5DF2\u4FDD\u5B58\u7684\u6A21\u578B\u4ECD\u4FDD\u7559\uFF0C\u53EF\u624B\u586B\u6216\u5237\u65B0\u91CD\u8BD5\u3002" }) : null, valueField('diaryProvider', '写日记的模型提供方', '填写 DSH 已注册的 provider 路由名;与模型名同时留空则跟随聊天模型。'), valueField('diaryModel', '写日记的模型名', '填写该提供方支持的生成模型。这里只设置模型,不增加生成参数。')] }), _jsxs(Group, { title: "\u767E\u70BC\u8FDE\u63A5", children: [_jsx(SettingsSecretField, { id: "diary-apiKey", label: "\u767E\u70BC API Key", hint: "\u5BC6\u94A5\u4E0D\u4F1A\u56DE\u663E\uFF1B\u7559\u7A7A\u4FDD\u7559\u5DF2\u4FDD\u5B58\u7684 Key\u3002\u4E5F\u53EF\u901A\u8FC7 DSH \u7684\u73AF\u5883\u53D8\u91CF\u63D0\u4F9B\u3002", text: state.fields.apiKey.text, configured: state.keyConfigured, stateLabel: state.keyConfigured ? '已保存(不回显)' : '尚未保存', disabled: disabled, onEdit: text => props.edit('apiKey', text) }), valueField('baseUrl', '百炼 API 地址', '需要与 API Key 的地域一致,例如 https://dashscope.aliyuncs.com。')] }), _jsxs(Group, { title: "Embedding \u00B7 \u5411\u91CF\u53EC\u56DE", children: [valueField('embeddingModel', 'Embedding 模型名', '可手动填写百炼支持的文本向量模型,例如 text-embedding-v4。'), valueField('embeddingDimensions', '向量维度', '1–4096;请填写所选模型支持的维度。', true), parameters('embeddingParameters', '填写该模型支持的 parameters,例如 {"output_type":"dense"}。dimension 在上方填写,text_type 由入库与召回自动设置。'), _jsx("p", { style: hint, children: "\u66F4\u6539 Embedding \u6A21\u578B\u3001\u7EF4\u5EA6\u6216\u53C2\u6570\u540E\uFF0C\u65E7\u5411\u91CF\u4E0D\u4F1A\u53C2\u4E0E\u65B0\u914D\u7F6E\u7684\u68C0\u7D22\u3002" })] }), _jsxs(Group, { title: "Rerank \u00B7 \u56DE\u5FC6\u6392\u5E8F", children: [valueField('rerankModel', 'Rerank 模型名', '可手动填写百炼支持的重排模型,例如 gte-rerank-v2。'), valueField('candidateCount', '候选数量', '1–100;先由向量检索选出这些日记交给 Rerank。', true), valueField('recallCount', '召回条数(top_n)', '1–100,且不大于候选数量。', true), parameters('rerankParameters', '填写该模型支持的 parameters,例如 {"return_documents":false}。top_n 由上方的召回条数设置。')] }), _jsxs(Group, { title: "\u65E5\u8BB0\u4E0E\u966A\u4F34", children: [valueField('compressionRounds', '触发压缩的轮次', '完成多少轮后保存日记并安全压缩;须大于保留轮次。', true), valueField('retainRounds', '保留最近轮次', '至少保留最近多少个用户输入及后续消息。', true), _jsxs("div", { style: { display: 'flex', gap: 10, justifyContent: 'space-between', alignItems: 'center', padding: '12px 0', fontSize: 13 }, children: [_jsx("span", { children: "\u81EA\u52A8\u56DE\u60F3\u76F8\u5173\u65E5\u8BB0" }), _jsx(Switch, { label: "\u81EA\u52A8\u56DE\u60F3\u76F8\u5173\u65E5\u8BB0", checked: state.fields.autoRecall.text === 'true', disabled: disabled, onChange: value => props.edit('autoRecall', String(value)) })] })] }), state.error ? _jsx("p", { role: "alert", style: { ...hint, color: 'var(--dsw-alias-label-error)' }, children: state.error }) : null] })] });
23
+ }
24
+ //# sourceMappingURL=page.js.map