





















@@ -119,6 +119,21 @@ describe("feishu tool account routing", () => {
119119expect(lastClientAppId()).toBe("app-b");
120120});
121121122+test("wiki tool implicit fallback selects an account with wiki enabled", async () => {
123+const { api, resolveTool } = createToolFactoryHarness(
124+createConfig({
125+toolsA: { drive: true, wiki: false },
126+toolsB: { wiki: true },
127+}),
128+);
129+registerFeishuWikiTools(api);
130+131+const tool = resolveTool("feishu_wiki");
132+await tool.execute("call", { action: "search" });
133+134+expect(lastClientAppId()).toBe("app-b");
135+});
136+122137test("wiki tool prefers the active contextual account over configured defaultAccount", async () => {
123138const { api, resolveTool } = createToolFactoryHarness(
124139createConfig({
@@ -190,6 +205,22 @@ describe("feishu tool account routing", () => {
190205expect(lastClientAppId()).toBe("app-b");
191206});
192207208+test("drive tool rejects a disabled contextual account when another account enables it", async () => {
209+const { api, resolveTool } = createToolFactoryHarness(
210+createConfig({
211+toolsA: { drive: false },
212+toolsB: { drive: true },
213+}),
214+);
215+registerFeishuDriveTools(api);
216+217+const tool = resolveTool("feishu_drive", { agentAccountId: "a" });
218+const result = await tool.execute("call", { action: "unknown_action" });
219+220+expect(createFeishuClientMock).not.toHaveBeenCalled();
221+expect(result.details.error).toBe('Feishu Drive tools are disabled for account "a"');
222+});
223+193224test("perm tool registers when only second account enables it and routes to agentAccountId", async () => {
194225const { api, resolveTool } = createToolFactoryHarness(
195226createConfig({
@@ -205,6 +236,38 @@ describe("feishu tool account routing", () => {
205236expect(lastClientAppId()).toBe("app-b");
206237});
207238239+test("perm tool rejects a disabled contextual account when another account enables it", async () => {
240+const { api, resolveTool } = createToolFactoryHarness(
241+createConfig({
242+toolsA: { perm: false },
243+toolsB: { perm: true },
244+}),
245+);
246+registerFeishuPermTools(api);
247+248+const tool = resolveTool("feishu_perm", { agentAccountId: "a" });
249+const result = await tool.execute("call", { action: "unknown_action" });
250+251+expect(createFeishuClientMock).not.toHaveBeenCalled();
252+expect(result.details.error).toBe('Feishu Perm tools are disabled for account "a"');
253+});
254+255+test("perm tool rejects an explicit disabled account override", async () => {
256+const { api, resolveTool } = createToolFactoryHarness(
257+createConfig({
258+toolsA: { perm: false },
259+toolsB: { perm: true },
260+}),
261+);
262+registerFeishuPermTools(api);
263+264+const tool = resolveTool("feishu_perm", { agentAccountId: "b" });
265+const result = await tool.execute("call", { action: "unknown_action", accountId: "a" });
266+267+expect(createFeishuClientMock).not.toHaveBeenCalled();
268+expect(result.details.error).toBe('Feishu Perm tools are disabled for account "a"');
269+});
270+208271test("bitable tool registers when only second account enables it and routes to agentAccountId", async () => {
209272const { api, resolveTool } = createToolFactoryHarness(
210273createConfig({
@@ -386,6 +449,22 @@ describe("feishu tool account routing", () => {
386449expect(lastClientAppId()).toBe("app-a");
387450});
388451452+test("wiki tool rejects an explicit disabled account override", async () => {
453+const { api, resolveTool } = createToolFactoryHarness(
454+createConfig({
455+toolsA: { wiki: false },
456+toolsB: { wiki: true },
457+}),
458+);
459+registerFeishuWikiTools(api);
460+461+const tool = resolveTool("feishu_wiki", { agentAccountId: "b" });
462+const result = await tool.execute("call", { action: "search", accountId: "a" });
463+464+expect(createFeishuClientMock).not.toHaveBeenCalled();
465+expect(result.details.error).toBe('Feishu Wiki tools are disabled for account "a"');
466+});
467+389468test("does not silently fall back when the contextual account is real but uses non-env SecretRefs", async () => {
390469const { api, resolveTool } = createToolFactoryHarness({
391470channels: {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。