nodebench-mcp 2.22.0 → 2.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NODEBENCH_AGENTS.md +5 -4
- package/README.md +495 -280
- package/dist/__tests__/architectComplex.test.js +3 -5
- package/dist/__tests__/architectComplex.test.js.map +1 -1
- package/dist/__tests__/batchAutopilot.test.d.ts +8 -0
- package/dist/__tests__/batchAutopilot.test.js +218 -0
- package/dist/__tests__/batchAutopilot.test.js.map +1 -0
- package/dist/__tests__/cliSubcommands.test.d.ts +1 -0
- package/dist/__tests__/cliSubcommands.test.js +138 -0
- package/dist/__tests__/cliSubcommands.test.js.map +1 -0
- package/dist/__tests__/evalHarness.test.js +1 -1
- package/dist/__tests__/forecastingDogfood.test.d.ts +9 -0
- package/dist/__tests__/forecastingDogfood.test.js +284 -0
- package/dist/__tests__/forecastingDogfood.test.js.map +1 -0
- package/dist/__tests__/forecastingScoring.test.d.ts +9 -0
- package/dist/__tests__/forecastingScoring.test.js +202 -0
- package/dist/__tests__/forecastingScoring.test.js.map +1 -0
- package/dist/__tests__/localDashboard.test.d.ts +1 -0
- package/dist/__tests__/localDashboard.test.js +226 -0
- package/dist/__tests__/localDashboard.test.js.map +1 -0
- package/dist/__tests__/multiHopDogfood.test.d.ts +12 -0
- package/dist/__tests__/multiHopDogfood.test.js +303 -0
- package/dist/__tests__/multiHopDogfood.test.js.map +1 -0
- package/dist/__tests__/openclawDogfood.test.d.ts +23 -0
- package/dist/__tests__/openclawDogfood.test.js +535 -0
- package/dist/__tests__/openclawDogfood.test.js.map +1 -0
- package/dist/__tests__/openclawMessaging.test.d.ts +14 -0
- package/dist/__tests__/openclawMessaging.test.js +232 -0
- package/dist/__tests__/openclawMessaging.test.js.map +1 -0
- package/dist/__tests__/tools.test.js +7 -3
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/__tests__/traceabilityDogfood.test.d.ts +12 -0
- package/dist/__tests__/traceabilityDogfood.test.js +241 -0
- package/dist/__tests__/traceabilityDogfood.test.js.map +1 -0
- package/dist/__tests__/webmcpTools.test.d.ts +7 -0
- package/dist/__tests__/webmcpTools.test.js +195 -0
- package/dist/__tests__/webmcpTools.test.js.map +1 -0
- package/dist/dashboard/briefHtml.d.ts +20 -0
- package/dist/dashboard/briefHtml.js +1000 -0
- package/dist/dashboard/briefHtml.js.map +1 -0
- package/dist/dashboard/briefServer.d.ts +18 -0
- package/dist/dashboard/briefServer.js +320 -0
- package/dist/dashboard/briefServer.js.map +1 -0
- package/dist/dashboard/html.d.ts +18 -0
- package/dist/dashboard/html.js +1491 -0
- package/dist/dashboard/html.js.map +1 -0
- package/dist/dashboard/server.d.ts +17 -0
- package/dist/dashboard/server.js +403 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/db.js +38 -0
- package/dist/db.js.map +1 -1
- package/dist/index.js +211 -5
- package/dist/index.js.map +1 -1
- package/dist/tools/critterTools.js +4 -0
- package/dist/tools/critterTools.js.map +1 -1
- package/dist/tools/forecastingTools.d.ts +11 -0
- package/dist/tools/forecastingTools.js +616 -0
- package/dist/tools/forecastingTools.js.map +1 -0
- package/dist/tools/localDashboardTools.d.ts +8 -0
- package/dist/tools/localDashboardTools.js +332 -0
- package/dist/tools/localDashboardTools.js.map +1 -0
- package/dist/tools/metaTools.js +170 -1
- package/dist/tools/metaTools.js.map +1 -1
- package/dist/tools/openclawTools.d.ts +11 -0
- package/dist/tools/openclawTools.js +1017 -0
- package/dist/tools/openclawTools.js.map +1 -0
- package/dist/tools/overstoryTools.d.ts +14 -0
- package/dist/tools/overstoryTools.js +426 -0
- package/dist/tools/overstoryTools.js.map +1 -0
- package/dist/tools/prReportTools.d.ts +11 -0
- package/dist/tools/prReportTools.js +911 -0
- package/dist/tools/prReportTools.js.map +1 -0
- package/dist/tools/progressiveDiscoveryTools.js +28 -9
- package/dist/tools/progressiveDiscoveryTools.js.map +1 -1
- package/dist/tools/selfEvalTools.js +8 -1
- package/dist/tools/selfEvalTools.js.map +1 -1
- package/dist/tools/sessionMemoryTools.js +14 -2
- package/dist/tools/sessionMemoryTools.js.map +1 -1
- package/dist/tools/skillUpdateTools.d.ts +24 -0
- package/dist/tools/skillUpdateTools.js +469 -0
- package/dist/tools/skillUpdateTools.js.map +1 -0
- package/dist/tools/toolRegistry.js +178 -0
- package/dist/tools/toolRegistry.js.map +1 -1
- package/dist/tools/uiUxDiveAdvancedTools.js +61 -0
- package/dist/tools/uiUxDiveAdvancedTools.js.map +1 -1
- package/dist/tools/uiUxDiveTools.js +154 -1
- package/dist/tools/uiUxDiveTools.js.map +1 -1
- package/dist/tools/visualQaTools.d.ts +2 -0
- package/dist/tools/visualQaTools.js +1088 -0
- package/dist/tools/visualQaTools.js.map +1 -0
- package/dist/tools/webmcpTools.d.ts +16 -0
- package/dist/tools/webmcpTools.js +703 -0
- package/dist/tools/webmcpTools.js.map +1 -0
- package/dist/toolsetRegistry.js +4 -0
- package/dist/toolsetRegistry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw Messaging Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests the 5 new messaging tools added to openclawTools.ts (domain: openclaw).
|
|
5
|
+
* Validates return shapes, required fields, and workflow chains.
|
|
6
|
+
*
|
|
7
|
+
* Tools tested:
|
|
8
|
+
* 1. list_openclaw_channels — List native + OpenClaw Gateway channels
|
|
9
|
+
* 2. send_openclaw_message — Send message through outbound pipeline
|
|
10
|
+
* 3. get_openclaw_delivery_status — Check delivery status
|
|
11
|
+
* 4. configure_channel_preferences — Set user fallback chain
|
|
12
|
+
* 5. get_messaging_health — Per-provider health diagnostics
|
|
13
|
+
*/
|
|
14
|
+
import { describe, it, expect } from "vitest";
|
|
15
|
+
import { openclawTools } from "../tools/openclawTools.js";
|
|
16
|
+
// Helper: find tool by name
|
|
17
|
+
function findTool(name) {
|
|
18
|
+
const tool = openclawTools.find((t) => t.name === name);
|
|
19
|
+
if (!tool)
|
|
20
|
+
throw new Error(`Tool not found: ${name}`);
|
|
21
|
+
return tool;
|
|
22
|
+
}
|
|
23
|
+
describe("OpenClaw Messaging Tools", () => {
|
|
24
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
25
|
+
// TOOL EXISTENCE
|
|
26
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
27
|
+
it("openclaw domain should have 17 tools (7 sandbox + 5 messaging + 5 autopilot/operator)", () => {
|
|
28
|
+
expect(openclawTools.length).toBe(17);
|
|
29
|
+
});
|
|
30
|
+
it("all 5 messaging tools should exist", () => {
|
|
31
|
+
const messagingToolNames = [
|
|
32
|
+
"list_openclaw_channels",
|
|
33
|
+
"send_openclaw_message",
|
|
34
|
+
"get_openclaw_delivery_status",
|
|
35
|
+
"configure_channel_preferences",
|
|
36
|
+
"get_messaging_health",
|
|
37
|
+
];
|
|
38
|
+
for (const name of messagingToolNames) {
|
|
39
|
+
const tool = openclawTools.find((t) => t.name === name);
|
|
40
|
+
expect(tool, `Missing tool: ${name}`).toBeDefined();
|
|
41
|
+
expect(tool.handler).toBeTypeOf("function");
|
|
42
|
+
expect(tool.inputSchema).toBeDefined();
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
46
|
+
// list_openclaw_channels
|
|
47
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
48
|
+
describe("list_openclaw_channels", () => {
|
|
49
|
+
it("should return OpenClaw channels by default", async () => {
|
|
50
|
+
const tool = findTool("list_openclaw_channels");
|
|
51
|
+
const result = await tool.handler({});
|
|
52
|
+
expect(result.channels).toBeDefined();
|
|
53
|
+
expect(Array.isArray(result.channels)).toBe(true);
|
|
54
|
+
expect(result.totalChannels).toBe(6); // 6 OpenClaw channels
|
|
55
|
+
expect(result.gatewayUrl).toContain("127.0.0.1");
|
|
56
|
+
expect(result.quickRef).toBeDefined();
|
|
57
|
+
expect(result.quickRef.nextTools).toContain("send_openclaw_message");
|
|
58
|
+
// Verify OpenClaw channel IDs
|
|
59
|
+
const channelIds = result.channels.map((c) => c.channelId);
|
|
60
|
+
expect(channelIds).toContain("whatsapp");
|
|
61
|
+
expect(channelIds).toContain("signal");
|
|
62
|
+
expect(channelIds).toContain("matrix");
|
|
63
|
+
});
|
|
64
|
+
it("should include native channels when includeNative=true", async () => {
|
|
65
|
+
const tool = findTool("list_openclaw_channels");
|
|
66
|
+
const result = await tool.handler({ includeNative: true });
|
|
67
|
+
expect(result.totalChannels).toBe(13); // 6 OpenClaw + 7 native
|
|
68
|
+
const channelIds = result.channels.map((c) => c.channelId);
|
|
69
|
+
expect(channelIds).toContain("ntfy");
|
|
70
|
+
expect(channelIds).toContain("email");
|
|
71
|
+
expect(channelIds).toContain("sms");
|
|
72
|
+
expect(channelIds).toContain("ui");
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
76
|
+
// send_openclaw_message
|
|
77
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
78
|
+
describe("send_openclaw_message", () => {
|
|
79
|
+
it("should queue a message for delivery", async () => {
|
|
80
|
+
const tool = findTool("send_openclaw_message");
|
|
81
|
+
const result = await tool.handler({
|
|
82
|
+
channelId: "whatsapp",
|
|
83
|
+
recipient: "agent:main:whatsapp:dm:+15555550123",
|
|
84
|
+
text: "Hello from NodeBench!",
|
|
85
|
+
urgency: "normal",
|
|
86
|
+
});
|
|
87
|
+
expect(result.success).toBe(true);
|
|
88
|
+
expect(result.channelId).toBe("whatsapp");
|
|
89
|
+
expect(result.status).toBe("queued");
|
|
90
|
+
expect(result.textPreview).toContain("Hello from NodeBench!");
|
|
91
|
+
expect(result.quickRef.nextTools).toContain("get_openclaw_delivery_status");
|
|
92
|
+
});
|
|
93
|
+
it("should truncate long text in preview", async () => {
|
|
94
|
+
const tool = findTool("send_openclaw_message");
|
|
95
|
+
const longText = "A".repeat(200);
|
|
96
|
+
const result = await tool.handler({
|
|
97
|
+
channelId: "email",
|
|
98
|
+
recipient: "user@example.com",
|
|
99
|
+
text: longText,
|
|
100
|
+
});
|
|
101
|
+
expect(result.textPreview.length).toBeLessThanOrEqual(83); // 80 chars + "..."
|
|
102
|
+
expect(result.textPreview).toContain("...");
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
106
|
+
// get_openclaw_delivery_status
|
|
107
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
108
|
+
describe("get_openclaw_delivery_status", () => {
|
|
109
|
+
it("should return delivery status with defaults", async () => {
|
|
110
|
+
const tool = findTool("get_openclaw_delivery_status");
|
|
111
|
+
const result = await tool.handler({});
|
|
112
|
+
expect(result.traceId).toBe("latest");
|
|
113
|
+
expect(result.deliveries).toBeDefined();
|
|
114
|
+
expect(Array.isArray(result.deliveries)).toBe(true);
|
|
115
|
+
expect(result.totalDeliveries).toBe(0); // No real deliveries in test
|
|
116
|
+
expect(result.quickRef).toBeDefined();
|
|
117
|
+
});
|
|
118
|
+
it("should accept traceId and channelId filters", async () => {
|
|
119
|
+
const tool = findTool("get_openclaw_delivery_status");
|
|
120
|
+
const result = await tool.handler({
|
|
121
|
+
traceId: "trace-12345",
|
|
122
|
+
channelId: "telegram",
|
|
123
|
+
});
|
|
124
|
+
expect(result.traceId).toBe("trace-12345");
|
|
125
|
+
expect(result.filters.channelId).toBe("telegram");
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
129
|
+
// configure_channel_preferences
|
|
130
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
131
|
+
describe("configure_channel_preferences", () => {
|
|
132
|
+
it("should save preference chain", async () => {
|
|
133
|
+
const tool = findTool("configure_channel_preferences");
|
|
134
|
+
const result = await tool.handler({
|
|
135
|
+
preferredChannels: ["whatsapp", "telegram", "email"],
|
|
136
|
+
channelConfigs: [
|
|
137
|
+
{ channelId: "whatsapp", enabled: true, identifier: "+15555550123", optedIn: true },
|
|
138
|
+
{ channelId: "telegram", enabled: true, identifier: "123456789", optedIn: true },
|
|
139
|
+
{ channelId: "email", enabled: true, identifier: "user@example.com", optedIn: true },
|
|
140
|
+
],
|
|
141
|
+
});
|
|
142
|
+
expect(result.success).toBe(true);
|
|
143
|
+
expect(result.preferredChannels).toEqual(["whatsapp", "telegram", "email"]);
|
|
144
|
+
expect(result.configuredChannels).toBe(3);
|
|
145
|
+
expect(result.status).toBe("preferences_saved");
|
|
146
|
+
expect(result.quickRef.nextTools).toContain("send_openclaw_message");
|
|
147
|
+
});
|
|
148
|
+
it("should handle empty configs", async () => {
|
|
149
|
+
const tool = findTool("configure_channel_preferences");
|
|
150
|
+
const result = await tool.handler({
|
|
151
|
+
preferredChannels: ["ui"],
|
|
152
|
+
});
|
|
153
|
+
expect(result.success).toBe(true);
|
|
154
|
+
expect(result.configuredChannels).toBe(0);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
158
|
+
// get_messaging_health
|
|
159
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
160
|
+
describe("get_messaging_health", () => {
|
|
161
|
+
it("should return all 13 provider statuses", async () => {
|
|
162
|
+
const tool = findTool("get_messaging_health");
|
|
163
|
+
const result = await tool.handler({});
|
|
164
|
+
expect(result.providers).toBeDefined();
|
|
165
|
+
expect(result.totalProviders).toBe(13); // 7 native + 6 OpenClaw
|
|
166
|
+
expect(result.nativeAvailable).toBeGreaterThanOrEqual(2); // ui + ntfy always available
|
|
167
|
+
expect(result.openclawAvailable).toBe(0); // No Gateway in test env
|
|
168
|
+
});
|
|
169
|
+
it("should filter by channelId", async () => {
|
|
170
|
+
const tool = findTool("get_messaging_health");
|
|
171
|
+
const result = await tool.handler({ channelId: "whatsapp" });
|
|
172
|
+
expect(result.totalProviders).toBe(1);
|
|
173
|
+
expect(result.providers[0].channelId).toBe("whatsapp");
|
|
174
|
+
expect(result.providers[0].providerType).toBe("openclaw");
|
|
175
|
+
});
|
|
176
|
+
it("should include UI as always available", async () => {
|
|
177
|
+
const tool = findTool("get_messaging_health");
|
|
178
|
+
const result = await tool.handler({ channelId: "ui" });
|
|
179
|
+
expect(result.providers[0].available).toBe(true);
|
|
180
|
+
expect(result.providers[0].displayName).toBe("In-App UI");
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
184
|
+
// WORKFLOW INTEGRATION
|
|
185
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
186
|
+
describe("Workflow: send → check status", () => {
|
|
187
|
+
it("should complete send → status check flow", async () => {
|
|
188
|
+
// Step 1: Send
|
|
189
|
+
const sendTool = findTool("send_openclaw_message");
|
|
190
|
+
const sendResult = await sendTool.handler({
|
|
191
|
+
channelId: "slack",
|
|
192
|
+
recipient: "#general",
|
|
193
|
+
text: "Test notification from messaging pipeline",
|
|
194
|
+
subject: "Pipeline Test",
|
|
195
|
+
urgency: "low",
|
|
196
|
+
});
|
|
197
|
+
expect(sendResult.success).toBe(true);
|
|
198
|
+
// Step 2: Check status
|
|
199
|
+
const statusTool = findTool("get_openclaw_delivery_status");
|
|
200
|
+
const statusResult = await statusTool.handler({});
|
|
201
|
+
expect(statusResult.deliveries).toBeDefined();
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
describe("Workflow: channels → health → configure → send", () => {
|
|
205
|
+
it("should complete full messaging setup flow", async () => {
|
|
206
|
+
// Step 1: List channels
|
|
207
|
+
const listTool = findTool("list_openclaw_channels");
|
|
208
|
+
const listResult = await listTool.handler({ includeNative: true });
|
|
209
|
+
expect(listResult.totalChannels).toBe(13);
|
|
210
|
+
// Step 2: Check health
|
|
211
|
+
const healthTool = findTool("get_messaging_health");
|
|
212
|
+
const healthResult = await healthTool.handler({});
|
|
213
|
+
expect(healthResult.totalProviders).toBe(13);
|
|
214
|
+
// Step 3: Configure preferences
|
|
215
|
+
const configTool = findTool("configure_channel_preferences");
|
|
216
|
+
const configResult = await configTool.handler({
|
|
217
|
+
preferredChannels: ["ui", "ntfy"],
|
|
218
|
+
});
|
|
219
|
+
expect(configResult.success).toBe(true);
|
|
220
|
+
// Step 4: Send
|
|
221
|
+
const sendTool = findTool("send_openclaw_message");
|
|
222
|
+
const sendResult = await sendTool.handler({
|
|
223
|
+
channelId: "ntfy",
|
|
224
|
+
recipient: "nodebench",
|
|
225
|
+
text: "Integration test passed!",
|
|
226
|
+
urgency: "low",
|
|
227
|
+
});
|
|
228
|
+
expect(sendResult.success).toBe(true);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
//# sourceMappingURL=openclawMessaging.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclawMessaging.test.js","sourceRoot":"","sources":["../../src/__tests__/openclawMessaging.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,8 @@ import { architectTools } from "../tools/architectTools.js";
|
|
|
46
46
|
import { uiUxDiveTools } from "../tools/uiUxDiveTools.js";
|
|
47
47
|
import { mcpBridgeTools } from "../tools/mcpBridgeTools.js";
|
|
48
48
|
import { uiUxDiveAdvancedTools } from "../tools/uiUxDiveAdvancedTools.js";
|
|
49
|
+
import { skillUpdateTools } from "../tools/skillUpdateTools.js";
|
|
50
|
+
import { overstoryTools } from "../tools/overstoryTools.js";
|
|
49
51
|
import { getQuickRef, hybridSearch, TOOL_REGISTRY, SEARCH_MODES, ALL_REGISTRY_ENTRIES, WORKFLOW_CHAINS, tokenize, buildDenseIndex, getToolComplexity } from "../tools/toolRegistry.js";
|
|
50
52
|
// Assemble all tools like index.ts does
|
|
51
53
|
const domainTools = [
|
|
@@ -86,6 +88,8 @@ const domainTools = [
|
|
|
86
88
|
...uiUxDiveTools,
|
|
87
89
|
...mcpBridgeTools,
|
|
88
90
|
...uiUxDiveAdvancedTools,
|
|
91
|
+
...skillUpdateTools,
|
|
92
|
+
...overstoryTools,
|
|
89
93
|
];
|
|
90
94
|
const metaTools = createMetaTools(domainTools);
|
|
91
95
|
const allToolsWithoutDiscovery = [...domainTools, ...metaTools];
|
|
@@ -96,8 +100,8 @@ const allTools = [...allToolsWithoutDiscovery, ...discoveryTools];
|
|
|
96
100
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
97
101
|
describe("Static: tool structure", () => {
|
|
98
102
|
it("should have 175 tools total", () => {
|
|
99
|
-
//
|
|
100
|
-
expect(allTools.length).toBe(
|
|
103
|
+
// domain tools + 3 meta tools (findTools, getMethodology, check_mcp_setup) + 3 progressive discovery tools
|
|
104
|
+
expect(allTools.length).toBe(213);
|
|
101
105
|
});
|
|
102
106
|
it("every tool has name, description, inputSchema, handler", () => {
|
|
103
107
|
for (const tool of allTools) {
|
|
@@ -321,7 +325,7 @@ describe("Static: new methodology topics", () => {
|
|
|
321
325
|
expect(topics).toContain("agent_bootstrap");
|
|
322
326
|
expect(topics).toContain("autonomous_maintenance");
|
|
323
327
|
expect(topics).toContain("parallel_agent_teams");
|
|
324
|
-
expect(topics.length).toBe(
|
|
328
|
+
expect(topics.length).toBe(26); // All topics listed in overview (includes scenario_testing added v2.26.0)
|
|
325
329
|
});
|
|
326
330
|
});
|
|
327
331
|
describe("Unit: setup_local_env", () => {
|