botmux 2.71.4 → 2.71.5
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -10
- package/dist/cli.js.map +1 -1
- package/dist/core/ask-api.d.ts +2 -20
- package/dist/core/ask-api.d.ts.map +1 -1
- package/dist/core/ask-api.js +2 -25
- package/dist/core/ask-api.js.map +1 -1
- package/dist/core/ask-args.d.ts +3 -3
- package/dist/core/ask-args.js +3 -3
- package/dist/core/ask-broker.d.ts +3 -1
- package/dist/core/ask-broker.d.ts.map +1 -1
- package/dist/core/ask-broker.js +20 -5
- package/dist/core/ask-broker.js.map +1 -1
- package/dist/core/ask-types.d.ts +3 -8
- package/dist/core/ask-types.d.ts.map +1 -1
- package/dist/core/ask-types.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +14 -35
- package/dist/daemon.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +1 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +1 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/ask-card.js +4 -7
- package/dist/im/lark/ask-card.js.map +1 -1
- package/package.json +1 -1
package/dist/core/ask-api.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pure helpers for the daemon's `POST /api/asks` IPC route.
|
|
3
3
|
*
|
|
4
|
-
* Kept separate from daemon.ts so the body-validator
|
|
5
|
-
*
|
|
6
|
-
* registering bots, or mounting a full session map.
|
|
4
|
+
* Kept separate from daemon.ts so the body-validator is unit-testable without
|
|
5
|
+
* spinning up an HTTP server, registering bots, or mounting a full session map.
|
|
7
6
|
*/
|
|
8
7
|
import type { AskQuestion } from './ask-types.js';
|
|
9
8
|
export interface AskApiBody {
|
|
@@ -15,8 +14,6 @@ export interface AskApiBody {
|
|
|
15
14
|
questions: AskQuestion[];
|
|
16
15
|
/** Already in milliseconds. CLI side converts from `--timeout` seconds. */
|
|
17
16
|
timeoutMs: number;
|
|
18
|
-
/** Empty array → use the §6 fallback chain. */
|
|
19
|
-
approvers: string[];
|
|
20
17
|
}
|
|
21
18
|
export type AskApiBodyError = 'bad_body' | 'bad_sessionId' | 'bad_chatId' | 'bad_larkAppId' | 'bad_rootMessageId' | 'bad_prompt' | 'bad_timeoutMs' | 'bad_options' | 'bad_option_shape' | 'bad_option_key' | 'bad_option_label' | 'duplicate_option_key' | 'bad_questions' | 'bad_question_shape' | 'bad_multiSelect';
|
|
22
19
|
/** Validate the request body. Returns either the parsed body or an error code
|
|
@@ -29,19 +26,4 @@ export type AskApiBodyError = 'bad_body' | 'bad_sessionId' | 'bad_chatId' | 'bad
|
|
|
29
26
|
export declare function parseAskBody(raw: unknown): AskApiBody | {
|
|
30
27
|
error: AskApiBodyError;
|
|
31
28
|
};
|
|
32
|
-
/** Resolve the approver allowlist per §6 fallback chain:
|
|
33
|
-
* 1. explicit `--approver` list from CLI args (non-empty wins outright)
|
|
34
|
-
* 2. session.ownerOpenId ∩ bot.allowedUsers (single-owner topic chats)
|
|
35
|
-
* 3. bot.allowedUsers (shared chats / no owner / owner not in allow)
|
|
36
|
-
*
|
|
37
|
-
* Pure function: caller injects the lookups. The daemon wires
|
|
38
|
-
* `getBotAllowedUsers = (id) => getBot(id).resolvedAllowedUsers` and
|
|
39
|
-
* `getSessionOwner` = scan over activeSessions; tests pass stub funcs. */
|
|
40
|
-
export declare function resolveAskApprovers(args: {
|
|
41
|
-
larkAppId: string;
|
|
42
|
-
sessionId: string;
|
|
43
|
-
explicit: ReadonlyArray<string>;
|
|
44
|
-
getBotAllowedUsers: (larkAppId: string) => ReadonlyArray<string>;
|
|
45
|
-
getSessionOwner: (sessionId: string) => string | undefined;
|
|
46
|
-
}): Set<string>;
|
|
47
29
|
//# sourceMappingURL=ask-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-api.d.ts","sourceRoot":"","sources":["../../src/core/ask-api.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ask-api.d.ts","sourceRoot":"","sources":["../../src/core/ask-api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAa,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yCAAyC;IACzC,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,eAAe,GACf,YAAY,GACZ,eAAe,GACf,mBAAmB,GACnB,YAAY,GACZ,eAAe,GACf,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,GAClB,sBAAsB,GACtB,eAAe,GACf,oBAAoB,GACpB,iBAAiB,CAAC;AAkCtB;;;;;;gCAMgC;AAChC,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG;IAAE,KAAK,EAAE,eAAe,CAAA;CAAE,CAuDlF"}
|
package/dist/core/ask-api.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pure helpers for the daemon's `POST /api/asks` IPC route.
|
|
3
3
|
*
|
|
4
|
-
* Kept separate from daemon.ts so the body-validator
|
|
5
|
-
*
|
|
6
|
-
* registering bots, or mounting a full session map.
|
|
4
|
+
* Kept separate from daemon.ts so the body-validator is unit-testable without
|
|
5
|
+
* spinning up an HTTP server, registering bots, or mounting a full session map.
|
|
7
6
|
*/
|
|
8
7
|
/** 校验单个 option 对象,返回解析后的 AskOption 或错误码。 */
|
|
9
8
|
function parseOption(o) {
|
|
@@ -69,9 +68,6 @@ export function parseAskBody(raw) {
|
|
|
69
68
|
r.timeoutMs < 1000) {
|
|
70
69
|
return { error: 'bad_timeoutMs' };
|
|
71
70
|
}
|
|
72
|
-
const approvers = Array.isArray(r.approvers)
|
|
73
|
-
? r.approvers.filter((s) => typeof s === 'string' && s.trim().length > 0)
|
|
74
|
-
: [];
|
|
75
71
|
let questions;
|
|
76
72
|
if (Array.isArray(r.questions)) {
|
|
77
73
|
// 新格式:questions[] 多问多选
|
|
@@ -115,25 +111,6 @@ export function parseAskBody(raw) {
|
|
|
115
111
|
rootMessageId: r.rootMessageId,
|
|
116
112
|
questions,
|
|
117
113
|
timeoutMs: r.timeoutMs,
|
|
118
|
-
approvers,
|
|
119
114
|
};
|
|
120
115
|
}
|
|
121
|
-
/** Resolve the approver allowlist per §6 fallback chain:
|
|
122
|
-
* 1. explicit `--approver` list from CLI args (non-empty wins outright)
|
|
123
|
-
* 2. session.ownerOpenId ∩ bot.allowedUsers (single-owner topic chats)
|
|
124
|
-
* 3. bot.allowedUsers (shared chats / no owner / owner not in allow)
|
|
125
|
-
*
|
|
126
|
-
* Pure function: caller injects the lookups. The daemon wires
|
|
127
|
-
* `getBotAllowedUsers = (id) => getBot(id).resolvedAllowedUsers` and
|
|
128
|
-
* `getSessionOwner` = scan over activeSessions; tests pass stub funcs. */
|
|
129
|
-
export function resolveAskApprovers(args) {
|
|
130
|
-
const explicit = args.explicit.filter((s) => s.trim().length > 0);
|
|
131
|
-
if (explicit.length > 0)
|
|
132
|
-
return new Set(explicit);
|
|
133
|
-
const allow = args.getBotAllowedUsers(args.larkAppId);
|
|
134
|
-
const owner = args.getSessionOwner(args.sessionId);
|
|
135
|
-
if (owner && allow.includes(owner))
|
|
136
|
-
return new Set([owner]);
|
|
137
|
-
return new Set(allow);
|
|
138
|
-
}
|
|
139
116
|
//# sourceMappingURL=ask-api.js.map
|
package/dist/core/ask-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-api.js","sourceRoot":"","sources":["../../src/core/ask-api.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ask-api.js","sourceRoot":"","sources":["../../src/core/ask-api.ts"],"names":[],"mappings":"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"}
|
package/dist/core/ask-args.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pure helpers for `botmux ask` argument parsing.
|
|
3
3
|
*
|
|
4
|
-
* Kept in its own file (no I/O, no env reads) so the CSV / timeout
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Kept in its own file (no I/O, no env reads) so the CSV / timeout parsing can
|
|
5
|
+
* be unit-tested without spinning up a daemon. The actual CLI dispatch
|
|
6
|
+
* (`cmdAsk`) lives in cli.ts and calls these helpers.
|
|
7
7
|
*/
|
|
8
8
|
import type { AskOption } from './ask-types.js';
|
|
9
9
|
export declare class AskArgsError extends Error {
|
package/dist/core/ask-args.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pure helpers for `botmux ask` argument parsing.
|
|
3
3
|
*
|
|
4
|
-
* Kept in its own file (no I/O, no env reads) so the CSV / timeout
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Kept in its own file (no I/O, no env reads) so the CSV / timeout parsing can
|
|
5
|
+
* be unit-tested without spinning up a daemon. The actual CLI dispatch
|
|
6
|
+
* (`cmdAsk`) lives in cli.ts and calls these helpers.
|
|
7
7
|
*/
|
|
8
8
|
export class AskArgsError extends Error {
|
|
9
9
|
code;
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* §3 / §6 / §7 / §8 of /tmp/botmux-ask.md.
|
|
9
9
|
*/
|
|
10
10
|
import type { AskCardDispatcher, AskClickOutcome, AskResult, CreateAskInput, PendingAsk } from './ask-types.js';
|
|
11
|
+
/** Wire the canTalk predicate. Called once during daemon bootstrap. */
|
|
12
|
+
export declare function setCanTalkChecker(fn: (larkAppId: string, chatId: string, openId: string) => boolean): void;
|
|
11
13
|
/** Wire the IM-side dispatcher. Called once during daemon bootstrap from
|
|
12
14
|
* daemon.ts after im/lark/ask-card.ts is constructed. */
|
|
13
15
|
export declare function setCardDispatcher(d: AskCardDispatcher): void;
|
|
@@ -62,7 +64,7 @@ export declare function submitAsk(args: {
|
|
|
62
64
|
/**
|
|
63
65
|
* 提交一段自定义回复(用户在话题里直接打字作答,替代点按钮)并 settle。
|
|
64
66
|
*
|
|
65
|
-
* 校验:askId 存在 / 未 settle / `by`
|
|
67
|
+
* 校验:askId 存在 / 未 settle / `by` 可 canTalk / text trim 后非空。
|
|
66
68
|
* settle 为 `kind:'answered'`,各问 `answers` 为空数组、`comment` 携带 trim 后原文
|
|
67
69
|
* (替代语义:没有任何选项被选中,CLI 侧 formatAnswer 用 comment 回落作答)。
|
|
68
70
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-broker.d.ts","sourceRoot":"","sources":["../../src/core/ask-broker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,cAAc,EACd,UAAU,EACX,MAAM,gBAAgB,CAAC;AAwBxB;0DAC0D;AAC1D,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAE5D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"ask-broker.d.ts","sourceRoot":"","sources":["../../src/core/ask-broker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,cAAc,EACd,UAAU,EACX,MAAM,gBAAgB,CAAC;AAwBxB,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,GACjE,IAAI,CAEN;AAeD;0DAC0D;AAC1D,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAE5D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAkErE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,eAAe,CA4BlB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;CACnD,GAAG,eAAe,CA2ClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,eAAe,CAiBlB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,UAAU,GAAG,SAAS,CAUzB;AAED;;;;;;;;;uCASuC;AACvC,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,eAAe,CAOlB;AAED;;;uEAGuE;AACvE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkBpD;AA8DD;kFACkF;AAClF,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED;oEACoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAGpE;AAED;qCACqC;AACrC,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAEjE;AAED;cACc;AACd,wBAAgB,UAAU,IAAI,MAAM,EAAE,CAErC;AAED;6EAC6E;AAC7E,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
|
package/dist/core/ask-broker.js
CHANGED
|
@@ -11,6 +11,21 @@ import { randomUUID } from 'node:crypto';
|
|
|
11
11
|
import { logger } from '../utils/logger.js';
|
|
12
12
|
const pending = new Map();
|
|
13
13
|
let dispatcher = null;
|
|
14
|
+
/** IM-side canTalk predicate, wired by the daemon at bootstrap. Lets the broker
|
|
15
|
+
* honour the bot's canTalk gate without importing Lark types: whoever may
|
|
16
|
+
* address the bot in this chat may answer its `botmux ask`. Returns false until
|
|
17
|
+
* wired, so an unwired broker authorizes no one (daemon always wires it). */
|
|
18
|
+
let canTalkChecker = null;
|
|
19
|
+
/** Wire the canTalk predicate. Called once during daemon bootstrap. */
|
|
20
|
+
export function setCanTalkChecker(fn) {
|
|
21
|
+
canTalkChecker = fn;
|
|
22
|
+
}
|
|
23
|
+
/** A click is authorized iff the clicker may `canTalk` to the bot in this chat.
|
|
24
|
+
* `botmux ask` is a talk-level interaction (answering the agent's question),
|
|
25
|
+
* so it follows the canTalk gate — not the stricter canOperate / allowedUsers. */
|
|
26
|
+
function isAuthorizedToAnswer(ask, by) {
|
|
27
|
+
return canTalkChecker?.(ask.larkAppId, ask.chatId, by) ?? false;
|
|
28
|
+
}
|
|
14
29
|
/** Window during which a settled ask is still queryable so race-losers get a
|
|
15
30
|
* precise `already_settled` outcome (and the card click handler can show
|
|
16
31
|
* "已被 X 答了" instead of a generic "已失效"). After this window expires,
|
|
@@ -67,7 +82,6 @@ export function registerAsk(input) {
|
|
|
67
82
|
chatId: input.chatId,
|
|
68
83
|
rootMessageId: input.rootMessageId,
|
|
69
84
|
sessionId: input.sessionId,
|
|
70
|
-
approvers: input.approvers,
|
|
71
85
|
questions: input.questions,
|
|
72
86
|
createdAt,
|
|
73
87
|
deadlineAt,
|
|
@@ -119,7 +133,7 @@ export function toggleAsk(args) {
|
|
|
119
133
|
return 'stale';
|
|
120
134
|
if (ask.settled)
|
|
121
135
|
return 'already_settled';
|
|
122
|
-
if (!ask
|
|
136
|
+
if (!isAuthorizedToAnswer(ask, args.by))
|
|
123
137
|
return 'unauthorized';
|
|
124
138
|
const question = ask.questions[args.questionIndex];
|
|
125
139
|
if (!question)
|
|
@@ -161,7 +175,7 @@ export function submitAsk(args) {
|
|
|
161
175
|
return 'stale';
|
|
162
176
|
if (ask.settled)
|
|
163
177
|
return 'already_settled';
|
|
164
|
-
if (!ask
|
|
178
|
+
if (!isAuthorizedToAnswer(ask, args.by))
|
|
165
179
|
return 'unauthorized';
|
|
166
180
|
// 构建最终答案数组(按问题顺序)
|
|
167
181
|
let answers;
|
|
@@ -204,7 +218,7 @@ export function submitAsk(args) {
|
|
|
204
218
|
/**
|
|
205
219
|
* 提交一段自定义回复(用户在话题里直接打字作答,替代点按钮)并 settle。
|
|
206
220
|
*
|
|
207
|
-
* 校验:askId 存在 / 未 settle / `by`
|
|
221
|
+
* 校验:askId 存在 / 未 settle / `by` 可 canTalk / text trim 后非空。
|
|
208
222
|
* settle 为 `kind:'answered'`,各问 `answers` 为空数组、`comment` 携带 trim 后原文
|
|
209
223
|
* (替代语义:没有任何选项被选中,CLI 侧 formatAnswer 用 comment 回落作答)。
|
|
210
224
|
*
|
|
@@ -220,7 +234,7 @@ export function submitCustomReply(args) {
|
|
|
220
234
|
return 'stale';
|
|
221
235
|
if (ask.settled)
|
|
222
236
|
return 'already_settled';
|
|
223
|
-
if (!ask
|
|
237
|
+
if (!isAuthorizedToAnswer(ask, args.by))
|
|
224
238
|
return 'unauthorized';
|
|
225
239
|
const text = args.text.trim();
|
|
226
240
|
if (!text)
|
|
@@ -383,5 +397,6 @@ export function _resetForTest() {
|
|
|
383
397
|
clearTimeout(ask.timeoutHandle);
|
|
384
398
|
pending.clear();
|
|
385
399
|
dispatcher = null;
|
|
400
|
+
canTalkChecker = null;
|
|
386
401
|
}
|
|
387
402
|
//# sourceMappingURL=ask-broker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-broker.js","sourceRoot":"","sources":["../../src/core/ask-broker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAsB5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;AACnD,IAAI,UAAU,GAA6B,IAAI,CAAC;AAEhD;;;iEAGiE;AACjE,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAEpC;0DAC0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,CAAoB;IACpD,UAAU,GAAG,CAAC,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,KAAqB;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAE/C,OAAO,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE;QACxC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,MAAM,CAAC,KAAK,EAAE;gBACZ,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,IAAI;gBACd,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACpB,kEAAkE;QAClE,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;QAExB,iBAAiB;QACjB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;QAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAU,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,GAAG,GAAoB;YAC3B,KAAK;YACL,KAAK;YACL,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS
|
|
1
|
+
{"version":3,"file":"ask-broker.js","sourceRoot":"","sources":["../../src/core/ask-broker.ts"],"names":[],"mappings":"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"}
|
package/dist/core/ask-types.d.ts
CHANGED
|
@@ -74,8 +74,8 @@ export interface AskJsonOutput {
|
|
|
74
74
|
timedOut: boolean;
|
|
75
75
|
}
|
|
76
76
|
/** Input accepted by broker.registerAsk. Caller (CLI subcommand → daemon IPC
|
|
77
|
-
* handler) is responsible for env validation
|
|
78
|
-
* the
|
|
77
|
+
* handler) is responsible for env validation and parameter parsing. Click
|
|
78
|
+
* authorization is the bot's canTalk gate, injected via `setCanTalkChecker`.
|
|
79
79
|
*
|
|
80
80
|
* v0.1.8 变更:`options`/`prompt` 字段替换为 `questions: ReadonlyArray<AskQuestion>`。 */
|
|
81
81
|
export interface CreateAskInput {
|
|
@@ -85,10 +85,6 @@ export interface CreateAskInput {
|
|
|
85
85
|
rootMessageId: string | null;
|
|
86
86
|
/** Session that issued the ask — used for audit + future replay scoping. */
|
|
87
87
|
sessionId: string;
|
|
88
|
-
/** Pre-resolved open_id allowlist. Empty set means no one can answer; the
|
|
89
|
-
* caller (not the broker) must enforce the §6 approver fallback chain so the
|
|
90
|
-
* broker stays IM-agnostic. */
|
|
91
|
-
approvers: ReadonlySet<string>;
|
|
92
88
|
/** 问题列表,调用方保证每问 `options.length ≥ 2` 且 key 唯一。 */
|
|
93
89
|
questions: ReadonlyArray<AskQuestion>;
|
|
94
90
|
/** Absolute deadline; computed by caller from `--timeout`. Broker won't
|
|
@@ -109,7 +105,6 @@ export interface PendingAsk {
|
|
|
109
105
|
chatId: string;
|
|
110
106
|
rootMessageId: string | null;
|
|
111
107
|
sessionId: string;
|
|
112
|
-
approvers: ReadonlySet<string>;
|
|
113
108
|
/** 问题列表,替代旧的 `options` + `prompt`。 */
|
|
114
109
|
questions: ReadonlyArray<AskQuestion>;
|
|
115
110
|
/** 当前已勾选答案快照。仅 daemon/card 内部使用;CLI IPC 边界不暴露。 */
|
|
@@ -127,7 +122,7 @@ export interface PendingAsk {
|
|
|
127
122
|
export type AskClickOutcome =
|
|
128
123
|
/** First valid click — caller's Promise resolves with `kind:'answered'`. */
|
|
129
124
|
'accepted'
|
|
130
|
-
/** Clicker'
|
|
125
|
+
/** Clicker can't canTalk to the bot in this chat — caller shows "你没有权限". */
|
|
131
126
|
| 'unauthorized'
|
|
132
127
|
/** No such askId, nonce mismatch, or unknown option — caller shows
|
|
133
128
|
* "此 ask 已失效(daemon 重启)". Covers the §8 stale-card case. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-types.d.ts","sourceRoot":"","sources":["../../src/core/ask-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;oCAGoC;AACpC,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;kDAEkD;AAClD,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,kDAAkD;IAClD,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;oDAWoD;AACpD,MAAM,MAAM,SAAS,GACjB;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,4CAA4C;IAC5C,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC;CACjB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,IAAI,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;CACjB,CAAC;AAEN;;;;gDAIgD;AAChD,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC;IAC3B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,qCAAqC;IACrC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;kFAIkF;AAClF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"ask-types.d.ts","sourceRoot":"","sources":["../../src/core/ask-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-types.js","sourceRoot":"","sources":["../../src/core/ask-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"ask-types.js","sourceRoot":"","sources":["../../src/core/ask-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0IH;8CAC8C;AAC9C,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA2F,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAkB7I,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA6ErD,OAAO,EAAE,oBAAoB,EAA6B,MAAM,uBAAuB,CAAC;AACxF,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA2F,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAkB7I,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA6ErD,OAAO,EAAE,oBAAoB,EAA6B,MAAM,uBAAuB,CAAC;AACxF,OAAO,KAAK,EAAE,sBAAsB,EAAiB,MAAM,wBAAwB,CAAC;AA8OpF,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCrK;AA0FD,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CA6ClB;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAIpB;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAGpB;AA+JD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,sBAAsB,GAAG,oBAAoB,CA0C5G;AAusCD;;;;;;;;;;GAUG;AACH,iBAAe,uBAAuB,CAAC,GAAG,EAAE;IAC1C,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;;;;GAaA;AAED,eAAO,MAAM,kCAAkC,gCAA0B,CAAC;AAwzC1E,wBAAsB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2alE"}
|
package/dist/daemon.js
CHANGED
|
@@ -79,8 +79,8 @@ import { resolveWait } from './workflows/wait.js';
|
|
|
79
79
|
import { replay } from './workflows/events/replay.js';
|
|
80
80
|
import { isValidRunId, readRunSnapshot } from './workflows/ops-projection.js';
|
|
81
81
|
import { AttemptResumeManager } from './workflows/attempt-resume.js';
|
|
82
|
-
import { setCardDispatcher as setAskCardDispatcher, registerAsk as registerAskBroker, findPendingAskByAnchor, submitCustomReply, } from './core/ask-broker.js';
|
|
83
|
-
import { parseAskBody
|
|
82
|
+
import { setCardDispatcher as setAskCardDispatcher, setCanTalkChecker as setAskCanTalkChecker, registerAsk as registerAskBroker, findPendingAskByAnchor, submitCustomReply, } from './core/ask-broker.js';
|
|
83
|
+
import { parseAskBody } from './core/ask-api.js';
|
|
84
84
|
import { computeCocoPickerKeys } from './core/coco-picker-keys.js';
|
|
85
85
|
import { createLarkAskCardDispatcher } from './im/lark/ask-card.js';
|
|
86
86
|
// ─── State ───────────────────────────────────────────────────────────────────
|
|
@@ -1407,37 +1407,13 @@ ipcRoute('POST', '/api/asks', async (req, res) => {
|
|
|
1407
1407
|
const parsed = parseAskBody(raw);
|
|
1408
1408
|
if ('error' in parsed)
|
|
1409
1409
|
return jsonRes(res, 400, { ok: false, error: parsed.error });
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
sessionId: parsed.sessionId,
|
|
1413
|
-
explicit: parsed.approvers,
|
|
1414
|
-
getBotAllowedUsers: (id) => {
|
|
1415
|
-
try {
|
|
1416
|
-
return getBot(id).resolvedAllowedUsers;
|
|
1417
|
-
}
|
|
1418
|
-
catch {
|
|
1419
|
-
return [];
|
|
1420
|
-
}
|
|
1421
|
-
},
|
|
1422
|
-
getSessionOwner: (sid) => {
|
|
1423
|
-
for (const ds of activeSessions.values()) {
|
|
1424
|
-
if (ds.session.sessionId === sid)
|
|
1425
|
-
return ds.ownerOpenId;
|
|
1426
|
-
}
|
|
1427
|
-
return undefined;
|
|
1428
|
-
},
|
|
1429
|
-
});
|
|
1430
|
-
if (approvers.size === 0) {
|
|
1431
|
-
// Nobody can answer — fail loud rather than registering a
|
|
1432
|
-
// guaranteed-timeout. CLI side maps this to exit 2.
|
|
1433
|
-
return jsonRes(res, 400, { ok: false, error: 'no_approvers' });
|
|
1434
|
-
}
|
|
1410
|
+
// 谁能答复 = 谁能在该 chat 跟 bot 说话(canTalk)。鉴权在 broker 点击时按注入的
|
|
1411
|
+
// canTalkChecker 判定(见下方 setAskCanTalkChecker),daemon 这里不再预解析 approver。
|
|
1435
1412
|
const result = await registerAskBroker({
|
|
1436
1413
|
larkAppId: parsed.larkAppId,
|
|
1437
1414
|
chatId: parsed.chatId,
|
|
1438
1415
|
rootMessageId: parsed.rootMessageId,
|
|
1439
1416
|
sessionId: parsed.sessionId,
|
|
1440
|
-
approvers,
|
|
1441
1417
|
questions: parsed.questions,
|
|
1442
1418
|
timeoutMs: parsed.timeoutMs,
|
|
1443
1419
|
});
|
|
@@ -2557,17 +2533,17 @@ async function handleThreadReply(data, ctx) {
|
|
|
2557
2533
|
return;
|
|
2558
2534
|
}
|
|
2559
2535
|
}
|
|
2560
|
-
// 自定义回复拦截:该话题有未结的 ask
|
|
2561
|
-
//
|
|
2562
|
-
//
|
|
2563
|
-
//
|
|
2564
|
-
//
|
|
2565
|
-
//
|
|
2536
|
+
// 自定义回复拦截:该话题有未结的 ask 时,把这条文字当答案,走 submitCustomReply
|
|
2537
|
+
// settle 掉 ask(替代选项语义),不再当作新一轮指令喂给 CLI。此时发起 ask 的 CLI
|
|
2538
|
+
// 正阻塞等结果,回什么都得先等 ask 结束,故无副作用。仅拦截纯文字(slash 命令 /
|
|
2539
|
+
// 回调 URL / workflow 已在上方各自 return,可用来中止)。答复权限 = canTalk,由
|
|
2540
|
+
// broker 在 submitCustomReply 内按注入的 canTalkChecker 判定:非授权人返回
|
|
2541
|
+
// 'unauthorized',这里 fall through 到正常路由。卡片由 broker.onSettle 自动 PATCH。
|
|
2566
2542
|
if (threadSenderOpenId && threadChatId) {
|
|
2567
2543
|
const askReplyText = cmdContent.trim();
|
|
2568
2544
|
if (askReplyText) {
|
|
2569
2545
|
const pendingAsk = findPendingAskByAnchor({ larkAppId, chatId: threadChatId, anchor });
|
|
2570
|
-
if (pendingAsk
|
|
2546
|
+
if (pendingAsk) {
|
|
2571
2547
|
const outcome = submitCustomReply({
|
|
2572
2548
|
askId: pendingAsk.askId,
|
|
2573
2549
|
by: threadSenderOpenId,
|
|
@@ -2951,6 +2927,9 @@ export async function startDaemon(botIndex) {
|
|
|
2951
2927
|
scheduleStore.startExternalWriteWatcher();
|
|
2952
2928
|
logger.info(`Bot ${idx}/${botConfigs.length}: ${cfg.larkAppId} (cli: ${cfg.cliId})`);
|
|
2953
2929
|
setAskCardDispatcher(createLarkAskCardDispatcher());
|
|
2930
|
+
// Honour the bot's canTalk gate for `botmux ask` answers: a clicker who may
|
|
2931
|
+
// address the bot in this chat may answer an implicit-approver ask.
|
|
2932
|
+
setAskCanTalkChecker((appId, chatId, openId) => evaluateTalk(appId, chatId, openId).allowed);
|
|
2954
2933
|
writePidFile();
|
|
2955
2934
|
const memoryDiagnostics = startMemoryDiagnostics();
|
|
2956
2935
|
// Publish self-descriptor for the dashboard registry. The dashboard sibling
|