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.
Files changed (96) hide show
  1. package/NODEBENCH_AGENTS.md +5 -4
  2. package/README.md +495 -280
  3. package/dist/__tests__/architectComplex.test.js +3 -5
  4. package/dist/__tests__/architectComplex.test.js.map +1 -1
  5. package/dist/__tests__/batchAutopilot.test.d.ts +8 -0
  6. package/dist/__tests__/batchAutopilot.test.js +218 -0
  7. package/dist/__tests__/batchAutopilot.test.js.map +1 -0
  8. package/dist/__tests__/cliSubcommands.test.d.ts +1 -0
  9. package/dist/__tests__/cliSubcommands.test.js +138 -0
  10. package/dist/__tests__/cliSubcommands.test.js.map +1 -0
  11. package/dist/__tests__/evalHarness.test.js +1 -1
  12. package/dist/__tests__/forecastingDogfood.test.d.ts +9 -0
  13. package/dist/__tests__/forecastingDogfood.test.js +284 -0
  14. package/dist/__tests__/forecastingDogfood.test.js.map +1 -0
  15. package/dist/__tests__/forecastingScoring.test.d.ts +9 -0
  16. package/dist/__tests__/forecastingScoring.test.js +202 -0
  17. package/dist/__tests__/forecastingScoring.test.js.map +1 -0
  18. package/dist/__tests__/localDashboard.test.d.ts +1 -0
  19. package/dist/__tests__/localDashboard.test.js +226 -0
  20. package/dist/__tests__/localDashboard.test.js.map +1 -0
  21. package/dist/__tests__/multiHopDogfood.test.d.ts +12 -0
  22. package/dist/__tests__/multiHopDogfood.test.js +303 -0
  23. package/dist/__tests__/multiHopDogfood.test.js.map +1 -0
  24. package/dist/__tests__/openclawDogfood.test.d.ts +23 -0
  25. package/dist/__tests__/openclawDogfood.test.js +535 -0
  26. package/dist/__tests__/openclawDogfood.test.js.map +1 -0
  27. package/dist/__tests__/openclawMessaging.test.d.ts +14 -0
  28. package/dist/__tests__/openclawMessaging.test.js +232 -0
  29. package/dist/__tests__/openclawMessaging.test.js.map +1 -0
  30. package/dist/__tests__/tools.test.js +7 -3
  31. package/dist/__tests__/tools.test.js.map +1 -1
  32. package/dist/__tests__/traceabilityDogfood.test.d.ts +12 -0
  33. package/dist/__tests__/traceabilityDogfood.test.js +241 -0
  34. package/dist/__tests__/traceabilityDogfood.test.js.map +1 -0
  35. package/dist/__tests__/webmcpTools.test.d.ts +7 -0
  36. package/dist/__tests__/webmcpTools.test.js +195 -0
  37. package/dist/__tests__/webmcpTools.test.js.map +1 -0
  38. package/dist/dashboard/briefHtml.d.ts +20 -0
  39. package/dist/dashboard/briefHtml.js +1000 -0
  40. package/dist/dashboard/briefHtml.js.map +1 -0
  41. package/dist/dashboard/briefServer.d.ts +18 -0
  42. package/dist/dashboard/briefServer.js +320 -0
  43. package/dist/dashboard/briefServer.js.map +1 -0
  44. package/dist/dashboard/html.d.ts +18 -0
  45. package/dist/dashboard/html.js +1491 -0
  46. package/dist/dashboard/html.js.map +1 -0
  47. package/dist/dashboard/server.d.ts +17 -0
  48. package/dist/dashboard/server.js +403 -0
  49. package/dist/dashboard/server.js.map +1 -0
  50. package/dist/db.js +38 -0
  51. package/dist/db.js.map +1 -1
  52. package/dist/index.js +211 -5
  53. package/dist/index.js.map +1 -1
  54. package/dist/tools/critterTools.js +4 -0
  55. package/dist/tools/critterTools.js.map +1 -1
  56. package/dist/tools/forecastingTools.d.ts +11 -0
  57. package/dist/tools/forecastingTools.js +616 -0
  58. package/dist/tools/forecastingTools.js.map +1 -0
  59. package/dist/tools/localDashboardTools.d.ts +8 -0
  60. package/dist/tools/localDashboardTools.js +332 -0
  61. package/dist/tools/localDashboardTools.js.map +1 -0
  62. package/dist/tools/metaTools.js +170 -1
  63. package/dist/tools/metaTools.js.map +1 -1
  64. package/dist/tools/openclawTools.d.ts +11 -0
  65. package/dist/tools/openclawTools.js +1017 -0
  66. package/dist/tools/openclawTools.js.map +1 -0
  67. package/dist/tools/overstoryTools.d.ts +14 -0
  68. package/dist/tools/overstoryTools.js +426 -0
  69. package/dist/tools/overstoryTools.js.map +1 -0
  70. package/dist/tools/prReportTools.d.ts +11 -0
  71. package/dist/tools/prReportTools.js +911 -0
  72. package/dist/tools/prReportTools.js.map +1 -0
  73. package/dist/tools/progressiveDiscoveryTools.js +28 -9
  74. package/dist/tools/progressiveDiscoveryTools.js.map +1 -1
  75. package/dist/tools/selfEvalTools.js +8 -1
  76. package/dist/tools/selfEvalTools.js.map +1 -1
  77. package/dist/tools/sessionMemoryTools.js +14 -2
  78. package/dist/tools/sessionMemoryTools.js.map +1 -1
  79. package/dist/tools/skillUpdateTools.d.ts +24 -0
  80. package/dist/tools/skillUpdateTools.js +469 -0
  81. package/dist/tools/skillUpdateTools.js.map +1 -0
  82. package/dist/tools/toolRegistry.js +178 -0
  83. package/dist/tools/toolRegistry.js.map +1 -1
  84. package/dist/tools/uiUxDiveAdvancedTools.js +61 -0
  85. package/dist/tools/uiUxDiveAdvancedTools.js.map +1 -1
  86. package/dist/tools/uiUxDiveTools.js +154 -1
  87. package/dist/tools/uiUxDiveTools.js.map +1 -1
  88. package/dist/tools/visualQaTools.d.ts +2 -0
  89. package/dist/tools/visualQaTools.js +1088 -0
  90. package/dist/tools/visualQaTools.js.map +1 -0
  91. package/dist/tools/webmcpTools.d.ts +16 -0
  92. package/dist/tools/webmcpTools.js +703 -0
  93. package/dist/tools/webmcpTools.js.map +1 -0
  94. package/dist/toolsetRegistry.js +4 -0
  95. package/dist/toolsetRegistry.js.map +1 -1
  96. 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
- // 169 domain tools + 3 meta tools (findTools, getMethodology, check_mcp_setup) + 3 progressive discovery tools
100
- expect(allTools.length).toBe(203);
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(24); // All topics listed in overview
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", () => {