@tasszz2k/agentlens 0.3.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 +402 -0
- package/dist/ai.d.ts +5 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +56 -0
- package/dist/ai.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +313 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +193 -0
- package/dist/config.js.map +1 -0
- package/dist/cost.d.ts +5 -0
- package/dist/cost.d.ts.map +1 -0
- package/dist/cost.js +362 -0
- package/dist/cost.js.map +1 -0
- package/dist/parse.d.ts +26 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +391 -0
- package/dist/parse.js.map +1 -0
- package/dist/render.d.ts +8 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +346 -0
- package/dist/render.js.map +1 -0
- package/dist/scan.d.ts +23 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +457 -0
- package/dist/scan.js.map +1 -0
- package/dist/symlink.d.ts +5 -0
- package/dist/symlink.d.ts.map +1 -0
- package/dist/symlink.js +56 -0
- package/dist/symlink.js.map +1 -0
- package/dist/troubleshoot.d.ts +4 -0
- package/dist/troubleshoot.d.ts.map +1 -0
- package/dist/troubleshoot.js +193 -0
- package/dist/troubleshoot.js.map +1 -0
- package/dist/types.d.ts +103 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/App.d.ts +16 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +452 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/CommandBar.d.ts +8 -0
- package/dist/ui/CommandBar.d.ts.map +1 -0
- package/dist/ui/CommandBar.js +77 -0
- package/dist/ui/CommandBar.js.map +1 -0
- package/dist/ui/CostView.d.ts +14 -0
- package/dist/ui/CostView.d.ts.map +1 -0
- package/dist/ui/CostView.js +200 -0
- package/dist/ui/CostView.js.map +1 -0
- package/dist/ui/DetailPanel.d.ts +12 -0
- package/dist/ui/DetailPanel.d.ts.map +1 -0
- package/dist/ui/DetailPanel.js +224 -0
- package/dist/ui/DetailPanel.js.map +1 -0
- package/dist/ui/HelpBar.d.ts +7 -0
- package/dist/ui/HelpBar.d.ts.map +1 -0
- package/dist/ui/HelpBar.js +51 -0
- package/dist/ui/HelpBar.js.map +1 -0
- package/dist/ui/SearchBar.d.ts +9 -0
- package/dist/ui/SearchBar.d.ts.map +1 -0
- package/dist/ui/SearchBar.js +46 -0
- package/dist/ui/SearchBar.js.map +1 -0
- package/dist/ui/SettingsView.d.ts +16 -0
- package/dist/ui/SettingsView.d.ts.map +1 -0
- package/dist/ui/SettingsView.js +155 -0
- package/dist/ui/SettingsView.js.map +1 -0
- package/dist/ui/TreeView.d.ts +26 -0
- package/dist/ui/TreeView.d.ts.map +1 -0
- package/dist/ui/TreeView.js +240 -0
- package/dist/ui/TreeView.js.map +1 -0
- package/dist/ui/theme.d.ts +30 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +31 -0
- package/dist/ui/theme.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsView.d.ts","sourceRoot":"","sources":["../../src/ui/SettingsView.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAc9C,UAAU,iBAAiB;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,MAAM,EACN,KAAK,EACL,WAAW,EACX,cAAc,GACf,EAAE,iBAAiB,2CAiNnB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { LABEL_CATEGORIES, getConfigPath } from '../config.js';
|
|
7
|
+
function tildify(p) {
|
|
8
|
+
const home = os.homedir();
|
|
9
|
+
if (p === home || p.startsWith(home + path.sep))
|
|
10
|
+
return '~' + p.slice(home.length);
|
|
11
|
+
return p;
|
|
12
|
+
}
|
|
13
|
+
export default function SettingsView({ scanResult, disabledTools, disabledCategories, onToggleTool, onToggleCategory, onClose, height, width, configRoots, hasCursorToken, }) {
|
|
14
|
+
const [cursor, setCursor] = useState(0);
|
|
15
|
+
const items = useMemo(() => {
|
|
16
|
+
const result = [];
|
|
17
|
+
const dim = '\u2502';
|
|
18
|
+
const branch = '\u251C\u2500\u2500';
|
|
19
|
+
const last = '\u2514\u2500\u2500';
|
|
20
|
+
const col = 22;
|
|
21
|
+
result.push({ kind: 'header', id: 'config-header', label: 'Configuration' });
|
|
22
|
+
result.push({
|
|
23
|
+
kind: 'info', id: 'config-path',
|
|
24
|
+
render: () => (_jsxs(Text, { children: [' ', _jsx(Text, { dimColor: true, children: 'Config'.padEnd(col) }), _jsx(Text, { children: tildify(getConfigPath()) })] })),
|
|
25
|
+
});
|
|
26
|
+
const projectCount = scanResult.projects?.length ?? 0;
|
|
27
|
+
result.push({
|
|
28
|
+
kind: 'info', id: 'projects-count',
|
|
29
|
+
render: () => (_jsxs(Text, { children: [' ', _jsx(Text, { dimColor: true, children: 'Discovered Projects'.padEnd(col) }), _jsx(Text, { children: projectCount > 0 ? String(projectCount) : '--' })] })),
|
|
30
|
+
});
|
|
31
|
+
result.push({
|
|
32
|
+
kind: 'info', id: 'cursor-token',
|
|
33
|
+
render: () => (_jsxs(Text, { children: [' ', _jsx(Text, { dimColor: true, children: 'Cursor Token'.padEnd(col) }), hasCursorToken
|
|
34
|
+
? _jsx(Text, { color: "green", children: "configured" })
|
|
35
|
+
: _jsx(Text, { dimColor: true, children: "not set" })] })),
|
|
36
|
+
});
|
|
37
|
+
if (!hasCursorToken) {
|
|
38
|
+
result.push({
|
|
39
|
+
kind: 'info', id: 'cursor-hint',
|
|
40
|
+
render: () => (_jsxs(Text, { dimColor: true, children: [' '.padEnd(col + 4), "agentlens config --set-cursor-token ", '<token>'] })),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
result.push({
|
|
44
|
+
kind: 'info', id: 'roots-header',
|
|
45
|
+
render: () => (_jsxs(Text, { children: [' ', _jsx(Text, { dimColor: true, children: 'Workspace Roots'.padEnd(col) }), configRoots.length > 0
|
|
46
|
+
? _jsx(Text, { children: configRoots.length })
|
|
47
|
+
: _jsx(Text, { dimColor: true, children: "none" })] })),
|
|
48
|
+
});
|
|
49
|
+
if (configRoots.length > 0) {
|
|
50
|
+
for (let i = 0; i < configRoots.length; i++) {
|
|
51
|
+
const isLast = i === configRoots.length - 1;
|
|
52
|
+
const prefix = isLast ? last : branch;
|
|
53
|
+
const idx = i;
|
|
54
|
+
result.push({
|
|
55
|
+
kind: 'info', id: `root-${i}`,
|
|
56
|
+
render: () => (_jsxs(Text, { children: [' ', _jsxs(Text, { dimColor: true, children: [' '.repeat(col), prefix, " "] }), _jsx(Text, { color: "white", children: tildify(configRoots[idx]) })] })),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
result.push({
|
|
62
|
+
kind: 'info', id: 'roots-hint',
|
|
63
|
+
render: () => (_jsxs(Text, { dimColor: true, children: [' '.padEnd(col + 4), "agentlens config --add-root ", '<path>'] })),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
result.push({
|
|
67
|
+
kind: 'info', id: 'config-spacer',
|
|
68
|
+
render: () => _jsx(Text, { children: ' ' }),
|
|
69
|
+
});
|
|
70
|
+
const toolNames = new Set();
|
|
71
|
+
for (const tc of [...scanResult.global, ...scanResult.project]) {
|
|
72
|
+
toolNames.add(tc.tool);
|
|
73
|
+
}
|
|
74
|
+
result.push({ kind: 'header', id: 'tools-header', label: 'Tools' });
|
|
75
|
+
for (const name of [...toolNames].sort()) {
|
|
76
|
+
result.push({ kind: 'toggle', type: 'tool', id: name, label: name });
|
|
77
|
+
}
|
|
78
|
+
const presentLabels = new Set();
|
|
79
|
+
for (const tc of [...scanResult.global, ...scanResult.project]) {
|
|
80
|
+
if (!tc.label)
|
|
81
|
+
continue;
|
|
82
|
+
for (const cat of LABEL_CATEGORIES) {
|
|
83
|
+
if (tc.label.startsWith(cat.match)) {
|
|
84
|
+
presentLabels.add(cat.id);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (presentLabels.size > 0) {
|
|
89
|
+
result.push({ kind: 'header', id: 'categories-header', label: 'Categories' });
|
|
90
|
+
for (const cat of LABEL_CATEGORIES) {
|
|
91
|
+
if (presentLabels.has(cat.id)) {
|
|
92
|
+
result.push({ kind: 'toggle', type: 'category', id: cat.id, label: cat.label });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}, [scanResult, configRoots, hasCursorToken]);
|
|
98
|
+
const selectableIndices = useMemo(() => {
|
|
99
|
+
const out = [];
|
|
100
|
+
items.forEach((item, i) => {
|
|
101
|
+
if (item.kind === 'toggle')
|
|
102
|
+
out.push(i);
|
|
103
|
+
});
|
|
104
|
+
return out;
|
|
105
|
+
}, [items]);
|
|
106
|
+
const selectablePos = selectableIndices.indexOf(selectableIndices.find((si) => si >= cursor) ?? selectableIndices[0]);
|
|
107
|
+
useInput((input, key) => {
|
|
108
|
+
if (key.escape || input === 'q') {
|
|
109
|
+
onClose();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (key.upArrow || input === 'k') {
|
|
113
|
+
const prev = selectablePos - 1;
|
|
114
|
+
if (prev >= 0)
|
|
115
|
+
setCursor(selectableIndices[prev]);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (key.downArrow || input === 'j') {
|
|
119
|
+
const next = selectablePos + 1;
|
|
120
|
+
if (next < selectableIndices.length)
|
|
121
|
+
setCursor(selectableIndices[next]);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (input === ' ' || key.return) {
|
|
125
|
+
const item = items[cursor];
|
|
126
|
+
if (item.kind !== 'toggle')
|
|
127
|
+
return;
|
|
128
|
+
if (item.type === 'tool')
|
|
129
|
+
onToggleTool(item.id);
|
|
130
|
+
else
|
|
131
|
+
onToggleCategory(item.id);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
const listHeight = Math.max(1, height - 6);
|
|
136
|
+
const scrollOffset = Math.max(0, Math.min(cursor - listHeight + 1, items.length - listHeight));
|
|
137
|
+
const visible = items.slice(scrollOffset, scrollOffset + listHeight);
|
|
138
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", paddingX: 1, paddingY: 1, height: height, width: width, children: [_jsx(Text, { bold: true, children: "SETTINGS" }), _jsx(Text, { children: ' ' }), _jsx(Box, { flexDirection: "column", flexGrow: 1, children: visible.map((item, i) => {
|
|
139
|
+
const globalIdx = scrollOffset + i;
|
|
140
|
+
if (item.kind === 'header') {
|
|
141
|
+
return _jsxs(Text, { bold: true, dimColor: true, children: [" ", item.label] }, item.id);
|
|
142
|
+
}
|
|
143
|
+
if (item.kind === 'info') {
|
|
144
|
+
return _jsx(Box, { children: item.render() }, item.id);
|
|
145
|
+
}
|
|
146
|
+
const isSelected = globalIdx === cursor;
|
|
147
|
+
const isDisabled = item.type === 'tool'
|
|
148
|
+
? disabledTools.has(item.id)
|
|
149
|
+
: disabledCategories.has(item.id);
|
|
150
|
+
const checkbox = isDisabled ? '[ ]' : '[x]';
|
|
151
|
+
const checkColor = isDisabled ? 'red' : 'green';
|
|
152
|
+
return (_jsx(Box, { children: _jsxs(Text, { inverse: isSelected, children: [' ', _jsx(Text, { color: checkColor, children: checkbox }), ' ', item.label, ' '] }) }, `${item.type}:${item.id}`));
|
|
153
|
+
}) }), _jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { dimColor: true, children: "j/k: navigate space/enter: toggle q/esc: back" }), items.length > listHeight && (_jsxs(Text, { dimColor: true, children: ["[", scrollOffset + 1, "-", Math.min(scrollOffset + listHeight, items.length), "/", items.length, "]"] }))] })] }));
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=SettingsView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsView.js","sourceRoot":"","sources":["../../src/ui/SettingsView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { TreeNode } from '../types.js';
|
|
3
|
+
interface TreeViewProps {
|
|
4
|
+
nodes: TreeNode[];
|
|
5
|
+
searchQuery: string;
|
|
6
|
+
onSelect: (node: TreeNode) => void;
|
|
7
|
+
onQuit: () => void;
|
|
8
|
+
onSearchActivate: () => void;
|
|
9
|
+
onSearchClear: () => void;
|
|
10
|
+
onToggleHelp: () => void;
|
|
11
|
+
onOpenSettings: () => void;
|
|
12
|
+
onCommandBarOpen: () => void;
|
|
13
|
+
active: boolean;
|
|
14
|
+
height: number;
|
|
15
|
+
width: number;
|
|
16
|
+
cursor: number;
|
|
17
|
+
onCursorChange: (cursor: number) => void;
|
|
18
|
+
scrollOffset: number;
|
|
19
|
+
onScrollOffsetChange: (offset: number) => void;
|
|
20
|
+
expandedOverride: Map<string, boolean>;
|
|
21
|
+
onExpandedOverrideChange: React.Dispatch<React.SetStateAction<Map<string, boolean>>>;
|
|
22
|
+
focusNodeId?: string;
|
|
23
|
+
}
|
|
24
|
+
export default function TreeView({ nodes, searchQuery, onSelect, onQuit, onSearchActivate, onSearchClear, onToggleHelp, onOpenSettings, onCommandBarOpen, active, height, width, cursor, onCursorChange: setCursor, scrollOffset, onScrollOffsetChange: setScrollOffset, expandedOverride, onExpandedOverrideChange: setExpandedOverride, focusNodeId, }: TreeViewProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=TreeView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeView.d.ts","sourceRoot":"","sources":["../../src/ui/TreeView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAI5C,UAAU,aAAa;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,wBAAwB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACrF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6DD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,MAAM,EACN,MAAM,EACN,KAAK,EACL,MAAM,EACN,cAAc,EAAE,SAAS,EACzB,YAAY,EACZ,oBAAoB,EAAE,eAAe,EACrC,gBAAgB,EAChB,wBAAwB,EAAE,mBAAmB,EAC7C,WAAW,GACZ,EAAE,aAAa,2CA6Mf"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo, useCallback, useEffect } from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { theme, tree } from './theme.js';
|
|
5
|
+
import cliTruncate from 'cli-truncate';
|
|
6
|
+
function renderNodeLine(node, prefix, isSelected, searchQuery, maxWidth, expanded) {
|
|
7
|
+
const q = searchQuery.toLowerCase();
|
|
8
|
+
const matchIdx = q.length > 0 ? node.label.toLowerCase().indexOf(q) : -1;
|
|
9
|
+
let mainStyle;
|
|
10
|
+
switch (node.type) {
|
|
11
|
+
case 'scope':
|
|
12
|
+
if (node.label.startsWith('CURRENT'))
|
|
13
|
+
mainStyle = theme.scopeCurrent;
|
|
14
|
+
else if (node.label.startsWith('GLOBAL'))
|
|
15
|
+
mainStyle = theme.scopeGlobal;
|
|
16
|
+
else
|
|
17
|
+
mainStyle = theme.scopeProject;
|
|
18
|
+
break;
|
|
19
|
+
case 'tool':
|
|
20
|
+
mainStyle = theme.toolName;
|
|
21
|
+
break;
|
|
22
|
+
case 'category':
|
|
23
|
+
mainStyle = theme.category;
|
|
24
|
+
break;
|
|
25
|
+
case 'entry':
|
|
26
|
+
case 'symlink-target':
|
|
27
|
+
mainStyle = theme.toolName;
|
|
28
|
+
break;
|
|
29
|
+
default: mainStyle = (s) => s;
|
|
30
|
+
}
|
|
31
|
+
let label;
|
|
32
|
+
if (isSelected) {
|
|
33
|
+
label = theme.selected(node.label);
|
|
34
|
+
}
|
|
35
|
+
else if (matchIdx >= 0 && q.length > 0) {
|
|
36
|
+
const before = node.label.slice(0, matchIdx);
|
|
37
|
+
const match = node.label.slice(matchIdx, matchIdx + q.length);
|
|
38
|
+
const after = node.label.slice(matchIdx + q.length);
|
|
39
|
+
label = mainStyle(before) + theme.searchHighlight(match) + mainStyle(after);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
label = mainStyle(node.label);
|
|
43
|
+
}
|
|
44
|
+
let line = theme.treeLine(prefix) + label;
|
|
45
|
+
if (node.type === 'scope' && node.hasChildren && !expanded && !isSelected) {
|
|
46
|
+
line += ' ' + theme.dim('(l to expand)');
|
|
47
|
+
}
|
|
48
|
+
if (node.pathLabel && !isSelected) {
|
|
49
|
+
line += ' ' + theme.path(node.pathLabel);
|
|
50
|
+
}
|
|
51
|
+
if (node.symlinkTarget) {
|
|
52
|
+
line += ' ' + theme.symlinkArrow + ' ' + theme.symlinkTarget(node.symlinkTarget);
|
|
53
|
+
}
|
|
54
|
+
if (node.description && !isSelected) {
|
|
55
|
+
const truncated = node.description.length > 50
|
|
56
|
+
? node.description.slice(0, 47) + '...'
|
|
57
|
+
: node.description;
|
|
58
|
+
line += ' ' + theme.description(truncated);
|
|
59
|
+
}
|
|
60
|
+
return _jsx(Text, { children: cliTruncate(line, maxWidth) });
|
|
61
|
+
}
|
|
62
|
+
export default function TreeView({ nodes, searchQuery, onSelect, onQuit, onSearchActivate, onSearchClear, onToggleHelp, onOpenSettings, onCommandBarOpen, active, height, width, cursor, onCursorChange: setCursor, scrollOffset, onScrollOffsetChange: setScrollOffset, expandedOverride, onExpandedOverrideChange: setExpandedOverride, focusNodeId, }) {
|
|
63
|
+
const [pendingG, setPendingG] = useState(false);
|
|
64
|
+
const isExpanded = useCallback((node) => {
|
|
65
|
+
const over = expandedOverride.get(node.id);
|
|
66
|
+
if (over !== undefined)
|
|
67
|
+
return over;
|
|
68
|
+
return node.expanded;
|
|
69
|
+
}, [expandedOverride]);
|
|
70
|
+
const flattened = useMemo(() => {
|
|
71
|
+
const out = [];
|
|
72
|
+
function collect(ns, indent) {
|
|
73
|
+
for (let i = 0; i < ns.length; i++) {
|
|
74
|
+
const node = ns[i];
|
|
75
|
+
const isLast = i === ns.length - 1;
|
|
76
|
+
const branch = isLast ? tree.last : tree.branch;
|
|
77
|
+
out.push({ node, indent, branch });
|
|
78
|
+
if (node.children.length > 0 && isExpanded(node)) {
|
|
79
|
+
collect(node.children, indent + (isLast ? tree.space : tree.pipe));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
collect(nodes, '');
|
|
84
|
+
return out;
|
|
85
|
+
}, [nodes, expandedOverride, isExpanded]);
|
|
86
|
+
const visibleHeight = Math.max(0, height);
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
if (flattened.length === 0)
|
|
89
|
+
return;
|
|
90
|
+
const idx = Math.min(cursor, flattened.length - 1);
|
|
91
|
+
setCursor(idx);
|
|
92
|
+
if (idx < scrollOffset)
|
|
93
|
+
setScrollOffset(idx);
|
|
94
|
+
else if (idx >= scrollOffset + visibleHeight)
|
|
95
|
+
setScrollOffset(idx - visibleHeight + 1);
|
|
96
|
+
}, [flattened.length, visibleHeight]);
|
|
97
|
+
useEffect(() => {
|
|
98
|
+
if (!focusNodeId || flattened.length === 0)
|
|
99
|
+
return;
|
|
100
|
+
const idx = flattened.findIndex((f) => f.node.id === focusNodeId);
|
|
101
|
+
if (idx >= 0) {
|
|
102
|
+
setCursor(idx);
|
|
103
|
+
if (idx < scrollOffset) {
|
|
104
|
+
setScrollOffset(idx);
|
|
105
|
+
}
|
|
106
|
+
else if (idx >= scrollOffset + visibleHeight) {
|
|
107
|
+
setScrollOffset(Math.min(Math.max(0, flattened.length - visibleHeight), idx - visibleHeight + 1));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}, [focusNodeId]);
|
|
111
|
+
const moveCursor = useCallback((target) => {
|
|
112
|
+
const clamped = Math.max(0, Math.min(flattened.length - 1, target));
|
|
113
|
+
setCursor(clamped);
|
|
114
|
+
if (clamped < scrollOffset) {
|
|
115
|
+
setScrollOffset(clamped);
|
|
116
|
+
}
|
|
117
|
+
else if (clamped >= scrollOffset + visibleHeight) {
|
|
118
|
+
setScrollOffset(Math.min(Math.max(0, flattened.length - visibleHeight), clamped - visibleHeight + 1));
|
|
119
|
+
}
|
|
120
|
+
}, [flattened.length, scrollOffset, visibleHeight, setCursor, setScrollOffset]);
|
|
121
|
+
useInput((input, key) => {
|
|
122
|
+
if (!active)
|
|
123
|
+
return;
|
|
124
|
+
if (pendingG) {
|
|
125
|
+
setPendingG(false);
|
|
126
|
+
if (input === 'g') {
|
|
127
|
+
moveCursor(0);
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (key.escape) {
|
|
132
|
+
if (searchQuery.length > 0) {
|
|
133
|
+
onSearchClear();
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (input === 'q') {
|
|
138
|
+
onQuit();
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (input === '?') {
|
|
142
|
+
onToggleHelp();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (input === '/') {
|
|
146
|
+
onSearchActivate();
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (input === ':') {
|
|
150
|
+
onCommandBarOpen();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (key.upArrow || input === 'k') {
|
|
154
|
+
moveCursor(cursor - 1);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (key.downArrow || input === 'j') {
|
|
158
|
+
moveCursor(cursor + 1);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (input === 'G') {
|
|
162
|
+
moveCursor(flattened.length - 1);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (input === 'g') {
|
|
166
|
+
setPendingG(true);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (input === 'c') {
|
|
170
|
+
const idx = flattened.findIndex((f) => f.node.id.startsWith('scope:CURRENT'));
|
|
171
|
+
if (idx >= 0)
|
|
172
|
+
moveCursor(idx);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (input === 's') {
|
|
176
|
+
onOpenSettings();
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (key.ctrl && input === 'd') {
|
|
180
|
+
moveCursor(cursor + Math.floor(visibleHeight / 2));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (key.ctrl && input === 'u') {
|
|
184
|
+
moveCursor(cursor - Math.floor(visibleHeight / 2));
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (key.leftArrow || input === 'h') {
|
|
188
|
+
const item = flattened[cursor];
|
|
189
|
+
if (!item)
|
|
190
|
+
return;
|
|
191
|
+
const { node } = item;
|
|
192
|
+
if (node.children.length > 0 && isExpanded(node)) {
|
|
193
|
+
setExpandedOverride((prev) => {
|
|
194
|
+
const next = new Map(prev);
|
|
195
|
+
next.set(node.id, false);
|
|
196
|
+
return next;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
let parentIdx = -1;
|
|
201
|
+
for (let i = cursor - 1; i >= 0; i--) {
|
|
202
|
+
if (flattened[i].node.depth < node.depth) {
|
|
203
|
+
parentIdx = i;
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (parentIdx >= 0)
|
|
208
|
+
setCursor(parentIdx);
|
|
209
|
+
}
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (key.rightArrow || input === 'l') {
|
|
213
|
+
const item = flattened[cursor];
|
|
214
|
+
if (!item)
|
|
215
|
+
return;
|
|
216
|
+
const { node } = item;
|
|
217
|
+
if (node.children.length > 0 && !isExpanded(node)) {
|
|
218
|
+
setExpandedOverride((prev) => {
|
|
219
|
+
const next = new Map(prev);
|
|
220
|
+
next.set(node.id, true);
|
|
221
|
+
return next;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (key.return) {
|
|
227
|
+
const item = flattened[cursor];
|
|
228
|
+
if (item)
|
|
229
|
+
onSelect(item.node);
|
|
230
|
+
}
|
|
231
|
+
}, { isActive: active });
|
|
232
|
+
const visible = flattened.slice(scrollOffset, scrollOffset + visibleHeight);
|
|
233
|
+
return (_jsx(Box, { flexDirection: "column", flexGrow: 1, width: width, overflow: "hidden", children: visible.map(({ node, indent, branch }, i) => {
|
|
234
|
+
const globalIdx = scrollOffset + i;
|
|
235
|
+
const isSelected = globalIdx === cursor;
|
|
236
|
+
const fullPrefix = indent + branch;
|
|
237
|
+
return (_jsx(Box, { children: renderNodeLine(node, fullPrefix, isSelected, searchQuery, width, isExpanded(node)) }, node.id));
|
|
238
|
+
}) }));
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=TreeView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeView.js","sourceRoot":"","sources":["../../src/ui/TreeView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare const theme: {
|
|
2
|
+
readonly title: import("chalk").ChalkInstance;
|
|
3
|
+
readonly scopeHeader: import("chalk").ChalkInstance;
|
|
4
|
+
readonly scopeGlobal: import("chalk").ChalkInstance;
|
|
5
|
+
readonly scopeCurrent: import("chalk").ChalkInstance;
|
|
6
|
+
readonly scopeProject: import("chalk").ChalkInstance;
|
|
7
|
+
readonly toolName: import("chalk").ChalkInstance;
|
|
8
|
+
readonly category: import("chalk").ChalkInstance;
|
|
9
|
+
readonly categoryExtra: import("chalk").ChalkInstance;
|
|
10
|
+
readonly path: import("chalk").ChalkInstance;
|
|
11
|
+
readonly symlinkArrow: string;
|
|
12
|
+
readonly symlinkTarget: import("chalk").ChalkInstance;
|
|
13
|
+
readonly description: import("chalk").ChalkInstance;
|
|
14
|
+
readonly notFound: import("chalk").ChalkInstance;
|
|
15
|
+
readonly treeLine: import("chalk").ChalkInstance;
|
|
16
|
+
readonly selected: import("chalk").ChalkInstance;
|
|
17
|
+
readonly searchHighlight: import("chalk").ChalkInstance;
|
|
18
|
+
readonly dim: import("chalk").ChalkInstance;
|
|
19
|
+
readonly error: import("chalk").ChalkInstance;
|
|
20
|
+
readonly warn: import("chalk").ChalkInstance;
|
|
21
|
+
readonly info: import("chalk").ChalkInstance;
|
|
22
|
+
};
|
|
23
|
+
export declare const tree: {
|
|
24
|
+
readonly branch: "├── ";
|
|
25
|
+
readonly last: "└── ";
|
|
26
|
+
readonly pipe: "│ ";
|
|
27
|
+
readonly space: " ";
|
|
28
|
+
readonly arrow: " --> ";
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;CAqBR,CAAC;AAEX,eAAO,MAAM,IAAI;;;;;;CAMP,CAAC"}
|
package/dist/ui/theme.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export const theme = {
|
|
3
|
+
title: chalk.bold,
|
|
4
|
+
scopeHeader: chalk.bold.white,
|
|
5
|
+
scopeGlobal: chalk.bold.blue,
|
|
6
|
+
scopeCurrent: chalk.bold.green,
|
|
7
|
+
scopeProject: chalk.bold.white,
|
|
8
|
+
toolName: chalk.bold.white,
|
|
9
|
+
category: chalk.yellow,
|
|
10
|
+
categoryExtra: chalk.dim.yellow,
|
|
11
|
+
path: chalk.dim,
|
|
12
|
+
symlinkArrow: chalk.cyan('-->'),
|
|
13
|
+
symlinkTarget: chalk.cyan,
|
|
14
|
+
description: chalk.gray,
|
|
15
|
+
notFound: chalk.dim.italic,
|
|
16
|
+
treeLine: chalk.dim,
|
|
17
|
+
selected: chalk.inverse,
|
|
18
|
+
searchHighlight: chalk.bold.underline,
|
|
19
|
+
dim: chalk.dim,
|
|
20
|
+
error: chalk.red.bold,
|
|
21
|
+
warn: chalk.yellow.bold,
|
|
22
|
+
info: chalk.blue.bold,
|
|
23
|
+
};
|
|
24
|
+
export const tree = {
|
|
25
|
+
branch: '├── ',
|
|
26
|
+
last: '└── ',
|
|
27
|
+
pipe: '│ ',
|
|
28
|
+
space: ' ',
|
|
29
|
+
arrow: ' --> ',
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,KAAK,CAAC,IAAI;IACjB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;IAC7B,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;IAC5B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;IAC9B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;IAC9B,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;IAC1B,QAAQ,EAAE,KAAK,CAAC,MAAM;IACtB,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM;IAC/B,IAAI,EAAE,KAAK,CAAC,GAAG;IACf,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,aAAa,EAAE,KAAK,CAAC,IAAI;IACzB,WAAW,EAAE,KAAK,CAAC,IAAI;IACvB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM;IAC1B,QAAQ,EAAE,KAAK,CAAC,GAAG;IACnB,QAAQ,EAAE,KAAK,CAAC,OAAO;IACvB,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;IACrC,GAAG,EAAE,KAAK,CAAC,GAAG;IACd,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI;IACrB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;IACvB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;CACb,CAAC;AAEX,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,OAAO;CACN,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tasszz2k/agentlens",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "CLI tool to scan agent configuration, track usage costs, and inspect skills/rules/MCP across Cursor, Claude Code, Codex, and Copilot",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"agentlens": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md",
|
|
12
|
+
"LICENSE",
|
|
13
|
+
"package.json"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"dev": "tsx src/cli.ts",
|
|
18
|
+
"start": "node dist/cli.js",
|
|
19
|
+
"prepublishOnly": "npm run build"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"ai",
|
|
23
|
+
"agent",
|
|
24
|
+
"cli",
|
|
25
|
+
"cursor",
|
|
26
|
+
"claude",
|
|
27
|
+
"codex",
|
|
28
|
+
"copilot"
|
|
29
|
+
],
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"author": "Tass Dinh",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/tasszz2k/agent-lens.git"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/tasszz2k/agent-lens",
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"chalk": "^5.6.2",
|
|
42
|
+
"cli-truncate": "^5.2.0",
|
|
43
|
+
"commander": "^14.0.3",
|
|
44
|
+
"gray-matter": "^4.0.3",
|
|
45
|
+
"ink": "^6.8.0",
|
|
46
|
+
"react": "^19.2.4",
|
|
47
|
+
"smol-toml": "^1.6.0"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/node": "^25.3.5",
|
|
51
|
+
"@types/react": "^19.2.14",
|
|
52
|
+
"tsx": "^4.21.0",
|
|
53
|
+
"typescript": "^5.9.3"
|
|
54
|
+
}
|
|
55
|
+
}
|