diff --git a/src/agents/openclaw-tools.camera.test.ts b/src/agents/openclaw-tools.camera.test.ts index 6b1d2e35c33..96be774b297 100644 --- a/src/agents/openclaw-tools.camera.test.ts +++ b/src/agents/openclaw-tools.camera.test.ts @@ -138,6 +138,42 @@ describe("nodes camera_snap", () => { }); }); +describe("nodes notifications_list", () => { + it("invokes notifications.list and returns payload", async () => { + callGateway.mockImplementation(async ({ method, params }) => { + if (method === "node.list") { + return mockNodeList(["notifications.list"]); + } + if (method === "node.invoke") { + expect(params).toMatchObject({ + nodeId: NODE_ID, + command: "notifications.list", + params: {}, + }); + return { + payload: { + enabled: true, + connected: true, + count: 1, + notifications: [{ key: "n1", packageName: "com.example.app" }], + }, + }; + } + return unexpectedGatewayMethod(method); + }); + + const result = await executeNodes({ + action: "notifications_list", + node: NODE_ID, + }); + + expect(result.content?.[0]).toMatchObject({ + type: "text", + text: expect.stringContaining('"notifications"'), + }); + }); +}); + describe("nodes run", () => { it("passes invoke and command timeouts", async () => { callGateway.mockImplementation(async ({ method, params }) => { diff --git a/src/agents/tools/nodes-tool.ts b/src/agents/tools/nodes-tool.ts index 3006b9cfddc..b0dfef3eeed 100644 --- a/src/agents/tools/nodes-tool.ts +++ b/src/agents/tools/nodes-tool.ts @@ -40,6 +40,7 @@ const NODES_TOOL_ACTIONS = [ "camera_clip", "screen_record", "location_get", + "notifications_list", "run", "invoke", ] as const; @@ -122,7 +123,7 @@ export function createNodesTool(options?: { label: "Nodes", name: "nodes", description: - "Discover and control paired nodes (status/describe/pairing/notify/camera/screen/location/run/invoke).", + "Discover and control paired nodes (status/describe/pairing/notify/camera/screen/location/notifications/run/invoke).", parameters: NodesToolSchema, execute: async (_toolCallId, args) => { const params = args as Record; @@ -406,6 +407,17 @@ export function createNodesTool(options?: { }); return jsonResult(raw?.payload ?? {}); } + case "notifications_list": { + const node = readStringParam(params, "node", { required: true }); + const nodeId = await resolveNodeId(gatewayOpts, node); + const raw = await callGatewayTool<{ payload: unknown }>("node.invoke", gatewayOpts, { + nodeId, + command: "notifications.list", + params: {}, + idempotencyKey: crypto.randomUUID(), + }); + return jsonResult(raw?.payload ?? {}); + } case "run": { const node = readStringParam(params, "node", { required: true }); const nodes = await listNodes(gatewayOpts);