




















@@ -5,7 +5,7 @@ type SlackPayload = {
55text: string;
66blocks?: unknown;
77};
8-const SLACK_TEXT_LIMIT = 8000;
8+const SLACK_CHAT_UPDATE_TEXT_LIMIT = 4000;
991010function findSlackActionsBlock(blocks: Array<{ type?: string; elements?: unknown[] }>) {
1111return blocks.find((block) => block.type === "actions");
@@ -115,7 +115,7 @@ describe("slackApprovalNativeRuntime", () => {
115115).toBe(false);
116116});
117117118-it("caps resolved update fallback text while preserving approval blocks", async () => {
118+it("caps resolved update fallback text to Slack chat.update limits while preserving blocks", async () => {
119119const blocks = [
120120{
121121type: "section",
@@ -126,31 +126,56 @@ describe("slackApprovalNativeRuntime", () => {
126126},
127127];
128128const chatUpdate = vi.fn(async (_payload: { text: string; blocks: typeof blocks }) => ({}));
129+const context = {
130+app: {
131+client: {
132+chat: {
133+update: chatUpdate,
134+},
135+},
136+},
137+config: {},
138+} as never;
129139130140await slackApprovalNativeRuntime.transport.updateEntry?.({
131141cfg: {} as never,
132142accountId: "default",
133-context: {
134-app: {
135-client: {
136-chat: {
137-update: chatUpdate,
138-},
139-},
140-},
141-config: {},
142-} as never,
143+ context,
144+entry: {
145+channelId: "C123",
146+messageTs: "1712345678.999999",
147+},
148+payload: {
149+text: "a".repeat(SLACK_CHAT_UPDATE_TEXT_LIMIT),
150+ blocks,
151+},
152+phase: "resolved",
153+});
154+155+await slackApprovalNativeRuntime.transport.updateEntry?.({
156+cfg: {} as never,
157+accountId: "default",
158+ context,
143159entry: {
144160channelId: "C123",
145161messageTs: "1712345678.999999",
146162},
147163payload: {
148-text: `*Exec approval: Allowed once*\n\n*Command*\n${"a".repeat(9000)}`,
164+text: "a".repeat(5000),
149165 blocks,
150166},
151167phase: "resolved",
152168});
153169170+expect(chatUpdate).toHaveBeenNthCalledWith(
171+1,
172+expect.objectContaining({
173+channel: "C123",
174+ts: "1712345678.999999",
175+text: "a".repeat(SLACK_CHAT_UPDATE_TEXT_LIMIT),
176+ blocks,
177+}),
178+);
154179expect(chatUpdate).toHaveBeenCalledWith(
155180expect.objectContaining({
156181channel: "C123",
@@ -159,7 +184,7 @@ describe("slackApprovalNativeRuntime", () => {
159184 blocks,
160185}),
161186);
162-expect(chatUpdate.mock.calls[0]?.[0].text).toHaveLength(SLACK_TEXT_LIMIT);
187+expect(chatUpdate.mock.calls[1]?.[0].text).toHaveLength(SLACK_CHAT_UPDATE_TEXT_LIMIT);
163188});
164189165190it("keeps pending metadata context within Slack Block Kit limits", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。