chainwall 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +278 -0
- package/commands/security-scan.md +35 -0
- package/dist/auditor/access-mapper.d.ts +3 -0
- package/dist/auditor/access-mapper.d.ts.map +1 -0
- package/dist/auditor/access-mapper.js +15 -0
- package/dist/auditor/access-mapper.js.map +1 -0
- package/dist/auditor/cli-detector.d.ts +7 -0
- package/dist/auditor/cli-detector.d.ts.map +1 -0
- package/dist/auditor/cli-detector.js +63 -0
- package/dist/auditor/cli-detector.js.map +1 -0
- package/dist/auditor/cross-reference.d.ts +4 -0
- package/dist/auditor/cross-reference.d.ts.map +1 -0
- package/dist/auditor/cross-reference.js +16 -0
- package/dist/auditor/cross-reference.js.map +1 -0
- package/dist/auditor/env-auditor.d.ts +9 -0
- package/dist/auditor/env-auditor.d.ts.map +1 -0
- package/dist/auditor/env-auditor.js +83 -0
- package/dist/auditor/env-auditor.js.map +1 -0
- package/dist/auditor/mcp-analyzer.d.ts +11 -0
- package/dist/auditor/mcp-analyzer.d.ts.map +1 -0
- package/dist/auditor/mcp-analyzer.js +145 -0
- package/dist/auditor/mcp-analyzer.js.map +1 -0
- package/dist/auditor/mcp-detector.d.ts +17 -0
- package/dist/auditor/mcp-detector.d.ts.map +1 -0
- package/dist/auditor/mcp-detector.js +86 -0
- package/dist/auditor/mcp-detector.js.map +1 -0
- package/dist/auditor/remediation.d.ts +26 -0
- package/dist/auditor/remediation.d.ts.map +1 -0
- package/dist/auditor/remediation.js +222 -0
- package/dist/auditor/remediation.js.map +1 -0
- package/dist/auditor/tool-detector.d.ts +15 -0
- package/dist/auditor/tool-detector.d.ts.map +1 -0
- package/dist/auditor/tool-detector.js +241 -0
- package/dist/auditor/tool-detector.js.map +1 -0
- package/dist/auditor/types.d.ts +31 -0
- package/dist/auditor/types.d.ts.map +1 -0
- package/dist/auditor/types.js +2 -0
- package/dist/auditor/types.js.map +1 -0
- package/dist/auditor/vscode-extension-scanner.d.ts +8 -0
- package/dist/auditor/vscode-extension-scanner.d.ts.map +1 -0
- package/dist/auditor/vscode-extension-scanner.js +51 -0
- package/dist/auditor/vscode-extension-scanner.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +159 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/audit.d.ts +8 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +151 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +34 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/remediate-cli.d.ts +3 -0
- package/dist/commands/remediate-cli.d.ts.map +1 -0
- package/dist/commands/remediate-cli.js +96 -0
- package/dist/commands/remediate-cli.js.map +1 -0
- package/dist/commands/scan.d.ts +11 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +138 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/watch.d.ts +6 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +203 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +235 -0
- package/dist/config.js.map +1 -0
- package/dist/mcp-server/index.d.ts +3 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +69 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/mcp-server/schemas.d.ts +13 -0
- package/dist/mcp-server/schemas.d.ts.map +1 -0
- package/dist/mcp-server/schemas.js +13 -0
- package/dist/mcp-server/schemas.js.map +1 -0
- package/dist/mcp-server/tools/audit-status.d.ts +3 -0
- package/dist/mcp-server/tools/audit-status.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit-status.js +46 -0
- package/dist/mcp-server/tools/audit-status.js.map +1 -0
- package/dist/mcp-server/tools/check-command.d.ts +4 -0
- package/dist/mcp-server/tools/check-command.d.ts.map +1 -0
- package/dist/mcp-server/tools/check-command.js +30 -0
- package/dist/mcp-server/tools/check-command.js.map +1 -0
- package/dist/mcp-server/tools/scan-content.d.ts +4 -0
- package/dist/mcp-server/tools/scan-content.d.ts.map +1 -0
- package/dist/mcp-server/tools/scan-content.js +18 -0
- package/dist/mcp-server/tools/scan-content.js.map +1 -0
- package/dist/mcp-server/tools/scan-file.d.ts +4 -0
- package/dist/mcp-server/tools/scan-file.d.ts.map +1 -0
- package/dist/mcp-server/tools/scan-file.js +48 -0
- package/dist/mcp-server/tools/scan-file.js.map +1 -0
- package/dist/mcp-server/types.d.ts +15 -0
- package/dist/mcp-server/types.d.ts.map +1 -0
- package/dist/mcp-server/types.js +2 -0
- package/dist/mcp-server/types.js.map +1 -0
- package/dist/reporter/audit-report.d.ts +4 -0
- package/dist/reporter/audit-report.d.ts.map +1 -0
- package/dist/reporter/audit-report.js +186 -0
- package/dist/reporter/audit-report.js.map +1 -0
- package/dist/reporter/json-report.d.ts +3 -0
- package/dist/reporter/json-report.d.ts.map +1 -0
- package/dist/reporter/json-report.js +4 -0
- package/dist/reporter/json-report.js.map +1 -0
- package/dist/reporter/remediation-text.d.ts +3 -0
- package/dist/reporter/remediation-text.d.ts.map +1 -0
- package/dist/reporter/remediation-text.js +12 -0
- package/dist/reporter/remediation-text.js.map +1 -0
- package/dist/reporter/risk-scorer.d.ts +8 -0
- package/dist/reporter/risk-scorer.d.ts.map +1 -0
- package/dist/reporter/risk-scorer.js +40 -0
- package/dist/reporter/risk-scorer.js.map +1 -0
- package/dist/reporter/sarif-report.d.ts +3 -0
- package/dist/reporter/sarif-report.d.ts.map +1 -0
- package/dist/reporter/sarif-report.js +80 -0
- package/dist/reporter/sarif-report.js.map +1 -0
- package/dist/reporter/shared.d.ts +11 -0
- package/dist/reporter/shared.d.ts.map +1 -0
- package/dist/reporter/shared.js +85 -0
- package/dist/reporter/shared.js.map +1 -0
- package/dist/reporter/summary-generator.d.ts +16 -0
- package/dist/reporter/summary-generator.d.ts.map +1 -0
- package/dist/reporter/summary-generator.js +89 -0
- package/dist/reporter/summary-generator.js.map +1 -0
- package/dist/reporter/terminal-report.d.ts +4 -0
- package/dist/reporter/terminal-report.d.ts.map +1 -0
- package/dist/reporter/terminal-report.js +135 -0
- package/dist/reporter/terminal-report.js.map +1 -0
- package/dist/rules/crypto-rules.d.ts +3 -0
- package/dist/rules/crypto-rules.d.ts.map +1 -0
- package/dist/rules/crypto-rules.js +252 -0
- package/dist/rules/crypto-rules.js.map +1 -0
- package/dist/rules/default-rules.d.ts +9 -0
- package/dist/rules/default-rules.d.ts.map +1 -0
- package/dist/rules/default-rules.js +1319 -0
- package/dist/rules/default-rules.js.map +1 -0
- package/dist/rules/index.d.ts +7 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +7 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/injection-rules.d.ts +8 -0
- package/dist/rules/injection-rules.d.ts.map +1 -0
- package/dist/rules/injection-rules.js +108 -0
- package/dist/rules/injection-rules.js.map +1 -0
- package/dist/rules/types.d.ts +52 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/scanner/filesystem-scanner.d.ts +26 -0
- package/dist/scanner/filesystem-scanner.d.ts.map +1 -0
- package/dist/scanner/filesystem-scanner.js +369 -0
- package/dist/scanner/filesystem-scanner.js.map +1 -0
- package/dist/scanner/injection-scanner.d.ts +12 -0
- package/dist/scanner/injection-scanner.d.ts.map +1 -0
- package/dist/scanner/injection-scanner.js +136 -0
- package/dist/scanner/injection-scanner.js.map +1 -0
- package/dist/scanner/permission-checker.d.ts +4 -0
- package/dist/scanner/permission-checker.d.ts.map +1 -0
- package/dist/scanner/permission-checker.js +37 -0
- package/dist/scanner/permission-checker.js.map +1 -0
- package/dist/scanner/redact.d.ts +3 -0
- package/dist/scanner/redact.d.ts.map +1 -0
- package/dist/scanner/redact.js +17 -0
- package/dist/scanner/redact.js.map +1 -0
- package/dist/scanner/rule-engine.d.ts +9 -0
- package/dist/scanner/rule-engine.d.ts.map +1 -0
- package/dist/scanner/rule-engine.js +129 -0
- package/dist/scanner/rule-engine.js.map +1 -0
- package/dist/scanner/system-targets.d.ts +17 -0
- package/dist/scanner/system-targets.d.ts.map +1 -0
- package/dist/scanner/system-targets.js +81 -0
- package/dist/scanner/system-targets.js.map +1 -0
- package/dist/tui/App.d.ts +6 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +224 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/BootSequence.d.ts +6 -0
- package/dist/tui/components/BootSequence.d.ts.map +1 -0
- package/dist/tui/components/BootSequence.js +40 -0
- package/dist/tui/components/BootSequence.js.map +1 -0
- package/dist/tui/components/BorderedSection.d.ts +12 -0
- package/dist/tui/components/BorderedSection.d.ts.map +1 -0
- package/dist/tui/components/BorderedSection.js +7 -0
- package/dist/tui/components/BorderedSection.js.map +1 -0
- package/dist/tui/components/ErrorBoundary.d.ts +18 -0
- package/dist/tui/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/tui/components/ErrorBoundary.js +36 -0
- package/dist/tui/components/ErrorBoundary.js.map +1 -0
- package/dist/tui/components/FirstUseHint.d.ts +7 -0
- package/dist/tui/components/FirstUseHint.d.ts.map +1 -0
- package/dist/tui/components/FirstUseHint.js +20 -0
- package/dist/tui/components/FirstUseHint.js.map +1 -0
- package/dist/tui/components/Footer.d.ts +10 -0
- package/dist/tui/components/Footer.d.ts.map +1 -0
- package/dist/tui/components/Footer.js +51 -0
- package/dist/tui/components/Footer.js.map +1 -0
- package/dist/tui/components/MetricCard.d.ts +11 -0
- package/dist/tui/components/MetricCard.d.ts.map +1 -0
- package/dist/tui/components/MetricCard.js +8 -0
- package/dist/tui/components/MetricCard.js.map +1 -0
- package/dist/tui/components/Panel.d.ts +15 -0
- package/dist/tui/components/Panel.d.ts.map +1 -0
- package/dist/tui/components/Panel.js +25 -0
- package/dist/tui/components/Panel.js.map +1 -0
- package/dist/tui/components/RemediationMenu.d.ts +10 -0
- package/dist/tui/components/RemediationMenu.d.ts.map +1 -0
- package/dist/tui/components/RemediationMenu.js +84 -0
- package/dist/tui/components/RemediationMenu.js.map +1 -0
- package/dist/tui/components/RiskGauge.d.ts +7 -0
- package/dist/tui/components/RiskGauge.d.ts.map +1 -0
- package/dist/tui/components/RiskGauge.js +55 -0
- package/dist/tui/components/RiskGauge.js.map +1 -0
- package/dist/tui/components/ScrollableList.d.ts +11 -0
- package/dist/tui/components/ScrollableList.d.ts.map +1 -0
- package/dist/tui/components/ScrollableList.js +14 -0
- package/dist/tui/components/ScrollableList.js.map +1 -0
- package/dist/tui/components/Section.d.ts +9 -0
- package/dist/tui/components/Section.d.ts.map +1 -0
- package/dist/tui/components/Section.js +7 -0
- package/dist/tui/components/Section.js.map +1 -0
- package/dist/tui/components/SectionHeader.d.ts +8 -0
- package/dist/tui/components/SectionHeader.d.ts.map +1 -0
- package/dist/tui/components/SectionHeader.js +15 -0
- package/dist/tui/components/SectionHeader.js.map +1 -0
- package/dist/tui/components/SeverityBadge.d.ts +5 -0
- package/dist/tui/components/SeverityBadge.d.ts.map +1 -0
- package/dist/tui/components/SeverityBadge.js +7 -0
- package/dist/tui/components/SeverityBadge.js.map +1 -0
- package/dist/tui/components/Sidebar.d.ts +2 -0
- package/dist/tui/components/Sidebar.d.ts.map +1 -0
- package/dist/tui/components/Sidebar.js +40 -0
- package/dist/tui/components/Sidebar.js.map +1 -0
- package/dist/tui/components/StatusIndicator.d.ts +8 -0
- package/dist/tui/components/StatusIndicator.d.ts.map +1 -0
- package/dist/tui/components/StatusIndicator.js +15 -0
- package/dist/tui/components/StatusIndicator.js.map +1 -0
- package/dist/tui/components/Table.d.ts +21 -0
- package/dist/tui/components/Table.d.ts.map +1 -0
- package/dist/tui/components/Table.js +38 -0
- package/dist/tui/components/Table.js.map +1 -0
- package/dist/tui/components/Transition.d.ts +8 -0
- package/dist/tui/components/Transition.d.ts.map +1 -0
- package/dist/tui/components/Transition.js +38 -0
- package/dist/tui/components/Transition.js.map +1 -0
- package/dist/tui/components/WelcomeScreen.d.ts +6 -0
- package/dist/tui/components/WelcomeScreen.d.ts.map +1 -0
- package/dist/tui/components/WelcomeScreen.js +14 -0
- package/dist/tui/components/WelcomeScreen.js.map +1 -0
- package/dist/tui/educational.d.ts +32 -0
- package/dist/tui/educational.d.ts.map +1 -0
- package/dist/tui/educational.js +117 -0
- package/dist/tui/educational.js.map +1 -0
- package/dist/tui/hooks/useAudit.d.ts +24 -0
- package/dist/tui/hooks/useAudit.d.ts.map +1 -0
- package/dist/tui/hooks/useAudit.js +263 -0
- package/dist/tui/hooks/useAudit.js.map +1 -0
- package/dist/tui/hooks/useConfig.d.ts +18 -0
- package/dist/tui/hooks/useConfig.d.ts.map +1 -0
- package/dist/tui/hooks/useConfig.js +85 -0
- package/dist/tui/hooks/useConfig.js.map +1 -0
- package/dist/tui/hooks/useHookStatus.d.ts +10 -0
- package/dist/tui/hooks/useHookStatus.d.ts.map +1 -0
- package/dist/tui/hooks/useHookStatus.js +59 -0
- package/dist/tui/hooks/useHookStatus.js.map +1 -0
- package/dist/tui/hooks/useLogs.d.ts +42 -0
- package/dist/tui/hooks/useLogs.d.ts.map +1 -0
- package/dist/tui/hooks/useLogs.js +105 -0
- package/dist/tui/hooks/useLogs.js.map +1 -0
- package/dist/tui/hooks/useScan.d.ts +39 -0
- package/dist/tui/hooks/useScan.d.ts.map +1 -0
- package/dist/tui/hooks/useScan.js +255 -0
- package/dist/tui/hooks/useScan.js.map +1 -0
- package/dist/tui/hooks/useTerminalSize.d.ts +10 -0
- package/dist/tui/hooks/useTerminalSize.d.ts.map +1 -0
- package/dist/tui/hooks/useTerminalSize.js +27 -0
- package/dist/tui/hooks/useTerminalSize.js.map +1 -0
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +8 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/screens/AuditPanel.d.ts +7 -0
- package/dist/tui/screens/AuditPanel.d.ts.map +1 -0
- package/dist/tui/screens/AuditPanel.js +467 -0
- package/dist/tui/screens/AuditPanel.js.map +1 -0
- package/dist/tui/screens/LogsPanel.d.ts +2 -0
- package/dist/tui/screens/LogsPanel.d.ts.map +1 -0
- package/dist/tui/screens/LogsPanel.js +127 -0
- package/dist/tui/screens/LogsPanel.js.map +1 -0
- package/dist/tui/screens/OverviewPanel.d.ts +2 -0
- package/dist/tui/screens/OverviewPanel.d.ts.map +1 -0
- package/dist/tui/screens/OverviewPanel.js +84 -0
- package/dist/tui/screens/OverviewPanel.js.map +1 -0
- package/dist/tui/screens/ScanPanel.d.ts +2 -0
- package/dist/tui/screens/ScanPanel.d.ts.map +1 -0
- package/dist/tui/screens/ScanPanel.js +188 -0
- package/dist/tui/screens/ScanPanel.js.map +1 -0
- package/dist/tui/screens/ScanResultsPanel.d.ts +2 -0
- package/dist/tui/screens/ScanResultsPanel.d.ts.map +1 -0
- package/dist/tui/screens/ScanResultsPanel.js +394 -0
- package/dist/tui/screens/ScanResultsPanel.js.map +1 -0
- package/dist/tui/screens/SettingsPanel.d.ts +2 -0
- package/dist/tui/screens/SettingsPanel.d.ts.map +1 -0
- package/dist/tui/screens/SettingsPanel.js +353 -0
- package/dist/tui/screens/SettingsPanel.js.map +1 -0
- package/dist/tui/state.d.ts +35 -0
- package/dist/tui/state.d.ts.map +1 -0
- package/dist/tui/state.js +13 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/theme.d.ts +58 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +80 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/hooks/audit-logger.sh +74 -0
- package/hooks/detection-lib.sh +301 -0
- package/hooks/git-pre-commit.sh +195 -0
- package/hooks/git-pre-push.sh +125 -0
- package/hooks/git-safety.sh +152 -0
- package/hooks/security-scanner.sh +527 -0
- package/install.sh +543 -0
- package/package.json +67 -0
- package/patterns/credentials.yaml +317 -0
- package/patterns/dangerous-commands.yaml +167 -0
- package/patterns/pii.yaml +95 -0
- package/patterns/prompt-injection.yaml +131 -0
- package/patterns/supply-chain.yaml +119 -0
- package/rules/AGENTS.md +60 -0
- package/rules/SECURITY-RULES.md +177 -0
- package/rules/claude.md +9 -0
- package/rules/clinerules +29 -0
- package/rules/continuerules +29 -0
- package/rules/copilot-instructions.md +9 -0
- package/rules/cursor-security.mdc +14 -0
- package/rules/gemini.md +9 -0
- package/rules/kiro-security.md +29 -0
- package/rules/roocode-security.md +29 -0
- package/rules/trae-security.md +29 -0
- package/rules/windsurfrules +9 -0
- package/skill/llm-antivirus/SKILL.md +73 -0
- package/skill/llm-antivirus/references/threat-patterns.yaml +82 -0
- package/skill/llm-antivirus/scripts/security-audit.sh +244 -0
- package/uninstall.sh +215 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState, useEffect } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { SectionHeader } from '../components/SectionHeader.js';
|
|
5
|
+
import { Table, truncate } from '../components/Table.js';
|
|
6
|
+
import { useAppContext } from '../state.js';
|
|
7
|
+
import { useLogs } from '../hooks/useLogs.js';
|
|
8
|
+
import { useTermSize } from '../App.js';
|
|
9
|
+
import { THEME, ICONS, SEVERITY_COLORS } from '../theme.js';
|
|
10
|
+
const LOG_LEVEL_COLORS = {
|
|
11
|
+
info: THEME.muted,
|
|
12
|
+
warn: THEME.warning,
|
|
13
|
+
block: THEME.critical,
|
|
14
|
+
bypass: THEME.brand,
|
|
15
|
+
};
|
|
16
|
+
const FILTERS = ['all', 'critical', 'high', 'medium', 'low'];
|
|
17
|
+
const activityColumns = [
|
|
18
|
+
{
|
|
19
|
+
header: 'SEV',
|
|
20
|
+
width: 7,
|
|
21
|
+
render: (e) => {
|
|
22
|
+
const color = LOG_LEVEL_COLORS[e.severity ?? 'info']
|
|
23
|
+
?? SEVERITY_COLORS[e.severity]
|
|
24
|
+
?? THEME.muted;
|
|
25
|
+
return (_jsx(Text, { color: color, bold: true, children: (e.severity ?? 'info').toUpperCase().padEnd(5) }));
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
header: 'TOOL',
|
|
30
|
+
width: 14,
|
|
31
|
+
render: (e) => _jsx(Text, { color: THEME.label, children: truncate(e.tool ?? '', 13) }),
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
header: 'CONTENT',
|
|
35
|
+
width: 'flex',
|
|
36
|
+
render: (e) => _jsx(Text, { color: THEME.value, children: e.content || '(no content)' }),
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
function makeHistoryColumns(contentWidth) {
|
|
40
|
+
// Adaptive: at narrow terminals, shrink TIME and hide MS column
|
|
41
|
+
const narrow = contentWidth < 55;
|
|
42
|
+
const cols = [
|
|
43
|
+
{
|
|
44
|
+
header: 'TYPE',
|
|
45
|
+
width: 6,
|
|
46
|
+
render: (e) => (_jsx(Text, { color: e.type === 'scan' ? THEME.primary : THEME.brand, bold: true, children: e.type === 'scan' ? 'SCAN' : 'AUDIT' })),
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
header: 'TIME',
|
|
50
|
+
width: narrow ? 12 : 20,
|
|
51
|
+
render: (e) => (_jsx(Text, { color: THEME.filePath, children: narrow
|
|
52
|
+
? e.timestamp.replace('T', ' ').replace(/:\d{2}\.\d+Z$/, '')
|
|
53
|
+
: e.timestamp.replace('T', ' ').replace(/\.\d+Z$/, 'Z') })),
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
header: 'RISK',
|
|
57
|
+
width: 5,
|
|
58
|
+
render: (e) => (_jsx(Text, { color: e.riskScore > 50 ? THEME.critical : e.riskScore > 20 ? THEME.warning : THEME.success, children: e.riskScore })),
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
header: 'FINDS',
|
|
62
|
+
width: 5,
|
|
63
|
+
align: 'right',
|
|
64
|
+
render: (e) => _jsx(Text, { color: THEME.value, children: e.findingCount }),
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
if (!narrow) {
|
|
68
|
+
cols.push({
|
|
69
|
+
header: 'MS',
|
|
70
|
+
width: 7,
|
|
71
|
+
align: 'right',
|
|
72
|
+
render: (e) => _jsx(Text, { color: THEME.primaryDim, children: e.durationMs }),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return cols;
|
|
76
|
+
}
|
|
77
|
+
export function LogsPanel() {
|
|
78
|
+
const { setPanelState, setFocusArea, state: appState } = useAppContext();
|
|
79
|
+
const logs = useLogs();
|
|
80
|
+
const termSize = useTermSize();
|
|
81
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
82
|
+
const [filterIndex, setFilterIndex] = useState(0);
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
setPanelState(logs.tab);
|
|
85
|
+
}, [logs.tab]);
|
|
86
|
+
useInput((input, key) => {
|
|
87
|
+
if (appState.focusArea !== 'content')
|
|
88
|
+
return;
|
|
89
|
+
if (key.escape) {
|
|
90
|
+
setFocusArea('sidebar');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (key.tab) {
|
|
94
|
+
if (logs.tab === 'activity') {
|
|
95
|
+
logs.setTab('history');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
logs.setTab('activity');
|
|
99
|
+
}
|
|
100
|
+
setSelectedIndex(0);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (input === 'j' || key.downArrow) {
|
|
104
|
+
const max = logs.tab === 'activity'
|
|
105
|
+
? logs.filteredEntries.length - 1
|
|
106
|
+
: logs.historyEntries.length - 1;
|
|
107
|
+
setSelectedIndex((i) => Math.min(i + 1, max));
|
|
108
|
+
}
|
|
109
|
+
if (input === 'k' || key.upArrow) {
|
|
110
|
+
setSelectedIndex((i) => Math.max(i - 1, 0));
|
|
111
|
+
}
|
|
112
|
+
if (input === 'f' && logs.tab === 'activity') {
|
|
113
|
+
const newIdx = (filterIndex + 1) % FILTERS.length;
|
|
114
|
+
setFilterIndex(newIdx);
|
|
115
|
+
logs.setFilter(FILTERS[newIdx]);
|
|
116
|
+
setSelectedIndex(0);
|
|
117
|
+
}
|
|
118
|
+
if (input === 'r') {
|
|
119
|
+
logs.reload();
|
|
120
|
+
setSelectedIndex(0);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
const listHeight = termSize.listHeight;
|
|
124
|
+
const historyColumns = React.useMemo(() => makeHistoryColumns(termSize.contentWidth), [termSize.contentWidth]);
|
|
125
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { gap: 2, children: [_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: logs.tab === 'activity' ? THEME.brand : THEME.primaryDim, bold: logs.tab === 'activity', children: "ACTIVITY" }), logs.tab === 'activity' && (_jsx(Text, { color: THEME.brand, children: ICONS.section.repeat(8) }))] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: logs.tab === 'history' ? THEME.brand : THEME.primaryDim, bold: logs.tab === 'history', children: "HISTORY" }), logs.tab === 'history' && (_jsx(Text, { color: THEME.brand, children: ICONS.section.repeat(7) }))] })] }), logs.tab === 'activity' && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: THEME.primaryDim, wrap: "wrap", children: ["Real-time events from hook enforcement ", ICONS.dash, " blocks, bypasses, warnings."] }), _jsx(SectionHeader, { title: "ACTIVITY LOG", rightLabel: `filter: ${FILTERS[filterIndex]}` }), _jsx(Box, { gap: 1, marginTop: 1, marginBottom: 1, children: FILTERS.map((f, i) => (_jsx(Text, { color: i === filterIndex ? THEME.brand : THEME.primaryDim, bold: i === filterIndex, children: i === filterIndex ? `[${f}]` : ` ${f} ` }, f))) }), !logs.loaded ? (_jsx(Text, { color: THEME.primaryDim, children: "Loading..." })) : (_jsx(Table, { columns: activityColumns, data: logs.filteredEntries, selectedIndex: selectedIndex, height: listHeight, keyExtractor: (_e, i) => `log-${i}`, emptyMessage: `No log entries${logs.filter !== 'all' ? ` with severity '${logs.filter}'` : ''}.` }))] })), logs.tab === 'history' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: THEME.primaryDim, wrap: "wrap", children: "Completed scan and audit runs. Each entry records the risk score, finding count, and duration." }), _jsx(SectionHeader, { title: "RUN HISTORY" }), _jsx(Box, { marginTop: 1, children: _jsx(Table, { columns: historyColumns, data: logs.historyEntries, selectedIndex: selectedIndex, height: listHeight, keyExtractor: (e, i) => `hist-${i}-${e.timestamp}`, emptyMessage: "No history yet. Run a scan or audit to populate." }) })] }))] }));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=LogsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogsPanel.js","sourceRoot":"","sources":["../../../src/tui/screens/LogsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverviewPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/OverviewPanel.tsx"],"names":[],"mappings":"AA4CA,wBAAgB,aAAa,4CAsM5B"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { MetricCard } from '../components/MetricCard.js';
|
|
5
|
+
import { StatusIndicator } from '../components/StatusIndicator.js';
|
|
6
|
+
import { SectionHeader } from '../components/SectionHeader.js';
|
|
7
|
+
import { Table } from '../components/Table.js';
|
|
8
|
+
import { useAppContext } from '../state.js';
|
|
9
|
+
import { useHookStatus } from '../hooks/useHookStatus.js';
|
|
10
|
+
import { useTermSize } from '../App.js';
|
|
11
|
+
import { THEME, ACCESS_COLORS, ACCESS_LABELS, SEVERITY_LABELS } from '../theme.js';
|
|
12
|
+
import { detectInstalledTools } from '../../auditor/tool-detector.js';
|
|
13
|
+
import { allRules } from '../../rules/index.js';
|
|
14
|
+
import { computeFocusLine } from '../educational.js';
|
|
15
|
+
const SEVERITIES = ['critical', 'high', 'medium', 'low'];
|
|
16
|
+
const toolColumns = [
|
|
17
|
+
{
|
|
18
|
+
header: 'NAME',
|
|
19
|
+
width: 'flex',
|
|
20
|
+
render: (tool) => _jsx(Text, { color: THEME.value, children: tool.name }),
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
header: 'ACCESS',
|
|
24
|
+
width: 16,
|
|
25
|
+
render: (tool) => (_jsx(Text, { color: ACCESS_COLORS[tool.accessLevel], bold: true, children: ACCESS_LABELS[tool.accessLevel] })),
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
header: 'STATUS',
|
|
29
|
+
width: 16,
|
|
30
|
+
render: (tool) => (_jsx(Text, { color: tool.configPaths.length > 0 ? THEME.value : THEME.primaryDim, children: tool.configPaths.length > 0 ? 'Configured' : 'Detected' })),
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
export function OverviewPanel() {
|
|
34
|
+
const { state, setPanel, setPanelState } = useAppContext();
|
|
35
|
+
const hookStatus = useHookStatus();
|
|
36
|
+
const termSize = useTermSize();
|
|
37
|
+
const [tools, setTools] = useState([]);
|
|
38
|
+
const [toolsLoaded, setToolsLoaded] = useState(false);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
const detected = detectInstalledTools();
|
|
41
|
+
setTools(detected);
|
|
42
|
+
setToolsLoaded(true);
|
|
43
|
+
}, []);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
setPanelState('idle');
|
|
46
|
+
}, []);
|
|
47
|
+
useInput((input) => {
|
|
48
|
+
if (state.focusArea !== 'content')
|
|
49
|
+
return;
|
|
50
|
+
if (input === 's') {
|
|
51
|
+
setPanel('scan');
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (input === 'a') {
|
|
55
|
+
setPanel('audit');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
// Compute metrics
|
|
60
|
+
const riskScore = state.scanResult?.riskScore ?? state.auditResult?.scanResult.riskScore ?? 0;
|
|
61
|
+
const findingsCount = state.scanResult?.findings.length ?? 0;
|
|
62
|
+
const toolCount = toolsLoaded ? tools.length : 0;
|
|
63
|
+
const fullAccessCount = tools.filter(t => t.accessLevel === 'full').length;
|
|
64
|
+
// Severity breakdown for findings subtitle
|
|
65
|
+
const sevCounts = { critical: 0, high: 0, medium: 0, low: 0 };
|
|
66
|
+
if (state.scanResult) {
|
|
67
|
+
for (const f of state.scanResult.findings)
|
|
68
|
+
sevCounts[f.severity]++;
|
|
69
|
+
}
|
|
70
|
+
const sevParts = SEVERITIES
|
|
71
|
+
.filter(s => sevCounts[s] > 0)
|
|
72
|
+
.map(s => `${SEVERITY_LABELS[s][0]}:${sevCounts[s]}`)
|
|
73
|
+
.join(' ');
|
|
74
|
+
// Risk color
|
|
75
|
+
const riskColor = riskScore <= 2 ? THEME.success : riskScore <= 5 ? THEME.warning : THEME.critical;
|
|
76
|
+
const hooksMissing = hookStatus.checked && !hookStatus.installed;
|
|
77
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(SectionHeader, { title: "DASHBOARD" }), hooksMissing && (_jsxs(Box, { borderStyle: "round", borderColor: THEME.warning, paddingX: 1, marginTop: 1, children: [_jsxs(Text, { color: THEME.warning, bold: true, children: ['\u26a0', " Hooks not installed "] }), _jsxs(Text, { color: THEME.primaryDim, children: ["Go to Settings ", '>', " Hook Installation to set up real-time protection."] })] })), _jsxs(Box, { gap: 1, marginTop: 1, flexWrap: "wrap", children: [_jsx(MetricCard, { title: "RISK", value: riskScore > 0 ? `${riskScore.toFixed(1)}/10` : '--', color: riskScore > 0 ? riskColor : THEME.muted, barValue: riskScore, barMax: 10 }), _jsx(MetricCard, { title: "FINDINGS", value: state.scanResult ? String(findingsCount) : '--', color: findingsCount > 0 ? THEME.warning : THEME.success, subtitle: sevParts || undefined }), _jsx(MetricCard, { title: "AI TOOLS", value: toolsLoaded ? String(toolCount) : '--', color: fullAccessCount > 0 ? THEME.critical : THEME.brand, subtitle: fullAccessCount > 0 ? `${fullAccessCount} full` : undefined }), _jsx(MetricCard, { title: "RULES", value: String(allRules.length), color: THEME.brand, subtitle: "loaded" })] }), (state.scanResult || state.auditResult) && (() => {
|
|
78
|
+
const exposures = state.auditResult?.exposures ?? [];
|
|
79
|
+
const auditTools = state.auditResult?.tools ?? tools;
|
|
80
|
+
const focus = computeFocusLine(auditTools, exposures);
|
|
81
|
+
return focus ? (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: THEME.warning, wrap: "wrap", children: ['\u26a0', " ", focus] }) })) : null;
|
|
82
|
+
})(), _jsxs(Box, { marginTop: 1, gap: 4, flexWrap: "wrap", children: [_jsxs(Box, { flexDirection: "column", children: [_jsx(StatusIndicator, { label: "Protection", value: hookStatus.protectionEnabled ? 'ON' : 'OFF', status: hookStatus.protectionEnabled ? 'ok' : 'error' }), _jsx(StatusIndicator, { label: "Hooks", value: hookStatus.checked ? (hookStatus.installed ? 'Installed' : 'Not installed') : 'Checking...', status: hookStatus.checked ? (hookStatus.installed ? 'ok' : 'warning') : 'inactive' })] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(StatusIndicator, { label: "Last Scan", value: state.scanResult ? `${findingsCount} findings` : 'Not run', status: state.scanResult ? (findingsCount > 0 ? 'warning' : 'ok') : 'inactive' }), _jsx(StatusIndicator, { label: "Last Audit", value: state.auditResult ? `${state.auditResult.tools.length} tools` : 'Not run', status: state.auditResult ? 'ok' : 'inactive' })] })] }), _jsx(SectionHeader, { title: "DETECTED AI TOOLS", rightLabel: tools.length > 0 ? `${tools.length} found` : undefined }), tools.length > 0 ? (_jsxs(_Fragment, { children: [_jsx(Box, { marginTop: 1, borderStyle: "single", borderColor: THEME.border, paddingX: 1, flexDirection: "column", children: _jsx(Table, { columns: toolColumns, data: tools, selectedIndex: -1, height: Math.min(tools.length + 1, 8), keyExtractor: (t) => t.name, emptyMessage: "No AI tools detected." }) }), _jsx(Text, { color: THEME.primaryDim, children: "Full Access = entire filesystem | Workspace = project only | Limited = open file only" })] })) : (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: THEME.success, children: "No AI tools detected. Run an audit for a deeper check." }) })), _jsx(SectionHeader, { title: "GETTING STARTED" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", gap: 0, children: [_jsxs(Text, { color: THEME.primaryDim, wrap: "wrap", children: ["Press ", _jsx(Text, { color: THEME.title, bold: true, children: "1" }), "-", _jsx(Text, { color: THEME.title, bold: true, children: "5" }), " to jump between panels, or use the sidebar with arrow keys."] }), _jsx(Text, { children: " " }), _jsxs(Box, { gap: 1, children: [_jsx(Text, { color: THEME.title, bold: true, children: '2 Scan ' }), _jsx(Text, { color: THEME.primaryDim, children: "Find exposed secrets, credentials, crypto keys, and PII on your machine" })] }), _jsxs(Box, { gap: 1, children: [_jsx(Text, { color: THEME.title, bold: true, children: '3 Audit ' }), _jsx(Text, { color: THEME.primaryDim, children: "Discover which AI tools are installed and what they can access" })] }), _jsxs(Box, { gap: 1, children: [_jsx(Text, { color: THEME.title, bold: true, children: '4 Settings' }), _jsx(Text, { color: THEME.primaryDim, children: "Configure allowlists, blocklists, and toggle real-time protection" })] }), _jsxs(Box, { gap: 1, children: [_jsx(Text, { color: THEME.title, bold: true, children: '5 Logs ' }), _jsx(Text, { color: THEME.primaryDim, children: "View hook activity, scan history, and blocked operations" })] }), _jsx(Text, { children: " " }), _jsxs(Text, { color: THEME.muted, children: ["Tip: Start with ", _jsx(Text, { color: THEME.title, bold: true, children: "Audit" }), " to see what's exposed, then ", _jsx(Text, { color: THEME.title, bold: true, children: "Scan" }), " to find specific secrets. Press ", _jsx(Text, { color: THEME.title, bold: true, children: "?" }), " for all keybindings."] })] })] }));
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=OverviewPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverviewPanel.js","sourceRoot":"","sources":["../../../src/tui/screens/OverviewPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScanPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/ScanPanel.tsx"],"names":[],"mappings":"AAqDA,wBAAgB,SAAS,4CA6QxB"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState, useRef } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { TextInput } from '@inkjs/ui';
|
|
5
|
+
import { ProgressBar } from '@inkjs/ui';
|
|
6
|
+
import InkSpinner from 'ink-spinner';
|
|
7
|
+
import { SectionHeader } from '../components/SectionHeader.js';
|
|
8
|
+
import { BorderedSection } from '../components/BorderedSection.js';
|
|
9
|
+
import { SeverityBadge } from '../components/SeverityBadge.js';
|
|
10
|
+
import { useAppContext } from '../state.js';
|
|
11
|
+
import { useScan } from '../hooks/useScan.js';
|
|
12
|
+
import { useTermSize } from '../App.js';
|
|
13
|
+
import { THEME, ICONS } from '../theme.js';
|
|
14
|
+
import { truncate } from '../components/Table.js';
|
|
15
|
+
const STAGE_LABELS = {
|
|
16
|
+
walking: 'Scanning files',
|
|
17
|
+
system: 'System targets',
|
|
18
|
+
permissions: 'Permission checks',
|
|
19
|
+
injection: 'Injection scan',
|
|
20
|
+
done: 'Complete',
|
|
21
|
+
};
|
|
22
|
+
const MODES = [
|
|
23
|
+
{ key: 'quick', label: 'Quick Scan', desc: 'System credentials & permissions only' },
|
|
24
|
+
{ key: 'standard', label: 'Standard Scan', desc: 'Current project + system targets' },
|
|
25
|
+
{ key: 'deep', label: 'Deep Scan', desc: 'Full home directory + system targets' },
|
|
26
|
+
{ key: 'custom', label: 'Custom Path', desc: 'Specify a directory to scan' },
|
|
27
|
+
];
|
|
28
|
+
function formatElapsed(ms) {
|
|
29
|
+
const s = Math.floor(ms / 1000);
|
|
30
|
+
const m = Math.floor(s / 60);
|
|
31
|
+
const sec = s % 60;
|
|
32
|
+
if (m > 0)
|
|
33
|
+
return `${m}m ${sec}s`;
|
|
34
|
+
return `${sec}s`;
|
|
35
|
+
}
|
|
36
|
+
function formatETA(ms) {
|
|
37
|
+
if (ms < 1000)
|
|
38
|
+
return '<1s';
|
|
39
|
+
const s = Math.floor(ms / 1000);
|
|
40
|
+
const m = Math.floor(s / 60);
|
|
41
|
+
if (m > 5)
|
|
42
|
+
return '>5m';
|
|
43
|
+
const sec = s % 60;
|
|
44
|
+
if (m > 0)
|
|
45
|
+
return `~${m}m ${sec}s`;
|
|
46
|
+
return `~${s}s`;
|
|
47
|
+
}
|
|
48
|
+
export function ScanPanel() {
|
|
49
|
+
const { setScanResult, setPanel, setInputLocked, setPanelState, setFocusArea, state: appState } = useAppContext();
|
|
50
|
+
const scan = useScan();
|
|
51
|
+
const termSize = useTermSize();
|
|
52
|
+
const hasStarted = useRef(false);
|
|
53
|
+
const [flashIndex, setFlashIndex] = useState(-1);
|
|
54
|
+
const prevFindingsCount = useRef(0);
|
|
55
|
+
const [modeIndex, setModeIndex] = useState(0);
|
|
56
|
+
const [customPath, setCustomPath] = useState('');
|
|
57
|
+
const [enteringPath, setEnteringPath] = useState(false);
|
|
58
|
+
const [cancelConfirm, setCancelConfirm] = useState(false);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (scan.phase === 'idle' || scan.phase === 'selecting') {
|
|
61
|
+
setPanelState('mode-selection');
|
|
62
|
+
}
|
|
63
|
+
else if (scan.phase === 'scanning') {
|
|
64
|
+
setPanelState('scanning');
|
|
65
|
+
}
|
|
66
|
+
else if (scan.phase === 'cancelled') {
|
|
67
|
+
setPanelState('cancelled');
|
|
68
|
+
}
|
|
69
|
+
else if (scan.phase === 'error') {
|
|
70
|
+
setPanelState('error');
|
|
71
|
+
}
|
|
72
|
+
}, [scan.phase]);
|
|
73
|
+
useInput((input, key) => {
|
|
74
|
+
if (appState.focusArea !== 'content')
|
|
75
|
+
return;
|
|
76
|
+
if (scan.phase === 'idle' || scan.phase === 'selecting') {
|
|
77
|
+
if (enteringPath)
|
|
78
|
+
return;
|
|
79
|
+
if (input === 'v' && appState.scanResult) {
|
|
80
|
+
setPanel('scan-results');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (input === 'j' || key.downArrow) {
|
|
84
|
+
setModeIndex((i) => Math.min(i + 1, MODES.length - 1));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (input === 'k' || key.upArrow) {
|
|
88
|
+
setModeIndex((i) => Math.max(i - 1, 0));
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (key.return) {
|
|
92
|
+
const mode = MODES[modeIndex];
|
|
93
|
+
if (mode.key === 'custom') {
|
|
94
|
+
setEnteringPath(true);
|
|
95
|
+
setInputLocked(true);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
hasStarted.current = true;
|
|
99
|
+
scan.startScan(mode.key);
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (key.escape) {
|
|
104
|
+
setFocusArea('sidebar');
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (key.escape) {
|
|
110
|
+
if (scan.phase === 'scanning') {
|
|
111
|
+
if (cancelConfirm) {
|
|
112
|
+
scan.cancel();
|
|
113
|
+
setCancelConfirm(false);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
setCancelConfirm(true);
|
|
117
|
+
setTimeout(() => setCancelConfirm(false), 2000);
|
|
118
|
+
}
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
else if (scan.phase === 'cancelled') {
|
|
122
|
+
if (scan.result) {
|
|
123
|
+
setScanResult(scan.result);
|
|
124
|
+
setPanel('scan-results');
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
setFocusArea('sidebar');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
setFocusArea('sidebar');
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
useEffect(() => {
|
|
136
|
+
if (scan.phase === 'idle' && appState.scanResult) {
|
|
137
|
+
// Show mode selector
|
|
138
|
+
}
|
|
139
|
+
}, []);
|
|
140
|
+
useEffect(() => {
|
|
141
|
+
if (scan.findingsCount > prevFindingsCount.current) {
|
|
142
|
+
setFlashIndex(scan.findingsCount - 1);
|
|
143
|
+
const timer = setTimeout(() => setFlashIndex(-1), 150);
|
|
144
|
+
prevFindingsCount.current = scan.findingsCount;
|
|
145
|
+
return () => clearTimeout(timer);
|
|
146
|
+
}
|
|
147
|
+
}, [scan.findingsCount]);
|
|
148
|
+
useEffect(() => {
|
|
149
|
+
if (scan.phase === 'done' && scan.result) {
|
|
150
|
+
setScanResult(scan.result);
|
|
151
|
+
setPanel('scan-results');
|
|
152
|
+
}
|
|
153
|
+
}, [scan.phase]);
|
|
154
|
+
if (scan.phase === 'error') {
|
|
155
|
+
return (_jsxs(BorderedSection, { title: "SCAN ERROR", borderColor: THEME.critical, children: [_jsx(Text, { color: THEME.critical, children: scan.error }), _jsx(Text, { color: THEME.primaryDim, children: "Press Esc to go back" })] }));
|
|
156
|
+
}
|
|
157
|
+
if (scan.phase === 'idle' || scan.phase === 'selecting') {
|
|
158
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(SectionHeader, { title: "SELECT SCAN MODE" }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: MODES.map((mode, i) => (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: i === modeIndex ? THEME.brand : THEME.muted, children: i === modeIndex ? ICONS.arrow : ' ' }), _jsx(Text, { color: i === modeIndex ? THEME.brand : THEME.primary, bold: i === modeIndex, children: mode.label }), _jsx(Text, { color: THEME.label, children: mode.desc })] }), i < MODES.length - 1 && _jsx(Text, { children: " " })] }, mode.key))) }), enteringPath && (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: THEME.brand, children: "Path: " }), _jsx(TextInput, { placeholder: "~/Projects", onSubmit: (value) => {
|
|
159
|
+
const path = value.trim();
|
|
160
|
+
if (path) {
|
|
161
|
+
setCustomPath(path);
|
|
162
|
+
setEnteringPath(false);
|
|
163
|
+
setInputLocked(false);
|
|
164
|
+
hasStarted.current = true;
|
|
165
|
+
const resolved = path.startsWith('~')
|
|
166
|
+
? path.replace('~', process.env.HOME ?? '')
|
|
167
|
+
: path;
|
|
168
|
+
scan.startScan('custom', resolved);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
setEnteringPath(false);
|
|
172
|
+
setInputLocked(false);
|
|
173
|
+
}
|
|
174
|
+
} })] })), appState.scanResult && (_jsxs(Text, { color: THEME.primaryDim, dimColor: true, children: ["Previous results available ", ICONS.dash, " press v to view."] }))] }));
|
|
175
|
+
}
|
|
176
|
+
// Cancelled state
|
|
177
|
+
if (scan.phase === 'cancelled') {
|
|
178
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(SectionHeader, { title: "SCAN CANCELLED", color: THEME.warning }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { color: THEME.warning, children: ["Scan cancelled ", ICONS.dash, " ", scan.scannedFiles, " files scanned, ", scan.findingsCount, " finding", scan.findingsCount !== 1 ? 's' : ''] }), _jsxs(Text, { children: [_jsx(Text, { color: THEME.label, children: "Elapsed:" }), " ", _jsx(Text, { color: THEME.value, children: formatElapsed(scan.elapsedMs) })] })] }), scan.findingsCount > 0 && (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { title: `FINDINGS (${scan.findingsCount})` }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [scan.findings.slice(0, 8).map((f, i) => (_jsxs(Box, { gap: 1, children: [_jsx(SeverityBadge, { severity: f.severity }), _jsx(Text, { color: THEME.primary, children: f.ruleName }), _jsx(Text, { color: THEME.filePath, children: f.filePath.split('/').pop() })] }, i))), scan.findingsCount > 8 && (_jsxs(Text, { color: THEME.muted, children: ["...and ", scan.findingsCount - 8, " more"] }))] })] }))] }));
|
|
179
|
+
}
|
|
180
|
+
// Scanning state
|
|
181
|
+
const progressPercent = scan.progress;
|
|
182
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(SectionHeader, { title: "SCANNING", color: THEME.brand }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: THEME.brand, children: _jsx(InkSpinner, { type: "dots" }) }), _jsxs(Text, { color: THEME.primary, children: [STAGE_LABELS[scan.scanStage] ?? 'Scanning', " ", ICONS.dash, " ", progressPercent, "%"] })] }), _jsx(Box, { marginTop: 1, children: _jsx(ProgressBar, { value: progressPercent }) }), _jsxs(Box, { marginTop: 1, gap: 2, children: [_jsxs(Text, { children: [_jsx(Text, { color: THEME.label, children: "files:" }), " ", _jsx(Text, { color: THEME.value, children: scan.scannedFiles })] }), _jsxs(Text, { children: [_jsx(Text, { color: THEME.label, children: "speed:" }), " ", _jsxs(Text, { color: THEME.value, children: [scan.filesPerSec, "/s"] })] }), _jsxs(Text, { children: [_jsx(Text, { color: THEME.label, children: "elapsed:" }), " ", _jsx(Text, { color: THEME.value, children: formatElapsed(scan.elapsedMs) })] }), scan.estimatedRemainingMs !== null && (_jsxs(Text, { children: [_jsx(Text, { color: THEME.label, children: "ETA:" }), " ", _jsx(Text, { color: THEME.value, children: formatETA(scan.estimatedRemainingMs) })] }))] }), scan.currentDir && (_jsx(Text, { color: THEME.filePath, children: truncate(`${scan.currentDir}/${scan.currentFile}`, Math.max(20, termSize.contentWidth - 2)) })), cancelConfirm && (_jsx(Text, { color: THEME.brand, children: "Press ESC again to cancel" }))] }), scan.findings.length > 0 && (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { title: `LIVE FINDINGS (${scan.findingsCount})`, color: THEME.warning }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: scan.findings.slice(-8).map((f, i) => {
|
|
183
|
+
const actualIndex = scan.findings.length - 8 + i;
|
|
184
|
+
const isFlashing = actualIndex === flashIndex;
|
|
185
|
+
return (_jsxs(Box, { gap: 1, children: [_jsx(SeverityBadge, { severity: f.severity }), _jsx(Text, { color: isFlashing ? THEME.flash : THEME.primary, bold: isFlashing, children: f.ruleName }), _jsxs(Text, { color: isFlashing ? THEME.flash : THEME.filePath, children: [f.filePath.split('/').pop(), f.line > 0 ? `:${f.line}` : ''] })] }, i));
|
|
186
|
+
}) })] }))] }));
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=ScanPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScanPanel.js","sourceRoot":"","sources":["../../../src/tui/screens/ScanPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScanResultsPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/ScanResultsPanel.tsx"],"names":[],"mappings":"AA2BA,wBAAgB,gBAAgB,4CA0kB/B"}
|