dsh-lark-bot 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -155,11 +155,11 @@ rm -rf ~/.dsh-lark
155
155
 
156
156
  ## 目标 · Goals
157
157
 
158
- - **一条命令启动**:clone 后一键安装运行,最终发布到 npm,`npm i -g dsh-lark-bot && dsh-lark-bot start` 即可拉起后台服务。
158
+ - **一条命令启动**:clone 后一键安装运行,已发布到 npm,`npm i -g dsh-lark-bot && dsh-lark-bot start` 即可拉起后台服务。
159
159
  - **飞书原生体验**:流式卡片、交互按钮、图片 / 文件,全程双语(文档评论为规划中能力)。
160
160
  - **完整工作区管理**:多项目隔离、git worktree、项目级规则注入、上下文持久化。
161
161
 
162
- - **One-command start**: clone and run in one step, eventually published to npm as `npx dsh-lark-bot`.
162
+ - **One-command start**: clone and run in one step, published to npm `npm i -g dsh-lark-bot && dsh-lark-bot start`.
163
163
  - **Native Feishu experience**: streaming cards, interactive buttons, images / files, doc comments.
164
164
  - **Full workspace management**: multi-project isolation, git worktrees, per-project rules, persistent context.
165
165
 
@@ -167,7 +167,8 @@ rm -rf ~/.dsh-lark
167
167
 
168
168
  - **DeepSeek Harness(`dsh`)**:已验证 **dsh 0.1.0-rc.6**(2026-08-14:SDK JSON-RPC / ACP runtime 握手 +
169
169
  真实任务流式验证),通过官方 `@deepseek-ai/dsh-sdk-client` / `@deepseek-ai/dsh-acp` 接入;
170
- 具体锁定版本与漂移策略见 [`docs/adapter-notes.md`](docs/adapter-notes.md)
170
+ 具体锁定版本、升级政策与自动化探测见 [`docs/COMPATIBILITY.md`](docs/COMPATIBILITY.md)
171
+ adapter 接入细节见 [`docs/adapter-notes.md`](docs/adapter-notes.md)。
171
172
  - **运行时**:Node.js ≥ 22.19(见 `package.json` engines)。
172
173
  - **平台**:Linux / macOS / Windows(飞书 WebSocket 出站长连接,免公网服务器 / 域名 / 内网穿透)。
