webmcp-cli 1.1.0 → 1.2.2

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 (82) hide show
  1. package/dist/agent/features/simulation-judge.js +2 -1
  2. package/dist/agent/features/simulation-judge.js.map +1 -1
  3. package/dist/agent/features/test-case-generator.js +2 -1
  4. package/dist/agent/features/test-case-generator.js.map +1 -1
  5. package/dist/agent/llm-client.js +14 -2
  6. package/dist/agent/llm-client.js.map +1 -1
  7. package/dist/bin/webmcp.js +5 -1
  8. package/dist/bin/webmcp.js.map +1 -1
  9. package/dist/browser/audit-runner.js +4 -1
  10. package/dist/browser/audit-runner.js.map +1 -1
  11. package/dist/cli/commands/audit.js +144 -135
  12. package/dist/cli/commands/audit.js.map +1 -1
  13. package/dist/cli/commands/interactive.js +3 -7
  14. package/dist/cli/commands/interactive.js.map +1 -1
  15. package/dist/cli/options/parse-audit-options.js +28 -3
  16. package/dist/cli/options/parse-audit-options.js.map +1 -1
  17. package/dist/core/types/tool.d.ts +1 -1
  18. package/dist/detection/declarative.js +5 -1
  19. package/dist/detection/declarative.js.map +1 -1
  20. package/dist/detection/imperative.js +2 -6
  21. package/dist/detection/imperative.js.map +1 -1
  22. package/dist/llm/advice-service.d.ts +5 -8
  23. package/dist/llm/advice-service.js +158 -201
  24. package/dist/llm/advice-service.js.map +1 -1
  25. package/dist/rules/coverage/COV-001.d.ts +3 -4
  26. package/dist/rules/coverage/COV-001.js +35 -48
  27. package/dist/rules/coverage/COV-001.js.map +1 -1
  28. package/dist/scoring/calculator.js +3 -24
  29. package/dist/scoring/calculator.js.map +1 -1
  30. package/dist/scoring/grades.d.ts +1 -1
  31. package/dist/scoring/grades.js +2 -2
  32. package/dist/scoring/grades.js.map +1 -1
  33. package/dist/ui/banner.js +3 -3
  34. package/dist/ui/banner.js.map +1 -1
  35. package/dist/ui/design-tokens.d.ts +23 -0
  36. package/dist/ui/design-tokens.js +58 -0
  37. package/dist/ui/design-tokens.js.map +1 -0
  38. package/dist/ui/findings.js +5 -4
  39. package/dist/ui/findings.js.map +1 -1
  40. package/dist/ui/index.d.ts +2 -0
  41. package/dist/ui/index.js +2 -0
  42. package/dist/ui/index.js.map +1 -1
  43. package/dist/ui/ink/FullScreenLayout.js +1 -10
  44. package/dist/ui/ink/FullScreenLayout.js.map +1 -1
  45. package/dist/ui/ink/RealAuditApp.js +5 -17
  46. package/dist/ui/ink/RealAuditApp.js.map +1 -1
  47. package/dist/ui/ink/components/AsciiLogo.js +1 -1
  48. package/dist/ui/ink/components/AsciiLogo.js.map +1 -1
  49. package/dist/ui/ink/components/Header.js +1 -10
  50. package/dist/ui/ink/components/Header.js.map +1 -1
  51. package/dist/ui/ink/components/SimulationResults.js +4 -2
  52. package/dist/ui/ink/components/SimulationResults.js.map +1 -1
  53. package/dist/ui/ink/components/ToolCard.js +4 -2
  54. package/dist/ui/ink/components/ToolCard.js.map +1 -1
  55. package/dist/ui/ink/components/shared/Badge.js +7 -6
  56. package/dist/ui/ink/components/shared/Badge.js.map +1 -1
  57. package/dist/ui/ink/components/shared/LoadingWithTimeout.js +1 -1
  58. package/dist/ui/ink/components/shared/LoadingWithTimeout.js.map +1 -1
  59. package/dist/ui/ink/components/views/CrawlingView.js +2 -11
  60. package/dist/ui/ink/components/views/CrawlingView.js.map +1 -1
  61. package/dist/ui/ink/components/views/FindingDetailView.js +1 -1
  62. package/dist/ui/ink/components/views/FindingDetailView.js.map +1 -1
  63. package/dist/ui/ink/components/views/TestCaseDetailView.js +1 -1
  64. package/dist/ui/ink/components/views/ToolDetailView.js +1 -1
  65. package/dist/ui/ink/components/views/ToolDetailView.js.map +1 -1
  66. package/dist/ui/ink/theme.d.ts +6 -4
  67. package/dist/ui/ink/theme.js +8 -27
  68. package/dist/ui/ink/theme.js.map +1 -1
  69. package/dist/ui/score-display.js +24 -43
  70. package/dist/ui/score-display.js.map +1 -1
  71. package/dist/ui/spinner.js +3 -1
  72. package/dist/ui/spinner.js.map +1 -1
  73. package/dist/ui/utils.d.ts +13 -0
  74. package/dist/ui/utils.js +25 -0
  75. package/dist/ui/utils.js.map +1 -0
  76. package/package.json +12 -15
  77. package/dist/bin/agentready.d.ts +0 -5
  78. package/dist/bin/agentready.js +0 -10
  79. package/dist/bin/agentready.js.map +0 -1
  80. package/dist/cli/utils/errors.d.ts +0 -53
  81. package/dist/cli/utils/errors.js +0 -87
  82. package/dist/cli/utils/errors.js.map +0 -1
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared UI Utilities
3
+ *
4
+ * Common helpers used by both CLI and TUI rendering paths.
5
+ */
6
+ /**
7
+ * Extract domain from a URL string.
8
+ */
9
+ export declare function getDomain(urlString: string): string;
10
+ /**
11
+ * Strip ANSI escape codes from a string for length calculation.
12
+ */
13
+ export declare function stripAnsi(str: string): string;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Shared UI Utilities
3
+ *
4
+ * Common helpers used by both CLI and TUI rendering paths.
5
+ */
6
+ /**
7
+ * Extract domain from a URL string.
8
+ */
9
+ export function getDomain(urlString) {
10
+ try {
11
+ const parsed = new URL(urlString);
12
+ return parsed.hostname;
13
+ }
14
+ catch {
15
+ return urlString.replace(/^https?:\/\//, '').split('/')[0] || urlString;
16
+ }
17
+ }
18
+ /**
19
+ * Strip ANSI escape codes from a string for length calculation.
20
+ */
21
+ export function stripAnsi(str) {
22
+ // eslint-disable-next-line no-control-regex
23
+ return str.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');
24
+ }
25
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/ui/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IAC1E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,4CAA4C;IAC5C,OAAO,GAAG,CAAC,OAAO,CAChB,6EAA6E,EAC7E,EAAE,CACH,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "webmcp-cli",
3
- "version": "1.1.0",
3
+ "version": "1.2.2",
4
4
  "description": "Audit any website for AI agent readiness (WebMCP)",
5
5
  "type": "module",
6
6
  "bin": {
7
- "webmcp-cli": "./dist/bin/webmcp.js",
8
- "webmcp": "./dist/bin/webmcp.js",
9
- "agentready": "./dist/bin/agentready.js"
7
+ "webmcp-cli": "dist/bin/webmcp.js",
8
+ "webmcp": "dist/bin/webmcp.js",
9
+ "agentready": "dist/bin/webmcp.js"
10
10
  },
11
11
  "main": "./dist/index.js",
12
12
  "types": "./dist/index.d.ts",
@@ -19,13 +19,6 @@
19
19
  "files": [
20
20
  "dist"
21
21
  ],
22
- "scripts": {
23
- "dev": "tsx src/bin/webmcp.ts",
24
- "build": "tsc",
25
- "test": "vitest",
26
- "lint": "tsc --noEmit",
27
- "prepare": "npm run build"
28
- },
29
22
  "keywords": [
30
23
  "webmcp",
31
24
  "ai",
@@ -39,7 +32,7 @@
39
32
  "author": "",
40
33
  "license": "MIT",
41
34
  "engines": {
42
- "node": ">=18.0.0"
35
+ "node": ">=20.0.0"
43
36
  },
44
37
  "dependencies": {
45
38
  "@inkjs/ui": "^2.0.0",
@@ -61,8 +54,6 @@
61
54
  "ora": "^8.0.0",
62
55
  "playwright": "^1.48.0",
63
56
  "react": "^19.2.4",
64
- "string-width": "^7.2.0",
65
- "terminal-link": "^3.0.0",
66
57
  "zod": "^3.23.0"
67
58
  },
68
59
  "devDependencies": {
@@ -72,5 +63,11 @@
72
63
  "tsx": "^4.19.0",
73
64
  "typescript": "^5.6.0",
74
65
  "vitest": "^2.1.0"
66
+ },
67
+ "scripts": {
68
+ "dev": "tsx src/bin/webmcp.ts",
69
+ "build": "tsc",
70
+ "test": "vitest",
71
+ "lint": "tsc --noEmit"
75
72
  }
76
- }
73
+ }
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * AgentReady CLI Entry Point
4
- */
5
- export {};
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * AgentReady CLI Entry Point
4
- */
5
- import { run } from '../cli/index.js';
6
- run().catch((error) => {
7
- console.error('Fatal error:', error);
8
- process.exit(1);
9
- });
10
- //# sourceMappingURL=agentready.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agentready.js","sourceRoot":"","sources":["../../src/bin/agentready.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACpB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,53 +0,0 @@
1
- /**
2
- * CLI Error Utilities
3
- *
4
- * Actionable error messages with recovery suggestions
5
- */
6
- export interface CLIError {
7
- code: string;
8
- message: string;
9
- suggestion?: string;
10
- details?: string;
11
- }
12
- export declare const ERROR_CODES: {
13
- readonly INVALID_URL: {
14
- readonly code: "ERR_INVALID_URL";
15
- readonly message: "Invalid URL provided";
16
- readonly suggestion: "Use a valid URL like: https://example.com";
17
- };
18
- readonly NO_API_KEY: {
19
- readonly code: "ERR_NO_API_KEY";
20
- readonly message: "OpenRouter API key not configured";
21
- readonly suggestion: "Set OPENROUTER_API_KEY in .env or environment";
22
- };
23
- readonly BROWSER_FAILED: {
24
- readonly code: "ERR_BROWSER_FAILED";
25
- readonly message: "Failed to start browser";
26
- readonly suggestion: "Ensure Playwright browsers are installed: npx playwright install";
27
- };
28
- readonly NETWORK_ERROR: {
29
- readonly code: "ERR_NETWORK";
30
- readonly message: "Network request failed";
31
- readonly suggestion: "Check your internet connection and try again";
32
- };
33
- readonly TIMEOUT: {
34
- readonly code: "ERR_TIMEOUT";
35
- readonly message: "Operation timed out";
36
- readonly suggestion: "Increase timeout with --timeout flag or check site availability";
37
- };
38
- readonly PAGE_LOAD_FAILED: {
39
- readonly code: "ERR_PAGE_LOAD";
40
- readonly message: "Failed to load the page";
41
- readonly suggestion: "Check the URL is accessible and try again";
42
- };
43
- readonly NO_WEBMCP: {
44
- readonly code: "ERR_NO_WEBMCP";
45
- readonly message: "No WebMCP tools detected on this page";
46
- readonly suggestion: "Ensure the site has WebMCP implemented or check a different URL";
47
- };
48
- };
49
- export declare function formatError(error: CLIError): string;
50
- /**
51
- * Map common error messages to user-friendly CLIErrors
52
- */
53
- export declare function mapErrorToCliError(error: Error | string): CLIError;
@@ -1,87 +0,0 @@
1
- /**
2
- * CLI Error Utilities
3
- *
4
- * Actionable error messages with recovery suggestions
5
- */
6
- export const ERROR_CODES = {
7
- INVALID_URL: {
8
- code: 'ERR_INVALID_URL',
9
- message: 'Invalid URL provided',
10
- suggestion: 'Use a valid URL like: https://example.com',
11
- },
12
- NO_API_KEY: {
13
- code: 'ERR_NO_API_KEY',
14
- message: 'OpenRouter API key not configured',
15
- suggestion: 'Set OPENROUTER_API_KEY in .env or environment',
16
- },
17
- BROWSER_FAILED: {
18
- code: 'ERR_BROWSER_FAILED',
19
- message: 'Failed to start browser',
20
- suggestion: 'Ensure Playwright browsers are installed: npx playwright install',
21
- },
22
- NETWORK_ERROR: {
23
- code: 'ERR_NETWORK',
24
- message: 'Network request failed',
25
- suggestion: 'Check your internet connection and try again',
26
- },
27
- TIMEOUT: {
28
- code: 'ERR_TIMEOUT',
29
- message: 'Operation timed out',
30
- suggestion: 'Increase timeout with --timeout flag or check site availability',
31
- },
32
- PAGE_LOAD_FAILED: {
33
- code: 'ERR_PAGE_LOAD',
34
- message: 'Failed to load the page',
35
- suggestion: 'Check the URL is accessible and try again',
36
- },
37
- NO_WEBMCP: {
38
- code: 'ERR_NO_WEBMCP',
39
- message: 'No WebMCP tools detected on this page',
40
- suggestion: 'Ensure the site has WebMCP implemented or check a different URL',
41
- },
42
- };
43
- export function formatError(error) {
44
- let output = `\n${error.message}`;
45
- if (error.code) {
46
- output += ` [${error.code}]`;
47
- }
48
- if (error.suggestion) {
49
- output += `\n ${error.suggestion}`;
50
- }
51
- if (error.details) {
52
- output += `\n ${error.details}`;
53
- }
54
- return output;
55
- }
56
- /**
57
- * Map common error messages to user-friendly CLIErrors
58
- */
59
- export function mapErrorToCliError(error) {
60
- const message = typeof error === 'string' ? error : error.message;
61
- const lowerMessage = message.toLowerCase();
62
- if (lowerMessage.includes('invalid url') || lowerMessage.includes('malformed')) {
63
- return ERROR_CODES.INVALID_URL;
64
- }
65
- if (lowerMessage.includes('api key') || lowerMessage.includes('unauthorized')) {
66
- return ERROR_CODES.NO_API_KEY;
67
- }
68
- if (lowerMessage.includes('browser') || lowerMessage.includes('playwright')) {
69
- return ERROR_CODES.BROWSER_FAILED;
70
- }
71
- if (lowerMessage.includes('network') || lowerMessage.includes('enotfound') || lowerMessage.includes('econnrefused')) {
72
- return ERROR_CODES.NETWORK_ERROR;
73
- }
74
- if (lowerMessage.includes('timeout')) {
75
- return ERROR_CODES.TIMEOUT;
76
- }
77
- if (lowerMessage.includes('load') || lowerMessage.includes('navigation')) {
78
- return ERROR_CODES.PAGE_LOAD_FAILED;
79
- }
80
- // Return a generic error with the original message
81
- return {
82
- code: 'ERR_UNKNOWN',
83
- message: message,
84
- suggestion: 'Try running with --debug for more details',
85
- };
86
- }
87
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/cli/utils/errors.ts"],"names":[],"mappings":"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"}