claude-permissions-manager 1.4.62 → 1.4.63
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/README.md
CHANGED
|
@@ -236,6 +236,7 @@ Run `cpm` (or `cpm ui`) for the interactive terminal UI:
|
|
|
236
236
|
|
|
237
237
|
- `↑↓` / `j`/`k` — navigate projects
|
|
238
238
|
- `Enter` — view project details
|
|
239
|
+
- `/` — filter projects by path (type to narrow, `Esc` to clear)
|
|
239
240
|
- `a` — audit view (security issues)
|
|
240
241
|
- `d` — diff two projects
|
|
241
242
|
- `q` / `Ctrl+C` — quit
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectList.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/ProjectList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAkB,MAAM,qBAAqB,CAAC;AAYrF,UAAU,gBAAgB;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EACV,eAAe,EACf,OAAO,EACP,MAAM,EACN,MAAM,GACP,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"ProjectList.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/ProjectList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAkB,MAAM,qBAAqB,CAAC;AAYrF,UAAU,gBAAgB;IACxB,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAC1B,UAAU,EACV,eAAe,EACf,OAAO,EACP,MAAM,EACN,MAAM,GACP,EAAE,gBAAgB,2CA0PlB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState } from "react";
|
|
2
|
+
import { useState, useMemo } from "react";
|
|
3
3
|
import { Box, Text, useInput, useStdout } from "ink";
|
|
4
4
|
import { Header } from "../components/Header.js";
|
|
5
5
|
import { collapseHome } from "../../utils/paths.js";
|
|
@@ -14,14 +14,67 @@ const MODE_COLORS = {
|
|
|
14
14
|
export function ProjectList({ scanResult, onSelectProject, onAudit, onDiff, onQuit, }) {
|
|
15
15
|
const { stdout } = useStdout();
|
|
16
16
|
const termHeight = stdout?.rows ?? 24;
|
|
17
|
-
const visibleRows = Math.max(5, termHeight - 12);
|
|
18
17
|
const [cursor, setCursor] = useState(0);
|
|
19
18
|
const [scrollOffset, setScrollOffset] = useState(0);
|
|
19
|
+
const [filterMode, setFilterMode] = useState(false);
|
|
20
|
+
const [filter, setFilter] = useState("");
|
|
20
21
|
const { projects } = scanResult;
|
|
22
|
+
const filteredProjects = useMemo(() => {
|
|
23
|
+
if (!filter)
|
|
24
|
+
return projects;
|
|
25
|
+
const lower = filter.toLowerCase();
|
|
26
|
+
return projects.filter((p) => collapseHome(p.rootPath).toLowerCase().includes(lower));
|
|
27
|
+
}, [projects, filter]);
|
|
28
|
+
// Reserve extra row for filter bar when active
|
|
29
|
+
const visibleRows = Math.max(5, termHeight - (filterMode ? 13 : 12));
|
|
21
30
|
const totalWarnings = projects.reduce((sum, p) => sum + p.effectivePermissions.warnings.length, 0);
|
|
22
31
|
useInput((input, key) => {
|
|
32
|
+
if (filterMode) {
|
|
33
|
+
if (key.escape) {
|
|
34
|
+
setFilter("");
|
|
35
|
+
setFilterMode(false);
|
|
36
|
+
setCursor(0);
|
|
37
|
+
setScrollOffset(0);
|
|
38
|
+
}
|
|
39
|
+
else if (key.backspace || key.delete) {
|
|
40
|
+
setFilter((f) => {
|
|
41
|
+
const next = f.slice(0, -1);
|
|
42
|
+
setCursor(0);
|
|
43
|
+
setScrollOffset(0);
|
|
44
|
+
return next;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else if (key.downArrow || input === "j") {
|
|
48
|
+
const next = Math.min(cursor + 1, filteredProjects.length - 1);
|
|
49
|
+
setCursor(next);
|
|
50
|
+
if (next >= scrollOffset + visibleRows) {
|
|
51
|
+
setScrollOffset(next - visibleRows + 1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (key.upArrow || input === "k") {
|
|
55
|
+
const prev = Math.max(cursor - 1, 0);
|
|
56
|
+
setCursor(prev);
|
|
57
|
+
if (prev < scrollOffset) {
|
|
58
|
+
setScrollOffset(prev);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (key.return) {
|
|
62
|
+
if (filteredProjects[cursor])
|
|
63
|
+
onSelectProject(filteredProjects[cursor]);
|
|
64
|
+
}
|
|
65
|
+
else if (input && !key.ctrl && !key.meta) {
|
|
66
|
+
setFilter((f) => {
|
|
67
|
+
const next = f + input;
|
|
68
|
+
setCursor(0);
|
|
69
|
+
setScrollOffset(0);
|
|
70
|
+
return next;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// Normal (non-filter) mode
|
|
23
76
|
if (key.downArrow || input === "j") {
|
|
24
|
-
const next = Math.min(cursor + 1,
|
|
77
|
+
const next = Math.min(cursor + 1, filteredProjects.length - 1);
|
|
25
78
|
setCursor(next);
|
|
26
79
|
if (next >= scrollOffset + visibleRows) {
|
|
27
80
|
setScrollOffset(next - visibleRows + 1);
|
|
@@ -35,8 +88,8 @@ export function ProjectList({ scanResult, onSelectProject, onAudit, onDiff, onQu
|
|
|
35
88
|
}
|
|
36
89
|
}
|
|
37
90
|
else if (key.return) {
|
|
38
|
-
if (
|
|
39
|
-
onSelectProject(
|
|
91
|
+
if (filteredProjects[cursor])
|
|
92
|
+
onSelectProject(filteredProjects[cursor]);
|
|
40
93
|
}
|
|
41
94
|
else if (input === "a") {
|
|
42
95
|
onAudit();
|
|
@@ -44,12 +97,20 @@ export function ProjectList({ scanResult, onSelectProject, onAudit, onDiff, onQu
|
|
|
44
97
|
else if (input === "d") {
|
|
45
98
|
onDiff();
|
|
46
99
|
}
|
|
100
|
+
else if (input === "/") {
|
|
101
|
+
setFilterMode(true);
|
|
102
|
+
setFilter("");
|
|
103
|
+
setCursor(0);
|
|
104
|
+
setScrollOffset(0);
|
|
105
|
+
}
|
|
47
106
|
else if (input === "q" || (key.ctrl && input === "c")) {
|
|
48
107
|
onQuit();
|
|
49
108
|
}
|
|
50
109
|
});
|
|
51
|
-
const visibleProjects =
|
|
52
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { title: "Claude Permissions Manager", subtitle:
|
|
110
|
+
const visibleProjects = filteredProjects.slice(scrollOffset, scrollOffset + visibleRows);
|
|
111
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Header, { title: "Claude Permissions Manager", subtitle: filter
|
|
112
|
+
? `${filteredProjects.length} of ${projects.length} project(s) • ${totalWarnings} warning(s) • root: ${collapseHome(scanResult.scanRoot)}`
|
|
113
|
+
: `Found ${projects.length} project(s) • ${totalWarnings} warning(s) • root: ${collapseHome(scanResult.scanRoot)}` }), filterMode && (_jsxs(Box, { marginBottom: 0, children: [_jsx(Text, { color: "cyan", bold: true, children: "Filter: " }), _jsx(Text, { children: filter }), _jsx(Text, { color: "cyan", children: "\u2588" }), _jsx(Text, { color: "gray", children: " (Esc to clear)" })] })), !filterMode && filter && (_jsxs(Box, { marginBottom: 0, children: [_jsx(Text, { color: "cyan", children: "Filter: " }), _jsx(Text, { color: "cyan", bold: true, children: filter }), _jsx(Text, { color: "gray", children: " (/ to edit, Esc clears on next /)" })] })), _jsx(Box, { marginBottom: 0, children: _jsxs(Text, { color: "gray", bold: true, children: [" ", "Project".padEnd(38), "Mode".padEnd(23), "Allow".padEnd(7), "Deny".padEnd(6), "Ask".padEnd(5), "⚠"] }) }), filteredProjects.length === 0 && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["No projects match \"", filter, "\""] }) })), visibleProjects.map((project, i) => {
|
|
53
114
|
const idx = scrollOffset + i;
|
|
54
115
|
const isSelected = idx === cursor;
|
|
55
116
|
const perms = project.effectivePermissions;
|
|
@@ -58,8 +119,10 @@ export function ProjectList({ scanResult, onSelectProject, onAudit, onDiff, onQu
|
|
|
58
119
|
const path = collapseHome(project.rootPath);
|
|
59
120
|
const shortPath = path.length > 37 ? "…" + path.slice(path.length - 36) : path;
|
|
60
121
|
return (_jsxs(Box, { children: [_jsxs(Text, { color: isSelected ? "black" : undefined, backgroundColor: isSelected ? "cyan" : undefined, children: [isSelected ? "▶ " : " ", shortPath.padEnd(38)] }), _jsx(Text, { color: isSelected ? "black" : undefined, backgroundColor: isSelected ? "cyan" : undefined, children: " " }), _jsx(Text, { color: isSelected ? "black" : (MODE_COLORS[perms.defaultMode] ?? "white"), backgroundColor: isSelected ? "cyan" : undefined, bold: !isSelected && perms.defaultMode === "bypassPermissions", children: ("[" + perms.defaultMode + "]").padEnd(19) }), _jsxs(Text, { color: isSelected ? "black" : undefined, backgroundColor: isSelected ? "cyan" : undefined, children: [" ", _jsx(Text, { color: isSelected ? "black" : "green", children: String(perms.allow.length).padEnd(5) }), " ", _jsx(Text, { color: perms.deny.length > 0 ? (isSelected ? "black" : "red") : "gray", children: String(perms.deny.length).padEnd(4) }), " ", _jsx(Text, { color: perms.ask.length > 0 ? (isSelected ? "black" : "yellow") : "gray", children: String(perms.ask.length).padEnd(3) }), " ", hasCritical ? (_jsxs(Text, { color: "red", bold: true, children: ["\uD83D\uDEA8 ", perms.warnings.length] })) : hasWarnings ? (_jsxs(Text, { color: "yellow", children: ["\u26A0 ", perms.warnings.length] })) : (_jsx(Text, { color: "gray", children: "-" })), perms.isBypassDisabled && (_jsx(Text, { color: "green", children: " [lock]" }))] })] }, project.rootPath));
|
|
61
|
-
}),
|
|
62
|
-
? `↓ ${
|
|
63
|
-
: ""] })), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [scanResult.global.user?.exists && (_jsxs(Text, { color: "gray", dimColor: true, children: ["User settings: ", collapseHome(scanResult.global.user.path)] })), scanResult.global.managed?.exists && (_jsxs(Text, { color: "yellow", dimColor: true, children: ["Managed settings: ", collapseHome(scanResult.global.managed.path)] })), scanResult.errors.length > 0 && (_jsxs(Text, { color: "red", dimColor: true, children: [scanResult.errors.length, " scan error(s)"] }))] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children:
|
|
122
|
+
}), filteredProjects.length > visibleRows && (_jsxs(Text, { color: "gray", children: [" ", scrollOffset > 0 ? "↑ " : " ", scrollOffset + visibleRows < filteredProjects.length
|
|
123
|
+
? `↓ ${filteredProjects.length - scrollOffset - visibleRows} more`
|
|
124
|
+
: ""] })), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [scanResult.global.user?.exists && (_jsxs(Text, { color: "gray", dimColor: true, children: ["User settings: ", collapseHome(scanResult.global.user.path)] })), scanResult.global.managed?.exists && (_jsxs(Text, { color: "yellow", dimColor: true, children: ["Managed settings: ", collapseHome(scanResult.global.managed.path)] })), scanResult.errors.length > 0 && (_jsxs(Text, { color: "red", dimColor: true, children: [scanResult.errors.length, " scan error(s)"] }))] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: filterMode
|
|
125
|
+
? "Type to filter ↑↓/jk navigate Enter: details Esc: clear filter"
|
|
126
|
+
: "↑↓/jk navigate Enter: details /: filter a: audit d: diff q: quit" }) })] }));
|
|
64
127
|
}
|
|
65
128
|
//# sourceMappingURL=ProjectList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectList.js","sourceRoot":"","sources":["../../../src/tui/screens/ProjectList.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ProjectList.js","sourceRoot":"","sources":["../../../src/tui/screens/ProjectList.tsx"],"names":[],"mappings":"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"}
|