173
174
  - 默认 adapter 为官方 **`@deepseek-ai/dsh-sdk-client`**(SDK JSON-RPC runtime,原生 session 续跑 +
@@ -214,12 +215,16 @@ rm -rf ~/.dsh-lark
214
215
  - **文件系统**:读取 / 写入你通过 `/cd`、`/ws` 指定的工作目录(含执行 shell 命令、修改文件)。
215
216
  - **网络**:向飞书开放平台建立 WebSocket 出站长连接收发消息;向 DeepSeek API 发送任务上下文。
216
217
  - **进程**:spawn 本机 `dsh` runtime 子进程(`dsh-sdk-jsonrpc-server` / `dsh-acp` profile)执行 agent 任务。
218
+ - **dsh 配置**:`/model` `/providers` `/provider` `/key` 命令按 dsh 官方存储协议读写
219
+ `~/.dsh/settings.yaml` 与 `~/.dsh/.credentials.yaml`(仅管理员可写;settings 只存 `apiKeyEnv`
220
+ 引用,凭据文件权限 0600、目录 0700,字面密钥不进入 settings 或聊天记录)。
217
221
 
218
222
  所有数据仅在本机与飞书、DeepSeek 之间流转,不收集、不上传任何遥测。密钥不会提交进仓库(见 `.gitignore`)。
219
223
 
220
224
  ## 排障 · Troubleshooting
221
225
 
222
- 先运行 `dsh-lark-bot doctor`,它会检查 profile、工作目录,并实际调用本机 dsh 的 `--version` 确认可用性。
226
+ 先运行 `dsh-lark-bot doctor`,它会检查 profile、工作目录,并对当前 adapter 做真实可用性探测
227
+ (`sdk` / `acp` / `headless` 对应 runtime 的初始化握手)。
223
228
 
224
229
  常见问题:
225
230
 
@@ -238,9 +243,13 @@ pnpm typecheck
238
243
  pnpm test
239
244
  pnpm build
240
245
  pnpm ci:local
246
+ pnpm release:check # ci:local + 上游一致性检查
247
+ pnpm compat:probe # 临时 DSH_HOME 安装锁定版 dsh,跑真实 SDK 握手
248
+ pnpm dsh:upstream # 对比 npm 上游 stable 与锁定矩阵
241
249
  ```
242
250
 
243
251
  开发规范见 [`AGENTS.md`](AGENTS.md),模块契约见 [`docs/API.md`](docs/API.md),架构见 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)。
252
+ 兼容矩阵的升级政策与自动化见 [`docs/COMPATIBILITY.md`](docs/COMPATIBILITY.md)。
244
253
 
245
254
  发布双包(`dsh-lark-bot` 与 `dsh-feishu-bot` 共享同一份 dist / 版本 / 依赖):
246
255
 
@@ -272,6 +281,7 @@ pnpm publish:dual
272
281
  | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | 架构分层与目录映射<br>Architecture layering & directory mapping |
273
282
  | [`docs/API.md`](docs/API.md) | 模块接口与契约<br>Module interfaces & contracts |
274
283
  | [`docs/QUICK_START.md`](docs/QUICK_START.md) | 安装与快速开始<br>Install & quick start |
284
+ | [`docs/COMPATIBILITY.md`](docs/COMPATIBILITY.md) | 兼容矩阵、升级政策与自动化<br>Compatibility matrix, upgrade policy & automation |
275
285
  | [`docs/MANUAL.md`](docs/MANUAL.md) | 完整用户手册<br>Complete user manual |
276
286
  | [`docs/adapter-notes.md`](docs/adapter-notes.md) | dsh adapter 接入说明(接口 / 落点 / 路线)<br>How to plug the dsh adapter |
277
287
  | [`docs/ECOSYSTEM.md`](docs/ECOSYSTEM.md) | 生态兼容与交付标准(实现工程师必读)<br>Ecosystem & delivery standards (for engineers) |
@@ -305,7 +315,7 @@ The core idea: **decouple the Feishu channel from the agent backend**. The bridg
305
315
  | `src/bot/` | 运行注册、消息排队、审批/问答注册表<br>Run registry, queueing, approval/question registries |
306
316
  | `src/commands/` | 斜杠命令(/cd /ws /new …)<br>Slash commands |
307
317
  | `src/cli/` | CLI 入口与 start / status / restart / stop / doctor 命令<br>CLI entry & service commands |
308
- | `src/config/` | profile / 配置管理<br>Profile & config |
318
+ | `src/config/` | profile / 配置 / 访问白名单 / dsh 配置管理<br>Profile, config, access & dsh config management |
309
319
  | `src/core/` | 结构化日志<br>Structured logging |
310
320
  | `src/media/` | 附件下载与文本注入<br>Attachment download & text injection |
311
321
  | `src/platform/` | 跨平台原子写入<br>Cross-platform atomic writes |
package/SECURITY.md CHANGED
@@ -30,6 +30,9 @@
30
30
  `DEFAULT_DENIED_INTERACTIVE_TOOLS` 提供工具级黑名单。
31
31
  8. **审批**:ACP 模式下敏感操作通过 `session/request_permission` 以飞书审批卡一问一答;
32
32
  run 结束 / dispose 时所有挂起审批卡结算为拒绝(`src/bot/approvals.ts`)。
33
+ 9. **管理操作鉴权**:飞书会话内对 dsh 配置的写操作(`/model default`、`/model add|remove`、
34
+ `/provider add|update|remove`、`/key set|remove`)仅管理员可执行(管理员由
35
+ `/invite admin <open_id>` 定义);查看类命令(`/model`、`/providers`、`/key list`)开放。
33
36
 
34
37
  ## 数据与凭据 · Data & credentials
35
38
 
@@ -39,6 +42,9 @@
39
42
  `~/.dsh-lark/service/service.env`(`0600`);systemd / launchd 单元文件中的 `EnvironmentFile`
40
43
  只引用该文件,不内联密钥。
41
44
  - 后台运行日志写入 `~/.dsh-lark/profiles/<profile>/logs/bot.log`(JSON Lines,密钥字段脱敏后输出)。
45
+ - 聊天命令管理的 dsh 配置按官方存储协议写入:`~/.dsh/settings.yaml`(只存 `apiKeyEnv`
46
+ 引用,不落字面密钥)与 `~/.dsh/.credentials.yaml`(目录 0700、文件 0600)。bot 永不回显
47
+ 密钥值;群聊中粘贴密钥会对群成员可见,建议私聊使用或改用环境变量 / dsh Web 页面录入。
42
48
  - 所有数据仅在本机、飞书开放平台与 DeepSeek API 之间流转;无遥测。
43
49
 
44
50
  ## 报告渠道 · Reporting
package/dist/cli.js CHANGED
@@ -53,6 +53,22 @@ var init_event_channel = __esm({
53
53
  }
54
54
  });
55
55
 
56
+ // src/config/dsh-compat.ts
57
+ var DSH_COMPATIBILITY;
58
+ var init_dsh_compat = __esm({
59
+ "src/config/dsh-compat.ts"() {
60
+ "use strict";
61
+ DSH_COMPATIBILITY = {
62
+ harness: "0.1.0-rc.6",
63
+ sdkClient: "0.1.0-rc.6",
64
+ sdkServer: "0.1.0-rc.6",
65
+ acp: "0.1.0-rc.6",
66
+ node: ">=22.19.0",
67
+ verifiedAt: "2026-08-14"
68
+ };
69
+ }
70
+ });
71
+
56
72
  // src/config/dsh-runtime.ts
57
73
  import { existsSync as existsSync2, readdirSync } from "fs";
58
74
  import { join } from "path";
@@ -256,9 +272,10 @@ var ACP_PACKAGE, ACP_VERSION, ACP_BASE_BUNDLE, DEFAULT_ACP_PROFILE;
256
272
  var init_acp_runtime = __esm({
257
273
  "src/adapters/dsh/acp-runtime.ts"() {
258
274
  "use strict";
275
+ init_dsh_compat();
259
276
  init_dsh_runtime();
260
277
  ACP_PACKAGE = "@deepseek-ai/dsh-acp";
261
- ACP_VERSION = "0.1.0-rc.6";
278
+ ACP_VERSION = DSH_COMPATIBILITY.acp;
262
279
  ACP_BASE_BUNDLE = "@deepseek-ai/dsh-base";
263
280
  DEFAULT_ACP_PROFILE = "dsh-lark-acp";
264
281
  }
@@ -1182,13 +1199,14 @@ var SdkDshAdapter = class {
1182
1199
  };
1183
1200
 
1184
1201
  // src/adapters/dsh/sdk-runtime.ts
1202
+ init_dsh_compat();
1185
1203
  init_dsh_runtime();
1186
1204
  import { spawn as spawn3 } from "child_process";
1187
1205
  import { existsSync as existsSync3 } from "fs";
1188
1206
  import { mkdir, writeFile } from "fs/promises";
1189
1207
  import { join as join2 } from "path";
1190
1208
  var SDK_SERVER_PACKAGE = "@deepseek-ai/dsh-sdk-jsonrpc-server";
1191
- var SDK_SERVER_VERSION = "0.1.0-rc.6";
1209
+ var SDK_SERVER_VERSION = DSH_COMPATIBILITY.sdkServer;
1192
1210
  var SDK_BASE_BUNDLE = "@deepseek-ai/dsh-base";
1193
1211
  var DEFAULT_SDK_PROFILE = "dsh-lark";
1194
1212
  function sdkProfileRoot(home, profile, env) {