@skillkit/tui 1.13.0 → 1.15.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/dist/index.d.ts +9 -2
- package/dist/index.js +345 -6
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ interface FetchedSkill {
|
|
|
22
22
|
repoName: string;
|
|
23
23
|
description?: string;
|
|
24
24
|
}
|
|
25
|
-
type Screen = 'home' | 'browse' | 'installed' | 'marketplace' | 'recommend' | 'translate' | 'context' | 'memory' | 'team' | 'plugins' | 'methodology' | 'plan' | 'workflow' | 'execute' | 'history' | 'sync' | 'settings' | 'help' | 'mesh' | 'message';
|
|
25
|
+
type Screen = 'home' | 'browse' | 'installed' | 'marketplace' | 'recommend' | 'translate' | 'context' | 'memory' | 'team' | 'plugins' | 'methodology' | 'plan' | 'workflow' | 'execute' | 'history' | 'sync' | 'settings' | 'help' | 'mesh' | 'message' | 'scan';
|
|
26
26
|
declare const NAV_KEYS: Record<string, Screen>;
|
|
27
27
|
declare const STATUS_BAR_SHORTCUTS = "b browse m market i installed s sync / help q quit";
|
|
28
28
|
interface ScreenMeta {
|
|
@@ -1208,7 +1208,14 @@ interface MessageProps {
|
|
|
1208
1208
|
}
|
|
1209
1209
|
declare function Message(props: MessageProps): any;
|
|
1210
1210
|
|
|
1211
|
+
interface ScanProps {
|
|
1212
|
+
onNavigate: (screen: Screen) => void;
|
|
1213
|
+
cols?: number;
|
|
1214
|
+
rows?: number;
|
|
1215
|
+
}
|
|
1216
|
+
declare function Scan(props: ScanProps): any;
|
|
1217
|
+
|
|
1211
1218
|
declare function exitTUI(code?: number): void;
|
|
1212
1219
|
declare function startTUI(): Promise<never>;
|
|
1213
1220
|
|
|
1214
|
-
export { AGENT_LOGOS, AgentGrid, type AgentLogo, type AgentStatus, type AgentsState, AnimatedText, type AnimationPreset, App, BlinkingText, BottomStatusBar, Breadcrumb, type BreadcrumbItem, Browse, Button, ButtonGroup, type ButtonSize, type ButtonVariant, Clickable, ClickableRow, ClickableText, CodeBlock, type ColorName, type ColorValue, Context, CountUpText, DEFAULT_REPOS, DEFAULT_SCRAMBLE_CONFIG, type DetailField, DetailPane, type EasingFunction, EmptyState, ErrorBoundary, ErrorState, Execute, FEATURES, type Feature, FeatureList, type FetchedSkill, FocusRing, FormField, Header, Help, HighlightableListItem, History, Home, HoverHighlight, IconButton, InlineCode, InlineStatus, Installed, InteractiveArea, LoadingState, Marketplace, type MarketplaceState, Memory, Mesh, Message, Methodology, NAV_KEYS, type NavigationState, NavigationTrail, type PaginationResult, PathBreadcrumb, Plan, Plugins, PressEffect, ProgressBar, PulsingText, Recommend, type RepoInfo, RightSidebar, SCRAMBLE_CHARS, SIDEBAR_NAV, STATUS_BAR_SHORTCUTS, type ScrambleConfig, type Screen, type ScreenMeta, SearchInput, SelectField, SelectList, type SelectListItem, Settings, Sidebar, type SidebarSection, type SkillItem, SkillList, type SkillWithDetails, type SkillsState, Spinner, Splash, SplitPane, StatsCard, StatusBadge, StatusBar, StatusIndicator, type StatusType, type SymbolName, Sync, TOTAL_AGENTS, type Tab, TabBar, Team, TextAreaField, ThreePaneLayout, Translate, Try, VerticalTabBar, Workflow, animations, calculateMaxVisible, calculatePagination, clampIndex, cleanupTempRoot, colors, createAgentsState, createMarketplaceState, createNavigationState, createSkillsState, exitTUI, fetchRepoSkills, filterMarketplaceSkills, filterSkills, formatAgentDisplay, getAgentAdapter, getAgentLogo, getAgentTypes, getColor, getDetectedAgentCount, getDetectedAgents, getInstallDir, getMarketplaceRepos, getScreenFromKey, getSearchDirs, getStaggerDelay, getVersion, goBack, isNavKey, loadAgents, loadSkills, loadSkillsWithDetails, moveDown, moveUp, navigateTo, readSkillDescription, removeSkill, saveSkillMetadata, scrambleText, sortSkillsByName, startTUI, symbols, terminalColors, toSkillItems };
|
|
1221
|
+
export { AGENT_LOGOS, AgentGrid, type AgentLogo, type AgentStatus, type AgentsState, AnimatedText, type AnimationPreset, App, BlinkingText, BottomStatusBar, Breadcrumb, type BreadcrumbItem, Browse, Button, ButtonGroup, type ButtonSize, type ButtonVariant, Clickable, ClickableRow, ClickableText, CodeBlock, type ColorName, type ColorValue, Context, CountUpText, DEFAULT_REPOS, DEFAULT_SCRAMBLE_CONFIG, type DetailField, DetailPane, type EasingFunction, EmptyState, ErrorBoundary, ErrorState, Execute, FEATURES, type Feature, FeatureList, type FetchedSkill, FocusRing, FormField, Header, Help, HighlightableListItem, History, Home, HoverHighlight, IconButton, InlineCode, InlineStatus, Installed, InteractiveArea, LoadingState, Marketplace, type MarketplaceState, Memory, Mesh, Message, Methodology, NAV_KEYS, type NavigationState, NavigationTrail, type PaginationResult, PathBreadcrumb, Plan, Plugins, PressEffect, ProgressBar, PulsingText, Recommend, type RepoInfo, RightSidebar, SCRAMBLE_CHARS, SIDEBAR_NAV, STATUS_BAR_SHORTCUTS, Scan, type ScrambleConfig, type Screen, type ScreenMeta, SearchInput, SelectField, SelectList, type SelectListItem, Settings, Sidebar, type SidebarSection, type SkillItem, SkillList, type SkillWithDetails, type SkillsState, Spinner, Splash, SplitPane, StatsCard, StatusBadge, StatusBar, StatusIndicator, type StatusType, type SymbolName, Sync, TOTAL_AGENTS, type Tab, TabBar, Team, TextAreaField, ThreePaneLayout, Translate, Try, VerticalTabBar, Workflow, animations, calculateMaxVisible, calculatePagination, clampIndex, cleanupTempRoot, colors, createAgentsState, createMarketplaceState, createNavigationState, createSkillsState, exitTUI, fetchRepoSkills, filterMarketplaceSkills, filterSkills, formatAgentDisplay, getAgentAdapter, getAgentLogo, getAgentTypes, getColor, getDetectedAgentCount, getDetectedAgents, getInstallDir, getMarketplaceRepos, getScreenFromKey, getSearchDirs, getStaggerDelay, getVersion, goBack, isNavKey, loadAgents, loadSkills, loadSkillsWithDetails, moveDown, moveUp, navigateTo, readSkillDescription, removeSkill, saveSkillMetadata, scrambleText, sortSkillsByName, startTUI, symbols, terminalColors, toSkillItems };
|
package/dist/index.js
CHANGED
|
@@ -1721,7 +1721,7 @@ var render = async (node, rendererOrConfig = {}) => {
|
|
|
1721
1721
|
import { createCliRenderer as createCliRenderer2 } from "@opentui/core";
|
|
1722
1722
|
|
|
1723
1723
|
// src/App.tsx
|
|
1724
|
-
import { execFile } from "child_process";
|
|
1724
|
+
import { execFile as execFile2 } from "child_process";
|
|
1725
1725
|
|
|
1726
1726
|
// src/state/types.ts
|
|
1727
1727
|
var NAV_KEYS = {
|
|
@@ -1744,7 +1744,8 @@ var NAV_KEYS = {
|
|
|
1744
1744
|
",": "settings",
|
|
1745
1745
|
"/": "help",
|
|
1746
1746
|
"g": "mesh",
|
|
1747
|
-
"j": "message"
|
|
1747
|
+
"j": "message",
|
|
1748
|
+
"z": "scan"
|
|
1748
1749
|
};
|
|
1749
1750
|
var STATUS_BAR_SHORTCUTS = "b browse m market i installed s sync / help q quit";
|
|
1750
1751
|
var SIDEBAR_NAV = [
|
|
@@ -1762,7 +1763,8 @@ var SIDEBAR_NAV = [
|
|
|
1762
1763
|
items: [
|
|
1763
1764
|
{ key: "i", label: "Installed", screen: "installed" },
|
|
1764
1765
|
{ key: "s", label: "Sync", screen: "sync" },
|
|
1765
|
-
{ key: "t", label: "Translate", screen: "translate" }
|
|
1766
|
+
{ key: "t", label: "Translate", screen: "translate" },
|
|
1767
|
+
{ key: "z", label: "Scan", screen: "scan" }
|
|
1766
1768
|
]
|
|
1767
1769
|
},
|
|
1768
1770
|
{
|
|
@@ -10409,6 +10411,9 @@ var SHORTCUTS = [{
|
|
|
10409
10411
|
}, {
|
|
10410
10412
|
key: "u",
|
|
10411
10413
|
desc: "Publish"
|
|
10414
|
+
}, {
|
|
10415
|
+
key: "z",
|
|
10416
|
+
desc: "Security scan"
|
|
10412
10417
|
}]
|
|
10413
10418
|
}, {
|
|
10414
10419
|
section: "Team & Config",
|
|
@@ -10864,14 +10869,339 @@ function Message(props) {
|
|
|
10864
10869
|
})();
|
|
10865
10870
|
}
|
|
10866
10871
|
|
|
10872
|
+
// src/screens/Scan.tsx
|
|
10873
|
+
import { execFile } from "child_process";
|
|
10874
|
+
function getSeverityColor(severity) {
|
|
10875
|
+
switch (severity.toLowerCase()) {
|
|
10876
|
+
case "critical":
|
|
10877
|
+
return "#ff5555";
|
|
10878
|
+
case "high":
|
|
10879
|
+
return "#ff4444";
|
|
10880
|
+
case "medium":
|
|
10881
|
+
return "#ffaa00";
|
|
10882
|
+
case "low":
|
|
10883
|
+
return "#00bbcc";
|
|
10884
|
+
case "info":
|
|
10885
|
+
return "#888888";
|
|
10886
|
+
default:
|
|
10887
|
+
return terminalColors.textMuted;
|
|
10888
|
+
}
|
|
10889
|
+
}
|
|
10890
|
+
function getVerdictColor(verdict) {
|
|
10891
|
+
switch (verdict) {
|
|
10892
|
+
case "pass":
|
|
10893
|
+
return "#22cc44";
|
|
10894
|
+
case "warn":
|
|
10895
|
+
return "#ffaa00";
|
|
10896
|
+
case "fail":
|
|
10897
|
+
return "#ff5555";
|
|
10898
|
+
default:
|
|
10899
|
+
return terminalColors.textMuted;
|
|
10900
|
+
}
|
|
10901
|
+
}
|
|
10902
|
+
function Scan(props) {
|
|
10903
|
+
const [scanning, setScanning] = createSignal(false);
|
|
10904
|
+
const [result, setResult] = createSignal(null);
|
|
10905
|
+
const [error, setError] = createSignal(null);
|
|
10906
|
+
const [scanPath] = createSignal(".");
|
|
10907
|
+
const [selectedIndex, setSelectedIndex] = createSignal(0);
|
|
10908
|
+
const rows = () => props.rows ?? 24;
|
|
10909
|
+
const visibleCount = () => Math.max(1, rows() - 14);
|
|
10910
|
+
const runScan = (path) => {
|
|
10911
|
+
setScanning(true);
|
|
10912
|
+
setError(null);
|
|
10913
|
+
setResult(null);
|
|
10914
|
+
try {
|
|
10915
|
+
execFile("npx", ["skillkit", "scan", path, "--format", "json"], {
|
|
10916
|
+
timeout: 3e4,
|
|
10917
|
+
maxBuffer: 1024 * 1024
|
|
10918
|
+
}, (err, stdout, stderr) => {
|
|
10919
|
+
setScanning(false);
|
|
10920
|
+
if (err && !stdout) {
|
|
10921
|
+
setError(stderr || err.message || "Scan failed");
|
|
10922
|
+
return;
|
|
10923
|
+
}
|
|
10924
|
+
try {
|
|
10925
|
+
const parsed = JSON.parse(stdout);
|
|
10926
|
+
setResult(parsed);
|
|
10927
|
+
} catch {
|
|
10928
|
+
setError("Failed to parse scan results");
|
|
10929
|
+
}
|
|
10930
|
+
});
|
|
10931
|
+
} catch (err) {
|
|
10932
|
+
setScanning(false);
|
|
10933
|
+
setError(err instanceof Error ? err.message : "Failed to start scan");
|
|
10934
|
+
}
|
|
10935
|
+
};
|
|
10936
|
+
createEffect(() => {
|
|
10937
|
+
runScan(scanPath());
|
|
10938
|
+
});
|
|
10939
|
+
const findings = createMemo(() => result()?.findings ?? []);
|
|
10940
|
+
const windowStart = createMemo(() => Math.max(0, selectedIndex() - visibleCount() + 1));
|
|
10941
|
+
const visibleFindings = createMemo(() => findings().slice(windowStart(), windowStart() + visibleCount()));
|
|
10942
|
+
useKeyboard((key) => {
|
|
10943
|
+
if (key.name === "k" || key.name === "up") {
|
|
10944
|
+
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
10945
|
+
} else if (key.name === "j" || key.name === "down") {
|
|
10946
|
+
setSelectedIndex((i) => Math.min(findings().length - 1, i + 1));
|
|
10947
|
+
} else if (key.name === "r") {
|
|
10948
|
+
runScan(scanPath());
|
|
10949
|
+
}
|
|
10950
|
+
});
|
|
10951
|
+
return (() => {
|
|
10952
|
+
var _el$ = createElement("box"), _el$29 = createElement("text"), _el$31 = createElement("text");
|
|
10953
|
+
insertNode(_el$, _el$29);
|
|
10954
|
+
insertNode(_el$, _el$31);
|
|
10955
|
+
setProp(_el$, "flexDirection", "column");
|
|
10956
|
+
setProp(_el$, "padding", 1);
|
|
10957
|
+
insert(_el$, createComponent2(Header, {
|
|
10958
|
+
title: "Security Scan",
|
|
10959
|
+
subtitle: "detect vulnerabilities in skills",
|
|
10960
|
+
icon: "\\u25D0"
|
|
10961
|
+
}), _el$29);
|
|
10962
|
+
insert(_el$, createComponent2(Show, {
|
|
10963
|
+
get when() {
|
|
10964
|
+
return scanning();
|
|
10965
|
+
},
|
|
10966
|
+
get children() {
|
|
10967
|
+
var _el$2 = createElement("box"), _el$3 = createElement("text"), _el$4 = createTextNode(`Scanning `), _el$5 = createTextNode(`...`);
|
|
10968
|
+
insertNode(_el$2, _el$3);
|
|
10969
|
+
setProp(_el$2, "flexDirection", "row");
|
|
10970
|
+
setProp(_el$2, "gap", 1);
|
|
10971
|
+
insert(_el$2, createComponent2(Spinner, {}), _el$3);
|
|
10972
|
+
insertNode(_el$3, _el$4);
|
|
10973
|
+
insertNode(_el$3, _el$5);
|
|
10974
|
+
insert(_el$3, scanPath, _el$5);
|
|
10975
|
+
effect((_$p) => setProp(_el$3, "fg", terminalColors.textMuted, _$p));
|
|
10976
|
+
return _el$2;
|
|
10977
|
+
}
|
|
10978
|
+
}), _el$29);
|
|
10979
|
+
insert(_el$, createComponent2(Show, {
|
|
10980
|
+
get when() {
|
|
10981
|
+
return error();
|
|
10982
|
+
},
|
|
10983
|
+
get children() {
|
|
10984
|
+
var _el$6 = createElement("box"), _el$7 = createElement("text"), _el$8 = createTextNode(`Scan error: `), _el$9 = createElement("text");
|
|
10985
|
+
insertNode(_el$6, _el$7);
|
|
10986
|
+
insertNode(_el$6, _el$9);
|
|
10987
|
+
setProp(_el$6, "flexDirection", "column");
|
|
10988
|
+
insertNode(_el$7, _el$8);
|
|
10989
|
+
setProp(_el$7, "fg", "#ff5555");
|
|
10990
|
+
insert(_el$7, error, null);
|
|
10991
|
+
insertNode(_el$9, createTextNode(`Press r to retry`));
|
|
10992
|
+
effect((_$p) => setProp(_el$9, "fg", terminalColors.textMuted, _$p));
|
|
10993
|
+
return _el$6;
|
|
10994
|
+
}
|
|
10995
|
+
}), _el$29);
|
|
10996
|
+
insert(_el$, createComponent2(Show, {
|
|
10997
|
+
get when() {
|
|
10998
|
+
return memo2(() => !!result())() && !scanning();
|
|
10999
|
+
},
|
|
11000
|
+
get children() {
|
|
11001
|
+
var _el$1 = createElement("box"), _el$10 = createElement("box"), _el$11 = createElement("text"), _el$12 = createElement("text"), _el$13 = createElement("text"), _el$14 = createTextNode(`ms`), _el$15 = createElement("box"), _el$28 = createElement("text");
|
|
11002
|
+
insertNode(_el$1, _el$10);
|
|
11003
|
+
insertNode(_el$1, _el$15);
|
|
11004
|
+
insertNode(_el$1, _el$28);
|
|
11005
|
+
setProp(_el$1, "flexDirection", "column");
|
|
11006
|
+
insertNode(_el$10, _el$11);
|
|
11007
|
+
insertNode(_el$10, _el$12);
|
|
11008
|
+
insertNode(_el$10, _el$13);
|
|
11009
|
+
setProp(_el$10, "flexDirection", "row");
|
|
11010
|
+
setProp(_el$10, "gap", 2);
|
|
11011
|
+
insert(_el$11, () => result().skillName);
|
|
11012
|
+
insert(_el$12, () => result().verdict.toUpperCase());
|
|
11013
|
+
insertNode(_el$13, _el$14);
|
|
11014
|
+
insert(_el$13, () => result().duration, _el$14);
|
|
11015
|
+
setProp(_el$15, "flexDirection", "row");
|
|
11016
|
+
setProp(_el$15, "gap", 2);
|
|
11017
|
+
insert(_el$15, createComponent2(Show, {
|
|
11018
|
+
get when() {
|
|
11019
|
+
return result().stats.critical > 0;
|
|
11020
|
+
},
|
|
11021
|
+
get children() {
|
|
11022
|
+
var _el$16 = createElement("text"), _el$17 = createTextNode(` critical`);
|
|
11023
|
+
insertNode(_el$16, _el$17);
|
|
11024
|
+
setProp(_el$16, "fg", "#ff5555");
|
|
11025
|
+
insert(_el$16, () => result().stats.critical, _el$17);
|
|
11026
|
+
return _el$16;
|
|
11027
|
+
}
|
|
11028
|
+
}), null);
|
|
11029
|
+
insert(_el$15, createComponent2(Show, {
|
|
11030
|
+
get when() {
|
|
11031
|
+
return result().stats.high > 0;
|
|
11032
|
+
},
|
|
11033
|
+
get children() {
|
|
11034
|
+
var _el$18 = createElement("text"), _el$19 = createTextNode(` high`);
|
|
11035
|
+
insertNode(_el$18, _el$19);
|
|
11036
|
+
setProp(_el$18, "fg", "#ff4444");
|
|
11037
|
+
insert(_el$18, () => result().stats.high, _el$19);
|
|
11038
|
+
return _el$18;
|
|
11039
|
+
}
|
|
11040
|
+
}), null);
|
|
11041
|
+
insert(_el$15, createComponent2(Show, {
|
|
11042
|
+
get when() {
|
|
11043
|
+
return result().stats.medium > 0;
|
|
11044
|
+
},
|
|
11045
|
+
get children() {
|
|
11046
|
+
var _el$20 = createElement("text"), _el$21 = createTextNode(` medium`);
|
|
11047
|
+
insertNode(_el$20, _el$21);
|
|
11048
|
+
setProp(_el$20, "fg", "#ffaa00");
|
|
11049
|
+
insert(_el$20, () => result().stats.medium, _el$21);
|
|
11050
|
+
return _el$20;
|
|
11051
|
+
}
|
|
11052
|
+
}), null);
|
|
11053
|
+
insert(_el$15, createComponent2(Show, {
|
|
11054
|
+
get when() {
|
|
11055
|
+
return result().stats.low > 0;
|
|
11056
|
+
},
|
|
11057
|
+
get children() {
|
|
11058
|
+
var _el$22 = createElement("text"), _el$23 = createTextNode(` low`);
|
|
11059
|
+
insertNode(_el$22, _el$23);
|
|
11060
|
+
setProp(_el$22, "fg", "#00bbcc");
|
|
11061
|
+
insert(_el$22, () => result().stats.low, _el$23);
|
|
11062
|
+
return _el$22;
|
|
11063
|
+
}
|
|
11064
|
+
}), null);
|
|
11065
|
+
insert(_el$15, createComponent2(Show, {
|
|
11066
|
+
get when() {
|
|
11067
|
+
return result().stats.info > 0;
|
|
11068
|
+
},
|
|
11069
|
+
get children() {
|
|
11070
|
+
var _el$24 = createElement("text"), _el$25 = createTextNode(` info`);
|
|
11071
|
+
insertNode(_el$24, _el$25);
|
|
11072
|
+
setProp(_el$24, "fg", "#888888");
|
|
11073
|
+
insert(_el$24, () => result().stats.info, _el$25);
|
|
11074
|
+
return _el$24;
|
|
11075
|
+
}
|
|
11076
|
+
}), null);
|
|
11077
|
+
insert(_el$15, createComponent2(Show, {
|
|
11078
|
+
get when() {
|
|
11079
|
+
return findings().length === 0;
|
|
11080
|
+
},
|
|
11081
|
+
get children() {
|
|
11082
|
+
var _el$26 = createElement("text");
|
|
11083
|
+
insertNode(_el$26, createTextNode(`No findings`));
|
|
11084
|
+
setProp(_el$26, "fg", "#22cc44");
|
|
11085
|
+
return _el$26;
|
|
11086
|
+
}
|
|
11087
|
+
}), null);
|
|
11088
|
+
insert(_el$28, () => "\u2500".repeat(Math.min(60, (props.cols ?? 80) - 4)));
|
|
11089
|
+
insert(_el$1, createComponent2(Show, {
|
|
11090
|
+
get when() {
|
|
11091
|
+
return findings().length === 0;
|
|
11092
|
+
},
|
|
11093
|
+
get children() {
|
|
11094
|
+
return createComponent2(EmptyState, {
|
|
11095
|
+
title: "No security findings detected"
|
|
11096
|
+
});
|
|
11097
|
+
}
|
|
11098
|
+
}), null);
|
|
11099
|
+
insert(_el$1, createComponent2(Show, {
|
|
11100
|
+
get when() {
|
|
11101
|
+
return findings().length > 0;
|
|
11102
|
+
},
|
|
11103
|
+
get children() {
|
|
11104
|
+
return createComponent2(For, {
|
|
11105
|
+
get each() {
|
|
11106
|
+
return visibleFindings();
|
|
11107
|
+
},
|
|
11108
|
+
children: (finding, idx) => {
|
|
11109
|
+
const absoluteIdx = () => windowStart() + idx();
|
|
11110
|
+
const isSelected = () => absoluteIdx() === selectedIndex();
|
|
11111
|
+
return (() => {
|
|
11112
|
+
var _el$33 = createElement("box"), _el$34 = createElement("box"), _el$35 = createElement("text"), _el$36 = createElement("text"), _el$37 = createElement("text"), _el$38 = createTextNode(`[`), _el$39 = createTextNode(`]`), _el$40 = createElement("text");
|
|
11113
|
+
insertNode(_el$33, _el$34);
|
|
11114
|
+
setProp(_el$33, "flexDirection", "column");
|
|
11115
|
+
insertNode(_el$34, _el$35);
|
|
11116
|
+
insertNode(_el$34, _el$36);
|
|
11117
|
+
insertNode(_el$34, _el$37);
|
|
11118
|
+
insertNode(_el$34, _el$40);
|
|
11119
|
+
setProp(_el$34, "flexDirection", "row");
|
|
11120
|
+
setProp(_el$34, "gap", 1);
|
|
11121
|
+
insert(_el$35, () => isSelected() ? ">" : " ");
|
|
11122
|
+
insert(_el$36, () => finding.severity.toUpperCase().padEnd(8));
|
|
11123
|
+
insertNode(_el$37, _el$38);
|
|
11124
|
+
insertNode(_el$37, _el$39);
|
|
11125
|
+
insert(_el$37, () => finding.ruleId, _el$39);
|
|
11126
|
+
insert(_el$40, () => finding.title);
|
|
11127
|
+
insert(_el$33, createComponent2(Show, {
|
|
11128
|
+
get when() {
|
|
11129
|
+
return memo2(() => !!isSelected())() && finding.filePath;
|
|
11130
|
+
},
|
|
11131
|
+
get children() {
|
|
11132
|
+
var _el$41 = createElement("text"), _el$42 = createTextNode(` `);
|
|
11133
|
+
insertNode(_el$41, _el$42);
|
|
11134
|
+
insert(_el$41, () => finding.filePath, null);
|
|
11135
|
+
insert(_el$41, (() => {
|
|
11136
|
+
var _c$ = memo2(() => !!finding.lineNumber);
|
|
11137
|
+
return () => _c$() ? `:${finding.lineNumber}` : "";
|
|
11138
|
+
})(), null);
|
|
11139
|
+
effect((_$p) => setProp(_el$41, "fg", terminalColors.textMuted, _$p));
|
|
11140
|
+
return _el$41;
|
|
11141
|
+
}
|
|
11142
|
+
}), null);
|
|
11143
|
+
insert(_el$33, createComponent2(Show, {
|
|
11144
|
+
get when() {
|
|
11145
|
+
return memo2(() => !!isSelected())() && finding.remediation;
|
|
11146
|
+
},
|
|
11147
|
+
get children() {
|
|
11148
|
+
var _el$43 = createElement("text"), _el$44 = createTextNode(` Fix: `);
|
|
11149
|
+
insertNode(_el$43, _el$44);
|
|
11150
|
+
insert(_el$43, () => finding.remediation, null);
|
|
11151
|
+
effect((_$p) => setProp(_el$43, "fg", terminalColors.accent, _$p));
|
|
11152
|
+
return _el$43;
|
|
11153
|
+
}
|
|
11154
|
+
}), null);
|
|
11155
|
+
effect((_p$) => {
|
|
11156
|
+
var _v$5 = isSelected() ? terminalColors.accent : terminalColors.textMuted, _v$6 = getSeverityColor(finding.severity), _v$7 = terminalColors.textMuted, _v$8 = isSelected() ? terminalColors.text : terminalColors.textMuted;
|
|
11157
|
+
_v$5 !== _p$.e && (_p$.e = setProp(_el$35, "fg", _v$5, _p$.e));
|
|
11158
|
+
_v$6 !== _p$.t && (_p$.t = setProp(_el$36, "fg", _v$6, _p$.t));
|
|
11159
|
+
_v$7 !== _p$.a && (_p$.a = setProp(_el$37, "fg", _v$7, _p$.a));
|
|
11160
|
+
_v$8 !== _p$.o && (_p$.o = setProp(_el$40, "fg", _v$8, _p$.o));
|
|
11161
|
+
return _p$;
|
|
11162
|
+
}, {
|
|
11163
|
+
e: void 0,
|
|
11164
|
+
t: void 0,
|
|
11165
|
+
a: void 0,
|
|
11166
|
+
o: void 0
|
|
11167
|
+
});
|
|
11168
|
+
return _el$33;
|
|
11169
|
+
})();
|
|
11170
|
+
}
|
|
11171
|
+
});
|
|
11172
|
+
}
|
|
11173
|
+
}), null);
|
|
11174
|
+
effect((_p$) => {
|
|
11175
|
+
var _v$ = terminalColors.text, _v$2 = getVerdictColor(result().verdict), _v$3 = terminalColors.textMuted, _v$4 = terminalColors.textMuted;
|
|
11176
|
+
_v$ !== _p$.e && (_p$.e = setProp(_el$11, "fg", _v$, _p$.e));
|
|
11177
|
+
_v$2 !== _p$.t && (_p$.t = setProp(_el$12, "fg", _v$2, _p$.t));
|
|
11178
|
+
_v$3 !== _p$.a && (_p$.a = setProp(_el$13, "fg", _v$3, _p$.a));
|
|
11179
|
+
_v$4 !== _p$.o && (_p$.o = setProp(_el$28, "fg", _v$4, _p$.o));
|
|
11180
|
+
return _p$;
|
|
11181
|
+
}, {
|
|
11182
|
+
e: void 0,
|
|
11183
|
+
t: void 0,
|
|
11184
|
+
a: void 0,
|
|
11185
|
+
o: void 0
|
|
11186
|
+
});
|
|
11187
|
+
return _el$1;
|
|
11188
|
+
}
|
|
11189
|
+
}), _el$29);
|
|
11190
|
+
insertNode(_el$29, createTextNode(` `));
|
|
11191
|
+
insertNode(_el$31, createTextNode(`j/k navigate r rescan esc back`));
|
|
11192
|
+
effect((_$p) => setProp(_el$31, "fg", terminalColors.textMuted, _$p));
|
|
11193
|
+
return _el$;
|
|
11194
|
+
})();
|
|
11195
|
+
}
|
|
11196
|
+
|
|
10867
11197
|
// src/App.tsx
|
|
10868
11198
|
var DOCS_URL = "https://agenstskills.com/docs";
|
|
10869
11199
|
function openUrl(url) {
|
|
10870
11200
|
if (process.platform === "win32") {
|
|
10871
|
-
|
|
11201
|
+
execFile2("cmd", ["/c", "start", "", url]);
|
|
10872
11202
|
} else {
|
|
10873
11203
|
const cmd = process.platform === "darwin" ? "open" : "xdg-open";
|
|
10874
|
-
|
|
11204
|
+
execFile2(cmd, [url]);
|
|
10875
11205
|
}
|
|
10876
11206
|
}
|
|
10877
11207
|
function App(props) {
|
|
@@ -11117,6 +11447,13 @@ function App(props) {
|
|
|
11117
11447
|
get children() {
|
|
11118
11448
|
return createComponent2(Message, mergeProps3(screenProps));
|
|
11119
11449
|
}
|
|
11450
|
+
}), createComponent2(Match, {
|
|
11451
|
+
get when() {
|
|
11452
|
+
return currentScreen() === "scan";
|
|
11453
|
+
},
|
|
11454
|
+
get children() {
|
|
11455
|
+
return createComponent2(Scan, mergeProps3(screenProps));
|
|
11456
|
+
}
|
|
11120
11457
|
})];
|
|
11121
11458
|
}
|
|
11122
11459
|
}));
|
|
@@ -11540,7 +11877,8 @@ var SCREEN_LABELS = {
|
|
|
11540
11877
|
sync: "Sync",
|
|
11541
11878
|
help: "Help",
|
|
11542
11879
|
mesh: "Mesh",
|
|
11543
|
-
message: "Message"
|
|
11880
|
+
message: "Message",
|
|
11881
|
+
scan: "Security Scan"
|
|
11544
11882
|
};
|
|
11545
11883
|
function BottomStatusBar(props) {
|
|
11546
11884
|
const version = getVersion();
|
|
@@ -13810,6 +14148,7 @@ export {
|
|
|
13810
14148
|
SCRAMBLE_CHARS,
|
|
13811
14149
|
SIDEBAR_NAV,
|
|
13812
14150
|
STATUS_BAR_SHORTCUTS,
|
|
14151
|
+
Scan,
|
|
13813
14152
|
SearchInput,
|
|
13814
14153
|
SelectField,
|
|
13815
14154
|
SelectList,
|