@dobbyai/mcp-external 1.0.4 → 1.1.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 (163) hide show
  1. package/dist/__tests__/agent-mail-tools.test.d.ts +8 -0
  2. package/dist/__tests__/agent-mail-tools.test.d.ts.map +1 -0
  3. package/dist/__tests__/agent-mail-tools.test.js +262 -0
  4. package/dist/__tests__/agent-mail-tools.test.js.map +1 -0
  5. package/dist/__tests__/annotations.test.d.ts +8 -0
  6. package/dist/__tests__/annotations.test.d.ts.map +1 -0
  7. package/dist/__tests__/annotations.test.js +108 -0
  8. package/dist/__tests__/annotations.test.js.map +1 -0
  9. package/dist/__tests__/auth.test.d.ts +7 -0
  10. package/dist/__tests__/auth.test.d.ts.map +1 -0
  11. package/dist/__tests__/auth.test.js +116 -0
  12. package/dist/__tests__/auth.test.js.map +1 -0
  13. package/dist/__tests__/integration/protocol.test.d.ts +8 -0
  14. package/dist/__tests__/integration/protocol.test.d.ts.map +1 -0
  15. package/dist/__tests__/integration/protocol.test.js +104 -0
  16. package/dist/__tests__/integration/protocol.test.js.map +1 -0
  17. package/dist/__tests__/mcp-integrations.test.d.ts +8 -0
  18. package/dist/__tests__/mcp-integrations.test.d.ts.map +1 -0
  19. package/dist/__tests__/mcp-integrations.test.js +375 -0
  20. package/dist/__tests__/mcp-integrations.test.js.map +1 -0
  21. package/dist/__tests__/memory-graph-tools.test.d.ts +8 -0
  22. package/dist/__tests__/memory-graph-tools.test.d.ts.map +1 -0
  23. package/dist/__tests__/memory-graph-tools.test.js +265 -0
  24. package/dist/__tests__/memory-graph-tools.test.js.map +1 -0
  25. package/dist/__tests__/schedule-tools.test.d.ts +8 -0
  26. package/dist/__tests__/schedule-tools.test.d.ts.map +1 -0
  27. package/dist/__tests__/schedule-tools.test.js +290 -0
  28. package/dist/__tests__/schedule-tools.test.js.map +1 -0
  29. package/dist/__tests__/tiers.test.d.ts +7 -0
  30. package/dist/__tests__/tiers.test.d.ts.map +1 -0
  31. package/dist/__tests__/tiers.test.js +103 -0
  32. package/dist/__tests__/tiers.test.js.map +1 -0
  33. package/dist/__tests__/tools.test.d.ts +7 -0
  34. package/dist/__tests__/tools.test.d.ts.map +1 -0
  35. package/dist/__tests__/tools.test.js +143 -0
  36. package/dist/__tests__/tools.test.js.map +1 -0
  37. package/dist/__tests__/transport.test.d.ts +7 -0
  38. package/dist/__tests__/transport.test.d.ts.map +1 -0
  39. package/dist/__tests__/transport.test.js +55 -0
  40. package/dist/__tests__/transport.test.js.map +1 -0
  41. package/dist/__tests__/web-eval-tools.test.d.ts +8 -0
  42. package/dist/__tests__/web-eval-tools.test.d.ts.map +1 -0
  43. package/dist/__tests__/web-eval-tools.test.js +252 -0
  44. package/dist/__tests__/web-eval-tools.test.js.map +1 -0
  45. package/dist/__tests__/workflow-tools.test.d.ts +8 -0
  46. package/dist/__tests__/workflow-tools.test.d.ts.map +1 -0
  47. package/dist/__tests__/workflow-tools.test.js +268 -0
  48. package/dist/__tests__/workflow-tools.test.js.map +1 -0
  49. package/dist/auth/oauth-provider.d.ts +34 -0
  50. package/dist/auth/oauth-provider.d.ts.map +1 -0
  51. package/dist/auth/oauth-provider.js +75 -0
  52. package/dist/auth/oauth-provider.js.map +1 -0
  53. package/dist/auth/token-verifier.d.ts +40 -0
  54. package/dist/auth/token-verifier.d.ts.map +1 -0
  55. package/dist/auth/token-verifier.js +138 -0
  56. package/dist/auth/token-verifier.js.map +1 -0
  57. package/dist/http-server.d.ts +35 -0
  58. package/dist/http-server.d.ts.map +1 -0
  59. package/dist/http-server.js +175 -0
  60. package/dist/http-server.js.map +1 -0
  61. package/dist/index.js +113 -52
  62. package/dist/index.js.map +1 -1
  63. package/dist/lib/dobby-client.d.ts +50 -20
  64. package/dist/lib/dobby-client.d.ts.map +1 -1
  65. package/dist/lib/dobby-client.js +50 -0
  66. package/dist/lib/dobby-client.js.map +1 -1
  67. package/dist/tools/agent-mail.d.ts +153 -0
  68. package/dist/tools/agent-mail.d.ts.map +1 -0
  69. package/dist/tools/agent-mail.js +340 -0
  70. package/dist/tools/agent-mail.js.map +1 -0
  71. package/dist/tools/approvals.d.ts +24 -0
  72. package/dist/tools/approvals.d.ts.map +1 -1
  73. package/dist/tools/approvals.js +24 -0
  74. package/dist/tools/approvals.js.map +1 -1
  75. package/dist/tools/crew-builder.d.ts +24 -0
  76. package/dist/tools/crew-builder.d.ts.map +1 -1
  77. package/dist/tools/crew-builder.js +24 -0
  78. package/dist/tools/crew-builder.js.map +1 -1
  79. package/dist/tools/crewai.d.ts +24 -0
  80. package/dist/tools/crewai.d.ts.map +1 -1
  81. package/dist/tools/crewai.js +24 -0
  82. package/dist/tools/crewai.js.map +1 -1
  83. package/dist/tools/exa.d.ts +161 -0
  84. package/dist/tools/exa.d.ts.map +1 -0
  85. package/dist/tools/exa.js +228 -0
  86. package/dist/tools/exa.js.map +1 -0
  87. package/dist/tools/github-mcp.d.ts +303 -0
  88. package/dist/tools/github-mcp.d.ts.map +1 -0
  89. package/dist/tools/github-mcp.js +397 -0
  90. package/dist/tools/github-mcp.js.map +1 -0
  91. package/dist/tools/governance.d.ts +129 -0
  92. package/dist/tools/governance.d.ts.map +1 -0
  93. package/dist/tools/governance.js +171 -0
  94. package/dist/tools/governance.js.map +1 -0
  95. package/dist/tools/index.d.ts +3589 -159
  96. package/dist/tools/index.d.ts.map +1 -1
  97. package/dist/tools/index.js +250 -0
  98. package/dist/tools/index.js.map +1 -1
  99. package/dist/tools/jira.d.ts +60 -0
  100. package/dist/tools/jira.d.ts.map +1 -1
  101. package/dist/tools/jira.js +60 -0
  102. package/dist/tools/jira.js.map +1 -1
  103. package/dist/tools/knowledge-base.d.ts +144 -0
  104. package/dist/tools/knowledge-base.d.ts.map +1 -0
  105. package/dist/tools/knowledge-base.js +179 -0
  106. package/dist/tools/knowledge-base.js.map +1 -0
  107. package/dist/tools/mcp-metrics.d.ts +62 -0
  108. package/dist/tools/mcp-metrics.d.ts.map +1 -0
  109. package/dist/tools/mcp-metrics.js +270 -0
  110. package/dist/tools/mcp-metrics.js.map +1 -0
  111. package/dist/tools/mcp-tools.d.ts +12 -0
  112. package/dist/tools/mcp-tools.d.ts.map +1 -1
  113. package/dist/tools/mcp-tools.js +12 -0
  114. package/dist/tools/mcp-tools.js.map +1 -1
  115. package/dist/tools/mem0.d.ts +168 -0
  116. package/dist/tools/mem0.d.ts.map +1 -0
  117. package/dist/tools/mem0.js +255 -0
  118. package/dist/tools/mem0.js.map +1 -0
  119. package/dist/tools/memory-graph.d.ts +197 -0
  120. package/dist/tools/memory-graph.d.ts.map +1 -0
  121. package/dist/tools/memory-graph.js +545 -0
  122. package/dist/tools/memory-graph.js.map +1 -0
  123. package/dist/tools/messages.d.ts +12 -0
  124. package/dist/tools/messages.d.ts.map +1 -1
  125. package/dist/tools/messages.js +12 -0
  126. package/dist/tools/messages.js.map +1 -1
  127. package/dist/tools/moltbook.d.ts +564 -0
  128. package/dist/tools/moltbook.d.ts.map +1 -0
  129. package/dist/tools/moltbook.js +792 -0
  130. package/dist/tools/moltbook.js.map +1 -0
  131. package/dist/tools/ops.d.ts +219 -0
  132. package/dist/tools/ops.d.ts.map +1 -0
  133. package/dist/tools/ops.js +360 -0
  134. package/dist/tools/ops.js.map +1 -0
  135. package/dist/tools/schedules.d.ts +196 -0
  136. package/dist/tools/schedules.d.ts.map +1 -0
  137. package/dist/tools/schedules.js +264 -0
  138. package/dist/tools/schedules.js.map +1 -0
  139. package/dist/tools/services.d.ts +6 -0
  140. package/dist/tools/services.d.ts.map +1 -1
  141. package/dist/tools/services.js +6 -0
  142. package/dist/tools/services.js.map +1 -1
  143. package/dist/tools/tasks.d.ts +45 -0
  144. package/dist/tools/tasks.d.ts.map +1 -1
  145. package/dist/tools/tasks.js +49 -4
  146. package/dist/tools/tasks.js.map +1 -1
  147. package/dist/tools/tiers.d.ts +39 -0
  148. package/dist/tools/tiers.d.ts.map +1 -0
  149. package/dist/tools/tiers.js +138 -0
  150. package/dist/tools/tiers.js.map +1 -0
  151. package/dist/tools/unified-agents.d.ts +62 -0
  152. package/dist/tools/unified-agents.d.ts.map +1 -0
  153. package/dist/tools/unified-agents.js +147 -0
  154. package/dist/tools/unified-agents.js.map +1 -0
  155. package/dist/tools/web-eval.d.ts +172 -0
  156. package/dist/tools/web-eval.d.ts.map +1 -0
  157. package/dist/tools/web-eval.js +347 -0
  158. package/dist/tools/web-eval.js.map +1 -0
  159. package/dist/tools/workflow.d.ts +171 -0
  160. package/dist/tools/workflow.d.ts.map +1 -0
  161. package/dist/tools/workflow.js +518 -0
  162. package/dist/tools/workflow.js.map +1 -0
  163. package/package.json +8 -3
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Web Eval Agent MCP Tools
3
+ *
4
+ * Phase 3: Automated browser testing and visual validation.
5
+ * Wraps Playwright E2E infrastructure for agent-driven testing.
6
+ * Agents can trigger tests, capture screenshots, and validate UI.
7
+ */
8
+ import { DobbyClient } from '../lib/dobby-client.js';
9
+ export declare const webEvalTools: {
10
+ webeval_run_tests: {
11
+ name: string;
12
+ annotations: {
13
+ title: string;
14
+ readOnlyHint: boolean;
15
+ destructiveHint: boolean;
16
+ openWorldHint: boolean;
17
+ };
18
+ description: string;
19
+ inputSchema: {
20
+ type: "object";
21
+ properties: {
22
+ spec: {
23
+ type: string;
24
+ description: string;
25
+ };
26
+ grep: {
27
+ type: string;
28
+ description: string;
29
+ };
30
+ browser: {
31
+ type: string;
32
+ enum: string[];
33
+ description: string;
34
+ };
35
+ headed: {
36
+ type: string;
37
+ description: string;
38
+ };
39
+ };
40
+ };
41
+ };
42
+ webeval_check_health: {
43
+ name: string;
44
+ annotations: {
45
+ title: string;
46
+ readOnlyHint: boolean;
47
+ destructiveHint: boolean;
48
+ openWorldHint: boolean;
49
+ };
50
+ description: string;
51
+ inputSchema: {
52
+ type: "object";
53
+ properties: {
54
+ base_url: {
55
+ type: string;
56
+ description: string;
57
+ };
58
+ pages: {
59
+ type: string;
60
+ items: {
61
+ type: string;
62
+ };
63
+ description: string;
64
+ };
65
+ };
66
+ };
67
+ };
68
+ webeval_test_api_endpoint: {
69
+ name: string;
70
+ annotations: {
71
+ title: string;
72
+ readOnlyHint: boolean;
73
+ destructiveHint: boolean;
74
+ openWorldHint: boolean;
75
+ };
76
+ description: string;
77
+ inputSchema: {
78
+ type: "object";
79
+ properties: {
80
+ method: {
81
+ type: string;
82
+ enum: string[];
83
+ description: string;
84
+ };
85
+ path: {
86
+ type: string;
87
+ description: string;
88
+ };
89
+ body: {
90
+ type: string;
91
+ description: string;
92
+ };
93
+ expected_status: {
94
+ type: string;
95
+ description: string;
96
+ };
97
+ headers: {
98
+ type: string;
99
+ description: string;
100
+ };
101
+ };
102
+ required: string[];
103
+ };
104
+ };
105
+ webeval_coverage_report: {
106
+ name: string;
107
+ annotations: {
108
+ title: string;
109
+ readOnlyHint: boolean;
110
+ destructiveHint: boolean;
111
+ openWorldHint: boolean;
112
+ };
113
+ description: string;
114
+ inputSchema: {
115
+ type: "object";
116
+ properties: {
117
+ type: {
118
+ type: string;
119
+ enum: string[];
120
+ description: string;
121
+ };
122
+ threshold: {
123
+ type: string;
124
+ description: string;
125
+ };
126
+ };
127
+ };
128
+ };
129
+ };
130
+ export declare function handleWebEvalRunTests(_client: DobbyClient, args: {
131
+ spec?: string;
132
+ grep?: string;
133
+ browser?: string;
134
+ headed?: boolean;
135
+ }): Promise<{
136
+ content: {
137
+ type: "text";
138
+ text: string;
139
+ }[];
140
+ }>;
141
+ export declare function handleWebEvalCheckHealth(_client: DobbyClient, args: {
142
+ base_url?: string;
143
+ pages?: string[];
144
+ }): Promise<{
145
+ content: {
146
+ type: "text";
147
+ text: string;
148
+ }[];
149
+ }>;
150
+ export declare function handleWebEvalTestApiEndpoint(_client: DobbyClient, args: {
151
+ method?: string;
152
+ path: string;
153
+ body?: Record<string, unknown>;
154
+ expected_status?: number;
155
+ headers?: Record<string, string>;
156
+ }): Promise<{
157
+ content: {
158
+ type: "text";
159
+ text: string;
160
+ }[];
161
+ isError: boolean | undefined;
162
+ }>;
163
+ export declare function handleWebEvalCoverageReport(_client: DobbyClient, args: {
164
+ type?: string;
165
+ threshold?: number;
166
+ }): Promise<{
167
+ content: {
168
+ type: "text";
169
+ text: string;
170
+ }[];
171
+ }>;
172
+ //# sourceMappingURL=web-eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-eval.d.ts","sourceRoot":"","sources":["../../src/tools/web-eval.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMrD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyHxB,CAAC;AAmCF,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;GA6C3E;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;;;;;GAqD9C;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE;IACJ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;;;;;;GA2EF;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAgD5C"}
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Web Eval Agent MCP Tools
3
+ *
4
+ * Phase 3: Automated browser testing and visual validation.
5
+ * Wraps Playwright E2E infrastructure for agent-driven testing.
6
+ * Agents can trigger tests, capture screenshots, and validate UI.
7
+ */
8
+ // ============================================
9
+ // Tool Definitions
10
+ // ============================================
11
+ export const webEvalTools = {
12
+ webeval_run_tests: {
13
+ name: 'webeval_run_tests',
14
+ annotations: {
15
+ title: 'Run Tests',
16
+ readOnlyHint: true,
17
+ destructiveHint: false,
18
+ openWorldHint: false,
19
+ },
20
+ description: 'Run Playwright E2E tests and return results. Supports running all tests, specific test files, or tests matching a grep pattern. Returns pass/fail counts, duration, and failure details.',
21
+ inputSchema: {
22
+ type: 'object',
23
+ properties: {
24
+ spec: {
25
+ type: 'string',
26
+ description: 'Optional: Specific test file to run (e.g., "tasks", "auth", "navigation", "agents", "onboarding"). Runs all if not specified.',
27
+ },
28
+ grep: {
29
+ type: 'string',
30
+ description: 'Optional: Filter tests by name pattern (e.g., "login", "create task")',
31
+ },
32
+ browser: {
33
+ type: 'string',
34
+ enum: ['chromium', 'firefox', 'mobile-safari', 'all'],
35
+ description: 'Browser to test on (default: chromium)',
36
+ },
37
+ headed: {
38
+ type: 'boolean',
39
+ description: 'Run with visible browser (default: false)',
40
+ },
41
+ },
42
+ },
43
+ },
44
+ webeval_check_health: {
45
+ name: 'webeval_check_health',
46
+ annotations: {
47
+ title: 'Check Health',
48
+ readOnlyHint: true,
49
+ destructiveHint: false,
50
+ openWorldHint: false,
51
+ },
52
+ description: 'Verify the web application is running and accessible. Checks key pages (home, dashboard, API) and reports status codes, load times, and any errors.',
53
+ inputSchema: {
54
+ type: 'object',
55
+ properties: {
56
+ base_url: {
57
+ type: 'string',
58
+ description: 'Base URL to check (default: http://localhost:3000)',
59
+ },
60
+ pages: {
61
+ type: 'array',
62
+ items: { type: 'string' },
63
+ description: 'Optional: Specific paths to check (default: /, /auth/signin, /api/health)',
64
+ },
65
+ },
66
+ },
67
+ },
68
+ webeval_test_api_endpoint: {
69
+ name: 'webeval_test_api_endpoint',
70
+ annotations: {
71
+ title: 'Test API Endpoint',
72
+ readOnlyHint: true,
73
+ destructiveHint: false,
74
+ openWorldHint: false,
75
+ },
76
+ description: 'Test a specific API endpoint with a request and validate the response. Useful for verifying API changes before running full E2E tests.',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ method: {
81
+ type: 'string',
82
+ enum: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
83
+ description: 'HTTP method (default: GET)',
84
+ },
85
+ path: {
86
+ type: 'string',
87
+ description: 'API path (e.g., "/api/v1/tasks")',
88
+ },
89
+ body: {
90
+ type: 'object',
91
+ description: 'Optional: Request body for POST/PUT/PATCH',
92
+ },
93
+ expected_status: {
94
+ type: 'number',
95
+ description: 'Optional: Expected HTTP status code (default: 200)',
96
+ },
97
+ headers: {
98
+ type: 'object',
99
+ description: 'Optional: Additional headers',
100
+ },
101
+ },
102
+ required: ['path'],
103
+ },
104
+ },
105
+ webeval_coverage_report: {
106
+ name: 'webeval_coverage_report',
107
+ annotations: {
108
+ title: 'Coverage Report',
109
+ readOnlyHint: true,
110
+ destructiveHint: false,
111
+ openWorldHint: false,
112
+ },
113
+ description: 'Get the current test coverage report. Shows coverage percentages per file/module and identifies untested areas.',
114
+ inputSchema: {
115
+ type: 'object',
116
+ properties: {
117
+ type: {
118
+ type: 'string',
119
+ enum: ['e2e', 'unit', 'all'],
120
+ description: 'Type of coverage report (default: all)',
121
+ },
122
+ threshold: {
123
+ type: 'number',
124
+ description: 'Minimum coverage threshold to flag (default: 30)',
125
+ },
126
+ },
127
+ },
128
+ },
129
+ };
130
+ // ============================================
131
+ // Test Runner Configuration
132
+ // ============================================
133
+ const DEFAULT_BASE_URL = 'http://localhost:3000';
134
+ const HEALTH_CHECK_PAGES = ['/', '/auth/signin', '/api/health'];
135
+ // ============================================
136
+ // Tool Handlers
137
+ // ============================================
138
+ export async function handleWebEvalRunTests(_client, args) {
139
+ const browser = args.browser || 'chromium';
140
+ const specFile = args.spec ? `web/e2e/${args.spec}.spec.ts` : '';
141
+ // Build playwright command
142
+ const cmdParts = ['npx', 'playwright', 'test'];
143
+ if (specFile)
144
+ cmdParts.push(specFile);
145
+ if (args.grep)
146
+ cmdParts.push('--grep', `"${args.grep}"`);
147
+ if (browser !== 'all')
148
+ cmdParts.push('--project', browser);
149
+ if (args.headed)
150
+ cmdParts.push('--headed');
151
+ cmdParts.push('--reporter', 'json');
152
+ const command = cmdParts.join(' ');
153
+ // Note: This returns the command to run, not the actual result.
154
+ // In production, this would execute via a task runner or subprocess.
155
+ // For now, we return the command and test configuration for the agent to execute.
156
+ const testConfig = {
157
+ command,
158
+ working_directory: 'web/',
159
+ spec: args.spec || 'all',
160
+ browser,
161
+ grep: args.grep || null,
162
+ headed: args.headed || false,
163
+ available_specs: ['auth', 'navigation', 'tasks', 'agents', 'onboarding'],
164
+ browsers: ['chromium', 'firefox', 'mobile-safari'],
165
+ tips: [
166
+ 'Run from the web/ directory',
167
+ 'Ensure the dev server is running (npm run dev)',
168
+ 'Set E2E_AUTH_COOKIE env var for CI authentication',
169
+ 'Use --headed to watch the tests run in a browser',
170
+ ],
171
+ };
172
+ return {
173
+ content: [{
174
+ type: 'text',
175
+ text: JSON.stringify({
176
+ status: 'ready',
177
+ test_config: testConfig,
178
+ note: 'Execute the command above to run the tests. Results will be in JSON format.',
179
+ }, null, 2),
180
+ }],
181
+ };
182
+ }
183
+ export async function handleWebEvalCheckHealth(_client, args) {
184
+ const baseUrl = args.base_url || DEFAULT_BASE_URL;
185
+ const pages = args.pages || HEALTH_CHECK_PAGES;
186
+ const results = [];
187
+ for (const page of pages) {
188
+ const url = `${baseUrl}${page}`;
189
+ const start = Date.now();
190
+ try {
191
+ const response = await fetch(url, {
192
+ method: 'GET',
193
+ headers: { 'User-Agent': 'Dobby-WebEval/1.0' },
194
+ signal: AbortSignal.timeout(10000),
195
+ });
196
+ results.push({
197
+ url: page,
198
+ status: response.status,
199
+ response_time_ms: Date.now() - start,
200
+ ok: response.ok,
201
+ });
202
+ }
203
+ catch (error) {
204
+ const errMsg = error instanceof Error ? error.message : 'Unknown error';
205
+ results.push({
206
+ url: page,
207
+ status: null,
208
+ response_time_ms: Date.now() - start,
209
+ ok: false,
210
+ error: errMsg,
211
+ });
212
+ }
213
+ }
214
+ const allOk = results.every(r => r.ok);
215
+ const avgResponseTime = results.reduce((sum, r) => sum + r.response_time_ms, 0) / results.length;
216
+ return {
217
+ content: [{
218
+ type: 'text',
219
+ text: JSON.stringify({
220
+ overall_status: allOk ? 'healthy' : 'unhealthy',
221
+ base_url: baseUrl,
222
+ checked_at: new Date().toISOString(),
223
+ pages_checked: results.length,
224
+ all_ok: allOk,
225
+ avg_response_time_ms: Math.round(avgResponseTime),
226
+ results,
227
+ }, null, 2),
228
+ }],
229
+ };
230
+ }
231
+ export async function handleWebEvalTestApiEndpoint(_client, args) {
232
+ const baseUrl = process.env.PLAYWRIGHT_BASE_URL || DEFAULT_BASE_URL;
233
+ const method = args.method || 'GET';
234
+ const expectedStatus = args.expected_status || 200;
235
+ const url = `${baseUrl}${args.path}`;
236
+ const start = Date.now();
237
+ try {
238
+ const fetchOptions = {
239
+ method,
240
+ headers: {
241
+ 'Content-Type': 'application/json',
242
+ 'User-Agent': 'Dobby-WebEval/1.0',
243
+ ...args.headers,
244
+ },
245
+ signal: AbortSignal.timeout(15000),
246
+ };
247
+ if (args.body && ['POST', 'PUT', 'PATCH'].includes(method)) {
248
+ fetchOptions.body = JSON.stringify(args.body);
249
+ }
250
+ const response = await fetch(url, fetchOptions);
251
+ const responseTime = Date.now() - start;
252
+ let responseBody;
253
+ const contentType = response.headers.get('content-type') || '';
254
+ if (contentType.includes('application/json')) {
255
+ responseBody = await response.json();
256
+ }
257
+ else {
258
+ const text = await response.text();
259
+ responseBody = text.slice(0, 500);
260
+ }
261
+ const statusMatch = response.status === expectedStatus;
262
+ return {
263
+ content: [{
264
+ type: 'text',
265
+ text: JSON.stringify({
266
+ test_result: statusMatch ? 'PASS' : 'FAIL',
267
+ request: {
268
+ method,
269
+ url: args.path,
270
+ body: args.body || null,
271
+ },
272
+ response: {
273
+ status: response.status,
274
+ expected_status: expectedStatus,
275
+ status_match: statusMatch,
276
+ response_time_ms: responseTime,
277
+ content_type: contentType,
278
+ body: responseBody,
279
+ },
280
+ }, null, 2),
281
+ }],
282
+ isError: !statusMatch ? true : undefined,
283
+ };
284
+ }
285
+ catch (error) {
286
+ const errMsg = error instanceof Error ? error.message : 'Unknown error';
287
+ return {
288
+ content: [{
289
+ type: 'text',
290
+ text: JSON.stringify({
291
+ test_result: 'ERROR',
292
+ request: { method, url: args.path },
293
+ error: errMsg,
294
+ response_time_ms: Date.now() - start,
295
+ }, null, 2),
296
+ }],
297
+ isError: true,
298
+ };
299
+ }
300
+ }
301
+ export async function handleWebEvalCoverageReport(_client, args) {
302
+ const coverageType = args.type || 'all';
303
+ const threshold = args.threshold || 30;
304
+ // Return test infrastructure info and commands to get coverage
305
+ const coverageConfig = {
306
+ coverage_type: coverageType,
307
+ threshold,
308
+ commands: {
309
+ unit: 'cd web && npm run test:coverage',
310
+ e2e: 'cd web && npx playwright test --reporter=html',
311
+ all: 'cd web && npm run test:coverage && npx playwright test --reporter=html',
312
+ },
313
+ coverage_config: {
314
+ provider: 'v8',
315
+ thresholds: {
316
+ statements: threshold,
317
+ branches: threshold,
318
+ functions: threshold,
319
+ lines: threshold,
320
+ },
321
+ report_location: 'web/coverage/',
322
+ e2e_report_location: 'web/playwright-report/',
323
+ },
324
+ test_inventory: {
325
+ e2e_specs: ['auth', 'navigation', 'tasks', 'agents', 'onboarding'],
326
+ unit_test_dirs: ['web/__tests__/api/', 'web/__tests__/unit/', 'web/__tests__/integration/'],
327
+ python_tests: 'dobby/tests/',
328
+ },
329
+ current_ci_gates: {
330
+ unit_tests: 'blocking',
331
+ e2e_critical: 'blocking (auth + tasks)',
332
+ e2e_extended: 'non-blocking',
333
+ coverage_threshold: '30%',
334
+ },
335
+ };
336
+ return {
337
+ content: [{
338
+ type: 'text',
339
+ text: JSON.stringify({
340
+ status: 'config_ready',
341
+ ...coverageConfig,
342
+ note: 'Run the commands above to generate fresh coverage reports.',
343
+ }, null, 2),
344
+ }],
345
+ };
346
+ }
347
+ //# sourceMappingURL=web-eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-eval.js","sourceRoot":"","sources":["../../src/tools/web-eval.ts"],"names":[],"mappings":"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"}