webmcp-cli 1.2.2 → 1.2.3
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/analysis/form-to-tool-mapper.d.ts +61 -0
- package/dist/analysis/form-to-tool-mapper.js +360 -0
- package/dist/analysis/form-to-tool-mapper.js.map +1 -0
- package/dist/analysis/index.d.ts +84 -0
- package/dist/analysis/index.js +81 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/missing-tool-analyzer.d.ts +35 -0
- package/dist/analysis/missing-tool-analyzer.js +617 -0
- package/dist/analysis/missing-tool-analyzer.js.map +1 -0
- package/dist/audit/run-multi-page-audit.d.ts +34 -0
- package/dist/audit/run-multi-page-audit.js +233 -0
- package/dist/audit/run-multi-page-audit.js.map +1 -0
- package/dist/cli/commands/potential.d.ts +8 -0
- package/dist/cli/commands/potential.js +323 -0
- package/dist/cli/commands/potential.js.map +1 -0
- package/dist/cli/commands/report.d.ts +12 -0
- package/dist/cli/commands/report.js +89 -0
- package/dist/cli/commands/report.js.map +1 -0
- package/dist/cli/index.js +35 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.d.ts +36 -0
- package/dist/config/defaults.js +33 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +22 -0
- package/dist/config/loader.js +91 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +280 -0
- package/dist/config/schema.js +42 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/types/audit.d.ts +1 -1
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.js +1 -0
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/recon.d.ts +265 -0
- package/dist/core/types/recon.js +5 -0
- package/dist/core/types/recon.js.map +1 -0
- package/dist/core/types/rule.d.ts +1 -1
- package/dist/core/types/rule.js +7 -5
- package/dist/core/types/rule.js.map +1 -1
- package/dist/crawler/depth-crawler.d.ts +29 -0
- package/dist/crawler/depth-crawler.js +212 -0
- package/dist/crawler/depth-crawler.js.map +1 -0
- package/dist/crawler/index.d.ts +2 -0
- package/dist/crawler/index.js +3 -0
- package/dist/crawler/index.js.map +1 -0
- package/dist/crawler/link-extractor.d.ts +1 -0
- package/dist/crawler/link-extractor.js +49 -0
- package/dist/crawler/link-extractor.js.map +1 -0
- package/dist/generators/index.d.ts +10 -0
- package/dist/generators/index.js +8 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/report-html.d.ts +12 -0
- package/dist/generators/report-html.js +470 -0
- package/dist/generators/report-html.js.map +1 -0
- package/dist/generators/report-json.d.ts +95 -0
- package/dist/generators/report-json.js +144 -0
- package/dist/generators/report-json.js.map +1 -0
- package/dist/generators/report-manager.d.ts +31 -0
- package/dist/generators/report-manager.js +208 -0
- package/dist/generators/report-manager.js.map +1 -0
- package/dist/generators/tool-code-generator.d.ts +31 -0
- package/dist/generators/tool-code-generator.js +201 -0
- package/dist/generators/tool-code-generator.js.map +1 -0
- package/dist/potential/ai-recommender.d.ts +33 -0
- package/dist/potential/ai-recommender.js +414 -0
- package/dist/potential/ai-recommender.js.map +1 -0
- package/dist/potential/analyzer.d.ts +32 -0
- package/dist/potential/analyzer.js +383 -0
- package/dist/potential/analyzer.js.map +1 -0
- package/dist/potential/index.d.ts +3 -0
- package/dist/potential/index.js +4 -0
- package/dist/potential/index.js.map +1 -0
- package/dist/potential/prompts.d.ts +20 -0
- package/dist/potential/prompts.js +42 -0
- package/dist/potential/prompts.js.map +1 -0
- package/dist/potential/types.d.ts +40 -0
- package/dist/potential/types.js +2 -0
- package/dist/potential/types.js.map +1 -0
- package/dist/recon/index.d.ts +20 -0
- package/dist/recon/index.js +143 -0
- package/dist/recon/index.js.map +1 -0
- package/dist/recon/manifest.d.ts +16 -0
- package/dist/recon/manifest.js +108 -0
- package/dist/recon/manifest.js.map +1 -0
- package/dist/recon/meta-extractor.d.ts +11 -0
- package/dist/recon/meta-extractor.js +276 -0
- package/dist/recon/meta-extractor.js.map +1 -0
- package/dist/recon/robots.d.ts +16 -0
- package/dist/recon/robots.js +158 -0
- package/dist/recon/robots.js.map +1 -0
- package/dist/recon/route-discovery.d.ts +25 -0
- package/dist/recon/route-discovery.js +303 -0
- package/dist/recon/route-discovery.js.map +1 -0
- package/dist/recon/sitemap.d.ts +12 -0
- package/dist/recon/sitemap.js +177 -0
- package/dist/recon/sitemap.js.map +1 -0
- package/dist/rules/accessibility/AXE-001.d.ts +9 -0
- package/dist/rules/accessibility/AXE-001.js +109 -0
- package/dist/rules/accessibility/AXE-001.js.map +1 -0
- package/dist/rules/accessibility/AXE-002.d.ts +8 -0
- package/dist/rules/accessibility/AXE-002.js +85 -0
- package/dist/rules/accessibility/AXE-002.js.map +1 -0
- package/dist/rules/accessibility/AXE-003.d.ts +8 -0
- package/dist/rules/accessibility/AXE-003.js +94 -0
- package/dist/rules/accessibility/AXE-003.js.map +1 -0
- package/dist/rules/accessibility/AXE-004.d.ts +8 -0
- package/dist/rules/accessibility/AXE-004.js +101 -0
- package/dist/rules/accessibility/AXE-004.js.map +1 -0
- package/dist/rules/accessibility/AXE-005.d.ts +9 -0
- package/dist/rules/accessibility/AXE-005.js +89 -0
- package/dist/rules/accessibility/AXE-005.js.map +1 -0
- package/dist/rules/best-practices/BP-004.d.ts +9 -0
- package/dist/rules/best-practices/BP-004.js +96 -0
- package/dist/rules/best-practices/BP-004.js.map +1 -0
- package/dist/rules/best-practices/BP-005.d.ts +8 -0
- package/dist/rules/best-practices/BP-005.js +94 -0
- package/dist/rules/best-practices/BP-005.js.map +1 -0
- package/dist/rules/best-practices/BP-006.d.ts +8 -0
- package/dist/rules/best-practices/BP-006.js +80 -0
- package/dist/rules/best-practices/BP-006.js.map +1 -0
- package/dist/rules/best-practices/BP-007.d.ts +8 -0
- package/dist/rules/best-practices/BP-007.js +92 -0
- package/dist/rules/best-practices/BP-007.js.map +1 -0
- package/dist/rules/best-practices/BP-008.d.ts +12 -0
- package/dist/rules/best-practices/BP-008.js +86 -0
- package/dist/rules/best-practices/BP-008.js.map +1 -0
- package/dist/rules/best-practices/BP-009.d.ts +9 -0
- package/dist/rules/best-practices/BP-009.js +77 -0
- package/dist/rules/best-practices/BP-009.js.map +1 -0
- package/dist/rules/best-practices/BP-010.d.ts +8 -0
- package/dist/rules/best-practices/BP-010.js +85 -0
- package/dist/rules/best-practices/BP-010.js.map +1 -0
- package/dist/rules/coverage/COV-002.d.ts +8 -0
- package/dist/rules/coverage/COV-002.js +68 -0
- package/dist/rules/coverage/COV-002.js.map +1 -0
- package/dist/rules/coverage/COV-003.d.ts +8 -0
- package/dist/rules/coverage/COV-003.js +68 -0
- package/dist/rules/coverage/COV-003.js.map +1 -0
- package/dist/rules/coverage/COV-004.d.ts +8 -0
- package/dist/rules/coverage/COV-004.js +89 -0
- package/dist/rules/coverage/COV-004.js.map +1 -0
- package/dist/rules/coverage/COV-005.d.ts +8 -0
- package/dist/rules/coverage/COV-005.js +67 -0
- package/dist/rules/coverage/COV-005.js.map +1 -0
- package/dist/rules/coverage/COV-006.d.ts +9 -0
- package/dist/rules/coverage/COV-006.js +76 -0
- package/dist/rules/coverage/COV-006.js.map +1 -0
- package/dist/rules/coverage/COV-007.d.ts +8 -0
- package/dist/rules/coverage/COV-007.js +67 -0
- package/dist/rules/coverage/COV-007.js.map +1 -0
- package/dist/rules/coverage/COV-008.d.ts +9 -0
- package/dist/rules/coverage/COV-008.js +87 -0
- package/dist/rules/coverage/COV-008.js.map +1 -0
- package/dist/rules/coverage/COV-009.d.ts +8 -0
- package/dist/rules/coverage/COV-009.js +73 -0
- package/dist/rules/coverage/COV-009.js.map +1 -0
- package/dist/rules/coverage/COV-010.d.ts +9 -0
- package/dist/rules/coverage/COV-010.js +82 -0
- package/dist/rules/coverage/COV-010.js.map +1 -0
- package/dist/rules/description/DESC-001.d.ts +9 -0
- package/dist/rules/description/DESC-001.js +88 -0
- package/dist/rules/description/DESC-001.js.map +1 -0
- package/dist/rules/description/DESC-002.d.ts +10 -0
- package/dist/rules/description/DESC-002.js +99 -0
- package/dist/rules/description/DESC-002.js.map +1 -0
- package/dist/rules/description/DESC-006.d.ts +9 -0
- package/dist/rules/description/DESC-006.js +78 -0
- package/dist/rules/description/DESC-006.js.map +1 -0
- package/dist/rules/description/DESC-007.d.ts +9 -0
- package/dist/rules/description/DESC-007.js +70 -0
- package/dist/rules/description/DESC-007.js.map +1 -0
- package/dist/rules/description/DESC-008.d.ts +9 -0
- package/dist/rules/description/DESC-008.js +70 -0
- package/dist/rules/description/DESC-008.js.map +1 -0
- package/dist/rules/description/DESC-009.d.ts +8 -0
- package/dist/rules/description/DESC-009.js +55 -0
- package/dist/rules/description/DESC-009.js.map +1 -0
- package/dist/rules/description/DESC-010.d.ts +9 -0
- package/dist/rules/description/DESC-010.js +92 -0
- package/dist/rules/description/DESC-010.js.map +1 -0
- package/dist/rules/description/DESC-011.d.ts +9 -0
- package/dist/rules/description/DESC-011.js +81 -0
- package/dist/rules/description/DESC-011.js.map +1 -0
- package/dist/rules/description/DESC-012.d.ts +9 -0
- package/dist/rules/description/DESC-012.js +98 -0
- package/dist/rules/description/DESC-012.js.map +1 -0
- package/dist/rules/implementation/IMP-002.d.ts +9 -0
- package/dist/rules/implementation/IMP-002.js +59 -0
- package/dist/rules/implementation/IMP-002.js.map +1 -0
- package/dist/rules/implementation/IMP-006.d.ts +9 -0
- package/dist/rules/implementation/IMP-006.js +48 -0
- package/dist/rules/implementation/IMP-006.js.map +1 -0
- package/dist/rules/implementation/IMP-008.d.ts +9 -0
- package/dist/rules/implementation/IMP-008.js +46 -0
- package/dist/rules/implementation/IMP-008.js.map +1 -0
- package/dist/rules/implementation/IMP-009.d.ts +9 -0
- package/dist/rules/implementation/IMP-009.js +48 -0
- package/dist/rules/implementation/IMP-009.js.map +1 -0
- package/dist/rules/implementation/IMP-010.d.ts +9 -0
- package/dist/rules/implementation/IMP-010.js +66 -0
- package/dist/rules/implementation/IMP-010.js.map +1 -0
- package/dist/rules/implementation/IMP-011.d.ts +9 -0
- package/dist/rules/implementation/IMP-011.js +82 -0
- package/dist/rules/implementation/IMP-011.js.map +1 -0
- package/dist/rules/implementation/IMP-012.d.ts +9 -0
- package/dist/rules/implementation/IMP-012.js +88 -0
- package/dist/rules/implementation/IMP-012.js.map +1 -0
- package/dist/rules/implementation/IMP-014.d.ts +9 -0
- package/dist/rules/implementation/IMP-014.js +58 -0
- package/dist/rules/implementation/IMP-014.js.map +1 -0
- package/dist/rules/implementation/IMP-015.d.ts +9 -0
- package/dist/rules/implementation/IMP-015.js +64 -0
- package/dist/rules/implementation/IMP-015.js.map +1 -0
- package/dist/rules/implementation/IMP-016.d.ts +9 -0
- package/dist/rules/implementation/IMP-016.js +52 -0
- package/dist/rules/implementation/IMP-016.js.map +1 -0
- package/dist/rules/implementation/IMP-017.d.ts +8 -0
- package/dist/rules/implementation/IMP-017.js +51 -0
- package/dist/rules/implementation/IMP-017.js.map +1 -0
- package/dist/rules/implementation/IMP-018.d.ts +8 -0
- package/dist/rules/implementation/IMP-018.js +52 -0
- package/dist/rules/implementation/IMP-018.js.map +1 -0
- package/dist/rules/implementation/IMP-019.d.ts +8 -0
- package/dist/rules/implementation/IMP-019.js +53 -0
- package/dist/rules/implementation/IMP-019.js.map +1 -0
- package/dist/rules/implementation/IMP-020.d.ts +9 -0
- package/dist/rules/implementation/IMP-020.js +62 -0
- package/dist/rules/implementation/IMP-020.js.map +1 -0
- package/dist/rules/implementation/IMP-021.d.ts +8 -0
- package/dist/rules/implementation/IMP-021.js +64 -0
- package/dist/rules/implementation/IMP-021.js.map +1 -0
- package/dist/rules/implementation/IMP-022.d.ts +8 -0
- package/dist/rules/implementation/IMP-022.js +70 -0
- package/dist/rules/implementation/IMP-022.js.map +1 -0
- package/dist/rules/index.d.ts +73 -6
- package/dist/rules/index.js +141 -6
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/schema/SCHEMA-004.d.ts +9 -0
- package/dist/rules/schema/SCHEMA-004.js +57 -0
- package/dist/rules/schema/SCHEMA-004.js.map +1 -0
- package/dist/rules/schema/SCHEMA-005.d.ts +9 -0
- package/dist/rules/schema/SCHEMA-005.js +61 -0
- package/dist/rules/schema/SCHEMA-005.js.map +1 -0
- package/dist/rules/schema/SCHEMA-006.d.ts +10 -0
- package/dist/rules/schema/SCHEMA-006.js +85 -0
- package/dist/rules/schema/SCHEMA-006.js.map +1 -0
- package/dist/rules/schema/SCHEMA-007.d.ts +9 -0
- package/dist/rules/schema/SCHEMA-007.js +73 -0
- package/dist/rules/schema/SCHEMA-007.js.map +1 -0
- package/dist/rules/schema/SCHEMA-008.d.ts +9 -0
- package/dist/rules/schema/SCHEMA-008.js +70 -0
- package/dist/rules/schema/SCHEMA-008.js.map +1 -0
- package/dist/rules/schema/SCHEMA-009.d.ts +10 -0
- package/dist/rules/schema/SCHEMA-009.js +80 -0
- package/dist/rules/schema/SCHEMA-009.js.map +1 -0
- package/dist/rules/schema/SCHEMA-010.d.ts +9 -0
- package/dist/rules/schema/SCHEMA-010.js +96 -0
- package/dist/rules/schema/SCHEMA-010.js.map +1 -0
- package/dist/rules/schema/SCHEMA-012.d.ts +9 -0
- package/dist/rules/schema/SCHEMA-012.js +65 -0
- package/dist/rules/schema/SCHEMA-012.js.map +1 -0
- package/dist/rules/security/SEC-002.d.ts +8 -0
- package/dist/rules/security/SEC-002.js +81 -0
- package/dist/rules/security/SEC-002.js.map +1 -0
- package/dist/rules/security/SEC-003.d.ts +8 -0
- package/dist/rules/security/SEC-003.js +85 -0
- package/dist/rules/security/SEC-003.js.map +1 -0
- package/dist/rules/security/SEC-004.d.ts +9 -0
- package/dist/rules/security/SEC-004.js +87 -0
- package/dist/rules/security/SEC-004.js.map +1 -0
- package/dist/rules/security/SEC-005.d.ts +8 -0
- package/dist/rules/security/SEC-005.js +87 -0
- package/dist/rules/security/SEC-005.js.map +1 -0
- package/dist/rules/security/SEC-006.d.ts +10 -0
- package/dist/rules/security/SEC-006.js +108 -0
- package/dist/rules/security/SEC-006.js.map +1 -0
- package/dist/rules/security/SEC-007.d.ts +9 -0
- package/dist/rules/security/SEC-007.js +108 -0
- package/dist/rules/security/SEC-007.js.map +1 -0
- package/dist/rules/security/SEC-008.d.ts +8 -0
- package/dist/rules/security/SEC-008.js +109 -0
- package/dist/rules/security/SEC-008.js.map +1 -0
- package/dist/rules/security/SEC-009.d.ts +9 -0
- package/dist/rules/security/SEC-009.js +93 -0
- package/dist/rules/security/SEC-009.js.map +1 -0
- package/dist/rules/security/SEC-010.d.ts +8 -0
- package/dist/rules/security/SEC-010.js +78 -0
- package/dist/rules/security/SEC-010.js.map +1 -0
- package/dist/rules/security/SEC-011.d.ts +8 -0
- package/dist/rules/security/SEC-011.js +93 -0
- package/dist/rules/security/SEC-011.js.map +1 -0
- package/dist/rules/security/SEC-012.d.ts +8 -0
- package/dist/rules/security/SEC-012.js +79 -0
- package/dist/rules/security/SEC-012.js.map +1 -0
- package/dist/rules/security/SEC-013.d.ts +9 -0
- package/dist/rules/security/SEC-013.js +107 -0
- package/dist/rules/security/SEC-013.js.map +1 -0
- package/dist/scoring/calculator.js +1 -0
- package/dist/scoring/calculator.js.map +1 -1
- package/dist/ui/ink/components/AIRecommendationCard.d.ts +11 -0
- package/dist/ui/ink/components/AIRecommendationCard.js +23 -0
- package/dist/ui/ink/components/AIRecommendationCard.js.map +1 -0
- package/dist/ui/ink/components/OpportunityList.d.ts +10 -0
- package/dist/ui/ink/components/OpportunityList.js +48 -0
- package/dist/ui/ink/components/OpportunityList.js.map +1 -0
- package/dist/ui/ink/components/PotentialPageCard.d.ts +13 -0
- package/dist/ui/ink/components/PotentialPageCard.js +43 -0
- package/dist/ui/ink/components/PotentialPageCard.js.map +1 -0
- package/dist/ui/ink/components/PotentialProgress.d.ts +16 -0
- package/dist/ui/ink/components/PotentialProgress.js +44 -0
- package/dist/ui/ink/components/PotentialProgress.js.map +1 -0
- package/dist/ui/ink/components/PotentialSummary.d.ts +10 -0
- package/dist/ui/ink/components/PotentialSummary.js +86 -0
- package/dist/ui/ink/components/PotentialSummary.js.map +1 -0
- package/dist/ui/ink/components/SuggestionCard.d.ts +34 -0
- package/dist/ui/ink/components/SuggestionCard.js +36 -0
- package/dist/ui/ink/components/SuggestionCard.js.map +1 -0
- package/dist/ui/ink/components/views/MultiPageCrawlView.d.ts +21 -0
- package/dist/ui/ink/components/views/MultiPageCrawlView.js +55 -0
- package/dist/ui/ink/components/views/MultiPageCrawlView.js.map +1 -0
- package/dist/ui/ink/components/views/PotentialView.d.ts +18 -0
- package/dist/ui/ink/components/views/PotentialView.js +74 -0
- package/dist/ui/ink/components/views/PotentialView.js.map +1 -0
- package/dist/ui/ink/components/views/ReconView.d.ts +22 -0
- package/dist/ui/ink/components/views/ReconView.js +30 -0
- package/dist/ui/ink/components/views/ReconView.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* OpportunityList Component
|
|
4
|
+
*
|
|
5
|
+
* Displays grouped opportunity lists color-coded by agentic value.
|
|
6
|
+
*/
|
|
7
|
+
import { memo, useMemo } from 'react';
|
|
8
|
+
import { Box, Text } from 'ink';
|
|
9
|
+
import figures from 'figures';
|
|
10
|
+
const GROUP_LABELS = {
|
|
11
|
+
form: 'Forms',
|
|
12
|
+
search: 'Search',
|
|
13
|
+
filter: 'Filters',
|
|
14
|
+
action: 'Actions',
|
|
15
|
+
navigation: 'Navigation',
|
|
16
|
+
dynamic: 'Dynamic Flows',
|
|
17
|
+
};
|
|
18
|
+
const PRIORITY_COLORS = {
|
|
19
|
+
critical: 'red',
|
|
20
|
+
high: 'yellow',
|
|
21
|
+
medium: 'cyan',
|
|
22
|
+
low: 'gray',
|
|
23
|
+
};
|
|
24
|
+
function groupOpportunities(opportunities) {
|
|
25
|
+
return opportunities.reduce((acc, opp) => {
|
|
26
|
+
const key = opp.type;
|
|
27
|
+
if (!acc[key])
|
|
28
|
+
acc[key] = [];
|
|
29
|
+
acc[key].push(opp);
|
|
30
|
+
return acc;
|
|
31
|
+
}, {});
|
|
32
|
+
}
|
|
33
|
+
function OpportunityItem({ opportunity }) {
|
|
34
|
+
const color = PRIORITY_COLORS[opportunity.agenticValue] ?? 'gray';
|
|
35
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: color, children: figures.bullet }), _jsx(Text, { bold: true, color: color, children: opportunity.suggestedToolName }), _jsxs(Text, { dimColor: true, children: ["(", Math.round(opportunity.confidence * 100), "% confidence)"] })] }), _jsx(Box, { marginLeft: 3, children: _jsx(Text, { wrap: "wrap", children: opportunity.suggestedDescription }) })] }));
|
|
36
|
+
}
|
|
37
|
+
export const OpportunityList = memo(function OpportunityList({ opportunities }) {
|
|
38
|
+
const groups = useMemo(() => groupOpportunities(opportunities), [opportunities]);
|
|
39
|
+
const orderedGroups = useMemo(() => {
|
|
40
|
+
const order = ['form', 'search', 'filter', 'action', 'navigation', 'dynamic'];
|
|
41
|
+
return order.filter((key) => groups[key]?.length).map((key) => ({ key, items: groups[key] }));
|
|
42
|
+
}, [groups]);
|
|
43
|
+
if (opportunities.length === 0) {
|
|
44
|
+
return (_jsx(Box, { padding: 1, children: _jsxs(Text, { dimColor: true, children: [figures.info, " No opportunities detected yet."] }) }));
|
|
45
|
+
}
|
|
46
|
+
return (_jsx(Box, { flexDirection: "column", paddingX: 2, children: orderedGroups.map(({ key, items }) => (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { bold: true, color: "cyan", children: [GROUP_LABELS[key] ?? key, " (", items.length, ")"] }), _jsx(Box, { marginLeft: 1, flexDirection: "column", marginTop: 1, children: items.map((item) => (_jsx(OpportunityItem, { opportunity: item }, `${item.type}-${item.element}-${item.suggestedToolName}`))) })] }, key))) }));
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=OpportunityList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpportunityList.js","sourceRoot":"","sources":["../../../../src/ui/ink/components/OpportunityList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PotentialPageCard Component
|
|
3
|
+
*
|
|
4
|
+
* Shows opportunity summary for a single crawled page.
|
|
5
|
+
*/
|
|
6
|
+
import type { PagePotential } from '../../../potential/types.js';
|
|
7
|
+
interface PotentialPageCardProps {
|
|
8
|
+
page: PagePotential;
|
|
9
|
+
isActive?: boolean;
|
|
10
|
+
maxWidth?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare const PotentialPageCard: import("react").NamedExoticComponent<PotentialPageCardProps>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* PotentialPageCard Component
|
|
4
|
+
*
|
|
5
|
+
* Shows opportunity summary for a single crawled page.
|
|
6
|
+
*/
|
|
7
|
+
import { memo, useMemo } from 'react';
|
|
8
|
+
import { Box, Text } from 'ink';
|
|
9
|
+
import figures from 'figures';
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
import { Card } from './shared/Card.js';
|
|
12
|
+
const PRIORITY_COLORS = {
|
|
13
|
+
critical: 'red',
|
|
14
|
+
high: 'yellow',
|
|
15
|
+
medium: 'cyan',
|
|
16
|
+
low: 'gray',
|
|
17
|
+
};
|
|
18
|
+
function renderScoreDots(score) {
|
|
19
|
+
const clamped = Math.max(0, Math.min(100, score));
|
|
20
|
+
const filled = Math.round(clamped / 10);
|
|
21
|
+
return `${'●'.repeat(filled)}${'○'.repeat(10 - filled)}`;
|
|
22
|
+
}
|
|
23
|
+
function formatUrlPath(url) {
|
|
24
|
+
try {
|
|
25
|
+
const parsed = new URL(url);
|
|
26
|
+
return parsed.pathname === '/' ? '/' : parsed.pathname;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return url;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function OpportunityRow({ opportunity }) {
|
|
33
|
+
const color = PRIORITY_COLORS[opportunity.agenticValue] ?? 'gray';
|
|
34
|
+
return (_jsxs(Box, { gap: 1, flexWrap: "wrap", children: [_jsx(Text, { color: color, children: figures.bullet }), _jsx(Text, { bold: true, color: color, children: opportunity.suggestedToolName }), _jsxs(Text, { dimColor: true, children: ["(", opportunity.agenticValue, ")"] }), _jsxs(Text, { wrap: "wrap", children: ["\u2014 ", opportunity.suggestedDescription] })] }, `${opportunity.type}-${opportunity.element}`));
|
|
35
|
+
}
|
|
36
|
+
export const PotentialPageCard = memo(function PotentialPageCard({ page, isActive = false, maxWidth, }) {
|
|
37
|
+
const opportunities = page.opportunities.slice(0, 5);
|
|
38
|
+
const hasMore = page.opportunities.length > opportunities.length;
|
|
39
|
+
const titlePath = formatUrlPath(page.url);
|
|
40
|
+
const scoreDots = useMemo(() => renderScoreDots(page.potentialScore), [page.potentialScore]);
|
|
41
|
+
return (_jsx(Card, { borderColor: isActive ? 'cyan' : 'gray', borderStyle: isActive ? 'bold' : 'single', marginBottom: 1, width: maxWidth, children: _jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsxs(Box, { justifyContent: "space-between", flexWrap: "wrap", children: [_jsxs(Text, { children: [chalk.bold(titlePath), " ", _jsxs(Text, { dimColor: true, children: ["(depth ", page.depth, ")"] })] }), _jsxs(Text, { color: "cyan", children: ["Potential Score: ", page.potentialScore, "/100"] })] }), _jsx(Box, { children: _jsx(Text, { color: "yellow", children: scoreDots }) }), _jsxs(Box, { gap: 3, flexWrap: "wrap", children: [_jsxs(Text, { dimColor: true, children: ["Existing Tools: ", page.existingTools] }), _jsxs(Text, { dimColor: true, children: ["Opportunities: ", page.opportunities.length] })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, gap: 0, children: [opportunities.length === 0 ? (_jsx(Text, { dimColor: true, children: "No high-impact opportunities detected." })) : (opportunities.map((opp) => (_jsx(OpportunityRow, { opportunity: opp }, `${opp.type}-${opp.element}-${opp.suggestedToolName}`)))), hasMore && (_jsxs(Text, { dimColor: true, children: ["\u2026and ", page.opportunities.length - opportunities.length, " more"] }))] })] }) }));
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=PotentialPageCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PotentialPageCard.js","sourceRoot":"","sources":["../../../../src/ui/ink/components/PotentialPageCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PotentialProgress Component
|
|
3
|
+
*
|
|
4
|
+
* Displays crawl + analysis progress for the potential command.
|
|
5
|
+
*/
|
|
6
|
+
export interface PotentialProgressProps {
|
|
7
|
+
targetUrl: string;
|
|
8
|
+
depthLimit?: number;
|
|
9
|
+
pagesFound: number;
|
|
10
|
+
crawledPages: number;
|
|
11
|
+
totalPages?: number;
|
|
12
|
+
currentPath?: string;
|
|
13
|
+
phase?: string;
|
|
14
|
+
statusMessage?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const PotentialProgress: import("react").NamedExoticComponent<PotentialProgressProps>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* PotentialProgress Component
|
|
4
|
+
*
|
|
5
|
+
* Displays crawl + analysis progress for the potential command.
|
|
6
|
+
*/
|
|
7
|
+
import { memo, useMemo } from 'react';
|
|
8
|
+
import { Box, Text } from 'ink';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import figures from 'figures';
|
|
11
|
+
const BAR_LENGTH = 24;
|
|
12
|
+
function formatPhase(value) {
|
|
13
|
+
if (!value)
|
|
14
|
+
return 'In progress';
|
|
15
|
+
return value
|
|
16
|
+
.replace(/[-_]/g, ' ')
|
|
17
|
+
.replace(/\b\w/g, (char) => char.toUpperCase());
|
|
18
|
+
}
|
|
19
|
+
function formatPath(targetUrl, currentPath) {
|
|
20
|
+
if (currentPath)
|
|
21
|
+
return currentPath;
|
|
22
|
+
try {
|
|
23
|
+
const parsed = new URL(targetUrl);
|
|
24
|
+
return parsed.pathname === '/' ? parsed.hostname : parsed.pathname;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return targetUrl;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export const PotentialProgress = memo(function PotentialProgress({ targetUrl, depthLimit = 2, pagesFound, crawledPages, totalPages, currentPath, phase, statusMessage, }) {
|
|
31
|
+
const denominator = Math.max(totalPages ?? pagesFound, 1);
|
|
32
|
+
const percent = Math.min(100, Math.round((crawledPages / denominator) * 100));
|
|
33
|
+
const filled = Math.min(BAR_LENGTH, Math.round((percent / 100) * BAR_LENGTH));
|
|
34
|
+
const empty = Math.max(0, BAR_LENGTH - filled);
|
|
35
|
+
const bar = useMemo(() => {
|
|
36
|
+
const filledPart = filled > 0 ? chalk.cyan('█'.repeat(filled)) : '';
|
|
37
|
+
const emptyPart = empty > 0 ? chalk.gray('░'.repeat(empty)) : '';
|
|
38
|
+
return `${filledPart}${emptyPart}`;
|
|
39
|
+
}, [filled, empty]);
|
|
40
|
+
const phaseLabel = formatPhase(phase);
|
|
41
|
+
const currentLabel = formatPath(targetUrl, currentPath);
|
|
42
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, borderStyle: "round", borderColor: "cyan", children: [_jsxs(Box, { gap: 1, children: [_jsxs(Text, { children: [figures.pointerSmall, " Crawling"] }), _jsx(Text, { color: "cyan", children: targetUrl }), _jsxs(Text, { dimColor: true, children: ["(depth ", depthLimit, ")"] })] }), _jsxs(Box, { marginTop: 1, gap: 2, children: [_jsx(Text, { dimColor: true, children: "Pages found:" }), _jsx(Text, { children: pagesFound }), _jsx(Text, { dimColor: true, children: "| Crawled:" }), _jsxs(Text, { children: [crawledPages, "/", denominator] }), _jsx(Text, { dimColor: true, children: "| Progress:" }), _jsxs(Text, { children: [percent, "%"] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { children: bar }) }), _jsxs(Box, { marginTop: 1, gap: 1, children: [_jsx(Text, { dimColor: true, children: "Current:" }), _jsx(Text, { children: currentLabel })] }), _jsxs(Box, { marginTop: 1, gap: 1, children: [_jsx(Text, { dimColor: true, children: "Phase:" }), _jsx(Text, { color: "magenta", children: phaseLabel })] }), statusMessage && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { wrap: "wrap", dimColor: true, children: statusMessage }) }))] }));
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=PotentialProgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PotentialProgress.js","sourceRoot":"","sources":["../../../../src/ui/ink/components/PotentialProgress.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PotentialSummary Component
|
|
3
|
+
*
|
|
4
|
+
* Overview of potential analysis results with stats + AI summary.
|
|
5
|
+
*/
|
|
6
|
+
import type { PotentialReport } from '../../../potential/types.js';
|
|
7
|
+
export interface PotentialSummaryProps {
|
|
8
|
+
report: PotentialReport;
|
|
9
|
+
}
|
|
10
|
+
export declare const PotentialSummary: import("react").NamedExoticComponent<PotentialSummaryProps>;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* PotentialSummary Component
|
|
4
|
+
*
|
|
5
|
+
* Overview of potential analysis results with stats + AI summary.
|
|
6
|
+
*/
|
|
7
|
+
import { memo, useMemo } from 'react';
|
|
8
|
+
import { Box, Text } from 'ink';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import { truncateText } from '../../design-tokens.js';
|
|
11
|
+
const severityOrder = ['critical', 'high', 'medium', 'low'];
|
|
12
|
+
function countByPriority(report) {
|
|
13
|
+
const counts = { critical: 0, high: 0, medium: 0, low: 0 };
|
|
14
|
+
for (const page of report.pages) {
|
|
15
|
+
for (const opp of page.opportunities) {
|
|
16
|
+
counts[opp.agenticValue] = (counts[opp.agenticValue] ?? 0) + 1;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return counts;
|
|
20
|
+
}
|
|
21
|
+
function gradientScore(score) {
|
|
22
|
+
const clamped = Math.max(0, Math.min(100, score));
|
|
23
|
+
const color = clamped >= 70 ? 'green' : clamped >= 40 ? 'yellow' : 'red';
|
|
24
|
+
const plain = `${clamped}/100`;
|
|
25
|
+
return { colored: chalk[color].bold(plain), plain };
|
|
26
|
+
}
|
|
27
|
+
function borderLine(width, cornerLeft, cornerRight) {
|
|
28
|
+
const horizontal = '═'.repeat(width - 2);
|
|
29
|
+
return `${cornerLeft}${horizontal}${cornerRight}`;
|
|
30
|
+
}
|
|
31
|
+
function formatLine(content, width) {
|
|
32
|
+
const innerWidth = width - 2;
|
|
33
|
+
const safe = content.length > innerWidth
|
|
34
|
+
? truncateText(content, innerWidth)
|
|
35
|
+
: content;
|
|
36
|
+
return `║${safe.padEnd(innerWidth)}║`;
|
|
37
|
+
}
|
|
38
|
+
function formatCentered(text, width) {
|
|
39
|
+
const innerWidth = width - 2;
|
|
40
|
+
const safe = truncateText(text, innerWidth);
|
|
41
|
+
const padding = Math.max(0, Math.floor((innerWidth - safe.length) / 2));
|
|
42
|
+
const line = `${' '.repeat(padding)}${safe}`;
|
|
43
|
+
return formatLine(line, width);
|
|
44
|
+
}
|
|
45
|
+
function formatLabelLine(label, value, width) {
|
|
46
|
+
const innerWidth = width - 2;
|
|
47
|
+
const prefix = ` ${label}: `;
|
|
48
|
+
const available = Math.max(0, innerWidth - prefix.length);
|
|
49
|
+
const safeValue = truncateText(value, available);
|
|
50
|
+
return formatLine(`${prefix}${safeValue}`, width);
|
|
51
|
+
}
|
|
52
|
+
export const PotentialSummary = memo(function PotentialSummary({ report }) {
|
|
53
|
+
const priorityCounts = useMemo(() => countByPriority(report), [report]);
|
|
54
|
+
const width = 59;
|
|
55
|
+
const innerWidth = width - 2;
|
|
56
|
+
const readiness = gradientScore(report.overallReadinessScore);
|
|
57
|
+
const readinessPrefix = ' Overall Readiness: ';
|
|
58
|
+
const readinessSpacing = Math.max(0, innerWidth - readinessPrefix.length - readiness.plain.length);
|
|
59
|
+
const readinessLine = `║${readinessPrefix}${readiness.colored}${' '.repeat(readinessSpacing)}║`;
|
|
60
|
+
const lines = [
|
|
61
|
+
borderLine(width, '╔', '╗'),
|
|
62
|
+
formatCentered('WEBMCP POTENTIAL ANALYSIS', width),
|
|
63
|
+
formatLine('', width),
|
|
64
|
+
formatLabelLine('Target', report.targetUrl, width),
|
|
65
|
+
formatLabelLine('Pages Crawled', String(report.crawledPages), width),
|
|
66
|
+
readinessLine,
|
|
67
|
+
formatLine('', width),
|
|
68
|
+
formatLabelLine('Opportunities Found', String(report.totalOpportunities), width),
|
|
69
|
+
formatLine(` Critical: ${priorityCounts['critical']} | High: ${priorityCounts['high']} | Medium: ${priorityCounts['medium']} | Low: ${priorityCounts['low']}`, width),
|
|
70
|
+
formatLine('', width),
|
|
71
|
+
];
|
|
72
|
+
const summaryLines = report.summary
|
|
73
|
+
.split(/\r?\n/)
|
|
74
|
+
.map((line) => line.trim())
|
|
75
|
+
.filter(Boolean)
|
|
76
|
+
.slice(0, 3);
|
|
77
|
+
for (const line of summaryLines) {
|
|
78
|
+
lines.push(formatLine(` ${line}`, width));
|
|
79
|
+
}
|
|
80
|
+
while (lines.length < 12) {
|
|
81
|
+
lines.push(formatLine('', width));
|
|
82
|
+
}
|
|
83
|
+
lines.push(borderLine(width, '╚', '╝'));
|
|
84
|
+
return (_jsx(Box, { flexDirection: "column", paddingX: 2, children: lines.map((line, index) => (_jsx(Text, { color: index === 0 || index === lines.length - 1 ? 'cyan' : undefined, children: line }, index))) }));
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=PotentialSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PotentialSummary.js","sourceRoot":"","sources":["../../../../src/ui/ink/components/PotentialSummary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SuggestionCard Component
|
|
3
|
+
*
|
|
4
|
+
* Displays a suggested tool definition with name, description,
|
|
5
|
+
* schema, agentic value rating, and estimated score impact.
|
|
6
|
+
*/
|
|
7
|
+
export interface SuggestedToolSchema {
|
|
8
|
+
type: 'object';
|
|
9
|
+
properties?: Record<string, {
|
|
10
|
+
type: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
}>;
|
|
13
|
+
required?: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface SuggestedTool {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
schema: SuggestedToolSchema;
|
|
19
|
+
agenticValue: 'low' | 'medium' | 'high' | 'critical';
|
|
20
|
+
estimatedScoreImpact: number;
|
|
21
|
+
sourceForm?: string;
|
|
22
|
+
}
|
|
23
|
+
interface SuggestionCardProps {
|
|
24
|
+
suggestion: SuggestedTool;
|
|
25
|
+
index?: number;
|
|
26
|
+
isSelected?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare function SuggestionCard({ suggestion, index, isSelected }: SuggestionCardProps): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
interface SuggestionListProps {
|
|
30
|
+
suggestions: SuggestedTool[];
|
|
31
|
+
selectedIndex?: number;
|
|
32
|
+
}
|
|
33
|
+
export declare function SuggestionList({ suggestions, selectedIndex }: SuggestionListProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* SuggestionCard Component
|
|
4
|
+
*
|
|
5
|
+
* Displays a suggested tool definition with name, description,
|
|
6
|
+
* schema, agentic value rating, and estimated score impact.
|
|
7
|
+
*/
|
|
8
|
+
import { Box, Text } from 'ink';
|
|
9
|
+
import figures from 'figures';
|
|
10
|
+
import { Card } from './shared/Card.js';
|
|
11
|
+
import { Badge } from './shared/Badge.js';
|
|
12
|
+
import { theme } from '../theme.js';
|
|
13
|
+
const VALUE_CONFIG = {
|
|
14
|
+
critical: { color: theme.colors.error, label: 'CRITICAL' },
|
|
15
|
+
high: { color: theme.colors.warning, label: 'HIGH' },
|
|
16
|
+
medium: { color: theme.colors.info, label: 'MEDIUM' },
|
|
17
|
+
low: { color: theme.colors.muted, label: 'LOW' },
|
|
18
|
+
};
|
|
19
|
+
export function SuggestionCard({ suggestion, index, isSelected }) {
|
|
20
|
+
const valueConfig = VALUE_CONFIG[suggestion.agenticValue] ?? VALUE_CONFIG['low'];
|
|
21
|
+
const properties = suggestion.schema.properties ?? {};
|
|
22
|
+
const paramNames = Object.keys(properties);
|
|
23
|
+
const requiredParams = suggestion.schema.required ?? [];
|
|
24
|
+
return (_jsxs(Card, { borderColor: isSelected ? 'cyan' : 'gray', borderStyle: isSelected ? 'bold' : 'single', marginBottom: 1, children: [_jsxs(Box, { gap: 2, marginBottom: 1, children: [index !== undefined && (_jsxs(Text, { dimColor: true, children: ["[", index + 1, "]"] })), _jsx(Text, { bold: true, color: "cyan", children: suggestion.name }), _jsx(Badge, { label: valueConfig.label, color: valueConfig.color })] }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { children: suggestion.description }) }), paramNames.length > 0 && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, dimColor: true, children: "Parameters:" }), paramNames.map((paramName) => {
|
|
25
|
+
const prop = properties[paramName];
|
|
26
|
+
const isRequired = requiredParams.includes(paramName);
|
|
27
|
+
return (_jsxs(Box, { gap: 1, paddingLeft: 2, children: [_jsx(Text, { color: "yellow", children: paramName }), _jsxs(Text, { dimColor: true, children: ["(", prop?.type ?? 'string', ")"] }), isRequired && _jsx(Text, { color: "red", children: "*" }), prop?.description && (_jsxs(Text, { dimColor: true, children: ["- ", prop.description] }))] }, paramName));
|
|
28
|
+
})] })), _jsxs(Box, { gap: 3, children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { dimColor: true, children: "Value:" }), _jsx(Text, { color: valueConfig.color, bold: true, children: valueConfig.label })] }), _jsxs(Box, { gap: 1, children: [_jsx(Text, { dimColor: true, children: "Score impact:" }), _jsxs(Text, { color: "green", bold: true, children: ["+", suggestion.estimatedScoreImpact, " pts"] })] }), suggestion.sourceForm && (_jsxs(Box, { gap: 1, children: [_jsx(Text, { dimColor: true, children: "From:" }), _jsx(Text, { children: suggestion.sourceForm })] }))] })] }));
|
|
29
|
+
}
|
|
30
|
+
export function SuggestionList({ suggestions, selectedIndex }) {
|
|
31
|
+
if (suggestions.length === 0) {
|
|
32
|
+
return (_jsx(Box, { paddingX: 2, paddingY: 1, children: _jsxs(Text, { dimColor: true, children: [figures.info, " No tool suggestions available. All forms are already covered."] }) }));
|
|
33
|
+
}
|
|
34
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 2, children: [_jsxs(Text, { bold: true, color: "cyan", children: ["Suggested Tools (", suggestions.length, ")"] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: suggestions.map((suggestion, i) => (_jsx(SuggestionCard, { suggestion: suggestion, index: i, isSelected: selectedIndex === i }, suggestion.name))) })] }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=SuggestionCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuggestionCard.js","sourceRoot":"","sources":["../../../../src/ui/ink/components/SuggestionCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MultiPageCrawlView Component
|
|
3
|
+
*
|
|
4
|
+
* Displays multi-page crawl progress with per-page status,
|
|
5
|
+
* tool counts, finding counts, and an overall progress bar.
|
|
6
|
+
*/
|
|
7
|
+
export type CrawlPageStatus = 'pending' | 'crawling' | 'done' | 'error';
|
|
8
|
+
export interface CrawlPageEntry {
|
|
9
|
+
url: string;
|
|
10
|
+
status: CrawlPageStatus;
|
|
11
|
+
toolCount: number;
|
|
12
|
+
findingCount: number;
|
|
13
|
+
depth: number;
|
|
14
|
+
}
|
|
15
|
+
interface MultiPageCrawlViewProps {
|
|
16
|
+
pages: CrawlPageEntry[];
|
|
17
|
+
maxPages: number;
|
|
18
|
+
maxVisible?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare const MultiPageCrawlView: import("react").NamedExoticComponent<MultiPageCrawlViewProps>;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* MultiPageCrawlView Component
|
|
4
|
+
*
|
|
5
|
+
* Displays multi-page crawl progress with per-page status,
|
|
6
|
+
* tool counts, finding counts, and an overall progress bar.
|
|
7
|
+
*/
|
|
8
|
+
import { Box, Text } from 'ink';
|
|
9
|
+
import Spinner from 'ink-spinner';
|
|
10
|
+
import { memo } from 'react';
|
|
11
|
+
import figures from 'figures';
|
|
12
|
+
import { ProgressBar } from '../ProgressBar.js';
|
|
13
|
+
import { theme } from '../../theme.js';
|
|
14
|
+
const PAGE_STATUS_CONFIG = {
|
|
15
|
+
pending: { icon: '○', color: theme.crawl.pending },
|
|
16
|
+
crawling: { icon: '◌', color: theme.crawl.active },
|
|
17
|
+
done: { icon: figures.tick, color: theme.crawl.done },
|
|
18
|
+
error: { icon: figures.cross, color: theme.colors.error },
|
|
19
|
+
};
|
|
20
|
+
function shortenUrl(url, maxLen) {
|
|
21
|
+
try {
|
|
22
|
+
const parsed = new URL(url);
|
|
23
|
+
const path = parsed.pathname + parsed.search;
|
|
24
|
+
if (path.length <= maxLen)
|
|
25
|
+
return path;
|
|
26
|
+
return path.substring(0, maxLen - 3) + '...';
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
if (url.length <= maxLen)
|
|
30
|
+
return url;
|
|
31
|
+
return url.substring(0, maxLen - 3) + '...';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export const MultiPageCrawlView = memo(function MultiPageCrawlView({ pages, maxPages, maxVisible = 10, }) {
|
|
35
|
+
const doneCount = pages.filter((p) => p.status === 'done').length;
|
|
36
|
+
const errorCount = pages.filter((p) => p.status === 'error').length;
|
|
37
|
+
const crawlingPage = pages.find((p) => p.status === 'crawling');
|
|
38
|
+
const totalTools = pages.reduce((sum, p) => sum + p.toolCount, 0);
|
|
39
|
+
const totalFindings = pages.reduce((sum, p) => sum + p.findingCount, 0);
|
|
40
|
+
const progress = maxPages > 0 ? (doneCount / maxPages) * 100 : 0;
|
|
41
|
+
// Show a window of pages around the active one
|
|
42
|
+
const activeIndex = pages.findIndex((p) => p.status === 'crawling');
|
|
43
|
+
let startIdx = 0;
|
|
44
|
+
if (pages.length > maxVisible) {
|
|
45
|
+
startIdx = Math.max(0, Math.min(activeIndex >= 0 ? activeIndex - Math.floor(maxVisible / 2) : pages.length - maxVisible, pages.length - maxVisible));
|
|
46
|
+
}
|
|
47
|
+
const visiblePages = pages.slice(startIdx, startIdx + maxVisible);
|
|
48
|
+
const hiddenBefore = startIdx;
|
|
49
|
+
const hiddenAfter = Math.max(0, pages.length - startIdx - maxVisible);
|
|
50
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, flexGrow: 1, children: [_jsxs(Box, { marginBottom: 1, gap: 2, children: [_jsx(Text, { bold: true, color: "cyan", children: "MULTI-PAGE CRAWL" }), crawlingPage && (_jsx(Text, { color: "cyan", children: _jsx(Spinner, { type: "dots" }) }))] }), _jsx(Box, { marginBottom: 1, children: _jsx(ProgressBar, { value: progress, width: 40, showPercentage: true, color: doneCount === maxPages ? 'green' : 'cyan', label: `${doneCount}/${maxPages}` }) }), _jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, paddingY: 1, marginBottom: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Box, { width: 3 }), _jsx(Box, { width: 36, children: _jsx(Text, { bold: true, dimColor: true, children: "PATH" }) }), _jsx(Box, { width: 8, children: _jsx(Text, { bold: true, dimColor: true, children: "DEPTH" }) }), _jsx(Box, { width: 8, children: _jsx(Text, { bold: true, dimColor: true, children: "TOOLS" }) }), _jsx(Box, { width: 10, children: _jsx(Text, { bold: true, dimColor: true, children: "FINDINGS" }) })] }), hiddenBefore > 0 && (_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [" ... ", hiddenBefore, " more above"] }) })), visiblePages.map((page) => {
|
|
51
|
+
const config = PAGE_STATUS_CONFIG[page.status];
|
|
52
|
+
return (_jsxs(Box, { children: [_jsx(Box, { width: 3, children: page.status === 'crawling' ? (_jsx(Text, { color: config.color, children: _jsx(Spinner, { type: "dots" }) })) : (_jsx(Text, { color: config.color, children: config.icon })) }), _jsx(Box, { width: 36, children: _jsx(Text, { bold: page.status === 'crawling', dimColor: page.status === 'pending', children: shortenUrl(page.url, 34) }) }), _jsx(Box, { width: 8, children: _jsx(Text, { dimColor: true, children: page.depth }) }), _jsx(Box, { width: 8, children: page.status === 'done' ? (_jsx(Text, { color: page.toolCount > 0 ? 'green' : 'gray', children: page.toolCount })) : (_jsx(Text, { dimColor: true, children: "-" })) }), _jsx(Box, { width: 10, children: page.status === 'done' ? (_jsx(Text, { color: page.findingCount > 0 ? 'yellow' : 'green', children: page.findingCount })) : (_jsx(Text, { dimColor: true, children: "-" })) })] }, page.url));
|
|
53
|
+
}), hiddenAfter > 0 && (_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [" ... ", hiddenAfter, " more below"] }) }))] }), _jsxs(Box, { gap: 4, children: [_jsxs(Box, { borderStyle: "round", paddingX: 2, paddingY: 0, children: [_jsx(Text, { dimColor: true, children: "PAGES " }), _jsx(Text, { bold: true, color: "green", children: doneCount }), _jsxs(Text, { dimColor: true, children: ["/", maxPages] })] }), _jsxs(Box, { borderStyle: "round", paddingX: 2, paddingY: 0, children: [_jsx(Text, { dimColor: true, children: "TOOLS " }), _jsx(Text, { bold: true, color: "cyan", children: totalTools })] }), _jsxs(Box, { borderStyle: "round", paddingX: 2, paddingY: 0, children: [_jsx(Text, { dimColor: true, children: "FINDINGS " }), _jsx(Text, { bold: true, color: totalFindings > 0 ? 'yellow' : 'green', children: totalFindings })] }), errorCount > 0 && (_jsxs(Box, { borderStyle: "round", paddingX: 2, paddingY: 0, children: [_jsx(Text, { dimColor: true, children: "ERRORS " }), _jsx(Text, { bold: true, color: "red", children: errorCount })] }))] }), _jsx(Box, { flexGrow: 1 }), crawlingPage && (_jsx(Box, { marginTop: 2, children: _jsxs(Text, { dimColor: true, italic: true, children: ["Crawling: ", shortenUrl(crawlingPage.url, 60)] }) }))] }));
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=MultiPageCrawlView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiPageCrawlView.js","sourceRoot":"","sources":["../../../../../src/ui/ink/components/views/MultiPageCrawlView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PotentialView Component
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the potential analysis experience: progress, summary,
|
|
5
|
+
* AI recommendations, and per-page opportunity cards with keyboard nav.
|
|
6
|
+
*/
|
|
7
|
+
import type { ComponentProps } from 'react';
|
|
8
|
+
import { PotentialProgress } from '../PotentialProgress.js';
|
|
9
|
+
import type { PotentialReport } from '../../../../potential/types.js';
|
|
10
|
+
interface PotentialViewProps {
|
|
11
|
+
report?: PotentialReport;
|
|
12
|
+
isLoading?: boolean;
|
|
13
|
+
progress?: ComponentProps<typeof PotentialProgress>;
|
|
14
|
+
recommendations?: PotentialReport['topRecommendations'];
|
|
15
|
+
onExit?: () => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function PotentialView({ report, isLoading, progress, recommendations, onExit, }: PotentialViewProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* PotentialView Component
|
|
4
|
+
*
|
|
5
|
+
* Orchestrates the potential analysis experience: progress, summary,
|
|
6
|
+
* AI recommendations, and per-page opportunity cards with keyboard nav.
|
|
7
|
+
*/
|
|
8
|
+
import { useMemo, useState, useEffect } from 'react';
|
|
9
|
+
import { Box, Text, useApp, useInput, useStdout } from 'ink';
|
|
10
|
+
import figures from 'figures';
|
|
11
|
+
import { PotentialSummary } from '../PotentialSummary.js';
|
|
12
|
+
import { PotentialProgress } from '../PotentialProgress.js';
|
|
13
|
+
import { AIRecommendationCard } from '../AIRecommendationCard.js';
|
|
14
|
+
import { PotentialPageCard } from '../PotentialPageCard.js';
|
|
15
|
+
import { OpportunityList } from '../OpportunityList.js';
|
|
16
|
+
const PAGE_WINDOW = 5;
|
|
17
|
+
export function PotentialView({ report, isLoading, progress, recommendations, onExit, }) {
|
|
18
|
+
const { exit } = useApp();
|
|
19
|
+
const { stdout } = useStdout();
|
|
20
|
+
const terminalWidth = stdout?.columns ?? 80;
|
|
21
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
22
|
+
const [windowStart, setWindowStart] = useState(0);
|
|
23
|
+
const pages = useMemo(() => {
|
|
24
|
+
if (!report)
|
|
25
|
+
return [];
|
|
26
|
+
return [...report.pages].sort((a, b) => b.potentialScore - a.potentialScore);
|
|
27
|
+
}, [report]);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
setSelectedIndex(0);
|
|
30
|
+
setWindowStart(0);
|
|
31
|
+
}, [report?.targetUrl]);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (pages.length === 0) {
|
|
34
|
+
setWindowStart(0);
|
|
35
|
+
setSelectedIndex(0);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (selectedIndex >= pages.length) {
|
|
39
|
+
setSelectedIndex(pages.length - 1);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (selectedIndex < windowStart) {
|
|
43
|
+
setWindowStart(selectedIndex);
|
|
44
|
+
}
|
|
45
|
+
else if (selectedIndex >= windowStart + PAGE_WINDOW) {
|
|
46
|
+
setWindowStart(Math.max(0, selectedIndex - PAGE_WINDOW + 1));
|
|
47
|
+
}
|
|
48
|
+
}, [pages.length, selectedIndex, windowStart]);
|
|
49
|
+
useInput((input, key) => {
|
|
50
|
+
if (input === 'q') {
|
|
51
|
+
onExit?.();
|
|
52
|
+
exit();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (pages.length === 0)
|
|
56
|
+
return;
|
|
57
|
+
if (key.upArrow || input === 'k') {
|
|
58
|
+
setSelectedIndex((prev) => Math.max(0, prev - 1));
|
|
59
|
+
}
|
|
60
|
+
else if (key.downArrow || input === 'j') {
|
|
61
|
+
setSelectedIndex((prev) => Math.min(pages.length - 1, prev + 1));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
const visiblePages = pages.slice(windowStart, windowStart + PAGE_WINDOW);
|
|
65
|
+
const selectedPage = pages[selectedIndex];
|
|
66
|
+
if (!report) {
|
|
67
|
+
return (_jsx(Box, { flexDirection: "column", padding: 2, children: isLoading && progress ? (_jsx(PotentialProgress, { ...progress })) : (_jsx(Text, { dimColor: true, children: "No potential analysis yet." })) }));
|
|
68
|
+
}
|
|
69
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 2, gap: 1, children: [isLoading && progress && (_jsx(PotentialProgress, { ...progress })), _jsx(PotentialSummary, { report: report }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Top Recommendations" }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [(recommendations ?? report.topRecommendations).slice(0, 5).map((rec, index) => (_jsx(AIRecommendationCard, { recommendation: rec, index: index }, `${rec.title}-${index}`))), (recommendations ?? report.topRecommendations).length === 0 && (_jsx(Box, { paddingY: 1, children: _jsxs(Text, { dimColor: true, children: [figures.info, " AI recommendations will appear here after analysis."] }) }))] })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", children: [_jsxs(Text, { bold: true, color: "cyan", children: ["Pages (", pages.length, ")"] }), _jsx(Text, { dimColor: true, children: "Use j/k or arrow keys to navigate \u2022 q to quit" })] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [windowStart > 0 && (_jsxs(Text, { dimColor: true, children: ["\u2026", windowStart, " more above"] })), visiblePages.map((page, index) => {
|
|
70
|
+
const pageIndex = windowStart + index;
|
|
71
|
+
return (_jsx(PotentialPageCard, { page: page, isActive: selectedIndex === pageIndex, maxWidth: terminalWidth - 6 }, page.url));
|
|
72
|
+
}), windowStart + PAGE_WINDOW < pages.length && (_jsxs(Text, { dimColor: true, children: ["\u2026", pages.length - (windowStart + PAGE_WINDOW), " more below"] }))] })] }), selectedPage && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { bold: true, color: "cyan", children: ["Opportunities on ", selectedPage.title || selectedPage.url] }), _jsx(OpportunityList, { opportunities: selectedPage.opportunities })] }))] }));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=PotentialView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PotentialView.js","sourceRoot":"","sources":["../../../../../src/ui/ink/components/views/PotentialView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReconView Component
|
|
3
|
+
*
|
|
4
|
+
* Displays reconnaissance phase progress: robots.txt, sitemap,
|
|
5
|
+
* manifest, and route discovery status.
|
|
6
|
+
*/
|
|
7
|
+
export type ReconTaskStatus = 'pending' | 'running' | 'done' | 'skipped' | 'error';
|
|
8
|
+
export interface ReconTask {
|
|
9
|
+
id: string;
|
|
10
|
+
label: string;
|
|
11
|
+
status: ReconTaskStatus;
|
|
12
|
+
detail?: string;
|
|
13
|
+
}
|
|
14
|
+
interface ReconViewProps {
|
|
15
|
+
tasks: ReconTask[];
|
|
16
|
+
discoveredRoutes: number;
|
|
17
|
+
estimatedCrawlScope: number;
|
|
18
|
+
progress: number;
|
|
19
|
+
isComplete: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare const ReconView: import("react").NamedExoticComponent<ReconViewProps>;
|
|
22
|
+
export {};
|