fix(gateway): cap plugin session message reads · openclaw/openclaw@b66b450
vincentkoc
·
2026-06-22
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -762,6 +762,11 @@ describe("loadGatewayPlugins", () => {
|
762 | 762 | expect(opts.req.method).toBe("sessions.get"); |
763 | 763 | expect(opts.req.params).toEqual({ key: "s-legacy" }); |
764 | 764 | opts.respond(true, { messages: [{ id: "m-2" }] }); |
| 765 | +}) |
| 766 | +.mockImplementationOnce(async (opts: HandleGatewayRequestOptions) => { |
| 767 | +expect(opts.req.method).toBe("sessions.get"); |
| 768 | +expect(opts.req.params).toEqual({ key: "s-limited", limit: 1_000 }); |
| 769 | +opts.respond(true, { messages: [{ id: "m-3" }] }); |
765 | 770 | }); |
766 | 771 | |
767 | 772 | await expect(runtime.getSessionMessages({ sessionKey: "s-read" })).resolves.toEqual({ |
@@ -770,6 +775,14 @@ describe("loadGatewayPlugins", () => {
|
770 | 775 | await expect(runtime.getSession({ sessionKey: "s-legacy" })).resolves.toEqual({ |
771 | 776 | messages: [{ id: "m-2" }], |
772 | 777 | }); |
| 778 | +await expect( |
| 779 | +runtime.getSessionMessages({ |
| 780 | +sessionKey: "s-limited", |
| 781 | +limit: 9e15, |
| 782 | +}), |
| 783 | +).resolves.toEqual({ |
| 784 | +messages: [{ id: "m-3" }], |
| 785 | +}); |
773 | 786 | }); |
774 | 787 | |
775 | 788 | test("times out while waiting for the first in-process gateway response", async () => { |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -536,11 +536,20 @@ export async function dispatchGatewayMethodInProcess<T>(
|
536 | 536 | return await dispatchGatewayMethod<T>(method, params, options); |
537 | 537 | } |
538 | 538 | |
| 539 | +const PLUGIN_SUBAGENT_SESSION_MESSAGES_MAX_LIMIT = 1_000; |
| 540 | + |
539 | 541 | export function createGatewaySubagentRuntime(): PluginRuntime["subagent"] { |
540 | 542 | const getSessionMessages: PluginRuntime["subagent"]["getSessionMessages"] = async (params) => { |
| 543 | +const limit = |
| 544 | +params.limit == null || !Number.isFinite(params.limit) |
| 545 | + ? undefined |
| 546 | + : Math.min( |
| 547 | +PLUGIN_SUBAGENT_SESSION_MESSAGES_MAX_LIMIT, |
| 548 | +Math.max(1, Math.floor(params.limit)), |
| 549 | +); |
541 | 550 | const payload = await dispatchGatewayMethod<{ messages?: unknown[] }>("sessions.get", { |
542 | 551 | key: params.sessionKey, |
543 | | - ...(params.limit != null && { limit: params.limit }), |
| 552 | + ...(limit != null && { limit }), |
544 | 553 | }); |
545 | 554 | return { messages: Array.isArray(payload?.messages) ? payload.messages : [] }; |
546 | 555 | }; |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。