@excitedjs/feishu-channel 0.2.0-beta.85 → 1.0.0-beta.87
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/feishu-channel.d.ts +34 -10
- package/dist/feishu-channel.d.ts.map +1 -1
- package/dist/feishu-channel.js +94 -306
- package/dist/feishu-channel.js.map +1 -1
- package/dist/feishu-gate-io.d.ts +26 -0
- package/dist/feishu-gate-io.d.ts.map +1 -0
- package/dist/feishu-gate-io.js +110 -0
- package/dist/feishu-gate-io.js.map +1 -0
- package/dist/feishu-gate.d.ts +79 -64
- package/dist/feishu-gate.d.ts.map +1 -1
- package/dist/feishu-gate.js +339 -216
- package/dist/feishu-gate.js.map +1 -1
- package/dist/feishu-mcp-tools.d.ts +42 -17
- package/dist/feishu-mcp-tools.d.ts.map +1 -1
- package/dist/feishu-mcp-tools.js +24 -145
- package/dist/feishu-mcp-tools.js.map +1 -1
- package/dist/feishu-session-inbound.d.ts +14 -0
- package/dist/feishu-session-inbound.d.ts.map +1 -0
- package/dist/feishu-session-inbound.js +225 -0
- package/dist/feishu-session-inbound.js.map +1 -0
- package/dist/feishu-session-ops.d.ts +81 -0
- package/dist/feishu-session-ops.d.ts.map +1 -0
- package/dist/feishu-session-ops.js +298 -0
- package/dist/feishu-session-ops.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/mutex.d.ts +9 -0
- package/dist/lib/mutex.d.ts.map +1 -0
- package/dist/lib/mutex.js +13 -0
- package/dist/lib/mutex.js.map +1 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +9 -8
- package/dist/provider.js.map +1 -1
- package/dist/tools/registry.d.ts +79 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +243 -0
- package/dist/tools/registry.js.map +1 -0
- package/package.json +4 -4
package/dist/feishu-channel.d.ts
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ChannelTarget, InboundTurnInput } from '@excitedjs/dreamux-types';
|
|
2
2
|
import type { FeishuBot } from './bot.js';
|
|
3
3
|
import { type PeerBot } from './chat-bots-store.js';
|
|
4
|
-
import { type
|
|
4
|
+
import { type FeishuToolName, type FeishuToolResultEnvelope } from './feishu-mcp-tools.js';
|
|
5
|
+
import { type FeishuChannelState } from './feishu-session-ops.js';
|
|
6
|
+
/**
|
|
7
|
+
* Logger shape used throughout the Feishu channel session — pino-style,
|
|
8
|
+
* fields-first, matching the neutral `DreamuxLogger` contract from the host.
|
|
9
|
+
* Re-exported from the barrel so tool authors don't need to reach into the
|
|
10
|
+
* private registry module.
|
|
11
|
+
*/
|
|
12
|
+
export type ChannelLogger = import('./feishu-mcp-tools.js').ChannelLogger;
|
|
5
13
|
export declare const RECEIVED_REACTION_EMOJI = "Get";
|
|
6
14
|
export declare const IN_PROGRESS_REACTION_EMOJI = "OnIt";
|
|
7
15
|
export interface WireChatBot {
|
|
@@ -33,12 +41,12 @@ export interface FeishuChannelSessionOptions {
|
|
|
33
41
|
* used as-is by the session and handed straight to the transport — both are
|
|
34
42
|
* pino-compatible, so there is no per-boundary adapter.
|
|
35
43
|
*/
|
|
36
|
-
log: DreamuxLogger;
|
|
44
|
+
log: import('@excitedjs/dreamux-types').DreamuxLogger;
|
|
37
45
|
/** Inject a fake bot (tests). Host wraps its `(row, secret)` seam into this. */
|
|
38
46
|
botFactory?: () => FeishuBot;
|
|
39
47
|
}
|
|
40
48
|
export interface FeishuInboundSubmitter {
|
|
41
|
-
submitTurn(input: InboundTurnInput, envelope: FeishuInboundEnvelope, hooks?: InboundDeliveryHooks): Promise<AgentRuntimeTurnResult>;
|
|
49
|
+
submitTurn(input: InboundTurnInput, envelope: FeishuInboundEnvelope, hooks?: import('@excitedjs/dreamux-types').InboundDeliveryHooks): Promise<import('@excitedjs/dreamux-types').AgentRuntimeTurnResult>;
|
|
42
50
|
}
|
|
43
51
|
export interface FeishuInboundEnvelope {
|
|
44
52
|
provider: 'builtin:feishu';
|
|
@@ -54,11 +62,31 @@ export declare class FeishuChannelSession {
|
|
|
54
62
|
private readonly opts;
|
|
55
63
|
readonly ref = "builtin:feishu";
|
|
56
64
|
readonly bot: FeishuBot;
|
|
57
|
-
|
|
65
|
+
/**
|
|
66
|
+
* In-memory session state. Exposed to the package-local helpers in
|
|
67
|
+
* `feishu-session-ops.ts` through the session handle; the class keeps the
|
|
68
|
+
* field readonly on the outside via typing (helpers only mutate Maps/Sets).
|
|
69
|
+
*/
|
|
70
|
+
readonly state: FeishuChannelState;
|
|
71
|
+
private readonly _accessMutex;
|
|
72
|
+
private readonly _botDisplayName;
|
|
58
73
|
constructor(opts: FeishuChannelSessionOptions);
|
|
74
|
+
/**
|
|
75
|
+
* Build a package-private handle the session helpers operate on. Keeps the
|
|
76
|
+
* class's `private` fields truly private while still letting extracted free
|
|
77
|
+
* functions reach them — structural typing + circular type imports make
|
|
78
|
+
* this cost-free.
|
|
79
|
+
*/
|
|
80
|
+
private get handle();
|
|
59
81
|
start(submitter: FeishuInboundSubmitter): Promise<void>;
|
|
60
82
|
close(): Promise<void>;
|
|
61
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Approve a pending pairing by its 6-hex code. Thin wrapper around the
|
|
85
|
+
* extracted helper so the method stays reachable on the class while the
|
|
86
|
+
* body lives in `feishu-session-ops.ts` (max-lines lint).
|
|
87
|
+
*/
|
|
88
|
+
approvePairingByCode(code: string): Promise<FeishuToolResultEnvelope>;
|
|
89
|
+
handleMcpTool(toolName: FeishuToolName, rawArguments: unknown): Promise<Record<string, unknown> | FeishuMcpListChatBotsResult>;
|
|
62
90
|
messageBelongsToChat(messageId: string, chatId: string): boolean;
|
|
63
91
|
/**
|
|
64
92
|
* Provider-owned target resolution (issue #209 binding store v2). Normalizes a
|
|
@@ -72,10 +100,6 @@ export declare class FeishuChannelSession {
|
|
|
72
100
|
private sendReply;
|
|
73
101
|
private addReaction;
|
|
74
102
|
private onMessage;
|
|
75
|
-
private sendIntroduceAck;
|
|
76
|
-
private setInboundReaction;
|
|
77
|
-
private clearInboundReaction;
|
|
78
|
-
private rememberPendingReceivedReactionClear;
|
|
79
103
|
}
|
|
80
104
|
/**
|
|
81
105
|
* Map a peer bot to the `list_chat_bots` wire shape. Exported so the core-owned
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feishu-channel.d.ts","sourceRoot":"","sources":["../src/feishu-channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feishu-channel.d.ts","sourceRoot":"","sources":["../src/feishu-channel.ts"],"names":[],"mappings":"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"}
|
package/dist/feishu-channel.js
CHANGED
|
@@ -1,22 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { detectIntroduce, introduceAckText, introduceDenyReason, introducedPeers, } from './introduce.js';
|
|
4
|
-
import { formatFeishuMessageForRuntime } from './feishu-message.js';
|
|
5
|
-
import { clearBaselineIfCurrent, listChatBots, observeKnownBot, pendingBaseline, recordBotAdded, trustIntroducedBots, trustedBotIds, } from './chat-bots-store.js';
|
|
6
|
-
import { dreamuxFeishuGate, loadDispatcherAccess, saveDispatcherAccess, } from './feishu-gate.js';
|
|
1
|
+
import { createFeishuBot } from './bot.js';
|
|
2
|
+
import { listChatBots, recordBotAdded, } from './chat-bots-store.js';
|
|
7
3
|
import { BUILTIN_FEISHU_PROVIDER_REF } from './provider-ref.js';
|
|
8
|
-
import {
|
|
4
|
+
import { AsyncMutex } from './lib/mutex.js';
|
|
5
|
+
import { FEISHU_TOOLS, } from './feishu-mcp-tools.js';
|
|
6
|
+
import { approvePairingByCode as sessionApprovePairingByCode, sendReply as sessionSendReply, addReaction as sessionAddReaction, sessionHandle, } from './feishu-session-ops.js';
|
|
7
|
+
import { onMessage as sessionOnMessage } from './feishu-session-inbound.js';
|
|
9
8
|
export const RECEIVED_REACTION_EMOJI = 'Get';
|
|
10
9
|
export const IN_PROGRESS_REACTION_EMOJI = 'OnIt';
|
|
11
|
-
const MAX_PENDING_RECEIVED_REACTION_CLEARS = 1024;
|
|
12
|
-
/**
|
|
13
|
-
* Appended to every delivered inbound's content as a standing guardrail: a
|
|
14
|
-
* channel message must be answered with the channel reply tool, not a plain
|
|
15
|
-
* assistant message. English to match the other model-facing strings in this
|
|
16
|
-
* layer (`FEISHU_SKILL_FALLBACK_NOTE`, the `<group_bots>` note). Placed at the
|
|
17
|
-
* very end of the body the runtime wraps into its `<channel>` block.
|
|
18
|
-
*/
|
|
19
|
-
const CHANNEL_REMINDER = '<channel-reminder>A message from this channel must be answered with the channel reply tool, not a plain assistant message. Acknowledge it with a brief reply through that tool first, then start the work.</channel-reminder>';
|
|
20
10
|
export class FeishuChannelCapabilityError extends Error {
|
|
21
11
|
toolName;
|
|
22
12
|
constructor(toolName) {
|
|
@@ -29,11 +19,18 @@ export class FeishuChannelSession {
|
|
|
29
19
|
opts;
|
|
30
20
|
ref = BUILTIN_FEISHU_PROVIDER_REF;
|
|
31
21
|
bot;
|
|
22
|
+
/**
|
|
23
|
+
* In-memory session state. Exposed to the package-local helpers in
|
|
24
|
+
* `feishu-session-ops.ts` through the session handle; the class keeps the
|
|
25
|
+
* field readonly on the outside via typing (helpers only mutate Maps/Sets).
|
|
26
|
+
*/
|
|
32
27
|
state = {
|
|
33
28
|
inboundReactions: new Map(),
|
|
34
29
|
pendingReceivedReactionClears: new Set(),
|
|
35
30
|
messageChats: new Map(),
|
|
36
31
|
};
|
|
32
|
+
_accessMutex = new AsyncMutex();
|
|
33
|
+
_botDisplayName = '赛丽亚';
|
|
37
34
|
constructor(opts) {
|
|
38
35
|
this.opts = opts;
|
|
39
36
|
this.bot = opts.botFactory !== undefined
|
|
@@ -46,6 +43,15 @@ export class FeishuChannelSession {
|
|
|
46
43
|
logger: opts.log,
|
|
47
44
|
});
|
|
48
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Build a package-private handle the session helpers operate on. Keeps the
|
|
48
|
+
* class's `private` fields truly private while still letting extracted free
|
|
49
|
+
* functions reach them — structural typing + circular type imports make
|
|
50
|
+
* this cost-free.
|
|
51
|
+
*/
|
|
52
|
+
get handle() {
|
|
53
|
+
return sessionHandle(this.opts, this.state, this.bot, this._accessMutex, this._botDisplayName);
|
|
54
|
+
}
|
|
49
55
|
async start(submitter) {
|
|
50
56
|
await this.bot.start({
|
|
51
57
|
onBotMemberAdded: async (added) => {
|
|
@@ -59,16 +65,74 @@ export class FeishuChannelSession {
|
|
|
59
65
|
async close() {
|
|
60
66
|
await this.bot.close();
|
|
61
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Approve a pending pairing by its 6-hex code. Thin wrapper around the
|
|
70
|
+
* extracted helper so the method stays reachable on the class while the
|
|
71
|
+
* body lives in `feishu-session-ops.ts` (max-lines lint).
|
|
72
|
+
*/
|
|
73
|
+
async approvePairingByCode(code) {
|
|
74
|
+
return sessionApprovePairingByCode(this.handle, code);
|
|
75
|
+
}
|
|
62
76
|
async handleMcpTool(toolName, rawArguments) {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
77
|
+
const def = FEISHU_TOOLS.find((t) => t.name === toolName);
|
|
78
|
+
if (def === undefined) {
|
|
79
|
+
throw new FeishuChannelCapabilityError(toolName);
|
|
80
|
+
}
|
|
81
|
+
const ctx = {
|
|
82
|
+
stateDir: this.opts.stateDir,
|
|
83
|
+
session: {
|
|
84
|
+
logger: this.opts.log,
|
|
85
|
+
sendText: async (chatId, text, opts) => this.sendReply({
|
|
86
|
+
chatId,
|
|
87
|
+
text,
|
|
88
|
+
...(opts?.messageId !== undefined ? { messageId: opts.messageId } : {}),
|
|
89
|
+
...(opts?.mentionUserIds !== undefined
|
|
90
|
+
? { mentionUserIds: opts.mentionUserIds }
|
|
91
|
+
: {}),
|
|
92
|
+
}),
|
|
93
|
+
react: async (chatId, messageId, emoji) => this.addReaction({
|
|
94
|
+
messageId,
|
|
95
|
+
emoji,
|
|
96
|
+
...(chatId !== undefined ? { chatId } : {}),
|
|
97
|
+
}),
|
|
98
|
+
listKnownChatBots: async (chatId) => this.readChatBots({ chatId }),
|
|
99
|
+
// Wire through the session method; body is filled in P3.
|
|
100
|
+
approvePairingByCode: this.approvePairingByCode.bind(this),
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
let parsed;
|
|
104
|
+
try {
|
|
105
|
+
parsed = def.parse(rawArguments);
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
this.opts.log.error({
|
|
109
|
+
dispatcher_id: this.opts.dispatcherId,
|
|
110
|
+
tool: toolName,
|
|
111
|
+
err: errInfo(err),
|
|
112
|
+
}, 'feishu MCP tool parse failed');
|
|
113
|
+
throw err;
|
|
114
|
+
}
|
|
115
|
+
let result;
|
|
116
|
+
try {
|
|
117
|
+
result = await def.handle(ctx, parsed);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
this.opts.log.error({
|
|
121
|
+
dispatcher_id: this.opts.dispatcherId,
|
|
122
|
+
tool: toolName,
|
|
123
|
+
err: errInfo(err),
|
|
124
|
+
}, 'feishu MCP tool handler failed');
|
|
125
|
+
throw err;
|
|
71
126
|
}
|
|
127
|
+
// Flatten to the legacy wire shape: return `{ status, message, ...details }`
|
|
128
|
+
// so the existing 3 callers (reply / react / list_chat_bots) can keep
|
|
129
|
+
// reading `message_ids`, `reaction_id`, `{known,trusted}` off the top-level
|
|
130
|
+
// result without a refactor in P1.
|
|
131
|
+
return {
|
|
132
|
+
status: result.status,
|
|
133
|
+
message: result.message,
|
|
134
|
+
...(result.details ?? {}),
|
|
135
|
+
};
|
|
72
136
|
}
|
|
73
137
|
messageBelongsToChat(messageId, chatId) {
|
|
74
138
|
return this.state.messageChats.get(messageId) === chatId;
|
|
@@ -102,293 +166,17 @@ export class FeishuChannelSession {
|
|
|
102
166
|
trusted: listing.trusted.map(toWireChatBot),
|
|
103
167
|
};
|
|
104
168
|
}
|
|
169
|
+
// ── Thin wrappers around extracted helpers (kept for handleMcpTool & start)
|
|
105
170
|
async sendReply(input) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
result = await this.bot.send(channelOutboundToFeishuTarget({
|
|
109
|
-
conversationId: input.chatId,
|
|
110
|
-
...(input.messageId !== undefined ? { replyTo: input.messageId } : {}),
|
|
111
|
-
...(input.mentionUserIds !== undefined
|
|
112
|
-
? { mentionUsers: input.mentionUserIds }
|
|
113
|
-
: {}),
|
|
114
|
-
}), input.text);
|
|
115
|
-
}
|
|
116
|
-
catch (err) {
|
|
117
|
-
this.opts.log.error({
|
|
118
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
119
|
-
chat_id: input.chatId,
|
|
120
|
-
message_id: input.messageId,
|
|
121
|
-
err: errInfo(err),
|
|
122
|
-
}, 'feishu reply failed');
|
|
123
|
-
throw err;
|
|
124
|
-
}
|
|
125
|
-
this.opts.log.info({
|
|
126
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
127
|
-
chat_id: input.chatId,
|
|
128
|
-
message_id: input.messageId,
|
|
129
|
-
message_ids: result.messageIds,
|
|
130
|
-
}, 'feishu reply sent');
|
|
131
|
-
if (input.messageId !== undefined) {
|
|
132
|
-
await this.clearInboundReaction(input.messageId);
|
|
133
|
-
}
|
|
134
|
-
return { message_ids: result.messageIds };
|
|
171
|
+
const r = await sessionSendReply(this.handle, input);
|
|
172
|
+
return { message_ids: r.messageIds };
|
|
135
173
|
}
|
|
136
174
|
async addReaction(input) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
reactionId = await this.bot.addReaction(input.messageId, input.emoji);
|
|
140
|
-
}
|
|
141
|
-
catch (err) {
|
|
142
|
-
this.opts.log.error({
|
|
143
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
144
|
-
message_id: input.messageId,
|
|
145
|
-
emoji: input.emoji,
|
|
146
|
-
err: errInfo(err),
|
|
147
|
-
}, 'feishu react failed');
|
|
148
|
-
throw err;
|
|
149
|
-
}
|
|
150
|
-
this.opts.log.info({
|
|
151
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
152
|
-
message_id: input.messageId,
|
|
153
|
-
emoji: input.emoji,
|
|
154
|
-
reaction_id: reactionId,
|
|
155
|
-
}, 'feishu react sent');
|
|
156
|
-
return { reaction_id: reactionId };
|
|
175
|
+
const r = await sessionAddReaction(this.handle, input);
|
|
176
|
+
return { reaction_id: r };
|
|
157
177
|
}
|
|
158
178
|
async onMessage(event, submitter) {
|
|
159
|
-
|
|
160
|
-
if (event.chatType === 'group' &&
|
|
161
|
-
isBotSenderType(event.senderType) &&
|
|
162
|
-
access.group.allow_chats.includes(event.chatId)) {
|
|
163
|
-
await observeKnownBot(this.opts.stateDir, event.chatId, {
|
|
164
|
-
openId: event.senderId,
|
|
165
|
-
...(event.senderName !== '' ? { name: event.senderName } : {}),
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
if (detectIntroduce(event.messageType, event.rawContent, event.mentions)) {
|
|
169
|
-
const denyReason = introduceDenyReason(access, {
|
|
170
|
-
chatType: event.chatType,
|
|
171
|
-
chatId: event.chatId,
|
|
172
|
-
senderId: event.senderId,
|
|
173
|
-
});
|
|
174
|
-
if (denyReason === null) {
|
|
175
|
-
const peers = introducedPeers(event.mentions, this.bot.botOpenId);
|
|
176
|
-
if (peers.length > 0) {
|
|
177
|
-
await trustIntroducedBots(this.opts.stateDir, event.chatId, peers);
|
|
178
|
-
await this.sendIntroduceAck(event, peers);
|
|
179
|
-
}
|
|
180
|
-
this.opts.log.info({
|
|
181
|
-
chat_id: event.chatId,
|
|
182
|
-
sender_id: event.senderId,
|
|
183
|
-
trusted_peers: peers.length,
|
|
184
|
-
}, 'introduce consumed');
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
this.opts.log.info({
|
|
188
|
-
chat_id: event.chatId,
|
|
189
|
-
sender_id: event.senderId,
|
|
190
|
-
message_id: event.messageId,
|
|
191
|
-
reason: denyReason,
|
|
192
|
-
}, 'introduce detected but not authorized');
|
|
193
|
-
}
|
|
194
|
-
const trustedBots = event.chatType === 'group'
|
|
195
|
-
? await trustedBotIds(this.opts.stateDir, event.chatId)
|
|
196
|
-
: undefined;
|
|
197
|
-
const gate = dreamuxFeishuGate({
|
|
198
|
-
senderId: event.senderId,
|
|
199
|
-
senderType: event.senderType,
|
|
200
|
-
chatId: event.chatId,
|
|
201
|
-
chatType: event.chatType,
|
|
202
|
-
mentions: event.mentions,
|
|
203
|
-
botOpenId: this.bot.botOpenId,
|
|
204
|
-
...(trustedBots !== undefined ? { trustedBotIds: trustedBots } : {}),
|
|
205
|
-
}, access);
|
|
206
|
-
await saveDispatcherAccess(this.opts.stateDir, gate.access);
|
|
207
|
-
if (gate.warning !== null) {
|
|
208
|
-
this.opts.log.warn({ chat_id: event.chatId, warning: gate.warning }, 'trust-domain warning');
|
|
209
|
-
}
|
|
210
|
-
if (gate.action === 'drop') {
|
|
211
|
-
this.opts.log.info({
|
|
212
|
-
chat_id: event.chatId,
|
|
213
|
-
chat_type: event.chatType,
|
|
214
|
-
sender_id: event.senderId,
|
|
215
|
-
...(event.senderUnionId !== undefined && event.senderUnionId !== ''
|
|
216
|
-
? { sender_union_id: event.senderUnionId }
|
|
217
|
-
: {}),
|
|
218
|
-
message_id: event.messageId,
|
|
219
|
-
reason: gate.reason,
|
|
220
|
-
}, 'feishu inbound dropped');
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
this.state.messageChats.set(event.messageId, event.chatId);
|
|
224
|
-
const baseline = event.chatType === 'group'
|
|
225
|
-
? await pendingBaseline(this.opts.stateDir, event.chatId)
|
|
226
|
-
: null;
|
|
227
|
-
const injectBots = baseline !== null && baseline.needsBaseline && baseline.trusted.length > 0;
|
|
228
|
-
const formatted = await formatFeishuMessageForRuntime(event, {
|
|
229
|
-
cacheDir: this.opts.attachmentCacheDir,
|
|
230
|
-
resourceFetcher: this.bot,
|
|
231
|
-
...(injectBots ? { trustedBots: baseline.trusted } : {}),
|
|
232
|
-
});
|
|
233
|
-
// Hand the runtime structured pieces, not pre-rendered XML: each runtime
|
|
234
|
-
// wraps these into its own channel block (today both render the native
|
|
235
|
-
// `<channel source="feishu" …>` envelope). `source`/`attrs` are opaque
|
|
236
|
-
// display passthrough — the runtime never routes on them; reply targeting
|
|
237
|
-
// stays here via the Feishu reply MCP tool. `text` carries the body as a
|
|
238
|
-
// neutral fallback for any runtime that ignores the structured fields.
|
|
239
|
-
// Append the standing channel-reminder on its own line at the very end. It
|
|
240
|
-
// goes into `body` (the field both runtimes render into the `<channel>`
|
|
241
|
-
// block via renderChannelInput) AND the neutral `text` fallback — `text`
|
|
242
|
-
// alone is discarded for channel turns, so the reminder must ride `body` to
|
|
243
|
-
// reach the model.
|
|
244
|
-
const body = `${formatted.body}\n\n${CHANNEL_REMINDER}`;
|
|
245
|
-
const input = {
|
|
246
|
-
sourceId: event.messageId,
|
|
247
|
-
source: 'feishu',
|
|
248
|
-
text: body,
|
|
249
|
-
attrs: formatted.attrs,
|
|
250
|
-
body,
|
|
251
|
-
attachments: formatted.attachments.map((attachment) => ({
|
|
252
|
-
kind: attachment.type,
|
|
253
|
-
...(attachment.name !== undefined ? { name: attachment.name } : {}),
|
|
254
|
-
...(attachment.path !== undefined ? { localPath: attachment.path } : {}),
|
|
255
|
-
})),
|
|
256
|
-
};
|
|
257
|
-
const envelope = {
|
|
258
|
-
provider: BUILTIN_FEISHU_PROVIDER_REF,
|
|
259
|
-
chatId: event.chatId,
|
|
260
|
-
chatType: event.chatType === 'group' ? 'group' : 'p2p',
|
|
261
|
-
messageId: event.messageId,
|
|
262
|
-
};
|
|
263
|
-
const delivery = await submitter.submitTurn(input, envelope, {
|
|
264
|
-
onAccepted: async () => {
|
|
265
|
-
await this.setInboundReaction(event.messageId, event.chatId, RECEIVED_REACTION_EMOJI, 'received');
|
|
266
|
-
},
|
|
267
|
-
});
|
|
268
|
-
if (delivery.status === 'submitted') {
|
|
269
|
-
this.opts.log.info({
|
|
270
|
-
chat_id: event.chatId,
|
|
271
|
-
sender_id: event.senderId,
|
|
272
|
-
message_id: event.messageId,
|
|
273
|
-
}, 'feishu inbound submitted');
|
|
274
|
-
if (injectBots) {
|
|
275
|
-
await clearBaselineIfCurrent(this.opts.stateDir, event.chatId, baseline.generation);
|
|
276
|
-
}
|
|
277
|
-
await this.setInboundReaction(event.messageId, event.chatId, IN_PROGRESS_REACTION_EMOJI, 'in_progress');
|
|
278
|
-
}
|
|
279
|
-
else if (delivery.status === 'failed') {
|
|
280
|
-
this.opts.log.error({
|
|
281
|
-
chat_id: event.chatId,
|
|
282
|
-
message_id: event.messageId,
|
|
283
|
-
err: errInfo(delivery.error),
|
|
284
|
-
}, 'failed to submit feishu inbound');
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
async sendIntroduceAck(event, peers) {
|
|
288
|
-
const text = introduceAckText(peers);
|
|
289
|
-
if (text === null)
|
|
290
|
-
return;
|
|
291
|
-
let result;
|
|
292
|
-
try {
|
|
293
|
-
result = await this.bot.send(channelOutboundToFeishuTarget({ conversationId: event.chatId }), text);
|
|
294
|
-
}
|
|
295
|
-
catch (err) {
|
|
296
|
-
this.opts.log.error({
|
|
297
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
298
|
-
chat_id: event.chatId,
|
|
299
|
-
message_id: event.messageId,
|
|
300
|
-
peer_count: peers.length,
|
|
301
|
-
err: errInfo(err),
|
|
302
|
-
}, 'introduce ack failed');
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
this.opts.log.info({
|
|
306
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
307
|
-
chat_id: event.chatId,
|
|
308
|
-
message_id: event.messageId,
|
|
309
|
-
peer_count: peers.length,
|
|
310
|
-
message_ids: result.messageIds,
|
|
311
|
-
}, 'introduce ack sent');
|
|
312
|
-
}
|
|
313
|
-
async setInboundReaction(messageId, chatId, emoji, state) {
|
|
314
|
-
if (messageId === '')
|
|
315
|
-
return;
|
|
316
|
-
if (this.state.pendingReceivedReactionClears.has(messageId))
|
|
317
|
-
return;
|
|
318
|
-
const previous = this.state.inboundReactions.get(messageId);
|
|
319
|
-
let reactionId;
|
|
320
|
-
try {
|
|
321
|
-
reactionId = await this.bot.addReaction(messageId, emoji);
|
|
322
|
-
}
|
|
323
|
-
catch (err) {
|
|
324
|
-
this.opts.log.warn({
|
|
325
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
326
|
-
message_id: messageId,
|
|
327
|
-
err: errInfo(err),
|
|
328
|
-
}, `failed to add the ${state} reaction`);
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
if (reactionId === '') {
|
|
332
|
-
this.opts.log.warn({ dispatcher_id: this.opts.dispatcherId, message_id: messageId }, `Feishu returned no reaction_id for the ${state} reaction`);
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
if (this.state.pendingReceivedReactionClears.has(messageId)) {
|
|
336
|
-
try {
|
|
337
|
-
await this.bot.removeReaction(messageId, reactionId);
|
|
338
|
-
}
|
|
339
|
-
catch (err) {
|
|
340
|
-
this.opts.log.warn({
|
|
341
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
342
|
-
message_id: messageId,
|
|
343
|
-
err: errInfo(err),
|
|
344
|
-
}, `failed to clear the late ${state} reaction`);
|
|
345
|
-
}
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
this.state.inboundReactions.set(messageId, {
|
|
349
|
-
chatId,
|
|
350
|
-
reactionId,
|
|
351
|
-
state,
|
|
352
|
-
});
|
|
353
|
-
if (previous !== undefined) {
|
|
354
|
-
try {
|
|
355
|
-
await this.bot.removeReaction(messageId, previous.reactionId);
|
|
356
|
-
}
|
|
357
|
-
catch (err) {
|
|
358
|
-
this.opts.log.warn({
|
|
359
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
360
|
-
message_id: messageId,
|
|
361
|
-
err: errInfo(err),
|
|
362
|
-
}, `failed to replace the ${previous.state} reaction`);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
async clearInboundReaction(messageId) {
|
|
367
|
-
this.rememberPendingReceivedReactionClear(messageId);
|
|
368
|
-
const reaction = this.state.inboundReactions.get(messageId);
|
|
369
|
-
if (reaction === undefined)
|
|
370
|
-
return;
|
|
371
|
-
try {
|
|
372
|
-
await this.bot.removeReaction(messageId, reaction.reactionId);
|
|
373
|
-
this.state.inboundReactions.delete(messageId);
|
|
374
|
-
}
|
|
375
|
-
catch (err) {
|
|
376
|
-
this.opts.log.warn({
|
|
377
|
-
dispatcher_id: this.opts.dispatcherId,
|
|
378
|
-
message_id: messageId,
|
|
379
|
-
err: errInfo(err),
|
|
380
|
-
}, `failed to clear the ${reaction.state} reaction`);
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
rememberPendingReceivedReactionClear(messageId) {
|
|
384
|
-
this.state.pendingReceivedReactionClears.add(messageId);
|
|
385
|
-
while (this.state.pendingReceivedReactionClears.size >
|
|
386
|
-
MAX_PENDING_RECEIVED_REACTION_CLEARS) {
|
|
387
|
-
const oldest = this.state.pendingReceivedReactionClears.values().next().value;
|
|
388
|
-
if (typeof oldest !== 'string')
|
|
389
|
-
return;
|
|
390
|
-
this.state.pendingReceivedReactionClears.delete(oldest);
|
|
391
|
-
}
|
|
179
|
+
return sessionOnMessage(this.handle, event, submitter);
|
|
392
180
|
}
|
|
393
181
|
}
|
|
394
182
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feishu-channel.js","sourceRoot":"","sources":["../src/feishu-channel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"feishu-channel.js","sourceRoot":"","sources":["../src/feishu-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feishu access gate v3 — IO + UI helpers.
|
|
3
|
+
*
|
|
4
|
+
* Split out from `feishu-gate.ts` to keep the pure gate under the max-lines
|
|
5
|
+
* lint rule. Owns:
|
|
6
|
+
* - v3 shape validation + fail-loud loader/saver
|
|
7
|
+
* - pairing-prompt text rendering
|
|
8
|
+
*
|
|
9
|
+
* The pure decision logic (`dreamuxFeishuGate`, types, constants) lives in
|
|
10
|
+
* `feishu-gate.ts`.
|
|
11
|
+
*/
|
|
12
|
+
import { type DispatcherAccessStateV3, type PendingPairingKind } from './feishu-gate.js';
|
|
13
|
+
/**
|
|
14
|
+
* Load access.json from stateDir. Fails LOUDLY if file exists but shape is
|
|
15
|
+
* not v3. Missing file returns the secure default (pairing DM default,
|
|
16
|
+
* empty allowlists).
|
|
17
|
+
*/
|
|
18
|
+
export declare function readDispatcherAccess(stateDir: string): Promise<DispatcherAccessStateV3>;
|
|
19
|
+
/**
|
|
20
|
+
* Persist access state atomically (tmpfile → rename, mode 0600). Refuses to
|
|
21
|
+
* write non-v3 state. Creates stateDir with mode 0700 if missing.
|
|
22
|
+
*/
|
|
23
|
+
export declare function saveDispatcherAccess(stateDir: string, state: DispatcherAccessStateV3): Promise<void>;
|
|
24
|
+
export { readDispatcherAccess as loadDispatcherAccess };
|
|
25
|
+
export declare function renderPairingPrompt(kind: PendingPairingKind, code: string, isResend: boolean, botDisplayName: string): string;
|
|
26
|
+
//# sourceMappingURL=feishu-gate-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feishu-gate-io.d.ts","sourceRoot":"","sources":["../src/feishu-gate-io.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAC;AAoB1B;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,CAAC,CAoBlC;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAKD,OAAO,EAAE,oBAAoB,IAAI,oBAAoB,EAAE,CAAC;AAMxD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,kBAAkB,EACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,cAAc,EAAE,MAAM,GACrB,MAAM,CAeR"}
|