@lanbaolu/dsh-wechat-bridge 0.3.0 → 0.4.0
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 +2 -0
- package/docs/competitive-plan.md +128 -0
- package/lib/agent-setup.js +43 -0
- package/lib/agent-setup.js.map +1 -0
- package/lib/approval.js +99 -0
- package/lib/approval.js.map +1 -0
- package/lib/bridge/commands/handlers.js +2 -0
- package/lib/bridge/commands/handlers.js.map +1 -1
- package/lib/bridge/dsh-client.js +16 -0
- package/lib/bridge/dsh-client.js.map +1 -1
- package/lib/bridge/main.js +151 -14
- package/lib/bridge/main.js.map +1 -1
- package/lib/index.js +73 -0
- package/lib/index.js.map +1 -1
- package/lib/types/agent-setup.d.ts +16 -0
- package/lib/types/approval.d.ts +44 -0
- package/lib/types/bridge/dsh-client.d.ts +9 -0
- package/lib/types/index.d.ts +8 -0
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
- 流式回复:DSH Agent 的 `assistant/chunk` 通过本地 SSE 推送到微信(批量发送,不刷屏)。
|
|
21
21
|
- 超时安抚:DSH 超过 5 分钟无输出时自动发一条“还在处理”的消息。
|
|
22
22
|
- 主动通知:agent 可通过 `wechat_notify` 工具在任务完成 / 失败 / 需要确认时主动推送微信,内置节流(每小时 ≤6 条、每日 ≤50 条,超限排队延迟发送),规避个人号风控。
|
|
23
|
+
- **微信内审批**:agent 请求权限时推送审批消息到微信,回复 `/yes` 批准、`/no` 拒绝;超时自动拒绝(fail-closed),仅绑定账号本人可裁决,不影响桌面 GUI 会话。
|
|
24
|
+
- 防卡死:微信会话自动注入通道约束提示词,禁用浏览器端交互式选项工具(手机看不到会永久阻塞),改用纯文本编号选项。
|
|
23
25
|
- 文件双向:微信发图片/文件给 DSH;DSH 回复中提到的本地文件会自动推回微信。
|
|
24
26
|
- 消息队列:处理中收到的普通消息会排队,等当前任务结束后继续处理。
|
|
25
27
|
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# 竞争差异化实施方案
|
|
2
|
+
|
|
3
|
+
> 背景:GitHub 上已有 19 个 dsh-wechat-bridge 同类仓库(2026-08 调研)。
|
|
4
|
+
> 领先者 gtaifu(8★,占住 npm 无作用域名)、Kairos0922(功能最全:审批/多用户/出站限流)、
|
|
5
|
+
> msg-hub(多渠道+主动推送)、NattoCB(崩溃安全叙事)。本文档是我们的反超方案。
|
|
6
|
+
>
|
|
7
|
+
> 定位一句话:**"唯一一个 agent 自己能管理的微信桥——面板、审批、防风控、崩不坏,装上就不用管。"**
|
|
8
|
+
|
|
9
|
+
## 一、已核实的技术底座(方案前提)
|
|
10
|
+
|
|
11
|
+
| 结论 | 出处 |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `agents.create/resume` 支持 `setup?: AgentSetup` 钩子,回调接收 agent 作用域 `agentCtx`,其中注册的内容在 agent 公布前生效,scope 过滤只影响该 agent | `@deepseek-ai/dsh-agent` CreateAgentOptions/ResumeAgentOptions |
|
|
14
|
+
| 审批走 `ctx.on('approval/request', (req, next) => outcome)` 瀑布事件;outcome 词表 `'allowed-once'/'rejected'/'cancelled'/'unavailable'`;无应答器时 fail-closed | `@deepseek-ai/dsh-user-approval` |
|
|
15
|
+
| `ctx.userQuestions.registerProvider()` 全局仅一个活跃 provider,且校验"精确存活根 agent"——scoped provider 可行性待验证 | `@deepseek-ai/dsh-user-questions` |
|
|
16
|
+
| 系统提示词可按 scope 注入:`system-prompt/assemble` 瀑布(scope 过滤)或 `systemPrompt.section()` | `@deepseek-ai/dsh-system-prompt` |
|
|
17
|
+
| 我们当前代码无 `ask_user_question` 防护、无审批应答 | 本仓库 grep 确认 |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 二、P0:补"一票否决"短板(目标 v0.4.0)
|
|
22
|
+
|
|
23
|
+
### P0-1 `ask_user_question` 防卡死(估 0.5 天)
|
|
24
|
+
|
|
25
|
+
**问题**:微信会话里 agent 调用交互式选项工具时,选项只弹在浏览器 GUI,手机端看不到,agent 永久阻塞。
|
|
26
|
+
|
|
27
|
+
**方案**(双保险):
|
|
28
|
+
|
|
29
|
+
1. **提示词注入(主)**:在 `ensureAgent` 的 `agents.create`/`agents.resume` 调用中加 `setup` 钩子,通过 `agentCtx` 注册 scoped 提示词段落(order 取工具指导段 100–199):
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
你正在通过微信与用户对话。用户只能看到纯文本消息,无法看到也无法点击任何
|
|
33
|
+
交互式选项界面。绝对不要使用 ask_user_question 等交互式选项工具——改用纯
|
|
34
|
+
文本列出编号选项让用户回复数字;需要确认时直接以问句结尾等待回复。
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
2. **护栏(备)**:`setup` 里同步注册 `agentCtx.on('approval/request')` 之前,先验证能否在 scoped ctx 上 `userQuestions.registerProvider`;若可行,provider 直接把问题编号发微信、等下一条消息作答(这就从"防卡死"升级成"微信原生问答",比 NattoCB 的纯回避更强)。若不可行(全局唯一 provider 冲突),仅保留提示词注入。
|
|
38
|
+
|
|
39
|
+
**改动文件**:`src/index.ts`(ensureAgent 的 create/resume 加 setup)、新增 `src/agent-setup.ts`。
|
|
40
|
+
**验证**:单测 mock agentCtx;真机用"帮我选 A 还是 B"类提示复现。
|
|
41
|
+
|
|
42
|
+
### P0-2 微信内审批 `/yes` `/no`(估 2 天)⭐ 核心卖点
|
|
43
|
+
|
|
44
|
+
**架构**:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
agent 请求权限
|
|
48
|
+
→ ctx.approval 瀑布 'approval/request'(scope 过滤,只到我们的 agent)
|
|
49
|
+
→ 我们的应答器(setup 中经 agentCtx.on 注册):
|
|
50
|
+
1. 反查 agent → accountId(ensureAgent 建 agent→accountId 反向 Map)
|
|
51
|
+
2. 经 daemon 推送微信:⚠️ 审批请求
|
|
52
|
+
工具:bash 原因:需要删除临时目录
|
|
53
|
+
命令:rm -rf /tmp/xxx
|
|
54
|
+
回复 /yes 批准,/no 拒绝(5 分钟超时默认拒绝)
|
|
55
|
+
3. 挂起 Promise,存 pendingApprovals: Map<accountId, {resolve, timer, req}>
|
|
56
|
+
4. 微信回复到达 → commands/router 优先匹配 /yes|/no|1|2 → resolve
|
|
57
|
+
5. 超时 → resolve('rejected') + 微信告知"已超时自动拒绝"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**安全约束**(沿用我们刚修的发送者校验教训,fail-closed):
|
|
61
|
+
- 只应答**该 accountId 自己 agent** 的审批;`/yes` 只能由 pending 审批所属的微信号发出(router 里按 from_user_id 严格匹配)。
|
|
62
|
+
- 审批详情里的命令/路径原样展示(用户要看清再批),但 context_token 等凭证不落日志。
|
|
63
|
+
- 桥未连接/ daemon 离线时:监听者不注册或立即 `next()` 交回 GUI 应答器——**绝不阻塞也不吞审批**。
|
|
64
|
+
- 仅一条 pending 时允许回复 `1`/`2` 快捷应答(对齐 Kairos0922 体验)。
|
|
65
|
+
|
|
66
|
+
**配置项**(plugin config,面板可改):
|
|
67
|
+
- `approvalTimeoutSec`(默认 300)
|
|
68
|
+
- `approvalViaWechat`(默认 true;false 时全部 `next()` 交回 GUI)
|
|
69
|
+
|
|
70
|
+
**改动文件**:新增 `src/approval.ts`(应答器+pending 管理);`src/index.ts`(ensureAgent setup 注册、agent→accountId 反查 Map、daemon 内部 API `/api/approval/push`);`src/bridge/commands/router.ts` + `handlers.ts`(`/yes` `/no` 命令);`src/bridge/main.ts`(审批推送走批量发送通道但**跳过排队直接发**——审批是交互刚需)。
|
|
71
|
+
**验证**:单测(mock ctx + 假 daemon);真机触发一个需要权限的工具调用。
|
|
72
|
+
|
|
73
|
+
### P0-3 证据型 README 重写(估 0.5 天)
|
|
74
|
+
|
|
75
|
+
学 gtaifu 的信任排版,但基于真实验证:
|
|
76
|
+
|
|
77
|
+
1. 顶部加 **30 秒演示 GIF**(见 P2-1,先占位)。
|
|
78
|
+
2. 「已验证」矩阵:登录 / 消息环 / 媒体收发 / 断线重连 / 会话 resume / `/stop` `/clear` 安全校验——逐项 ✅ + 验证日期,每次发版更新。
|
|
79
|
+
3. 「安全模型」章节:发送者校验 fail-closed、内部 API token 鉴权 + 仅回环、审批归属校验。
|
|
80
|
+
4. 「与同类方案对比」表(客观矩阵:审批 / Web 面板 / 三端守护 / 主动推送+节流 / 模型工具 / 崩溃恢复),只写已证实项。
|
|
81
|
+
5. 兼容性表(Node / DSH 版本 / 三端 OS,含最后验证日期)。
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 三、P1:体验差异化(目标 v0.5.0)
|
|
86
|
+
|
|
87
|
+
1. **上下文用量尾注**(估 1 天):每轮回复附 `🧮 12.0k / 32.0k`,超 80% 提示 `/new`。
|
|
88
|
+
- 待验证:token 用量数据源——查 session 事件流/agent 状态 API 是否暴露 usage;若无则附"轮数+历史长度"退化指标。
|
|
89
|
+
2. **多用户扫码配对 + 信任集**(估 2 天):首人扫码自动信任(bootstrap)、后人面板确认、可吊销;会话/偏好 per-user 隔离。README 升级「安全模型」章节。
|
|
90
|
+
3. **崩溃安全加固**(估 2 天,吸收 LouisHaoL 封存教训):
|
|
91
|
+
- 跨进程轮询锁(`data/poll.lock`,带心跳,防双实例双写)
|
|
92
|
+
- 入站消息 `message_id` 去重表(崩溃重投直接跳过)
|
|
93
|
+
- 会话 resume 失败 → 隔离损坏映射 + 重建(我们已有 fallback,补"隔离留证")
|
|
94
|
+
- 完成后 README 可写"结构上崩溃安全"。
|
|
95
|
+
4. **媒体矩阵补齐 + 实测表**:入站语音转写状态、出站图片/视频,README 放方向×类型实测表。
|
|
96
|
+
|
|
97
|
+
## 四、P2:传播获客(持续,配合 market 上架)
|
|
98
|
+
|
|
99
|
+
1. **演示 GIF**:用 record-browser-gif 流程录「扫码→发消息→流式回复→面板管理」,`docs/screenshots/` 落 GitHub 托管图,README 顶部 + market 详情页。
|
|
100
|
+
2. **英文 README**(README.en.md,双语互链)。
|
|
101
|
+
3. **Gitee 镜像** + README 加镜像徽章。
|
|
102
|
+
4. **发文**:#2082 合并进 dsh-market 后,掘金/V2EX/即刻发实测文(带 GIF)。
|
|
103
|
+
5. market 上架资料复用对比表与 GIF。
|
|
104
|
+
|
|
105
|
+
## 五、不做清单(明确放弃)
|
|
106
|
+
|
|
107
|
+
- ❌ embedding 智能路由/多项目自动分流:LouisHaoL 已验证此路有竞态深坑并封存;我们主打"命令简单、行为可预测"。
|
|
108
|
+
- ❌ 现阶段扩 QQ/飞书:先把微信做到品类第一;多渠道写进 roadmap 即可。
|
|
109
|
+
|
|
110
|
+
## 六、版本与里程碑
|
|
111
|
+
|
|
112
|
+
| 版本 | 内容 | 发布动作 |
|
|
113
|
+
|---|---|---|
|
|
114
|
+
| v0.4.0 | P0-1 防卡死 + P0-2 审批 + P0-3 README | 走 TP 发布 SOP(tag → Actions) |
|
|
115
|
+
| v0.5.0 | P1-1 用量尾注 + P1-3 崩溃安全 | 同上 |
|
|
116
|
+
| v0.6.0 | P1-2 多用户 + P1-4 媒体矩阵 | 同上 + 发文 |
|
|
117
|
+
|
|
118
|
+
## 七、开放问题验证结果(2026-08-21 已核实)
|
|
119
|
+
|
|
120
|
+
1. ✅ **scoped `systemPrompt.section()` 只作用于该 agent**:`PromptLayer` 按 `ScopedLayers` 分层,官方注释明确"per-agent override 需经该 agent 的 `agent.ctx` 注册",scoped 段落会遮蔽同名全局段落。
|
|
121
|
+
2. ❌ **`userQuestions.registerProvider` 不支持 scope 隔离**:provider 存在共享单例上,重复注册抛 `DUPLICATE_PROVIDER`。→ P0-1 采用提示词注入(已实现),微信原生问答不可行,放弃。
|
|
122
|
+
3. ⏳ token 用量数据源待查(P1-1 动工前再验证)。
|
|
123
|
+
4. ✅ **审批瀑布兜底**:监听者抛异常 → 归一化为 `'unavailable'`;`req.signal` 中断 → `'cancelled'`;永不 resolve 的监听者会一直挂到 signal 中断——所以我们自己的超时定时器是必需的(已实现,`settle` 与其不冲突)。
|
|
124
|
+
|
|
125
|
+
## 八、实施进度
|
|
126
|
+
|
|
127
|
+
- ✅ **v0.4.0(P0 全部完成,2026-08-21)**:P0-1 防卡死(scoped 提示词段落,`src/agent-setup.ts`)、P0-2 微信审批(`src/approval.ts` + daemon `/approval` 端点 + `/yes` `/no` 优先命令)、typecheck/build 全绿。P0-3 证据型 README 部分完成(功能清单已更新,「已验证」矩阵与对比表待真机验证后补)。
|
|
128
|
+
- ⏳ P1 / P2 未开始。
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** 微信通道提示词段落名(scoped 注册,与同名的全局段落互不影响)。 */
|
|
2
|
+
export const WECHAT_CHANNEL_SECTION = 'wechat-bridge-channel';
|
|
3
|
+
/**
|
|
4
|
+
* 微信通道行为约束。order 150 落在工具指导段(100–199)区间。
|
|
5
|
+
* 这段文字会在每次提示词装配时进入该 agent 的系统提示词。
|
|
6
|
+
*/
|
|
7
|
+
export const WECHAT_CHANNEL_PROMPT = [
|
|
8
|
+
'你正在通过「微信桥」与用户对话:用户在手机微信里收发消息,只能看到纯文本,看不到电脑屏幕。',
|
|
9
|
+
'绝对不要使用交互式选项/提问工具(如 ask_user_question):选项界面只会弹在电脑浏览器上,微信里的用户看不到也无法点击,调用后你会永久卡住、回复永远发不出去。',
|
|
10
|
+
'需要用户做选择或确认时,直接用纯文本列出编号选项(1. 2. 3.),以问句结尾等待用户用普通消息回复数字或文字,然后继续。',
|
|
11
|
+
'你接入了跨会话记忆库:当用户提到过去的决定、项目状态、偏好(例如"某某插件是不是卸载了"),而你不能确定时,先调用 memory_search 查证再回答,不要仅凭本会话上下文猜测。',
|
|
12
|
+
'回复尽量分段清晰、适合手机阅读;长内容先说结论。',
|
|
13
|
+
].join('\n');
|
|
14
|
+
export function createWechatAgentSetup(deps) {
|
|
15
|
+
const log = deps.log ?? (() => { });
|
|
16
|
+
return (agentCtx) => {
|
|
17
|
+
try {
|
|
18
|
+
const systemPrompt = agentCtx.get('systemPrompt');
|
|
19
|
+
systemPrompt?.section?.({ name: WECHAT_CHANNEL_SECTION, order: 150, text: WECHAT_CHANNEL_PROMPT });
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
log('systemPrompt section registration failed', {
|
|
23
|
+
accountId: deps.accountId,
|
|
24
|
+
error: err instanceof Error ? err.message : String(err),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (deps.approval) {
|
|
28
|
+
const approval = deps.approval;
|
|
29
|
+
try {
|
|
30
|
+
// dsh-user-approval 的 Events 增强未必在本插件的类型链里,这里用最小结构注册。
|
|
31
|
+
const on = agentCtx.on;
|
|
32
|
+
on.call(agentCtx, 'approval/request', (req, next) => approval.handleRequest(deps.accountId, req, next));
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
log('approval listener registration failed', {
|
|
36
|
+
accountId: deps.accountId,
|
|
37
|
+
error: err instanceof Error ? err.message : String(err),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=agent-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-setup.js","sourceRoot":"","sources":["../src/agent-setup.ts"],"names":[],"mappings":"AAcA,0CAA0C;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAA;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,+CAA+C;IAC/C,yFAAyF;IACzF,gEAAgE;IAChE,6FAA6F;IAC7F,0BAA0B;CAC3B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAaZ,MAAM,UAAU,sBAAsB,CAAC,IAA0B;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAClC,OAAO,CAAC,QAAiB,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAiC,CAAA;YACjF,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAA;QACpG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,0CAA0C,EAAE;gBAC9C,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC9B,IAAI,CAAC;gBACH,sDAAsD;gBACtD,MAAM,EAAE,GAAI,QAEV,CAAC,EAAE,CAAA;gBACL,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;YACzG,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,uCAAuC,EAAE;oBAC3C,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
|
package/lib/approval.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 微信审批管理器(host 侧)。
|
|
3
|
+
*
|
|
4
|
+
* 把 DSH 内核的 `approval/request` 瀑布事件桥到微信:agent 请求权限时推一条
|
|
5
|
+
* 审批消息到手机,用户回复 /yes /no 即完成裁决。设计原则:
|
|
6
|
+
*
|
|
7
|
+
* - fail-closed:超时、daemon 不可达、请求被撤销时都收敛到拒绝/交回其他应答器,
|
|
8
|
+
* 绝不静默放行,也绝不把审批悬到永远。
|
|
9
|
+
* - 单 pending:同一账号同一时刻只有一条待审批,新请求直接 `next()` 交回
|
|
10
|
+
* 瀑布下游(如桌面 GUI),避免多条审批在微信里错乱堆叠。
|
|
11
|
+
* - 归属严格:decide 只裁决本账号的 pending(daemon 侧已按 from_user_id 校验
|
|
12
|
+
* 发送者,双保险)。
|
|
13
|
+
*/
|
|
14
|
+
export function formatApprovalText(req, timeoutMs) {
|
|
15
|
+
const minutes = Math.max(1, Math.round(timeoutMs / 60_000));
|
|
16
|
+
return [
|
|
17
|
+
'⚠️ DSH 任务需要你的批准',
|
|
18
|
+
'',
|
|
19
|
+
`工具:${req.toolName}`,
|
|
20
|
+
`原因:${req.reason?.trim() || '(未提供说明)'}`,
|
|
21
|
+
'',
|
|
22
|
+
'回复 /yes 批准,/no 拒绝。',
|
|
23
|
+
`${minutes} 分钟内未回复将自动拒绝。`,
|
|
24
|
+
].join('\n');
|
|
25
|
+
}
|
|
26
|
+
export function createApprovalManager(deps) {
|
|
27
|
+
const pending = new Map();
|
|
28
|
+
const log = deps.log ?? (() => { });
|
|
29
|
+
function settle(accountId, entry, outcome) {
|
|
30
|
+
// 身份比对:map 里可能已是另一条更新的 pending,不能误删。
|
|
31
|
+
if (pending.get(accountId) !== entry)
|
|
32
|
+
return;
|
|
33
|
+
pending.delete(accountId);
|
|
34
|
+
clearTimeout(entry.timer);
|
|
35
|
+
entry.resolve(outcome);
|
|
36
|
+
}
|
|
37
|
+
async function handleRequest(accountId, req, next) {
|
|
38
|
+
if (pending.has(accountId)) {
|
|
39
|
+
log('approval already pending, hand off to next answerer', { accountId, toolName: req.toolName });
|
|
40
|
+
return next();
|
|
41
|
+
}
|
|
42
|
+
// pending 必须先于 push 同步登记:否则并发第二请求会在 push 的 await
|
|
43
|
+
// 窗口内同样通过 has() 检查,两条审批互相覆盖丢失。
|
|
44
|
+
let entry;
|
|
45
|
+
const promise = new Promise((resolve) => {
|
|
46
|
+
entry = {
|
|
47
|
+
resolve,
|
|
48
|
+
toolName: req.toolName,
|
|
49
|
+
timer: setTimeout(() => {
|
|
50
|
+
settle(accountId, entry, 'rejected');
|
|
51
|
+
log('approval timed out, auto-rejected', { accountId, toolName: req.toolName });
|
|
52
|
+
void deps.push(`⏱ 审批超时,已自动拒绝:${req.toolName}`).catch(() => false);
|
|
53
|
+
}, deps.timeoutMs),
|
|
54
|
+
};
|
|
55
|
+
// 请求方撤销(如任务被 /stop):立即收敛,迟到回复不再有效。
|
|
56
|
+
if (req.signal) {
|
|
57
|
+
const onAbort = () => settle(accountId, entry, 'cancelled');
|
|
58
|
+
entry.onAbort = onAbort;
|
|
59
|
+
if (req.signal.aborted)
|
|
60
|
+
settle(accountId, entry, 'cancelled');
|
|
61
|
+
else
|
|
62
|
+
req.signal.addEventListener('abort', onAbort, { once: true });
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
pending.set(accountId, entry);
|
|
66
|
+
const delivered = await deps.push(formatApprovalText(req, deps.timeoutMs)).catch(() => false);
|
|
67
|
+
if (!delivered) {
|
|
68
|
+
// 推送失败:撤销 pending(清理定时器与信号监听)并交回瀑布下游。
|
|
69
|
+
if (pending.get(accountId) === entry)
|
|
70
|
+
pending.delete(accountId);
|
|
71
|
+
clearTimeout(entry.timer);
|
|
72
|
+
if (req.signal && entry.onAbort)
|
|
73
|
+
req.signal.removeEventListener('abort', entry.onAbort);
|
|
74
|
+
log('approval push failed, hand off to next answerer', { accountId, toolName: req.toolName });
|
|
75
|
+
return next();
|
|
76
|
+
}
|
|
77
|
+
log('approval pushed to wechat', { accountId, toolName: req.toolName });
|
|
78
|
+
return promise;
|
|
79
|
+
}
|
|
80
|
+
function decide(accountId, approved) {
|
|
81
|
+
const entry = pending.get(accountId);
|
|
82
|
+
if (!entry)
|
|
83
|
+
return { ok: false, reason: 'no-pending' };
|
|
84
|
+
const toolName = entry.toolName;
|
|
85
|
+
settle(accountId, entry, approved ? 'allowed-once' : 'rejected');
|
|
86
|
+
log('approval decided via wechat', { accountId, toolName, approved });
|
|
87
|
+
return { ok: true, toolName };
|
|
88
|
+
}
|
|
89
|
+
function hasPending(accountId) {
|
|
90
|
+
return pending.has(accountId);
|
|
91
|
+
}
|
|
92
|
+
function dispose() {
|
|
93
|
+
for (const [accountId, entry] of [...pending]) {
|
|
94
|
+
settle(accountId, entry, 'cancelled');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { handleRequest, decide, hasPending, dispose };
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=approval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/bridge/commands/handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/bridge/commands/handlers.ts"],"names":[],"mappings":"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"}
|
package/lib/bridge/dsh-client.js
CHANGED
|
@@ -50,6 +50,22 @@ export class DshClient {
|
|
|
50
50
|
signal: AbortSignal.timeout(10_000),
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Forward the owner's /yes /no decision to the host plugin's approval manager.
|
|
55
|
+
* `reason` is 'no-pending' (nothing waiting / timed out) or 'disabled'.
|
|
56
|
+
*/
|
|
57
|
+
async decideApproval(sessionId, approved) {
|
|
58
|
+
const res = await fetch(`${this.baseUrl}/api/approval/decide`, {
|
|
59
|
+
method: 'POST',
|
|
60
|
+
headers: this.headers(),
|
|
61
|
+
body: JSON.stringify({ sessionId, approved }),
|
|
62
|
+
signal: AbortSignal.timeout(10_000),
|
|
63
|
+
});
|
|
64
|
+
if (!res.ok) {
|
|
65
|
+
throw new Error(`approval/decide HTTP ${res.status}`);
|
|
66
|
+
}
|
|
67
|
+
return res.json();
|
|
68
|
+
}
|
|
53
69
|
async listProjects() {
|
|
54
70
|
const res = await fetch(`${this.baseUrl}/api/projects`, {
|
|
55
71
|
headers: this.headers(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsh-client.js","sourceRoot":"","sources":["../../src/bridge/dsh-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dsh-client.js","sourceRoot":"","sources":["../../src/bridge/dsh-client.ts"],"names":[],"mappings":"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"}
|