




















@@ -237,6 +237,23 @@ function getActionEnum(properties: Record<string, unknown>) {
237237return (properties.action as { enum?: string[] } | undefined)?.enum ?? [];
238238}
239239240+function expectStringSchema(
241+schema: unknown,
242+expected?: {
243+descriptionIncludes?: string;
244+},
245+) {
246+expect(schema).toBeTruthy();
247+if (!schema || typeof schema !== "object") {
248+throw new Error("Expected string schema");
249+}
250+const record = schema as Record<string, unknown>;
251+expect(record.type).toBe("string");
252+if (expected?.descriptionIncludes) {
253+expect(record.description).toEqual(expect.stringContaining(expected.descriptionIncludes));
254+}
255+}
256+240257beforeAll(async () => {
241258({ resetPluginRuntimeStateForTest, setActivePluginRegistry } =
242259await import("../../plugins/runtime.js"));
@@ -641,14 +658,10 @@ describe("message tool Telegram topic targets", () => {
641658},
642659});
643660644-expect(call?.params).toEqual(
645-expect.objectContaining({
646-channel: "telegram",
647-target: "-1001234567890:topic:42",
648-threadId: "42",
649-message: "topic hello",
650-}),
651-);
661+expect(call?.params?.channel).toBe("telegram");
662+expect(call?.params?.target).toBe("-1001234567890:topic:42");
663+expect(call?.params?.threadId).toBe("42");
664+expect(call?.params?.message).toBe("topic hello");
652665});
653666});
654667@@ -920,19 +933,17 @@ describe("message tool schema scoping", () => {
920933requesterSenderId: "user-42",
921934});
922935923-expect(seenContexts).toContainEqual(
924-expect.objectContaining({
925-currentChannelProvider: "discord",
926-currentChannelId: "channel:123",
927-currentThreadTs: "thread-456",
928-currentMessageId: "msg-789",
929-accountId: "ops",
930-sessionKey: "agent:alpha:main",
931-sessionId: "session-123",
932-agentId: "alpha",
933-requesterSenderId: "user-42",
934-}),
935-);
936+const context = seenContexts.find((item) => item.phase === "describeMessageTool");
937+expect(context).toBeDefined();
938+expect(context?.currentChannelProvider).toBe("discord");
939+expect(context?.currentChannelId).toBe("channel:123");
940+expect(context?.currentThreadTs).toBe("thread-456");
941+expect(context?.currentMessageId).toBe("msg-789");
942+expect(context?.accountId).toBe("ops");
943+expect(context?.sessionKey).toBe("agent:alpha:main");
944+expect(context?.sessionId).toBe("session-123");
945+expect(context?.agentId).toBe("alpha");
946+expect(context?.requesterSenderId).toBe("user-42");
936947});
937948938949it("forwards senderIsOwner into plugin action discovery", () => {
@@ -967,18 +978,18 @@ describe("message tool schema scoping", () => {
967978968979expect(getActionEnum(getToolProperties(ownerTool))).toContain("set-profile");
969980expect(getActionEnum(getToolProperties(nonOwnerTool))).not.toContain("set-profile");
970-expect(seenContexts).toContainEqual(expect.objectContaining({ senderIsOwner: true }));
971-expect(seenContexts).toContainEqual(expect.objectContaining({ senderIsOwner: false }));
981+expect(seenContexts.some((context) => context.senderIsOwner === true)).toBe(true);
982+expect(seenContexts.some((context) => context.senderIsOwner === false)).toBe(true);
972983});
973984974985it("keeps core send and broadcast actions in unscoped schemas", () => {
975986const tool = createMessageTool({
976987config: {} as never,
977988});
978989979-expect(getActionEnum(getToolProperties(tool))).toEqual(
980- expect.arrayContaining(["send", "broadcast"]),
981-);
990+const actionEnum = getActionEnum(getToolProperties(tool));
991+expect(actionEnum).toContain("send");
992+expect(actionEnum).toContain("broadcast");
982993});
983994984995it("advertises Slack download-file fileId in scoped schemas", () => {
@@ -1001,7 +1012,7 @@ describe("message tool schema scoping", () => {
10011012const properties = getToolProperties(tool);
1002101310031014expect(getActionEnum(properties)).toContain("download-file");
1004-expect(properties.fileId).toMatchObject({ type: "string" });
1015+expectStringSchema(properties.fileId);
10051016});
1006101710071018it("advertises messageId for read actions", () => {
@@ -1024,10 +1035,7 @@ describe("message tool schema scoping", () => {
10241035const properties = getToolProperties(tool);
1025103610261037expect(getActionEnum(properties)).toContain("read");
1027-expect(properties.messageId).toMatchObject({
1028-type: "string",
1029-description: expect.stringContaining("read"),
1030-});
1038+expectStringSchema(properties.messageId, { descriptionIncludes: "read" });
10311039});
10321040});
10331041此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。