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 +15 -5
- package/SECURITY.md +6 -0
- package/dist/cli.js +20 -2
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -155,11 +155,11 @@ rm -rf ~/.dsh-lark
|
|
|
155
155
|
|
|
156
156
|
## 目标 · Goals
|
|
157
157
|
|
|
158
|
-
- **一条命令启动**:clone
|
|
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,
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
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) {
|