@heyhuynhgiabuu/pi-pretty 0.6.4 → 0.6.5
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 +12 -0
- package/dist/autocomplete.d.ts +10 -0
- package/dist/autocomplete.d.ts.map +1 -0
- package/dist/autocomplete.js +64 -0
- package/dist/autocomplete.js.map +1 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +225 -0
- package/dist/config.js.map +1 -0
- package/dist/fff-helpers.d.ts +25 -0
- package/dist/fff-helpers.d.ts.map +1 -0
- package/dist/fff-helpers.js +83 -0
- package/dist/fff-helpers.js.map +1 -0
- package/dist/fff.d.ts +37 -0
- package/dist/fff.d.ts.map +1 -0
- package/dist/fff.js +135 -0
- package/dist/fff.js.map +1 -0
- package/dist/helpers.d.ts +21 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +133 -0
- package/dist/helpers.js.map +1 -0
- package/dist/image.d.ts +24 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +144 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +223 -0
- package/dist/index.js.map +1 -0
- package/dist/multi-grep-fallback.d.ts +30 -0
- package/dist/multi-grep-fallback.d.ts.map +1 -0
- package/dist/multi-grep-fallback.js +205 -0
- package/dist/multi-grep-fallback.js.map +1 -0
- package/dist/render.d.ts +25 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +366 -0
- package/dist/render.js.map +1 -0
- package/dist/tools/bash.d.ts +6 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +101 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/find.d.ts +6 -0
- package/dist/tools/find.d.ts.map +1 -0
- package/dist/tools/find.js +108 -0
- package/dist/tools/find.js.map +1 -0
- package/dist/tools/grep.d.ts +6 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +121 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/ls.d.ts +6 -0
- package/dist/tools/ls.d.ts.map +1 -0
- package/dist/tools/ls.js +63 -0
- package/dist/tools/ls.js.map +1 -0
- package/dist/tools/metrics.d.ts +10 -0
- package/dist/tools/metrics.d.ts.map +1 -0
- package/dist/tools/metrics.js +34 -0
- package/dist/tools/metrics.js.map +1 -0
- package/dist/tools/multi-grep.d.ts +7 -0
- package/dist/tools/multi-grep.d.ts.map +1 -0
- package/dist/tools/multi-grep.js +197 -0
- package/dist/tools/multi-grep.js.map +1 -0
- package/dist/tools/read.d.ts +6 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +125 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/types.d.ts +168 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +7 -1
- package/biome.json +0 -22
- package/bun.lock +0 -598
- package/media/bash-and-read.png +0 -0
- package/media/icons-and-grep.png +0 -0
- package/media/inline-image.png +0 -0
- package/pi-pretty.example.json +0 -6
- package/release-notes/v0.3.2.md +0 -34
- package/release-notes/v0.3.3.md +0 -48
- package/release-notes/v0.4.0.md +0 -58
- package/release-notes/v0.4.1.md +0 -28
- package/release-notes/v0.4.2.md +0 -36
- package/release-notes/v0.4.4.md +0 -28
- package/release-notes/v0.5.3.md +0 -29
- package/test/bash-rendering.test.ts +0 -269
- package/test/fff-integration.test.ts +0 -800
- package/test/image-rendering.test.ts +0 -153
- package/tsconfig.json +0 -19
package/dist/index.js
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* pi-pretty — Pretty terminal output for pi built-in tools.
|
|
4
|
+
*
|
|
5
|
+
* Enhances read, bash, ls, find, grep, multi_grep with:
|
|
6
|
+
* • Syntax-highlighted file content (Shiki)
|
|
7
|
+
* • Colored bash exit status + output
|
|
8
|
+
* • Tree-view directory listings with file-type icons
|
|
9
|
+
* • FFF-accelerated find/grep with SDK fallback
|
|
10
|
+
* • Custom ANSI rendering for all tools
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.__imageInternals = void 0;
|
|
14
|
+
exports.default = piPrettyExtension;
|
|
15
|
+
// Re-export for tests
|
|
16
|
+
var image_js_1 = require("./image.js");
|
|
17
|
+
Object.defineProperty(exports, "__imageInternals", { enumerable: true, get: function () { return image_js_1.__imageInternals; } });
|
|
18
|
+
const fff_js_1 = require("./fff.js");
|
|
19
|
+
const read_js_1 = require("./tools/read.js");
|
|
20
|
+
const bash_js_1 = require("./tools/bash.js");
|
|
21
|
+
const ls_js_1 = require("./tools/ls.js");
|
|
22
|
+
const find_js_1 = require("./tools/find.js");
|
|
23
|
+
const grep_js_1 = require("./tools/grep.js");
|
|
24
|
+
const multi_grep_js_1 = require("./tools/multi-grep.js");
|
|
25
|
+
const multi_grep_fallback_js_1 = require("./multi-grep-fallback.js");
|
|
26
|
+
const config_js_1 = require("./config.js");
|
|
27
|
+
const autocomplete_js_1 = require("./autocomplete.js");
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Config
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
function envDisabledTools() {
|
|
32
|
+
return new Set((process.env.PRETTY_DISABLE_TOOLS ?? "")
|
|
33
|
+
.split(",")
|
|
34
|
+
.map((s) => s.trim().toLowerCase())
|
|
35
|
+
.filter(Boolean));
|
|
36
|
+
}
|
|
37
|
+
function piPrettyExtension(pi, deps) {
|
|
38
|
+
const disabledTools = envDisabledTools();
|
|
39
|
+
const isToolEnabled = (name) => !disabledTools.has(name.toLowerCase());
|
|
40
|
+
const cwd = process.cwd();
|
|
41
|
+
// ------------------------------------------------------------------
|
|
42
|
+
// Resolve SDK tools
|
|
43
|
+
// ------------------------------------------------------------------
|
|
44
|
+
let sdk;
|
|
45
|
+
let createReadTool;
|
|
46
|
+
let createBashTool;
|
|
47
|
+
let createLsTool;
|
|
48
|
+
let createFindTool;
|
|
49
|
+
let createGrepTool;
|
|
50
|
+
let getAgentDir;
|
|
51
|
+
if (deps) {
|
|
52
|
+
sdk = deps.sdk ?? {};
|
|
53
|
+
createReadTool = sdk.createReadTool ?? sdk.createReadToolDefinition;
|
|
54
|
+
createBashTool = sdk.createBashTool ?? sdk.createBashToolDefinition;
|
|
55
|
+
createLsTool = sdk.createLsTool ?? sdk.createLsToolDefinition;
|
|
56
|
+
createFindTool = sdk.createFindTool ?? sdk.createFindToolDefinition;
|
|
57
|
+
createGrepTool = sdk.createGrepTool ?? sdk.createGrepToolDefinition;
|
|
58
|
+
getAgentDir = sdk.getAgentDir;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
try {
|
|
62
|
+
sdk = require("@earendil-works/pi-coding-agent");
|
|
63
|
+
createReadTool = sdk.createReadToolDefinition ?? sdk.createReadTool;
|
|
64
|
+
createBashTool = sdk.createBashToolDefinition ?? sdk.createBashTool;
|
|
65
|
+
createLsTool = sdk.createLsToolDefinition ?? sdk.createLsTool;
|
|
66
|
+
createFindTool = sdk.createFindToolDefinition ?? sdk.createFindTool;
|
|
67
|
+
createGrepTool = sdk.createGrepToolDefinition ?? sdk.createGrepTool;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return; // pi SDK not available
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!createReadTool)
|
|
74
|
+
return;
|
|
75
|
+
// ------------------------------------------------------------------
|
|
76
|
+
// FFF service init
|
|
77
|
+
// ------------------------------------------------------------------
|
|
78
|
+
const agentDir = getAgentDir ? getAgentDir() : (0, config_js_1.getDefaultAgentDir)();
|
|
79
|
+
let fffService = new fff_js_1.FffService(undefined, agentDir);
|
|
80
|
+
if (deps?.fffModule) {
|
|
81
|
+
fffService = new fff_js_1.FffService(deps.fffModule, agentDir);
|
|
82
|
+
}
|
|
83
|
+
// Ripgrep fallback for multi_grep
|
|
84
|
+
const multiGrepFallback = deps?.multiGrepRipgrepFallback ?? multi_grep_fallback_js_1.runMultiGrepRipgrepFallback;
|
|
85
|
+
// Text component for custom rendering (DI-friendly)
|
|
86
|
+
const TextComp = deps?.TextComponent;
|
|
87
|
+
// ------------------------------------------------------------------
|
|
88
|
+
// Tool registration
|
|
89
|
+
// ------------------------------------------------------------------
|
|
90
|
+
if (isToolEnabled("read") && createReadTool) {
|
|
91
|
+
(0, read_js_1.registerReadTool)(pi, cwd, null, createReadTool(cwd), TextComp);
|
|
92
|
+
}
|
|
93
|
+
if (isToolEnabled("bash") && createBashTool) {
|
|
94
|
+
(0, bash_js_1.registerBashTool)(pi, cwd, null, createBashTool(cwd), TextComp);
|
|
95
|
+
}
|
|
96
|
+
if (isToolEnabled("ls") && createLsTool) {
|
|
97
|
+
(0, ls_js_1.registerLsTool)(pi, cwd, null, createLsTool(cwd), TextComp);
|
|
98
|
+
}
|
|
99
|
+
if (isToolEnabled("find") && createFindTool) {
|
|
100
|
+
(0, find_js_1.registerFindTool)(pi, cwd, fffService, createFindTool(cwd), TextComp);
|
|
101
|
+
}
|
|
102
|
+
if (isToolEnabled("grep") && createGrepTool) {
|
|
103
|
+
(0, grep_js_1.registerGrepTool)(pi, cwd, fffService, createGrepTool(cwd), TextComp);
|
|
104
|
+
}
|
|
105
|
+
if (isToolEnabled("multi_grep") && (fffService || createGrepTool)) {
|
|
106
|
+
(0, multi_grep_js_1.registerMultiGrepTool)(pi, cwd, fffService, createGrepTool ? createGrepTool(cwd) : undefined, multiGrepFallback, TextComp);
|
|
107
|
+
}
|
|
108
|
+
// ------------------------------------------------------------------
|
|
109
|
+
// FFF commands
|
|
110
|
+
// ------------------------------------------------------------------
|
|
111
|
+
if (fffService) {
|
|
112
|
+
pi.registerCommand("fff-health", {
|
|
113
|
+
description: "Show FFF file finder health and indexer status",
|
|
114
|
+
handler: async (_args, ctx) => {
|
|
115
|
+
const fff = fffService;
|
|
116
|
+
if (!fff.isAvailable) {
|
|
117
|
+
ctx.ui.notify("FFF not initialized", "warning");
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const finder = fff.getFinder();
|
|
121
|
+
if (!finder) {
|
|
122
|
+
ctx.ui.notify("FFF not initialized", "warning");
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const health = finder.healthCheck();
|
|
126
|
+
if (!health.ok) {
|
|
127
|
+
ctx.ui.notify(`Health check failed: ${health.error}`, "error");
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const h = health.value;
|
|
131
|
+
const lines = [
|
|
132
|
+
`FFF v${h.version}`,
|
|
133
|
+
`Git: ${h.git.repositoryFound ? `yes (${h.git.workdir ?? "unknown"})` : "no"}`,
|
|
134
|
+
`Picker: ${h.filePicker.initialized ? `${h.filePicker.indexedFiles ?? 0} files` : "not initialized"}`,
|
|
135
|
+
`Frecency: ${h.frecency.initialized ? "active" : "disabled"}`,
|
|
136
|
+
`Query tracker: ${h.queryTracker.initialized ? "active" : "disabled"}`,
|
|
137
|
+
`Partial index: ${fff.partialIndex ? "yes (scan timed out)" : "no"}`,
|
|
138
|
+
];
|
|
139
|
+
const progress = finder.getScanProgress();
|
|
140
|
+
if (progress.ok) {
|
|
141
|
+
lines.push(`Scanning: ${progress.value.isScanning ? "yes" : "no"} (${progress.value.scannedFilesCount} files)`);
|
|
142
|
+
}
|
|
143
|
+
ctx.ui.notify(lines.join("\n"), "info");
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
pi.registerCommand("fff-rescan", {
|
|
147
|
+
description: "Trigger FFF to rescan files",
|
|
148
|
+
handler: async (_args, ctx) => {
|
|
149
|
+
const fff = fffService;
|
|
150
|
+
if (!fff.isAvailable) {
|
|
151
|
+
ctx.ui.notify("FFF not initialized", "warning");
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const finder = fff.getFinder();
|
|
155
|
+
if (!finder) {
|
|
156
|
+
ctx.ui.notify("FFF not initialized", "warning");
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const result = finder.scanFiles();
|
|
160
|
+
if (!result.ok) {
|
|
161
|
+
ctx.ui.notify(`Rescan failed: ${result.error}`, "error");
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
fff.partialIndex = false;
|
|
165
|
+
ctx.ui.notify("FFF rescan triggered", "info");
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// ------------------------------------------------------------------
|
|
170
|
+
// Session lifecycle
|
|
171
|
+
// ------------------------------------------------------------------
|
|
172
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
173
|
+
if (!fffService)
|
|
174
|
+
return;
|
|
175
|
+
// Try dynamic import if sync require failed
|
|
176
|
+
if (!fffService.isModuleLoaded()) {
|
|
177
|
+
const loaded = await fffService.tryLoadModule();
|
|
178
|
+
if (!loaded)
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
await fffService.ensureFinder(ctx.cwd);
|
|
183
|
+
if (fffService.partialIndex) {
|
|
184
|
+
ctx.ui?.notify?.("FFF: scan timed out — using partial index. Run /fff-rescan when ready.", "warning");
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const ui = ctx.ui;
|
|
188
|
+
ui?.setStatus?.("fff", "FFF indexed");
|
|
189
|
+
setTimeout(() => ui?.setStatus?.("fff", undefined), 3000);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
ctx.ui?.notify?.(`FFF init failed: ${error instanceof Error ? error.message : String(error)}`, "error");
|
|
194
|
+
}
|
|
195
|
+
// Register FFF-backed @-mention autocomplete
|
|
196
|
+
ctx.ui?.addAutocompleteProvider?.((current) => (0, autocomplete_js_1.createFffAutocompleteProvider)(current, () => fffService?.getFinder() ?? null));
|
|
197
|
+
});
|
|
198
|
+
pi.on("session_shutdown", async () => {
|
|
199
|
+
fffService?.destroy();
|
|
200
|
+
});
|
|
201
|
+
// Fallback padding for SDK-rendered tool bodies. The SDK reads
|
|
202
|
+
// result.content[0].text and slices collapsed output to roughly the first
|
|
203
|
+
// 10 lines, so insert bottom padding inside that visible slice.
|
|
204
|
+
const PADDED_TOOLS = new Set(["read", "grep", "bash"]);
|
|
205
|
+
const RESULT_LEFT_PAD = " ";
|
|
206
|
+
const BOTTOM_PADDING_BY_TOOL = { read: 2, grep: 2, bash: 0 };
|
|
207
|
+
pi.on("tool_result", (event, _ctx) => {
|
|
208
|
+
if (!PADDED_TOOLS.has(event.toolName))
|
|
209
|
+
return undefined;
|
|
210
|
+
const first = event.content[0];
|
|
211
|
+
if (!first || first.type !== "text")
|
|
212
|
+
return undefined;
|
|
213
|
+
const lines = first.text.split("\n").map((line) => `${RESULT_LEFT_PAD}${line}`);
|
|
214
|
+
if (lines.length === 0)
|
|
215
|
+
return undefined;
|
|
216
|
+
const padCount = BOTTOM_PADDING_BY_TOOL[event.toolName] ?? 0;
|
|
217
|
+
lines.push(...Array.from({ length: padCount }, () => RESULT_LEFT_PAD));
|
|
218
|
+
return {
|
|
219
|
+
content: [{ type: "text", text: lines.join("\n") }, ...event.content.slice(1)],
|
|
220
|
+
};
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type ConstraintParseResult = {
|
|
2
|
+
ok: true;
|
|
3
|
+
globs: string[];
|
|
4
|
+
tokens: string[];
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
error: string;
|
|
8
|
+
};
|
|
9
|
+
export type MultiGrepRipgrepFallbackParams = {
|
|
10
|
+
cwd: string;
|
|
11
|
+
patterns: string[];
|
|
12
|
+
path?: string;
|
|
13
|
+
constraints?: string;
|
|
14
|
+
context?: number;
|
|
15
|
+
limit: number;
|
|
16
|
+
ignoreCase: boolean;
|
|
17
|
+
signal?: AbortSignal;
|
|
18
|
+
};
|
|
19
|
+
export type MultiGrepRipgrepFallbackResult = {
|
|
20
|
+
text: string;
|
|
21
|
+
matchCount: number;
|
|
22
|
+
limitReached: boolean;
|
|
23
|
+
};
|
|
24
|
+
export type MultiGrepRipgrepFallback = (params: MultiGrepRipgrepFallbackParams) => Promise<MultiGrepRipgrepFallbackResult>;
|
|
25
|
+
export declare function parseMultiGrepConstraints(constraints: string | undefined): ConstraintParseResult;
|
|
26
|
+
export declare function getMultiGrepRipgrepArgs(params: MultiGrepRipgrepFallbackParams): ConstraintParseResult & {
|
|
27
|
+
args?: string[];
|
|
28
|
+
};
|
|
29
|
+
export declare function runMultiGrepRipgrepFallback(params: MultiGrepRipgrepFallbackParams): Promise<MultiGrepRipgrepFallbackResult>;
|
|
30
|
+
//# sourceMappingURL=multi-grep-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-grep-fallback.d.ts","sourceRoot":"","sources":["../src/multi-grep-fallback.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,qBAAqB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnH,MAAM,MAAM,8BAA8B,GAAG;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACtC,MAAM,EAAE,8BAA8B,KAClC,OAAO,CAAC,8BAA8B,CAAC,CAAC;AA8E7C,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,CAehG;AAqBD,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,8BAA8B,GACpC,qBAAqB,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAI7C;AAED,wBAAsB,2BAA2B,CAChD,MAAM,EAAE,8BAA8B,GACpC,OAAO,CAAC,8BAA8B,CAAC,CAoGzC"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMultiGrepConstraints = parseMultiGrepConstraints;
|
|
4
|
+
exports.getMultiGrepRipgrepArgs = getMultiGrepRipgrepArgs;
|
|
5
|
+
exports.runMultiGrepRipgrepFallback = runMultiGrepRipgrepFallback;
|
|
6
|
+
const node_child_process_1 = require("node:child_process");
|
|
7
|
+
const GLOB_META_RE = /[*?[{]/;
|
|
8
|
+
function trimSlashes(value) {
|
|
9
|
+
return value.replace(/^\/+/, "").replace(/\/+$/, "");
|
|
10
|
+
}
|
|
11
|
+
function normalizeConstraintPath(value) {
|
|
12
|
+
let normalized = value.replace(/\\/g, "/").trim();
|
|
13
|
+
while (normalized.startsWith("./"))
|
|
14
|
+
normalized = normalized.slice(2);
|
|
15
|
+
return normalized;
|
|
16
|
+
}
|
|
17
|
+
function tokenizeConstraints(constraints) {
|
|
18
|
+
const tokens = [];
|
|
19
|
+
let current = "";
|
|
20
|
+
let quote = null;
|
|
21
|
+
for (let i = 0; i < constraints.length; i++) {
|
|
22
|
+
const char = constraints[i];
|
|
23
|
+
if (quote) {
|
|
24
|
+
if (char === quote)
|
|
25
|
+
quote = null;
|
|
26
|
+
else
|
|
27
|
+
current += char;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (char === '"' || char === "'") {
|
|
31
|
+
quote = char;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (/\s/.test(char)) {
|
|
35
|
+
if (current) {
|
|
36
|
+
tokens.push(current);
|
|
37
|
+
current = "";
|
|
38
|
+
}
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
current += char;
|
|
42
|
+
}
|
|
43
|
+
if (quote)
|
|
44
|
+
return { ok: false, error: "unterminated quoted constraint" };
|
|
45
|
+
if (current)
|
|
46
|
+
tokens.push(current);
|
|
47
|
+
return { ok: true, globs: [], tokens };
|
|
48
|
+
}
|
|
49
|
+
function tokenToRipgrepGlob(token) {
|
|
50
|
+
let negated = false;
|
|
51
|
+
let body = token;
|
|
52
|
+
if (body.startsWith("!")) {
|
|
53
|
+
negated = true;
|
|
54
|
+
body = body.slice(1);
|
|
55
|
+
}
|
|
56
|
+
body = normalizeConstraintPath(body);
|
|
57
|
+
if (!body)
|
|
58
|
+
return { ok: false, error: `empty constraint token: ${token}` };
|
|
59
|
+
if (body.includes("\0"))
|
|
60
|
+
return { ok: false, error: `invalid NUL byte in constraint token: ${token}` };
|
|
61
|
+
let glob;
|
|
62
|
+
if (body.endsWith("/")) {
|
|
63
|
+
const dir = trimSlashes(body);
|
|
64
|
+
if (!dir)
|
|
65
|
+
return { ok: false, error: `empty directory constraint: ${token}` };
|
|
66
|
+
glob = `**/${dir}/**`;
|
|
67
|
+
}
|
|
68
|
+
else if (GLOB_META_RE.test(body) || body.includes("/")) {
|
|
69
|
+
glob = body.replace(/^\/+/, "");
|
|
70
|
+
}
|
|
71
|
+
else if (body.includes(".")) {
|
|
72
|
+
glob = `**/${body}`;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
glob = `**/${body}/**`;
|
|
76
|
+
}
|
|
77
|
+
return { ok: true, glob: negated ? `!${glob}` : glob };
|
|
78
|
+
}
|
|
79
|
+
function parseMultiGrepConstraints(constraints) {
|
|
80
|
+
const trimmed = constraints?.trim();
|
|
81
|
+
if (!trimmed)
|
|
82
|
+
return { ok: true, globs: [], tokens: [] };
|
|
83
|
+
const tokenized = tokenizeConstraints(trimmed);
|
|
84
|
+
if (!tokenized.ok)
|
|
85
|
+
return tokenized;
|
|
86
|
+
const globs = [];
|
|
87
|
+
for (const token of tokenized.tokens) {
|
|
88
|
+
const parsed = tokenToRipgrepGlob(token);
|
|
89
|
+
if (!parsed.ok)
|
|
90
|
+
return parsed;
|
|
91
|
+
globs.push(parsed.glob);
|
|
92
|
+
}
|
|
93
|
+
return { ok: true, globs, tokens: tokenized.tokens };
|
|
94
|
+
}
|
|
95
|
+
function isRipgrepMatchLine(line) {
|
|
96
|
+
return /^.+?:\d+:/.test(line);
|
|
97
|
+
}
|
|
98
|
+
function buildRipgrepArgs(params, globs) {
|
|
99
|
+
const args = ["--line-number", "--with-filename", "--color=never", "--hidden", "--fixed-strings"];
|
|
100
|
+
if (params.ignoreCase)
|
|
101
|
+
args.push("--ignore-case");
|
|
102
|
+
if (params.context && params.context > 0)
|
|
103
|
+
args.push("--context", String(params.context));
|
|
104
|
+
for (const glob of globs)
|
|
105
|
+
args.push("--glob", glob);
|
|
106
|
+
for (const pattern of params.patterns)
|
|
107
|
+
args.push("-e", pattern);
|
|
108
|
+
const searchPath = params.path?.trim();
|
|
109
|
+
if (searchPath)
|
|
110
|
+
args.push("--", searchPath);
|
|
111
|
+
return args;
|
|
112
|
+
}
|
|
113
|
+
function getMultiGrepRipgrepArgs(params) {
|
|
114
|
+
const parsed = parseMultiGrepConstraints(params.constraints);
|
|
115
|
+
if (!parsed.ok)
|
|
116
|
+
return parsed;
|
|
117
|
+
return { ...parsed, args: buildRipgrepArgs(params, parsed.globs) };
|
|
118
|
+
}
|
|
119
|
+
async function runMultiGrepRipgrepFallback(params) {
|
|
120
|
+
const parsed = parseMultiGrepConstraints(params.constraints);
|
|
121
|
+
if (!parsed.ok)
|
|
122
|
+
throw new Error(`unsupported constraints: ${parsed.error}`);
|
|
123
|
+
const args = buildRipgrepArgs(params, parsed.globs);
|
|
124
|
+
return new Promise((resolve, reject) => {
|
|
125
|
+
if (params.signal?.aborted) {
|
|
126
|
+
reject(new Error("Operation aborted"));
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const child = (0, node_child_process_1.spawn)("rg", args, { cwd: params.cwd, stdio: ["ignore", "pipe", "pipe"] });
|
|
130
|
+
const outputLines = [];
|
|
131
|
+
let stderr = "";
|
|
132
|
+
let buffer = "";
|
|
133
|
+
let matchCount = 0;
|
|
134
|
+
let limitReached = false;
|
|
135
|
+
let killedForLimit = false;
|
|
136
|
+
let settled = false;
|
|
137
|
+
const settle = (fn) => {
|
|
138
|
+
if (settled)
|
|
139
|
+
return;
|
|
140
|
+
settled = true;
|
|
141
|
+
fn();
|
|
142
|
+
};
|
|
143
|
+
const stopChild = (dueToLimit = false) => {
|
|
144
|
+
if (!child.killed) {
|
|
145
|
+
killedForLimit = dueToLimit;
|
|
146
|
+
child.kill();
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
const onAbort = () => stopChild(false);
|
|
150
|
+
params.signal?.addEventListener("abort", onAbort, { once: true });
|
|
151
|
+
const cleanup = () => {
|
|
152
|
+
params.signal?.removeEventListener("abort", onAbort);
|
|
153
|
+
};
|
|
154
|
+
const handleLine = (line) => {
|
|
155
|
+
if (limitReached)
|
|
156
|
+
return;
|
|
157
|
+
outputLines.push(line);
|
|
158
|
+
if (isRipgrepMatchLine(line)) {
|
|
159
|
+
matchCount++;
|
|
160
|
+
if (matchCount >= params.limit) {
|
|
161
|
+
limitReached = true;
|
|
162
|
+
stopChild(true);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
child.stdout?.on("data", (chunk) => {
|
|
167
|
+
buffer += chunk.toString("utf8");
|
|
168
|
+
let newlineIndex = buffer.indexOf("\n");
|
|
169
|
+
while (newlineIndex >= 0) {
|
|
170
|
+
const line = buffer.slice(0, newlineIndex).replace(/\r$/, "");
|
|
171
|
+
buffer = buffer.slice(newlineIndex + 1);
|
|
172
|
+
handleLine(line);
|
|
173
|
+
newlineIndex = buffer.indexOf("\n");
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
child.stderr?.on("data", (chunk) => {
|
|
177
|
+
stderr += chunk.toString("utf8");
|
|
178
|
+
});
|
|
179
|
+
child.on("error", (error) => {
|
|
180
|
+
cleanup();
|
|
181
|
+
const message = error.code === "ENOENT" ? "ripgrep (rg) is not available" : `Failed to run ripgrep: ${error.message}`;
|
|
182
|
+
settle(() => reject(new Error(message)));
|
|
183
|
+
});
|
|
184
|
+
child.on("close", (code) => {
|
|
185
|
+
cleanup();
|
|
186
|
+
if (params.signal?.aborted) {
|
|
187
|
+
settle(() => reject(new Error("Operation aborted")));
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (buffer && !limitReached)
|
|
191
|
+
handleLine(buffer.replace(/\r$/, ""));
|
|
192
|
+
if (!killedForLimit && code !== 0 && code !== 1) {
|
|
193
|
+
const message = stderr.trim() || `ripgrep exited with code ${code}`;
|
|
194
|
+
settle(() => reject(new Error(message)));
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
settle(() => resolve({
|
|
198
|
+
text: outputLines.length ? outputLines.join("\n") : "No matches found",
|
|
199
|
+
matchCount,
|
|
200
|
+
limitReached,
|
|
201
|
+
}));
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=multi-grep-fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-grep-fallback.js","sourceRoot":"","sources":["../src/multi-grep-fallback.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi-pretty: rendering functions for all tools.
|
|
3
|
+
*
|
|
4
|
+
* These produce ANSI-colored terminal output strings.
|
|
5
|
+
* They are async only when Shiki syntax highlighting is involved.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentToolResult } from "@earendil-works/pi-coding-agent";
|
|
8
|
+
import type { ThemeLike, RenderCtxLike as RenderContext } from "./types.js";
|
|
9
|
+
export declare function isLowContrastShikiFg(params: string): boolean;
|
|
10
|
+
export declare const RESET_WITHOUT_BG = "\u001B[22;23;24;25;27;28;29;39m";
|
|
11
|
+
export declare function preserveBoxBackground(ansi: string): string;
|
|
12
|
+
export declare function fillToolBackground(text: string, bg?: string, width?: number): string;
|
|
13
|
+
export declare function renderToolMetrics(result: AgentToolResult<Record<string, unknown>>): string;
|
|
14
|
+
export declare function renderToolError(error: string, theme: ThemeLike): string;
|
|
15
|
+
export declare function renderFileContent(content: string, filePath: string, offset?: number, maxLines?: number, width?: number): Promise<string>;
|
|
16
|
+
export declare function renderBashOutput(text: string, exitCode: number | null): {
|
|
17
|
+
summary: string;
|
|
18
|
+
body: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function renderTree(text: string, _basePath: string): string;
|
|
21
|
+
export declare function renderFindResults(text: string, theme?: ThemeLike): string;
|
|
22
|
+
export declare function renderGrepResults(text: string, pattern: string): Promise<string>;
|
|
23
|
+
export declare function makeRenderCall(toolName: string): (args: Record<string, unknown>, theme: ThemeLike, ctx: RenderContext) => any;
|
|
24
|
+
export declare function makeRenderResult(): (result: AgentToolResult<Record<string, unknown>>, _opt: unknown, theme: ThemeLike, ctx: RenderContext) => any;
|
|
25
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AA4D5E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAS5D;AAUD,eAAO,MAAM,gBAAgB,oCAAkC,CAAC;AAEhE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B1D;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAUrF;AAeD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAO1F;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAKvE;AAMD,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,SAAI,EACV,QAAQ,SAAoB,EAC5B,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAcjB;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAgBzG;AAMD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAwBlE;AAMG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAiCjE;AAMb,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCtF;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,IACtC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,SAAS,EAAE,KAAK,aAAa,SAO3E;AAED,wBAAgB,gBAAgB,KACvB,QAAQ,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,OAAO,EAAE,OAAO,SAAS,EAAE,KAAK,aAAa,SAqB7G"}
|