webmcp-cli 1.0.0 → 1.2.1
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/dist/agent/features/agent-simulator.d.ts +67 -0
- package/dist/agent/features/agent-simulator.js +368 -0
- package/dist/agent/features/agent-simulator.js.map +1 -0
- package/dist/agent/features/index.d.ts +8 -0
- package/dist/agent/features/index.js +9 -0
- package/dist/agent/features/index.js.map +1 -0
- package/dist/agent/features/simulation-judge.d.ts +78 -0
- package/dist/agent/features/simulation-judge.js +276 -0
- package/dist/agent/features/simulation-judge.js.map +1 -0
- package/dist/agent/features/test-case-generator.d.ts +35 -0
- package/dist/agent/features/test-case-generator.js +257 -0
- package/dist/agent/features/test-case-generator.js.map +1 -0
- package/dist/agent/index.d.ts +7 -0
- package/dist/agent/index.js +10 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/llm-client.d.ts +76 -0
- package/dist/agent/llm-client.js +198 -0
- package/dist/agent/llm-client.js.map +1 -0
- package/dist/audit/run-single-page-audit.d.ts +41 -0
- package/dist/audit/run-single-page-audit.js +103 -0
- package/dist/audit/run-single-page-audit.js.map +1 -0
- package/dist/bin/webmcp.d.ts +5 -0
- package/dist/bin/webmcp.js +14 -0
- package/dist/bin/webmcp.js.map +1 -0
- package/dist/browser/audit-runner.d.ts +30 -0
- package/dist/browser/audit-runner.js +77 -0
- package/dist/browser/audit-runner.js.map +1 -0
- package/dist/browser/index.d.ts +6 -0
- package/dist/browser/index.js +7 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/interceptor.d.ts +68 -0
- package/dist/browser/interceptor.js +257 -0
- package/dist/browser/interceptor.js.map +1 -0
- package/dist/browser/playwright.d.ts +98 -0
- package/dist/browser/playwright.js +158 -0
- package/dist/browser/playwright.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +12 -0
- package/dist/cli/commands/audit.js +349 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/interactive.d.ts +10 -0
- package/dist/cli/commands/interactive.js +34 -0
- package/dist/cli/commands/interactive.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.js +84 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/options/parse-audit-options.d.ts +12 -0
- package/dist/cli/options/parse-audit-options.js +64 -0
- package/dist/cli/options/parse-audit-options.js.map +1 -0
- package/dist/core/constants.d.ts +102 -0
- package/dist/core/constants.js +214 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/types/audit.d.ts +260 -0
- package/dist/core/types/audit.js +5 -0
- package/dist/core/types/audit.js.map +1 -0
- package/dist/core/types/index.d.ts +6 -0
- package/dist/core/types/index.js +7 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/types/rule.d.ts +190 -0
- package/dist/core/types/rule.js +26 -0
- package/dist/core/types/rule.js.map +1 -0
- package/dist/core/types/tool.d.ts +312 -0
- package/dist/core/types/tool.js +6 -0
- package/dist/core/types/tool.js.map +1 -0
- package/dist/detection/declarative.d.ts +27 -0
- package/dist/detection/declarative.js +343 -0
- package/dist/detection/declarative.js.map +1 -0
- package/dist/detection/imperative.d.ts +38 -0
- package/dist/detection/imperative.js +99 -0
- package/dist/detection/imperative.js.map +1 -0
- package/dist/detection/index.d.ts +5 -0
- package/dist/detection/index.js +6 -0
- package/dist/detection/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/advice-service.d.ts +38 -0
- package/dist/llm/advice-service.js +243 -0
- package/dist/llm/advice-service.js.map +1 -0
- package/dist/llm/evaluator.d.ts +89 -0
- package/dist/llm/evaluator.js +274 -0
- package/dist/llm/evaluator.js.map +1 -0
- package/dist/llm/index.d.ts +11 -0
- package/dist/llm/index.js +15 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/json-response.d.ts +12 -0
- package/dist/llm/json-response.js +67 -0
- package/dist/llm/json-response.js.map +1 -0
- package/dist/llm/providers/mock.d.ts +29 -0
- package/dist/llm/providers/mock.js +324 -0
- package/dist/llm/providers/mock.js.map +1 -0
- package/dist/llm/providers/openrouter.d.ts +53 -0
- package/dist/llm/providers/openrouter.js +321 -0
- package/dist/llm/providers/openrouter.js.map +1 -0
- package/dist/llm/request-cache.d.ts +28 -0
- package/dist/llm/request-cache.js +99 -0
- package/dist/llm/request-cache.js.map +1 -0
- package/dist/llm/types.d.ts +233 -0
- package/dist/llm/types.js +7 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/rules/best-practices/BP-001.d.ts +11 -0
- package/dist/rules/best-practices/BP-001.js +56 -0
- package/dist/rules/best-practices/BP-001.js.map +1 -0
- package/dist/rules/best-practices/BP-002.d.ts +11 -0
- package/dist/rules/best-practices/BP-002.js +63 -0
- package/dist/rules/best-practices/BP-002.js.map +1 -0
- package/dist/rules/best-practices/BP-003.d.ts +11 -0
- package/dist/rules/best-practices/BP-003.js +68 -0
- package/dist/rules/best-practices/BP-003.js.map +1 -0
- package/dist/rules/coverage/COV-001.d.ts +8 -0
- package/dist/rules/coverage/COV-001.js +51 -0
- package/dist/rules/coverage/COV-001.js.map +1 -0
- package/dist/rules/description/DESC-003.d.ts +13 -0
- package/dist/rules/description/DESC-003.js +96 -0
- package/dist/rules/description/DESC-003.js.map +1 -0
- package/dist/rules/description/DESC-004.d.ts +8 -0
- package/dist/rules/description/DESC-004.js +61 -0
- package/dist/rules/description/DESC-004.js.map +1 -0
- package/dist/rules/description/DESC-005.d.ts +12 -0
- package/dist/rules/description/DESC-005.js +70 -0
- package/dist/rules/description/DESC-005.js.map +1 -0
- package/dist/rules/description/index.d.ts +4 -0
- package/dist/rules/description/index.js +5 -0
- package/dist/rules/description/index.js.map +1 -0
- package/dist/rules/implementation/IMP-001.d.ts +10 -0
- package/dist/rules/implementation/IMP-001.js +36 -0
- package/dist/rules/implementation/IMP-001.js.map +1 -0
- package/dist/rules/implementation/IMP-003.d.ts +9 -0
- package/dist/rules/implementation/IMP-003.js +45 -0
- package/dist/rules/implementation/IMP-003.js.map +1 -0
- package/dist/rules/implementation/IMP-004.d.ts +9 -0
- package/dist/rules/implementation/IMP-004.js +48 -0
- package/dist/rules/implementation/IMP-004.js.map +1 -0
- package/dist/rules/implementation/IMP-005.d.ts +9 -0
- package/dist/rules/implementation/IMP-005.js +54 -0
- package/dist/rules/implementation/IMP-005.js.map +1 -0
- package/dist/rules/implementation/IMP-007.d.ts +8 -0
- package/dist/rules/implementation/IMP-007.js +79 -0
- package/dist/rules/implementation/IMP-007.js.map +1 -0
- package/dist/rules/implementation/IMP-013.d.ts +9 -0
- package/dist/rules/implementation/IMP-013.js +55 -0
- package/dist/rules/implementation/IMP-013.js.map +1 -0
- package/dist/rules/implementation/index.d.ts +9 -0
- package/dist/rules/implementation/index.js +10 -0
- package/dist/rules/implementation/index.js.map +1 -0
- package/dist/rules/index.d.ts +51 -0
- package/dist/rules/index.js +100 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/llm/LLM-001.d.ts +14 -0
- package/dist/rules/llm/LLM-001.js +78 -0
- package/dist/rules/llm/LLM-001.js.map +1 -0
- package/dist/rules/llm/LLM-002.d.ts +14 -0
- package/dist/rules/llm/LLM-002.js +77 -0
- package/dist/rules/llm/LLM-002.js.map +1 -0
- package/dist/rules/llm/LLM-003.d.ts +16 -0
- package/dist/rules/llm/LLM-003.js +82 -0
- package/dist/rules/llm/LLM-003.js.map +1 -0
- package/dist/rules/llm/LLM-004.d.ts +14 -0
- package/dist/rules/llm/LLM-004.js +87 -0
- package/dist/rules/llm/LLM-004.js.map +1 -0
- package/dist/rules/llm/LLM-005.d.ts +16 -0
- package/dist/rules/llm/LLM-005.js +105 -0
- package/dist/rules/llm/LLM-005.js.map +1 -0
- package/dist/rules/llm/index.d.ts +10 -0
- package/dist/rules/llm/index.js +11 -0
- package/dist/rules/llm/index.js.map +1 -0
- package/dist/rules/runner.d.ts +54 -0
- package/dist/rules/runner.js +138 -0
- package/dist/rules/runner.js.map +1 -0
- package/dist/rules/schema/SCHEMA-001.d.ts +9 -0
- package/dist/rules/schema/SCHEMA-001.js +57 -0
- package/dist/rules/schema/SCHEMA-001.js.map +1 -0
- package/dist/rules/schema/SCHEMA-002.d.ts +9 -0
- package/dist/rules/schema/SCHEMA-002.js +59 -0
- package/dist/rules/schema/SCHEMA-002.js.map +1 -0
- package/dist/rules/schema/SCHEMA-003.d.ts +10 -0
- package/dist/rules/schema/SCHEMA-003.js +66 -0
- package/dist/rules/schema/SCHEMA-003.js.map +1 -0
- package/dist/rules/schema/SCHEMA-011.d.ts +10 -0
- package/dist/rules/schema/SCHEMA-011.js +62 -0
- package/dist/rules/schema/SCHEMA-011.js.map +1 -0
- package/dist/rules/security/SEC-001.d.ts +12 -0
- package/dist/rules/security/SEC-001.js +66 -0
- package/dist/rules/security/SEC-001.js.map +1 -0
- package/dist/rules/utils/keywords.d.ts +35 -0
- package/dist/rules/utils/keywords.js +100 -0
- package/dist/rules/utils/keywords.js.map +1 -0
- package/dist/scoring/calculator.d.ts +27 -0
- package/dist/scoring/calculator.js +194 -0
- package/dist/scoring/calculator.js.map +1 -0
- package/dist/scoring/grades.d.ts +34 -0
- package/dist/scoring/grades.js +167 -0
- package/dist/scoring/grades.js.map +1 -0
- package/dist/scoring/index.d.ts +5 -0
- package/dist/scoring/index.js +6 -0
- package/dist/scoring/index.js.map +1 -0
- package/dist/ui/banner.d.ts +21 -0
- package/dist/ui/banner.js +60 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/design-tokens.d.ts +23 -0
- package/dist/ui/design-tokens.js +58 -0
- package/dist/ui/design-tokens.js.map +1 -0
- package/dist/ui/findings.d.ts +23 -0
- package/dist/ui/findings.js +190 -0
- package/dist/ui/findings.js.map +1 -0
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.js +10 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/ink/App.d.ts +14 -0
- package/dist/ui/ink/App.js +113 -0
- package/dist/ui/ink/App.js.map +1 -0
- package/dist/ui/ink/FullScreenLayout.d.ts +16 -0
- package/dist/ui/ink/FullScreenLayout.js +29 -0
- package/dist/ui/ink/FullScreenLayout.js.map +1 -0
- package/dist/ui/ink/InteractiveApp.d.ts +28 -0
- package/dist/ui/ink/InteractiveApp.js +229 -0
- package/dist/ui/ink/InteractiveApp.js.map +1 -0
- package/dist/ui/ink/RealAuditApp.d.ts +19 -0
- package/dist/ui/ink/RealAuditApp.js +170 -0
- package/dist/ui/ink/RealAuditApp.js.map +1 -0
- package/dist/ui/ink/components/AnimatedProgressBar.d.ts +20 -0
- package/dist/ui/ink/components/AnimatedProgressBar.js +46 -0
- package/dist/ui/ink/components/AnimatedProgressBar.js.map +1 -0
- package/dist/ui/ink/components/AsciiLogo.d.ts +12 -0
- package/dist/ui/ink/components/AsciiLogo.js +35 -0
- package/dist/ui/ink/components/AsciiLogo.js.map +1 -0
- package/dist/ui/ink/components/CategoryBars.d.ts +18 -0
- package/dist/ui/ink/components/CategoryBars.js +18 -0
- package/dist/ui/ink/components/CategoryBars.js.map +1 -0
- package/dist/ui/ink/components/FindingsTable.d.ts +18 -0
- package/dist/ui/ink/components/FindingsTable.js +19 -0
- package/dist/ui/ink/components/FindingsTable.js.map +1 -0
- package/dist/ui/ink/components/Footer.d.ts +15 -0
- package/dist/ui/ink/components/Footer.js +20 -0
- package/dist/ui/ink/components/Footer.js.map +1 -0
- package/dist/ui/ink/components/Header.d.ts +11 -0
- package/dist/ui/ink/components/Header.js +12 -0
- package/dist/ui/ink/components/Header.js.map +1 -0
- package/dist/ui/ink/components/LinkList.d.ts +17 -0
- package/dist/ui/ink/components/LinkList.js +44 -0
- package/dist/ui/ink/components/LinkList.js.map +1 -0
- package/dist/ui/ink/components/Navigation.d.ts +26 -0
- package/dist/ui/ink/components/Navigation.js +62 -0
- package/dist/ui/ink/components/Navigation.js.map +1 -0
- package/dist/ui/ink/components/ProgressBar.d.ts +15 -0
- package/dist/ui/ink/components/ProgressBar.js +14 -0
- package/dist/ui/ink/components/ProgressBar.js.map +1 -0
- package/dist/ui/ink/components/ScoreCard.d.ts +30 -0
- package/dist/ui/ink/components/ScoreCard.js +26 -0
- package/dist/ui/ink/components/ScoreCard.js.map +1 -0
- package/dist/ui/ink/components/SimulationResults.d.ts +33 -0
- package/dist/ui/ink/components/SimulationResults.js +23 -0
- package/dist/ui/ink/components/SimulationResults.js.map +1 -0
- package/dist/ui/ink/components/Spinner.d.ts +11 -0
- package/dist/ui/ink/components/Spinner.js +12 -0
- package/dist/ui/ink/components/Spinner.js.map +1 -0
- package/dist/ui/ink/components/ToolCard.d.ts +23 -0
- package/dist/ui/ink/components/ToolCard.js +20 -0
- package/dist/ui/ink/components/ToolCard.js.map +1 -0
- package/dist/ui/ink/components/shared/Badge.d.ts +21 -0
- package/dist/ui/ink/components/shared/Badge.js +39 -0
- package/dist/ui/ink/components/shared/Badge.js.map +1 -0
- package/dist/ui/ink/components/shared/Card.d.ts +18 -0
- package/dist/ui/ink/components/shared/Card.js +11 -0
- package/dist/ui/ink/components/shared/Card.js.map +1 -0
- package/dist/ui/ink/components/shared/HelpOverlay.d.ts +10 -0
- package/dist/ui/ink/components/shared/HelpOverlay.js +28 -0
- package/dist/ui/ink/components/shared/HelpOverlay.js.map +1 -0
- package/dist/ui/ink/components/shared/LoadingWithTimeout.d.ts +11 -0
- package/dist/ui/ink/components/shared/LoadingWithTimeout.js +21 -0
- package/dist/ui/ink/components/shared/LoadingWithTimeout.js.map +1 -0
- package/dist/ui/ink/components/shared/Menu.d.ts +23 -0
- package/dist/ui/ink/components/shared/Menu.js +43 -0
- package/dist/ui/ink/components/shared/Menu.js.map +1 -0
- package/dist/ui/ink/components/shared/Table.d.ts +23 -0
- package/dist/ui/ink/components/shared/Table.js +40 -0
- package/dist/ui/ink/components/shared/Table.js.map +1 -0
- package/dist/ui/ink/components/views/CrawlingView.d.ts +12 -0
- package/dist/ui/ink/components/views/CrawlingView.js +34 -0
- package/dist/ui/ink/components/views/CrawlingView.js.map +1 -0
- package/dist/ui/ink/components/views/DashboardView.d.ts +21 -0
- package/dist/ui/ink/components/views/DashboardView.js +51 -0
- package/dist/ui/ink/components/views/DashboardView.js.map +1 -0
- package/dist/ui/ink/components/views/FindingDetailView.d.ts +16 -0
- package/dist/ui/ink/components/views/FindingDetailView.js +34 -0
- package/dist/ui/ink/components/views/FindingDetailView.js.map +1 -0
- package/dist/ui/ink/components/views/FindingsView.d.ts +16 -0
- package/dist/ui/ink/components/views/FindingsView.js +79 -0
- package/dist/ui/ink/components/views/FindingsView.js.map +1 -0
- package/dist/ui/ink/components/views/OnboardingView.d.ts +12 -0
- package/dist/ui/ink/components/views/OnboardingView.js +40 -0
- package/dist/ui/ink/components/views/OnboardingView.js.map +1 -0
- package/dist/ui/ink/components/views/SimulationView.d.ts +17 -0
- package/dist/ui/ink/components/views/SimulationView.js +53 -0
- package/dist/ui/ink/components/views/SimulationView.js.map +1 -0
- package/dist/ui/ink/components/views/TestCaseDetailView.d.ts +11 -0
- package/dist/ui/ink/components/views/TestCaseDetailView.js +53 -0
- package/dist/ui/ink/components/views/TestCaseDetailView.js.map +1 -0
- package/dist/ui/ink/components/views/ToolDetailView.d.ts +15 -0
- package/dist/ui/ink/components/views/ToolDetailView.js +25 -0
- package/dist/ui/ink/components/views/ToolDetailView.js.map +1 -0
- package/dist/ui/ink/components/views/ToolsView.d.ts +15 -0
- package/dist/ui/ink/components/views/ToolsView.js +43 -0
- package/dist/ui/ink/components/views/ToolsView.js.map +1 -0
- package/dist/ui/ink/demo.d.ts +6 -0
- package/dist/ui/ink/demo.js +254 -0
- package/dist/ui/ink/demo.js.map +1 -0
- package/dist/ui/ink/hooks/useAnimation.d.ts +29 -0
- package/dist/ui/ink/hooks/useAnimation.js +89 -0
- package/dist/ui/ink/hooks/useAnimation.js.map +1 -0
- package/dist/ui/ink/hooks/useAudit.d.ts +69 -0
- package/dist/ui/ink/hooks/useAudit.js +99 -0
- package/dist/ui/ink/hooks/useAudit.js.map +1 -0
- package/dist/ui/ink/hooks/useCrawlAnimation.d.ts +19 -0
- package/dist/ui/ink/hooks/useCrawlAnimation.js +204 -0
- package/dist/ui/ink/hooks/useCrawlAnimation.js.map +1 -0
- package/dist/ui/ink/hooks/useKeyboardNav.d.ts +23 -0
- package/dist/ui/ink/hooks/useKeyboardNav.js +81 -0
- package/dist/ui/ink/hooks/useKeyboardNav.js.map +1 -0
- package/dist/ui/ink/hooks/useNavigation.d.ts +16 -0
- package/dist/ui/ink/hooks/useNavigation.js +42 -0
- package/dist/ui/ink/hooks/useNavigation.js.map +1 -0
- package/dist/ui/ink/hooks/useTerminalSize.d.ts +10 -0
- package/dist/ui/ink/hooks/useTerminalSize.js +29 -0
- package/dist/ui/ink/hooks/useTerminalSize.js.map +1 -0
- package/dist/ui/ink/index.d.ts +43 -0
- package/dist/ui/ink/index.js +50 -0
- package/dist/ui/ink/index.js.map +1 -0
- package/dist/ui/ink/render.d.ts +24 -0
- package/dist/ui/ink/render.js +14 -0
- package/dist/ui/ink/render.js.map +1 -0
- package/dist/ui/ink/theme.d.ts +37 -0
- package/dist/ui/ink/theme.js +38 -0
- package/dist/ui/ink/theme.js.map +1 -0
- package/dist/ui/ink/types.d.ts +77 -0
- package/dist/ui/ink/types.js +5 -0
- package/dist/ui/ink/types.js.map +1 -0
- package/dist/ui/score-display.d.ts +16 -0
- package/dist/ui/score-display.js +201 -0
- package/dist/ui/score-display.js.map +1 -0
- package/dist/ui/spinner.d.ts +45 -0
- package/dist/ui/spinner.js +112 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/utils.d.ts +13 -0
- package/dist/ui/utils.js +25 -0
- package/dist/ui/utils.js.map +1 -0
- package/package.json +61 -9
- package/index.js +0 -105
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ink Theme Configuration
|
|
3
|
+
*
|
|
4
|
+
* Delegates to shared design tokens for consistency with CLI mode.
|
|
5
|
+
*/
|
|
6
|
+
import { GRADE_COLORS, getGradeColor as sharedGetGradeColor, SEVERITY_COLORS, getSeverityColor as sharedGetSeverityColor, getScoreColor as sharedGetScoreColor, SPINNER_COLOR, } from '../design-tokens.js';
|
|
7
|
+
export const theme = {
|
|
8
|
+
colors: {
|
|
9
|
+
primary: 'cyan',
|
|
10
|
+
secondary: 'magenta',
|
|
11
|
+
success: 'green',
|
|
12
|
+
warning: 'yellow',
|
|
13
|
+
error: 'red',
|
|
14
|
+
info: 'blue',
|
|
15
|
+
muted: 'gray',
|
|
16
|
+
accent: 'magenta',
|
|
17
|
+
},
|
|
18
|
+
grades: GRADE_COLORS,
|
|
19
|
+
severities: SEVERITY_COLORS,
|
|
20
|
+
animation: {
|
|
21
|
+
progressBar: 'cyan',
|
|
22
|
+
progressBackground: 'gray',
|
|
23
|
+
activeScan: 'yellow',
|
|
24
|
+
completeScan: 'green',
|
|
25
|
+
pendingScan: 'gray',
|
|
26
|
+
highlight: 'magenta',
|
|
27
|
+
},
|
|
28
|
+
crawl: {
|
|
29
|
+
done: 'green',
|
|
30
|
+
active: 'yellow',
|
|
31
|
+
pending: 'gray',
|
|
32
|
+
},
|
|
33
|
+
spinner: SPINNER_COLOR,
|
|
34
|
+
};
|
|
35
|
+
export const getGradeColor = sharedGetGradeColor;
|
|
36
|
+
export const getSeverityColor = sharedGetSeverityColor;
|
|
37
|
+
export const getScoreColor = sharedGetScoreColor;
|
|
38
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/ink/theme.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,aAAa,IAAI,mBAAmB,EACpC,eAAe,EACf,gBAAgB,IAAI,sBAAsB,EAC1C,aAAa,IAAI,mBAAmB,EACpC,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,SAAS;KAClB;IACD,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,eAAe;IAC3B,SAAS,EAAE;QACT,WAAW,EAAE,MAAM;QACnB,kBAAkB,EAAE,MAAM;QAC1B,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,MAAM;QACnB,SAAS,EAAE,SAAS;KACrB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,MAAM;KAChB;IACD,OAAO,EAAE,aAAa;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for Full-Screen Interactive TUI
|
|
3
|
+
*/
|
|
4
|
+
export type AppPhase = 'onboarding' | 'crawling' | 'interactive';
|
|
5
|
+
export type ViewId = 'dashboard' | 'tools' | 'findings' | 'simulation';
|
|
6
|
+
export interface ViewState {
|
|
7
|
+
view: ViewId;
|
|
8
|
+
detail?: string;
|
|
9
|
+
params?: Record<string, string>;
|
|
10
|
+
}
|
|
11
|
+
export interface NavigationItem {
|
|
12
|
+
id: ViewId;
|
|
13
|
+
label: string;
|
|
14
|
+
icon: string;
|
|
15
|
+
}
|
|
16
|
+
export interface FocusArea {
|
|
17
|
+
id: 'navigation' | 'content';
|
|
18
|
+
}
|
|
19
|
+
export interface ToolWithId {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
source: 'imperative' | 'declarative';
|
|
24
|
+
pageUrl: string;
|
|
25
|
+
inputSchema?: {
|
|
26
|
+
type: 'object';
|
|
27
|
+
properties?: Record<string, {
|
|
28
|
+
type: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
}>;
|
|
31
|
+
required?: string[];
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export interface FindingWithId {
|
|
35
|
+
id: string;
|
|
36
|
+
ruleId: string;
|
|
37
|
+
severity: 'critical' | 'warning' | 'info';
|
|
38
|
+
message: string;
|
|
39
|
+
tool?: string;
|
|
40
|
+
page?: string;
|
|
41
|
+
fix?: string;
|
|
42
|
+
scoreImpact?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface SimulationTestCase {
|
|
45
|
+
id: string;
|
|
46
|
+
prompt: string;
|
|
47
|
+
toolName: string;
|
|
48
|
+
success: boolean;
|
|
49
|
+
score: number;
|
|
50
|
+
rounds: number;
|
|
51
|
+
trace?: SimulationTraceStep[];
|
|
52
|
+
}
|
|
53
|
+
export interface SimulationTraceStep {
|
|
54
|
+
type: 'agent' | 'tool' | 'result';
|
|
55
|
+
content: string;
|
|
56
|
+
timestamp?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface CategoryWithId {
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
score: number;
|
|
62
|
+
maxScore: number;
|
|
63
|
+
percentage: number;
|
|
64
|
+
}
|
|
65
|
+
export interface DiscoveredLink {
|
|
66
|
+
path: string;
|
|
67
|
+
status: 'pending' | 'active' | 'done';
|
|
68
|
+
toolCount?: number;
|
|
69
|
+
currentAction?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface CrawlState {
|
|
72
|
+
phase: 'discovering' | 'analyzing' | 'complete';
|
|
73
|
+
progress: number;
|
|
74
|
+
links: DiscoveredLink[];
|
|
75
|
+
currentMessage: string;
|
|
76
|
+
elapsedTime: number;
|
|
77
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ui/ink/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Score Display
|
|
3
|
+
*
|
|
4
|
+
* Renders the score summary with grade and category breakdown.
|
|
5
|
+
*/
|
|
6
|
+
import type { ScoreSummary } from '../core/types/audit.js';
|
|
7
|
+
/**
|
|
8
|
+
* Animate the score reveal
|
|
9
|
+
*/
|
|
10
|
+
export declare function animateScoreReveal(data: ScoreSummary, options?: {
|
|
11
|
+
animate?: boolean;
|
|
12
|
+
}): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Display score without animation (for CI)
|
|
15
|
+
*/
|
|
16
|
+
export declare function displayScoreStatic(data: ScoreSummary): void;
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Score Display
|
|
3
|
+
*
|
|
4
|
+
* Renders the score summary with grade and category breakdown.
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import gradient from 'gradient-string';
|
|
8
|
+
import logUpdate from 'log-update';
|
|
9
|
+
import { GRADE_ASCII, getGradeInfo } from '../scoring/grades.js';
|
|
10
|
+
import { getGradeColor, SCORE_THRESHOLDS } from './design-tokens.js';
|
|
11
|
+
import { stripAnsi } from './utils.js';
|
|
12
|
+
/**
|
|
13
|
+
* Get color function for a grade
|
|
14
|
+
*/
|
|
15
|
+
function gradeColor(grade) {
|
|
16
|
+
const color = getGradeColor(grade);
|
|
17
|
+
if (color.startsWith('#')) {
|
|
18
|
+
return chalk.bold.hex(color);
|
|
19
|
+
}
|
|
20
|
+
return chalk.bold[color];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get gradient for a grade
|
|
24
|
+
*/
|
|
25
|
+
function gradeGradient(grade) {
|
|
26
|
+
switch (grade) {
|
|
27
|
+
case 'A+':
|
|
28
|
+
case 'A':
|
|
29
|
+
return gradient(['#43e97b', '#38f9d7']);
|
|
30
|
+
case 'B+':
|
|
31
|
+
case 'B':
|
|
32
|
+
return gradient(['#f5af19', '#f12711']);
|
|
33
|
+
case 'C+':
|
|
34
|
+
case 'C':
|
|
35
|
+
return gradient(['#FF8C00', '#FF4500']);
|
|
36
|
+
case 'D':
|
|
37
|
+
case 'F':
|
|
38
|
+
return gradient(['#FF4500', '#DC143C']);
|
|
39
|
+
default:
|
|
40
|
+
return gradient(['#ffffff', '#cccccc']);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Sleep helper
|
|
45
|
+
*/
|
|
46
|
+
function sleep(ms) {
|
|
47
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Build a score frame for display
|
|
51
|
+
*/
|
|
52
|
+
function buildScoreFrame(score, data, gradeDisplay, progress, // 0-1
|
|
53
|
+
showDetails) {
|
|
54
|
+
const color = gradeColor(data.grade);
|
|
55
|
+
const barWidth = 30;
|
|
56
|
+
let output = '';
|
|
57
|
+
output += '\n';
|
|
58
|
+
output += chalk.dim(' ╔═══════════════════════════════════════════════════════╗\n');
|
|
59
|
+
output += chalk.dim(' ║ ║\n');
|
|
60
|
+
// Score number (large)
|
|
61
|
+
const scoreLine = chalk.dim(' ║') +
|
|
62
|
+
` AGENT READINESS SCORE: ${color(String(score).padStart(3))} / 100`;
|
|
63
|
+
const scoreCleanLength = stripAnsi(scoreLine).length;
|
|
64
|
+
output += scoreLine + ' '.repeat(Math.max(0, 53 - scoreCleanLength)) + chalk.dim('║\n');
|
|
65
|
+
output += chalk.dim(' ║ ║\n');
|
|
66
|
+
if (showDetails) {
|
|
67
|
+
// Grade ASCII
|
|
68
|
+
const gradeLines = gradeDisplay.split('\n').filter((l) => l.trim());
|
|
69
|
+
gradeLines.forEach((line) => {
|
|
70
|
+
const cleanLine = stripAnsi(line);
|
|
71
|
+
const padding = Math.max(0, 49 - cleanLine.length);
|
|
72
|
+
output += chalk.dim(' ║') + ' ' + line + ' '.repeat(padding) + chalk.dim('║\n');
|
|
73
|
+
});
|
|
74
|
+
output += chalk.dim(' ║ ║\n');
|
|
75
|
+
// Category bars
|
|
76
|
+
for (const cat of data.categories) {
|
|
77
|
+
const catProgress = progress * (cat.percentage / 100);
|
|
78
|
+
const filledWidth = Math.round(catProgress * barWidth);
|
|
79
|
+
const emptyWidth = barWidth - filledWidth;
|
|
80
|
+
const barColor = cat.percentage >= SCORE_THRESHOLDS.good
|
|
81
|
+
? chalk.green
|
|
82
|
+
: cat.percentage >= SCORE_THRESHOLDS.moderate
|
|
83
|
+
? chalk.yellow
|
|
84
|
+
: chalk.red;
|
|
85
|
+
const bar = barColor('█'.repeat(filledWidth)) + chalk.dim('░'.repeat(emptyWidth));
|
|
86
|
+
const catName = cat.name.padEnd(18);
|
|
87
|
+
const catScore = String(Math.round(cat.percentage * progress)).padStart(3);
|
|
88
|
+
const catLine = chalk.dim(' ║') +
|
|
89
|
+
` ${chalk.white(catName)} ${bar} ${chalk.white(catScore)}%`;
|
|
90
|
+
const catCleanLength = stripAnsi(catLine).length;
|
|
91
|
+
output += catLine + ' '.repeat(Math.max(0, 53 - catCleanLength)) + chalk.dim('║\n');
|
|
92
|
+
}
|
|
93
|
+
output += chalk.dim(' ║ ║\n');
|
|
94
|
+
// Issue summary
|
|
95
|
+
const { critical, warning, info } = data.issueCount;
|
|
96
|
+
const issueText = [
|
|
97
|
+
critical > 0 ? chalk.red(`${critical} critical`) : null,
|
|
98
|
+
warning > 0 ? chalk.yellow(`${warning} warnings`) : null,
|
|
99
|
+
info > 0 ? chalk.blue(`${info} info`) : null,
|
|
100
|
+
]
|
|
101
|
+
.filter(Boolean)
|
|
102
|
+
.join(', ');
|
|
103
|
+
const totalIssues = critical + warning + info;
|
|
104
|
+
if (totalIssues > 0) {
|
|
105
|
+
const issueLine = chalk.dim(' ║') +
|
|
106
|
+
` ${chalk.white(`${totalIssues} issues found`)} (${issueText})`;
|
|
107
|
+
const issueCleanLength = stripAnsi(issueLine).length;
|
|
108
|
+
output += issueLine + ' '.repeat(Math.max(0, 53 - issueCleanLength)) + chalk.dim('║\n');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
output +=
|
|
112
|
+
chalk.dim(' ║') +
|
|
113
|
+
` ${chalk.green('No issues found')}` +
|
|
114
|
+
' '.repeat(35) +
|
|
115
|
+
chalk.dim('║\n');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
output += chalk.dim(' ║ ║\n');
|
|
119
|
+
output += chalk.dim(' ╚═══════════════════════════════════════════════════════╝\n');
|
|
120
|
+
return output;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Animate the score reveal
|
|
124
|
+
*/
|
|
125
|
+
export async function animateScoreReveal(data, options = {}) {
|
|
126
|
+
const { animate = true } = options;
|
|
127
|
+
const grad = gradeGradient(data.grade);
|
|
128
|
+
const gradeArt = GRADE_ASCII[data.grade] || GRADE_ASCII['C'];
|
|
129
|
+
if (!animate) {
|
|
130
|
+
// Static display
|
|
131
|
+
const gradeDisplay = grad.multiline(gradeArt);
|
|
132
|
+
const output = buildScoreFrame(data.total, data, gradeDisplay, 1, true);
|
|
133
|
+
console.log(output);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Animated display
|
|
137
|
+
const totalFrames = 30;
|
|
138
|
+
const frameDelay = 50;
|
|
139
|
+
for (let frame = 0; frame <= totalFrames; frame++) {
|
|
140
|
+
const currentScore = Math.round((frame / totalFrames) * data.total);
|
|
141
|
+
const showGrade = frame === totalFrames;
|
|
142
|
+
const gradeDisplay = showGrade
|
|
143
|
+
? grad.multiline(gradeArt)
|
|
144
|
+
: chalk.dim(gradeArt.replace(/[█╔╗║╚╝═╋]/g, '░'));
|
|
145
|
+
const output = buildScoreFrame(currentScore, data, gradeDisplay, frame / totalFrames, showGrade);
|
|
146
|
+
logUpdate(output);
|
|
147
|
+
await sleep(frameDelay);
|
|
148
|
+
}
|
|
149
|
+
// Flash effect
|
|
150
|
+
for (let flash = 0; flash < 3; flash++) {
|
|
151
|
+
const bright = flash % 2 === 0;
|
|
152
|
+
const gradeDisplay = bright
|
|
153
|
+
? chalk.bold(grad.multiline(gradeArt))
|
|
154
|
+
: grad.multiline(gradeArt);
|
|
155
|
+
const output = buildScoreFrame(data.total, data, gradeDisplay, 1, true);
|
|
156
|
+
logUpdate(output);
|
|
157
|
+
await sleep(150);
|
|
158
|
+
}
|
|
159
|
+
// Final display
|
|
160
|
+
const finalGradeDisplay = grad.multiline(gradeArt);
|
|
161
|
+
const finalOutput = buildScoreFrame(data.total, data, finalGradeDisplay, 1, true);
|
|
162
|
+
logUpdate(finalOutput);
|
|
163
|
+
logUpdate.done();
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Display score without animation (for CI)
|
|
167
|
+
*/
|
|
168
|
+
export function displayScoreStatic(data) {
|
|
169
|
+
const color = gradeColor(data.grade);
|
|
170
|
+
const info = getGradeInfo(data.total);
|
|
171
|
+
console.log('');
|
|
172
|
+
console.log(` Agent Readiness Score: ${color(`${data.total}/100`)} (${color(data.grade)}) - ${info.label}`);
|
|
173
|
+
console.log('');
|
|
174
|
+
// Category breakdown
|
|
175
|
+
for (const cat of data.categories) {
|
|
176
|
+
const barWidth = 20;
|
|
177
|
+
const filledWidth = Math.round((cat.percentage / 100) * barWidth);
|
|
178
|
+
const emptyWidth = barWidth - filledWidth;
|
|
179
|
+
const barColor = cat.percentage >= SCORE_THRESHOLDS.good
|
|
180
|
+
? chalk.green
|
|
181
|
+
: cat.percentage >= SCORE_THRESHOLDS.moderate
|
|
182
|
+
? chalk.yellow
|
|
183
|
+
: chalk.red;
|
|
184
|
+
const bar = barColor('█'.repeat(filledWidth)) + chalk.dim('░'.repeat(emptyWidth));
|
|
185
|
+
console.log(` ${cat.name.padEnd(20)} ${bar} ${String(cat.percentage).padStart(3)}%`);
|
|
186
|
+
}
|
|
187
|
+
console.log('');
|
|
188
|
+
// Issue counts
|
|
189
|
+
const { critical, warning, info: infoCount } = data.issueCount;
|
|
190
|
+
const total = critical + warning + infoCount;
|
|
191
|
+
if (total > 0) {
|
|
192
|
+
console.log(` Issues: ${chalk.red(`${critical} critical`)}, ` +
|
|
193
|
+
`${chalk.yellow(`${warning} warnings`)}, ` +
|
|
194
|
+
`${chalk.blue(`${infoCount} info`)}`);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
console.log(` ${chalk.green('No issues found')}`);
|
|
198
|
+
}
|
|
199
|
+
console.log('');
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=score-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"score-display.js","sourceRoot":"","sources":["../../src/ui/score-display.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,SAAS,UAAU,CAAC,KAAY;IAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAQ,KAAK,CAAC,IAAY,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAY;IACjC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,GAAG;YACN,OAAO,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC;QACV,KAAK,GAAG;YACN,OAAO,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1C,KAAK,IAAI,CAAC;QACV,KAAK,GAAG;YACN,OAAO,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1C,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1C;YACE,OAAO,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAGD;;GAEG;AACH,SAAS,eAAe,CACtB,KAAa,EACb,IAAkB,EAClB,YAAoB,EACpB,QAAgB,EAAE,MAAM;AACxB,WAAoB;IAEpB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAC;IAEpB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IACrF,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAErF,uBAAuB;IACvB,MAAM,SAAS,GACb,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAChB,iCAAiC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5E,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,gBAAgB,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxF,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAErF,IAAI,WAAW,EAAE,CAAC;QAChB,cAAc;QACd,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAErF,gBAAgB;QAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;YAE1C,MAAM,QAAQ,GACZ,GAAG,CAAC,UAAU,IAAI,gBAAgB,CAAC,IAAI;gBACrC,CAAC,CAAC,KAAK,CAAC,KAAK;gBACb,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,gBAAgB,CAAC,QAAQ;oBAC7C,CAAC,CAAC,KAAK,CAAC,MAAM;oBACd,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAEhB,MAAM,GAAG,GACP,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACxE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE3E,MAAM,OAAO,GACX,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;gBAChB,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAChE,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;YACjD,MAAM,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAErF,gBAAgB;QAChB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACpD,MAAM,SAAS,GAAG;YAChB,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;YACvD,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;YACxD,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;SAC7C;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;QAC9C,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,SAAS,GACb,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;gBAChB,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,eAAe,CAAC,KAAK,SAAS,GAAG,CAAC;YACpE,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YACrD,MAAM,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,gBAAgB,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,MAAM;gBACJ,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;oBAChB,MAAM,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;oBACtC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACd,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IACrF,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;IAErF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAkB,EAClB,UAAiC,EAAE;IAEnC,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IAE7D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,iBAAiB;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO;IACT,CAAC;IAED,mBAAmB;IACnB,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,KAAK,KAAK,WAAW,CAAC;QACxC,MAAM,YAAY,GAAG,SAAS;YAC5B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC1B,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,eAAe,CAC5B,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,KAAK,GAAG,WAAW,EACnB,SAAS,CACV,CAAC;QAEF,SAAS,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,eAAe;IACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,YAAY,GAAG,MAAM;YACzB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE7B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACxE,SAAS,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,gBAAgB;IAChB,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAClF,SAAS,CAAC,WAAW,CAAC,CAAC;IACvB,SAAS,CAAC,IAAI,EAAE,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAkB;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,4BAA4B,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAChG,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,qBAAqB;IACrB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;QAC1C,MAAM,QAAQ,GACZ,GAAG,CAAC,UAAU,IAAI,gBAAgB,CAAC,IAAI;YACrC,CAAC,CAAC,KAAK,CAAC,KAAK;YACb,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,gBAAgB,CAAC,QAAQ;gBAC7C,CAAC,CAAC,KAAK,CAAC,MAAM;gBACd,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAChB,MAAM,GAAG,GACP,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAExE,OAAO,CAAC,GAAG,CACT,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CACzE,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,eAAe;IACf,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;IAC/D,MAAM,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAE7C,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACT,aAAa,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,WAAW,CAAC,IAAI;YAClD,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,WAAW,CAAC,IAAI;YAC1C,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,OAAO,CAAC,EAAE,CACrC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner Utilities
|
|
3
|
+
*
|
|
4
|
+
* Wrappers around ora for consistent spinner behavior.
|
|
5
|
+
*/
|
|
6
|
+
import { type Ora } from 'ora';
|
|
7
|
+
/**
|
|
8
|
+
* Step result status
|
|
9
|
+
*/
|
|
10
|
+
export type StepStatus = 'success' | 'warning' | 'error' | 'skip';
|
|
11
|
+
/**
|
|
12
|
+
* Step result
|
|
13
|
+
*/
|
|
14
|
+
export interface StepResult {
|
|
15
|
+
status: StepStatus;
|
|
16
|
+
detail: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a spinner with consistent styling
|
|
20
|
+
*/
|
|
21
|
+
export declare function createSpinner(text: string): Ora;
|
|
22
|
+
/**
|
|
23
|
+
* Run an async operation with a spinner
|
|
24
|
+
*/
|
|
25
|
+
export declare function withSpinner<T>(text: string, fn: () => Promise<T>): Promise<T>;
|
|
26
|
+
/**
|
|
27
|
+
* Run a step with spinner and status display
|
|
28
|
+
*/
|
|
29
|
+
export declare function runStep(description: string, fn: () => Promise<StepResult>): Promise<StepResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Success step result
|
|
32
|
+
*/
|
|
33
|
+
export declare function success(detail: string): StepResult;
|
|
34
|
+
/**
|
|
35
|
+
* Warning step result
|
|
36
|
+
*/
|
|
37
|
+
export declare function warning(detail: string): StepResult;
|
|
38
|
+
/**
|
|
39
|
+
* Error step result
|
|
40
|
+
*/
|
|
41
|
+
export declare function error(detail: string): StepResult;
|
|
42
|
+
/**
|
|
43
|
+
* Skip step result
|
|
44
|
+
*/
|
|
45
|
+
export declare function skip(detail: string): StepResult;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner Utilities
|
|
3
|
+
*
|
|
4
|
+
* Wrappers around ora for consistent spinner behavior.
|
|
5
|
+
*/
|
|
6
|
+
import ora, {} from 'ora';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import figures from 'figures';
|
|
9
|
+
import { STEP_DESCRIPTION_PAD, truncateText } from './design-tokens.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a spinner with consistent styling
|
|
12
|
+
*/
|
|
13
|
+
export function createSpinner(text) {
|
|
14
|
+
return ora({
|
|
15
|
+
text: chalk.white(text),
|
|
16
|
+
color: 'cyan',
|
|
17
|
+
spinner: 'dots',
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Run an async operation with a spinner
|
|
22
|
+
*/
|
|
23
|
+
export async function withSpinner(text, fn) {
|
|
24
|
+
const spinner = createSpinner(text);
|
|
25
|
+
spinner.start();
|
|
26
|
+
try {
|
|
27
|
+
const result = await fn();
|
|
28
|
+
spinner.succeed(chalk.green(text));
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
spinner.fail(chalk.red(text));
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Run a step with spinner and status display
|
|
38
|
+
*/
|
|
39
|
+
export async function runStep(description, fn) {
|
|
40
|
+
// Pad the description to align results
|
|
41
|
+
const truncated = truncateText(description, STEP_DESCRIPTION_PAD);
|
|
42
|
+
const paddedDesc = truncated.padEnd(STEP_DESCRIPTION_PAD, '.');
|
|
43
|
+
const spinner = ora({
|
|
44
|
+
text: chalk.white(paddedDesc),
|
|
45
|
+
color: 'cyan',
|
|
46
|
+
spinner: 'dots',
|
|
47
|
+
}).start();
|
|
48
|
+
try {
|
|
49
|
+
const result = await fn();
|
|
50
|
+
switch (result.status) {
|
|
51
|
+
case 'success':
|
|
52
|
+
spinner.stopAndPersist({
|
|
53
|
+
symbol: chalk.green(figures.tick),
|
|
54
|
+
text: chalk.white(paddedDesc) + ' ' + chalk.green(result.detail),
|
|
55
|
+
});
|
|
56
|
+
break;
|
|
57
|
+
case 'warning':
|
|
58
|
+
spinner.stopAndPersist({
|
|
59
|
+
symbol: chalk.yellow(figures.warning),
|
|
60
|
+
text: chalk.white(paddedDesc) + ' ' + chalk.yellow(result.detail),
|
|
61
|
+
});
|
|
62
|
+
break;
|
|
63
|
+
case 'error':
|
|
64
|
+
spinner.stopAndPersist({
|
|
65
|
+
symbol: chalk.red(figures.cross),
|
|
66
|
+
text: chalk.white(paddedDesc) + ' ' + chalk.red(result.detail),
|
|
67
|
+
});
|
|
68
|
+
break;
|
|
69
|
+
case 'skip':
|
|
70
|
+
spinner.stopAndPersist({
|
|
71
|
+
symbol: chalk.dim(figures.line),
|
|
72
|
+
text: chalk.dim(paddedDesc) + ' ' + chalk.dim(result.detail),
|
|
73
|
+
});
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
spinner.stopAndPersist({
|
|
80
|
+
symbol: chalk.red(figures.cross),
|
|
81
|
+
text: chalk.white(paddedDesc) +
|
|
82
|
+
' ' +
|
|
83
|
+
chalk.red(error instanceof Error ? error.message : 'failed'),
|
|
84
|
+
});
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Success step result
|
|
90
|
+
*/
|
|
91
|
+
export function success(detail) {
|
|
92
|
+
return { status: 'success', detail };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Warning step result
|
|
96
|
+
*/
|
|
97
|
+
export function warning(detail) {
|
|
98
|
+
return { status: 'warning', detail };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Error step result
|
|
102
|
+
*/
|
|
103
|
+
export function error(detail) {
|
|
104
|
+
return { status: 'error', detail };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Skip step result
|
|
108
|
+
*/
|
|
109
|
+
export function skip(detail) {
|
|
110
|
+
return { status: 'skip', detail };
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
package/dist/ui/utils.js
ADDED
|
@@ -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,22 +1,74 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webmcp-cli",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.2.1",
|
|
4
|
+
"description": "Audit any website for AI agent readiness (WebMCP)",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"bin": {
|
|
6
|
-
"webmcp-cli": "
|
|
7
|
+
"webmcp-cli": "dist/bin/webmcp.js",
|
|
8
|
+
"webmcp": "dist/bin/webmcp.js",
|
|
9
|
+
"agentready": "dist/bin/webmcp.js"
|
|
10
|
+
},
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js"
|
|
17
|
+
}
|
|
7
18
|
},
|
|
8
19
|
"files": [
|
|
9
|
-
"
|
|
20
|
+
"dist"
|
|
10
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
|
+
},
|
|
11
29
|
"keywords": [
|
|
30
|
+
"webmcp",
|
|
31
|
+
"ai",
|
|
32
|
+
"agent",
|
|
33
|
+
"audit",
|
|
12
34
|
"cli",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
35
|
+
"accessibility",
|
|
36
|
+
"mcp",
|
|
37
|
+
"model-context-protocol"
|
|
15
38
|
],
|
|
39
|
+
"author": "",
|
|
16
40
|
"license": "MIT",
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=20.0.0"
|
|
43
|
+
},
|
|
17
44
|
"dependencies": {
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
45
|
+
"@inkjs/ui": "^2.0.0",
|
|
46
|
+
"ajv": "^8.17.0",
|
|
47
|
+
"ajv-formats": "^3.0.1",
|
|
48
|
+
"boxen": "^8.0.0",
|
|
49
|
+
"chalk": "^5.3.0",
|
|
50
|
+
"cheerio": "^1.0.0",
|
|
51
|
+
"cli-table3": "^0.6.5",
|
|
52
|
+
"commander": "^12.1.0",
|
|
53
|
+
"dotenv": "^17.2.4",
|
|
54
|
+
"figures": "^6.1.0",
|
|
55
|
+
"fs-extra": "^11.2.0",
|
|
56
|
+
"gradient-string": "^3.0.0",
|
|
57
|
+
"ink": "^6.6.0",
|
|
58
|
+
"ink-spinner": "^5.0.0",
|
|
59
|
+
"log-update": "^6.0.0",
|
|
60
|
+
"nanoid": "^5.0.7",
|
|
61
|
+
"ora": "^8.0.0",
|
|
62
|
+
"playwright": "^1.48.0",
|
|
63
|
+
"react": "^19.2.4",
|
|
64
|
+
"zod": "^3.23.0"
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@types/fs-extra": "^11.0.4",
|
|
68
|
+
"@types/node": "^22.0.0",
|
|
69
|
+
"@types/react": "^19.2.13",
|
|
70
|
+
"tsx": "^4.19.0",
|
|
71
|
+
"typescript": "^5.6.0",
|
|
72
|
+
"vitest": "^2.1.0"
|
|
21
73
|
}
|
|
22
74
|
}
|