@heyhuynhgiabuu/pi-pretty 0.6.23 → 0.6.25
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/CHANGELOG.md +24 -0
- package/README.md +51 -1
- package/dist/autocomplete.js +1 -4
- package/dist/autocomplete.js.map +1 -1
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +141 -118
- package/dist/config.js.map +1 -1
- package/dist/fff-helpers.js +2 -7
- package/dist/fff-helpers.js.map +1 -1
- package/dist/fff.js +16 -23
- package/dist/fff.js.map +1 -1
- package/dist/find-glob.js +2 -6
- package/dist/find-glob.js.map +1 -1
- package/dist/helpers.js +11 -21
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +182 -59
- package/dist/index.js.map +1 -1
- package/dist/notices.js +1 -4
- package/dist/notices.js.map +1 -1
- package/dist/render.js +78 -96
- package/dist/render.js.map +1 -1
- package/dist/session-color.d.ts +30 -0
- package/dist/session-color.d.ts.map +1 -0
- package/dist/session-color.js +170 -0
- package/dist/session-color.js.map +1 -0
- package/dist/tools/bash.js +26 -29
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/find.js +31 -34
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/grep.js +22 -25
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/labels.js +1 -4
- package/dist/tools/labels.js.map +1 -1
- package/dist/tools/ls.js +18 -21
- package/dist/tools/ls.js.map +1 -1
- package/dist/tools/metrics.js +4 -7
- package/dist/tools/metrics.js.map +1 -1
- package/dist/tools/read.js +35 -38
- package/dist/tools/read.js.map +1 -1
- package/dist/tui-text.js +5 -9
- package/dist/tui-text.js.map +1 -1
- package/dist/types.js +1 -2
- package/dist/types.js.map +1 -1
- package/dist/working-indicator.d.ts +184 -0
- package/dist/working-indicator.d.ts.map +1 -0
- package/dist/working-indicator.js +524 -0
- package/dist/working-indicator.js.map +1 -0
- package/package.json +7 -6
- package/src/config.ts +48 -0
- package/src/index.ts +177 -2
- package/src/session-color.ts +172 -0
- package/src/working-indicator.ts +691 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-session accent color — port of oh-my-pi's `utils/session-color.ts`
|
|
3
|
+
* (OKLCH essence, no native dependencies).
|
|
4
|
+
*
|
|
5
|
+
* omp derives a stable per-session accent: the session name hash picks only
|
|
6
|
+
* the *hue* (djb2, walked along a dark-theme-safe arc that excludes hues
|
|
7
|
+
* which darken badly); lightness and chroma live in OKLCH so every hue
|
|
8
|
+
* renders with equal perceived weight (the reason omp carries the theme
|
|
9
|
+
* accent through per-hue gamut cusps — constant OKLCH L/C achieves the same
|
|
10
|
+
* uniformity without theme introspection, which pi's extension API does not
|
|
11
|
+
* expose). The spinner variant dims the accent exactly like omp's
|
|
12
|
+
* `adjustHsv(hex, { s: 0.55, v: 0.65 })`.
|
|
13
|
+
*
|
|
14
|
+
* Skipped from the omp original (requires host theme internals pi does not
|
|
15
|
+
* expose to extensions): per-hue gamut cusps, WCAG contrast bisection against
|
|
16
|
+
* the surface, hue-collision avoidance against theme colors.
|
|
17
|
+
*/
|
|
18
|
+
// ─── omp session-color.ts constants ──────────────────────────────────────────
|
|
19
|
+
/** omp MIN_CHROMA / MAX_CHROMA: readable floor, "not a highlighter set" ceiling. */
|
|
20
|
+
const MIN_CHROMA = 0.05;
|
|
21
|
+
const MAX_CHROMA = 0.21;
|
|
22
|
+
/** omp dark-theme lightness band (visible on dark surfaces). */
|
|
23
|
+
const LIGHTNESS = 0.75;
|
|
24
|
+
/**
|
|
25
|
+
* Dark-theme hue arc. omp computes these intervals from per-hue gamut cusps;
|
|
26
|
+
* its doc comment pins the always-excluded bands — the yellow/chartreuse core
|
|
27
|
+
* (≈94–138°, darkens to mustard) and the over-light cyan peak (≈158–200°) —
|
|
28
|
+
* for every theme, so the arc below hardcodes the full wheel minus those two.
|
|
29
|
+
*/
|
|
30
|
+
const DARK_HUE_INTERVALS = [
|
|
31
|
+
[0, 93],
|
|
32
|
+
[139, 157],
|
|
33
|
+
[201, 359],
|
|
34
|
+
];
|
|
35
|
+
const ARC_LENGTH = DARK_HUE_INTERVALS.reduce((n, [a, b]) => n + (b - a + 1), 0);
|
|
36
|
+
/** omp nameToHash: stable 32-bit djb2. */
|
|
37
|
+
function nameToHash(name) {
|
|
38
|
+
let hash = 5381;
|
|
39
|
+
for (let i = 0; i < name.length; i++) {
|
|
40
|
+
hash = ((hash << 5) + hash) ^ name.charCodeAt(i);
|
|
41
|
+
hash = hash >>> 0;
|
|
42
|
+
}
|
|
43
|
+
return hash;
|
|
44
|
+
}
|
|
45
|
+
/** Map a name to its OKLCH hue on the dark-safe arc. */
|
|
46
|
+
export function sessionAccentHue(name) {
|
|
47
|
+
let pos = nameToHash(name) % ARC_LENGTH;
|
|
48
|
+
for (const [a, b] of DARK_HUE_INTERVALS) {
|
|
49
|
+
const n = b - a + 1;
|
|
50
|
+
if (pos < n)
|
|
51
|
+
return a + pos;
|
|
52
|
+
pos -= n;
|
|
53
|
+
}
|
|
54
|
+
return DARK_HUE_INTERVALS[DARK_HUE_INTERVALS.length - 1]?.[1] ?? 0;
|
|
55
|
+
}
|
|
56
|
+
// ─── OKLCH ↔ sRGB (Björn Ottosson's published matrices) ─────────────────────
|
|
57
|
+
function oklchToSrgb(l, c, hDeg) {
|
|
58
|
+
const h = (hDeg * Math.PI) / 180;
|
|
59
|
+
const a = c * Math.cos(h);
|
|
60
|
+
const b = c * Math.sin(h);
|
|
61
|
+
const l_ = l + 0.3963377774 * a + 0.2158037573 * b;
|
|
62
|
+
const m_ = l - 0.1055613458 * a - 0.0638541728 * b;
|
|
63
|
+
const s_ = l - 0.0894841775 * a - 1.291485548 * b;
|
|
64
|
+
const ll = l_ * l_ * l_;
|
|
65
|
+
const mm = m_ * m_ * m_;
|
|
66
|
+
const ss = s_ * s_ * s_;
|
|
67
|
+
return [
|
|
68
|
+
4.0767416621 * ll - 3.3077115913 * mm + 0.2309699292 * ss,
|
|
69
|
+
-1.2684380046 * ll + 2.6097574011 * mm - 0.3413193965 * ss,
|
|
70
|
+
-0.0041960863 * ll - 0.7034186147 * mm + 1.707614701 * ss,
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
const transfer = (x) => (x <= 0.0031308 ? 12.92 * x : 1.055 * x ** (1 / 2.4) - 0.055);
|
|
74
|
+
const clamp01 = (x) => Math.max(0, Math.min(1, x));
|
|
75
|
+
/** Largest chroma ≤ `c` whose color is inside the sRGB gamut (chroma bisection). */
|
|
76
|
+
function clampChroma(l, c, hDeg, iterations = 12) {
|
|
77
|
+
let lo = 0;
|
|
78
|
+
let hi = c;
|
|
79
|
+
const inGamut = (chroma) => oklchToSrgb(l, chroma, hDeg).every((x) => x >= -1e-4 && x <= 1 + 1e-4);
|
|
80
|
+
if (inGamut(hi))
|
|
81
|
+
return hi;
|
|
82
|
+
for (let i = 0; i < iterations; i++) {
|
|
83
|
+
const mid = (lo + hi) / 2;
|
|
84
|
+
if (inGamut(mid))
|
|
85
|
+
lo = mid;
|
|
86
|
+
else
|
|
87
|
+
hi = mid;
|
|
88
|
+
}
|
|
89
|
+
return lo;
|
|
90
|
+
}
|
|
91
|
+
function oklchToHex(l, c, hDeg) {
|
|
92
|
+
const chroma = clampChroma(l, c, hDeg);
|
|
93
|
+
const [r, g, b] = oklchToSrgb(l, chroma, hDeg);
|
|
94
|
+
const hex = (x) => Math.round(clamp01(transfer(clamp01(x))) * 255)
|
|
95
|
+
.toString(16)
|
|
96
|
+
.padStart(2, "0");
|
|
97
|
+
return `#${hex(r)}${hex(g)}${hex(b)}`;
|
|
98
|
+
}
|
|
99
|
+
// ─── Public surface ──────────────────────────────────────────────────────────
|
|
100
|
+
/** Stable per-session accent hex at a fixed OKLCH lightness/chroma band. */
|
|
101
|
+
export function sessionAccentHex(name) {
|
|
102
|
+
return oklchToHex(LIGHTNESS, Math.max(MIN_CHROMA, Math.min(MAX_CHROMA, 0.14)), sessionAccentHue(name));
|
|
103
|
+
}
|
|
104
|
+
function hexToRgb(hex) {
|
|
105
|
+
const m = hex.trim().match(/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
|
|
106
|
+
if (!m)
|
|
107
|
+
return undefined;
|
|
108
|
+
return [Number.parseInt(m[1], 16), Number.parseInt(m[2], 16), Number.parseInt(m[3], 16)];
|
|
109
|
+
}
|
|
110
|
+
/** RGB(0-1) → HSV; exactly the inverse legs omp's adjustHsv needs. */
|
|
111
|
+
function rgbToHsv(r, g, b) {
|
|
112
|
+
const max = Math.max(r, g, b);
|
|
113
|
+
const min = Math.min(r, g, b);
|
|
114
|
+
const d = max - min;
|
|
115
|
+
let h;
|
|
116
|
+
if (d === 0)
|
|
117
|
+
h = 0;
|
|
118
|
+
else if (max === r)
|
|
119
|
+
h = ((g - b) / d) % 6;
|
|
120
|
+
else if (max === g)
|
|
121
|
+
h = (b - r) / d + 2;
|
|
122
|
+
else
|
|
123
|
+
h = (r - g) / d + 4;
|
|
124
|
+
h = (h * 60 + 360) % 360;
|
|
125
|
+
return [h, max === 0 ? 0 : d / max, max];
|
|
126
|
+
}
|
|
127
|
+
function hsvToHex(h, s, v) {
|
|
128
|
+
const c = v * s;
|
|
129
|
+
const hp = h / 60;
|
|
130
|
+
const x = c * (1 - Math.abs((hp % 2) - 1));
|
|
131
|
+
const m = v - c;
|
|
132
|
+
let rgb;
|
|
133
|
+
if (hp < 1)
|
|
134
|
+
rgb = [c, x, 0];
|
|
135
|
+
else if (hp < 2)
|
|
136
|
+
rgb = [x, c, 0];
|
|
137
|
+
else if (hp < 3)
|
|
138
|
+
rgb = [0, c, x];
|
|
139
|
+
else if (hp < 4)
|
|
140
|
+
rgb = [0, x, c];
|
|
141
|
+
else if (hp < 5)
|
|
142
|
+
rgb = [x, 0, c];
|
|
143
|
+
else
|
|
144
|
+
rgb = [c, 0, x];
|
|
145
|
+
const hex = (x) => Math.round((x + m) * 255)
|
|
146
|
+
.toString(16)
|
|
147
|
+
.padStart(2, "0");
|
|
148
|
+
return `#${hex(rgb[0])}${hex(rgb[1])}${hex(rgb[2])}`;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Dim variant for the spinner — identical transform to omp's
|
|
152
|
+
* `adjustHsv(hex, { s: 0.55, v: 0.65 })`. Unparseable input returns
|
|
153
|
+
* the input unchanged.
|
|
154
|
+
*/
|
|
155
|
+
export function dimAccentHex(hex) {
|
|
156
|
+
const rgb = hexToRgb(hex);
|
|
157
|
+
if (!rgb)
|
|
158
|
+
return hex;
|
|
159
|
+
const [r, g, b] = rgb.map((x) => x / 255);
|
|
160
|
+
const [h, s, v] = rgbToHsv(r, g, b);
|
|
161
|
+
return hsvToHex(h, s * 0.55, v * 0.65);
|
|
162
|
+
}
|
|
163
|
+
/** Truecolor ANSI foreground open sequence for a `#rrggbb` hex. */
|
|
164
|
+
export function hexToAnsiFg(hex) {
|
|
165
|
+
const rgb = hexToRgb(hex);
|
|
166
|
+
if (!rgb)
|
|
167
|
+
return "";
|
|
168
|
+
return `\x1b[38;2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=session-color.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-color.js","sourceRoot":"","sources":["../src/session-color.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/bash.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/* pi-pretty: bash tool -- command execution with styled output. */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
function registerBashTool(pi, _cwd, _fffService, sdkTool, TextComp) {
|
|
11
|
-
const TC = (0, tui_text_js_1.resolveTextCtor)(TextComp);
|
|
2
|
+
import { resolveBaseBackground, TOOL_RESULT_INDENT, termWidth } from "../config.js";
|
|
3
|
+
import { compactErrorLines, inferBashExitCode, stripBashExitStatusLine } from "../helpers.js";
|
|
4
|
+
import { fillToolBackground, renderToolDuration, renderToolError } from "../render.js";
|
|
5
|
+
import { resolveTextCtor } from "../tui-text.js";
|
|
6
|
+
import { wrapExecuteWithMetrics } from "./metrics.js";
|
|
7
|
+
export function registerBashTool(pi, _cwd, _fffService, sdkTool, TextComp) {
|
|
8
|
+
const TC = resolveTextCtor(TextComp);
|
|
12
9
|
pi.registerTool({
|
|
13
10
|
name: "bash",
|
|
14
11
|
label: "Bash",
|
|
@@ -22,7 +19,7 @@ function registerBashTool(pi, _cwd, _fffService, sdkTool, TextComp) {
|
|
|
22
19
|
],
|
|
23
20
|
parameters: sdkTool.parameters,
|
|
24
21
|
renderShell: "self",
|
|
25
|
-
execute:
|
|
22
|
+
execute: wrapExecuteWithMetrics(async (tid, params, sig, _upd, ctx) => {
|
|
26
23
|
try {
|
|
27
24
|
return (await sdkTool.execute(tid, params, sig, undefined, ctx));
|
|
28
25
|
}
|
|
@@ -41,10 +38,10 @@ function registerBashTool(pi, _cwd, _fffService, sdkTool, TextComp) {
|
|
|
41
38
|
}
|
|
42
39
|
}),
|
|
43
40
|
renderCall(args, theme, ctx) {
|
|
44
|
-
|
|
41
|
+
resolveBaseBackground(theme);
|
|
45
42
|
const text = ctx.lastComponent ?? new TC("", 0, 0);
|
|
46
43
|
const t = typeof args.timeout === "number" ? ` ${theme.fg("muted", `(timeout ${args.timeout}s)`)}` : "";
|
|
47
|
-
const tw =
|
|
44
|
+
const tw = termWidth() || 80;
|
|
48
45
|
const rawCmd = String(args.command ?? "");
|
|
49
46
|
const headerBudget = ctx.expanded ? tw : Math.max(8, tw - 20);
|
|
50
47
|
const cmd = rawCmd.length === 0
|
|
@@ -53,11 +50,11 @@ function registerBashTool(pi, _cwd, _fffService, sdkTool, TextComp) {
|
|
|
53
50
|
? `${rawCmd.slice(0, Math.max(1, headerBudget))}…`
|
|
54
51
|
: rawCmd;
|
|
55
52
|
const commandLabel = theme.fg(ctx.isError ? "error" : "toolTitle", theme.bold(`$ ${cmd}`));
|
|
56
|
-
text.setText(
|
|
53
|
+
text.setText(fillToolBackground(`\n${TOOL_RESULT_INDENT}${commandLabel}${t}\n`, undefined, ctx.expanded ? undefined : tw));
|
|
57
54
|
return text;
|
|
58
55
|
},
|
|
59
56
|
renderResult(result, _opt, theme, ctx) {
|
|
60
|
-
|
|
57
|
+
resolveBaseBackground(theme);
|
|
61
58
|
const text = ctx.lastComponent ?? new TC("", 0, 0);
|
|
62
59
|
const details = result.details;
|
|
63
60
|
const tc = getText(result);
|
|
@@ -67,37 +64,37 @@ function registerBashTool(pi, _cwd, _fffService, sdkTool, TextComp) {
|
|
|
67
64
|
? {
|
|
68
65
|
_type: "bashResult",
|
|
69
66
|
text: tc || "Error",
|
|
70
|
-
exitCode:
|
|
67
|
+
exitCode: inferBashExitCode(tc, ctx.isError ? 1 : 0),
|
|
71
68
|
command: "",
|
|
72
69
|
}
|
|
73
70
|
: undefined;
|
|
74
71
|
if (d?._type === "bashResult") {
|
|
75
72
|
const isErr = ctx.isError || (d.exitCode !== null && d.exitCode !== 0);
|
|
76
|
-
const cleaned =
|
|
77
|
-
const output = isErr ?
|
|
73
|
+
const cleaned = stripBashExitStatusLine(d.text);
|
|
74
|
+
const output = isErr ? compactErrorLines(cleaned).join("\n") : cleaned;
|
|
78
75
|
const lineCount = output.split("\n").length;
|
|
79
|
-
const info = [`${lineCount} lines`,
|
|
76
|
+
const info = [`${lineCount} lines`, renderToolDuration(result), !ctx.expanded ? "ctrl+o to expand" : ""]
|
|
80
77
|
.filter(Boolean)
|
|
81
78
|
.map((part) => theme.fg("dim", part))
|
|
82
79
|
.join(theme.fg("dim", " · "));
|
|
83
|
-
const header = `${
|
|
84
|
-
const rw =
|
|
80
|
+
const header = `${TOOL_RESULT_INDENT}${info}`;
|
|
81
|
+
const rw = termWidth();
|
|
85
82
|
const renderFn = (w) => {
|
|
86
83
|
if (!ctx.expanded)
|
|
87
|
-
return
|
|
84
|
+
return fillToolBackground(`${header}\n`, undefined, w);
|
|
88
85
|
if (!output.trim())
|
|
89
|
-
return
|
|
86
|
+
return fillToolBackground(`${header}\n`, undefined, w);
|
|
90
87
|
const show = output.split("\n");
|
|
91
|
-
const out = [header, "", ...show.map((line) => `${
|
|
92
|
-
return
|
|
88
|
+
const out = [header, "", ...show.map((line) => `${TOOL_RESULT_INDENT}${line}`)];
|
|
89
|
+
return fillToolBackground(`${out.join("\n")}\n`, undefined, w);
|
|
93
90
|
};
|
|
94
91
|
text.setText(renderFn(rw));
|
|
95
92
|
const baseRender = typeof text.render === "function" ? text.render.bind(text) : null;
|
|
96
93
|
if (baseRender) {
|
|
97
94
|
let key;
|
|
98
95
|
text.render = (w) => {
|
|
99
|
-
const width = Math.max(1, Math.floor(w ||
|
|
100
|
-
const k = `bash:${ctx.expanded ? "1" : "0"}:${width}:${d.exitCode ?? "killed"}:${output.length}:${
|
|
96
|
+
const width = Math.max(1, Math.floor(w || termWidth()));
|
|
97
|
+
const k = `bash:${ctx.expanded ? "1" : "0"}:${width}:${d.exitCode ?? "killed"}:${output.length}:${renderToolDuration(result)}`;
|
|
101
98
|
if (key !== k) {
|
|
102
99
|
text.setText(renderFn(width));
|
|
103
100
|
key = k;
|
|
@@ -108,11 +105,11 @@ function registerBashTool(pi, _cwd, _fffService, sdkTool, TextComp) {
|
|
|
108
105
|
return text;
|
|
109
106
|
}
|
|
110
107
|
if (ctx.isError) {
|
|
111
|
-
text.setText(
|
|
108
|
+
text.setText(renderToolError(tc || "Error", theme));
|
|
112
109
|
return text;
|
|
113
110
|
}
|
|
114
111
|
const fc = result.content?.[0];
|
|
115
|
-
text.setText(
|
|
112
|
+
text.setText(fillToolBackground(`${TOOL_RESULT_INDENT}${theme.fg("dim", fc && "text" in fc ? String(fc.text).slice(0, 120) : "done")}`));
|
|
116
113
|
return text;
|
|
117
114
|
},
|
|
118
115
|
});
|
package/dist/tools/bash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/find.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/* pi-pretty: find tool -- FFF-backed file search with SDK (fd) fallback. */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const tui_text_js_1 = require("../tui-text.js");
|
|
12
|
-
const metrics_js_1 = require("./metrics.js");
|
|
2
|
+
import { isAbsolute, relative } from "node:path";
|
|
3
|
+
import { BG_ERROR, FG_DIM, RST, resolveBaseBackground, TOOL_RESULT_INDENT } from "../config.js";
|
|
4
|
+
import { isLikelyGlobPattern, normalizeFindGlobPattern } from "../find-glob.js";
|
|
5
|
+
import { shortPath } from "../helpers.js";
|
|
6
|
+
import { NOTICE_PARTIAL_FILE_INDEX } from "../notices.js";
|
|
7
|
+
import { fillToolBackground, renderFindResults, renderToolDuration, renderToolError } from "../render.js";
|
|
8
|
+
import { resolveTextCtor } from "../tui-text.js";
|
|
9
|
+
import { wrapExecuteWithMetrics } from "./metrics.js";
|
|
13
10
|
function getText(result) {
|
|
14
11
|
return (result.content ?? [])
|
|
15
12
|
.filter((c) => c.type === "text")
|
|
@@ -18,10 +15,10 @@ function getText(result) {
|
|
|
18
15
|
}
|
|
19
16
|
function buildGlobPattern(pattern, path, basePath) {
|
|
20
17
|
const raw = pattern.startsWith("/") ? pattern.slice(1) : pattern;
|
|
21
|
-
const normalized =
|
|
18
|
+
const normalized = normalizeFindGlobPattern(raw);
|
|
22
19
|
let cleanPath = path ?? "";
|
|
23
|
-
if (cleanPath &&
|
|
24
|
-
cleanPath =
|
|
20
|
+
if (cleanPath && isAbsolute(cleanPath) && basePath) {
|
|
21
|
+
cleanPath = relative(basePath, cleanPath) || "";
|
|
25
22
|
}
|
|
26
23
|
cleanPath = cleanPath.replace(/\/$/, "");
|
|
27
24
|
if (cleanPath) {
|
|
@@ -49,8 +46,8 @@ async function sdkFindAsFindResult(sdkTool, tid, params, sig, ctx, pattern, extr
|
|
|
49
46
|
};
|
|
50
47
|
return result;
|
|
51
48
|
}
|
|
52
|
-
function registerFindTool(pi, cwd, fffService, sdkTool, TextComp) {
|
|
53
|
-
const TC =
|
|
49
|
+
export function registerFindTool(pi, cwd, fffService, sdkTool, TextComp) {
|
|
50
|
+
const TC = resolveTextCtor(TextComp);
|
|
54
51
|
const home = process.env.HOME ?? "";
|
|
55
52
|
pi.registerTool({
|
|
56
53
|
name: "find",
|
|
@@ -58,7 +55,7 @@ function registerFindTool(pi, cwd, fffService, sdkTool, TextComp) {
|
|
|
58
55
|
description: sdkTool.description ?? "Find files matching a glob pattern",
|
|
59
56
|
parameters: sdkTool.parameters,
|
|
60
57
|
renderShell: "self",
|
|
61
|
-
execute:
|
|
58
|
+
execute: wrapExecuteWithMetrics(async (tid, params, sig, _upd, ctx) => {
|
|
62
59
|
const pattern = String(params.pattern ?? "");
|
|
63
60
|
const path = params.path ? String(params.path) : undefined;
|
|
64
61
|
const limit = params.limit;
|
|
@@ -76,13 +73,13 @@ function registerFindTool(pi, cwd, fffService, sdkTool, TextComp) {
|
|
|
76
73
|
const items = searchResult.value.items.slice(0, effectiveLimit);
|
|
77
74
|
const notices = [];
|
|
78
75
|
if (fffService?.partialIndex)
|
|
79
|
-
notices.push(
|
|
76
|
+
notices.push(NOTICE_PARTIAL_FILE_INDEX);
|
|
80
77
|
if (items.length >= effectiveLimit)
|
|
81
78
|
notices.push(`${effectiveLimit} limit reached`);
|
|
82
79
|
if (searchResult.value.totalMatched > items.length) {
|
|
83
80
|
notices.push(`${searchResult.value.totalMatched} total matches`);
|
|
84
81
|
}
|
|
85
|
-
if (items.length === 0 &&
|
|
82
|
+
if (items.length === 0 && isLikelyGlobPattern(pattern)) {
|
|
86
83
|
return sdkFindAsFindResult(sdkTool, tid, params, sig, ctx, pattern, [
|
|
87
84
|
"FFF glob returned no matches; results from SDK find (fd).",
|
|
88
85
|
...notices,
|
|
@@ -114,11 +111,11 @@ function registerFindTool(pi, cwd, fffService, sdkTool, TextComp) {
|
|
|
114
111
|
]);
|
|
115
112
|
}),
|
|
116
113
|
renderCall(args, theme, ctx) {
|
|
117
|
-
|
|
114
|
+
resolveBaseBackground(theme);
|
|
118
115
|
const a = args;
|
|
119
116
|
const text = ctx.lastComponent ?? new TC("", 0, 0);
|
|
120
117
|
const pattern = a.pattern == null ? "" : String(a.pattern);
|
|
121
|
-
const pathArg = a.path == null ? "<missing>" :
|
|
118
|
+
const pathArg = a.path == null ? "<missing>" : shortPath(cwd, home, String(a.path));
|
|
122
119
|
const limit = a.limit;
|
|
123
120
|
const findLabel = theme.fg(ctx.isError ? "error" : "toolTitle", theme.bold("✱ find"));
|
|
124
121
|
const patternPart = pattern ? theme.fg("toolTitle", pattern) : "";
|
|
@@ -126,44 +123,44 @@ function registerFindTool(pi, cwd, fffService, sdkTool, TextComp) {
|
|
|
126
123
|
const pathPart = theme.fg("toolOutput", pathArg);
|
|
127
124
|
const limitPart = limit !== undefined && limit !== null ? theme.fg("dim", ` limit ${limit}`) : "";
|
|
128
125
|
const out = `${findLabel} ${patternPart}${inPart}${pathPart}${limitPart}`;
|
|
129
|
-
text.setText(
|
|
126
|
+
text.setText(fillToolBackground(`\n${TOOL_RESULT_INDENT}${out}\n`, ctx.isError ? BG_ERROR : undefined));
|
|
130
127
|
return text;
|
|
131
128
|
},
|
|
132
129
|
renderResult(result, _opt, theme, ctx) {
|
|
133
|
-
|
|
130
|
+
resolveBaseBackground(theme);
|
|
134
131
|
const r = result;
|
|
135
132
|
const text = ctx.lastComponent ?? new TC("", 0, 0);
|
|
136
133
|
if (ctx.isError) {
|
|
137
|
-
text.setText(
|
|
134
|
+
text.setText(renderToolError(getText(r) || "Error", theme));
|
|
138
135
|
return text;
|
|
139
136
|
}
|
|
140
137
|
const d = r.details;
|
|
141
138
|
if (d?._type === "findResult") {
|
|
142
139
|
if (!d.text.trim()) {
|
|
143
140
|
const noticeStr = d.notices?.length
|
|
144
|
-
? `\n${
|
|
141
|
+
? `\n${TOOL_RESULT_INDENT}${theme.fg("warning", `[${d.notices.join(". ")}]`)}`
|
|
145
142
|
: "";
|
|
146
|
-
text.setText(
|
|
143
|
+
text.setText(fillToolBackground(`\n${TOOL_RESULT_INDENT}${theme.fg("dim", "0 files")}${noticeStr}\n`));
|
|
147
144
|
return text;
|
|
148
145
|
}
|
|
149
146
|
if (!ctx.expanded) {
|
|
150
|
-
const duration =
|
|
151
|
-
text.setText(
|
|
147
|
+
const duration = renderToolDuration(r);
|
|
148
|
+
text.setText(fillToolBackground(`${TOOL_RESULT_INDENT}${FG_DIM}${d.matchCount} files — ctrl+o to expand${RST}${duration ? `${FG_DIM}· ${duration}${RST}` : ""}\n`));
|
|
152
149
|
return text;
|
|
153
150
|
}
|
|
154
|
-
const rendered =
|
|
151
|
+
const rendered = renderFindResults(d.text, theme)
|
|
155
152
|
.split("\n")
|
|
156
|
-
.map((l) => `${
|
|
153
|
+
.map((l) => `${TOOL_RESULT_INDENT}${l}`)
|
|
157
154
|
.join("\n");
|
|
158
155
|
const noticeStr = d.notices?.length
|
|
159
|
-
? `\n${
|
|
156
|
+
? `\n${TOOL_RESULT_INDENT}${theme.fg("warning", `[${d.notices.join(". ")}]`)}`
|
|
160
157
|
: "";
|
|
161
|
-
const duration =
|
|
162
|
-
text.setText(
|
|
158
|
+
const duration = renderToolDuration(r);
|
|
159
|
+
text.setText(fillToolBackground(`\n${TOOL_RESULT_INDENT}${theme.fg("dim", `${d.matchCount} files`)}${duration ? `${FG_DIM}· ${duration}${RST}` : ""}\n${rendered}${noticeStr}\n`));
|
|
163
160
|
return text;
|
|
164
161
|
}
|
|
165
162
|
const fc = r.content?.[0];
|
|
166
|
-
text.setText(
|
|
163
|
+
text.setText(fillToolBackground(`\n${TOOL_RESULT_INDENT}${theme.fg("dim", fc?.text?.slice(0, 120) ?? "0 files")}\n`));
|
|
167
164
|
return text;
|
|
168
165
|
},
|
|
169
166
|
});
|
package/dist/tools/find.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/tools/find.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/tools/find.ts"],"names":[],"mappings":"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"}
|