@tomsun28/pizza 0.0.1 → 0.0.4

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.
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Core logic for pizza-mode: [CLI] tag parsing, tool execution helpers,
3
+ * and conversation history rewriting.
4
+ */
5
+ export declare const MAX_CALLS_PER_TURN = 5;
6
+ export declare const MAX_OUTPUT_BYTES: number;
7
+ export declare const MAX_OUTPUT_LINES = 1000;
8
+ export declare const MAX_FILE_BYTES: number;
9
+ export declare const MAX_FILE_LINES = 2000;
10
+ export declare const MAX_GREP_RESULTS = 200;
11
+ export declare const MAX_GREP_FILE_SIZE: number;
12
+ export interface ParsedCLICall {
13
+ id: number;
14
+ toolName: string;
15
+ rawArgs: string;
16
+ }
17
+ export interface CLIToolResult {
18
+ output: string;
19
+ isError: boolean;
20
+ }
21
+ /**
22
+ * Parse [CLI] toolName args[/CLI] blocks from model text output.
23
+ * Returns all calls found and the text before the first call.
24
+ */
25
+ export declare function parseCLICalls(text: string): {
26
+ calls: ParsedCLICall[];
27
+ textBeforeCalls: string;
28
+ };
29
+ /**
30
+ * Parse a shell-style args string into a Record.
31
+ * Handles: --key "value", --key value, --flag, positional args.
32
+ */
33
+ export declare function parseCliArgs(raw: string): Record<string, any>;
34
+ /**
35
+ * Map parsed args to tool-specific argument schema.
36
+ */
37
+ export declare function mapArgsToTool(toolName: string, rawArgs: string): Record<string, any>;
38
+ /**
39
+ * Convert tool call arguments back to CLI flag string for history reconstruction.
40
+ */
41
+ export declare function argsToCliString(toolName: string, arguments_: Record<string, any>): string;
42
+ export declare function execLs(cwd: string, args: Record<string, any>): Promise<CLIToolResult>;
43
+ export declare function execRead(cwd: string, args: Record<string, any>): Promise<CLIToolResult>;
44
+ export declare function execWrite(cwd: string, args: Record<string, any>): Promise<CLIToolResult>;
45
+ export declare function execEdit(cwd: string, args: Record<string, any>): Promise<CLIToolResult>;
46
+ export declare function execGrep(cwd: string, args: Record<string, any>): Promise<CLIToolResult>;
47
+ export declare function execBash(cwd: string, args: Record<string, any>, signal?: AbortSignal): Promise<CLIToolResult>;
48
+ export declare function dispatchTool(toolName: string, rawArgs: string, cwd: string, signal?: AbortSignal): Promise<CLIToolResult>;
49
+ export declare function buildResultBlock(output: string, isError: boolean, id?: number, total?: number, cliCommand?: string): string;
50
+ /**
51
+ * Reconstruct the [CLI] text that the model originally emitted for a tool call.
52
+ */
53
+ export declare function reconstructCliText(toolName: string, arguments_: Record<string, any>): string;
@@ -0,0 +1,466 @@
1
+ /**
2
+ * Core logic for pizza-mode: [CLI] tag parsing, tool execution helpers,
3
+ * and conversation history rewriting.
4
+ */
5
+ import { readFile, writeFile, mkdir, readdir, stat } from "node:fs/promises";
6
+ import { resolve, isAbsolute, dirname, join, relative } from "node:path";
7
+ import { spawn } from "node:child_process";
8
+ // ─── Constants ────────────────────────────────────────────────────────────────
9
+ export const MAX_CALLS_PER_TURN = 5;
10
+ export const MAX_OUTPUT_BYTES = 128 * 1024;
11
+ export const MAX_OUTPUT_LINES = 1000;
12
+ export const MAX_FILE_BYTES = 256 * 1024;
13
+ export const MAX_FILE_LINES = 2000;
14
+ export const MAX_GREP_RESULTS = 200;
15
+ export const MAX_GREP_FILE_SIZE = 1024 * 1024;
16
+ // ─── [CLI] tag parsing ────────────────────────────────────────────────────────
17
+ /**
18
+ * Parse [CLI] toolName args[/CLI] blocks from model text output.
19
+ * Returns all calls found and the text before the first call.
20
+ */
21
+ export function parseCLICalls(text) {
22
+ const regex = /\[CLI(?:\s+id=(\d+))?\]([\s\S]*?)\[\/CLI\]/g;
23
+ const calls = [];
24
+ let firstMatchStart = -1;
25
+ let autoId = 1;
26
+ let match;
27
+ while ((match = regex.exec(text)) !== null) {
28
+ if (firstMatchStart === -1)
29
+ firstMatchStart = match.index;
30
+ const explicitId = match[1] ? parseInt(match[1], 10) : undefined;
31
+ const inner = match[2].trim();
32
+ const spaceIdx = inner.search(/\s/);
33
+ const toolName = spaceIdx === -1 ? inner : inner.slice(0, spaceIdx);
34
+ const rawArgs = spaceIdx === -1 ? "" : inner.slice(spaceIdx + 1).trim();
35
+ if (toolName) {
36
+ calls.push({ id: explicitId ?? autoId, toolName, rawArgs });
37
+ autoId++;
38
+ }
39
+ }
40
+ const textBeforeCalls = firstMatchStart >= 0 ? text.substring(0, firstMatchStart).trimEnd() : text;
41
+ return { calls, textBeforeCalls };
42
+ }
43
+ // ─── Shell-style arg parser ───────────────────────────────────────────────────
44
+ /**
45
+ * Parse a shell-style args string into a Record.
46
+ * Handles: --key "value", --key value, --flag, positional args.
47
+ */
48
+ export function parseCliArgs(raw) {
49
+ const args = {};
50
+ const positional = [];
51
+ const tokens = [];
52
+ let i = 0;
53
+ while (i < raw.length) {
54
+ while (i < raw.length && /\s/.test(raw[i]))
55
+ i++;
56
+ if (i >= raw.length)
57
+ break;
58
+ if (raw[i] === '"' || raw[i] === "'") {
59
+ const quote = raw[i++];
60
+ let val = "";
61
+ while (i < raw.length && raw[i] !== quote) {
62
+ if (raw[i] === "\\" && i + 1 < raw.length) {
63
+ i++;
64
+ val += raw[i++];
65
+ }
66
+ else {
67
+ val += raw[i++];
68
+ }
69
+ }
70
+ i++;
71
+ tokens.push(val);
72
+ }
73
+ else {
74
+ let val = "";
75
+ while (i < raw.length && !/\s/.test(raw[i])) {
76
+ val += raw[i++];
77
+ }
78
+ tokens.push(val);
79
+ }
80
+ }
81
+ let ti = 0;
82
+ while (ti < tokens.length) {
83
+ const tok = tokens[ti];
84
+ if (tok.startsWith("--")) {
85
+ const key = tok.slice(2);
86
+ if (ti + 1 < tokens.length && !tokens[ti + 1].startsWith("--")) {
87
+ args[key] = tokens[ti + 1];
88
+ ti += 2;
89
+ }
90
+ else {
91
+ args[key] = true;
92
+ ti++;
93
+ }
94
+ }
95
+ else {
96
+ positional.push(tok);
97
+ ti++;
98
+ }
99
+ }
100
+ if (positional.length > 0) {
101
+ if (!("path" in args) && !("command" in args) && !("pattern" in args)) {
102
+ args._positional = positional.join(" ");
103
+ }
104
+ }
105
+ return args;
106
+ }
107
+ /**
108
+ * Map parsed args to tool-specific argument schema.
109
+ */
110
+ export function mapArgsToTool(toolName, rawArgs) {
111
+ const args = parseCliArgs(rawArgs);
112
+ const pos = args._positional;
113
+ delete args._positional;
114
+ switch (toolName) {
115
+ case "ls":
116
+ if (pos && !args.path)
117
+ args.path = pos;
118
+ break;
119
+ case "read":
120
+ if (pos && !args.path)
121
+ args.path = pos;
122
+ break;
123
+ case "write":
124
+ // --path and --content required
125
+ break;
126
+ case "edit":
127
+ if (args.old) {
128
+ args.oldText = args.old;
129
+ delete args.old;
130
+ }
131
+ if (args.new) {
132
+ args.newText = args.new;
133
+ delete args.new;
134
+ }
135
+ if (pos && !args.path)
136
+ args.path = pos;
137
+ break;
138
+ case "grep":
139
+ if (pos && !args.pattern)
140
+ args.pattern = pos;
141
+ break;
142
+ case "bash":
143
+ if (rawArgs && !args.command)
144
+ args.command = rawArgs;
145
+ break;
146
+ default:
147
+ if (pos)
148
+ args.input = pos;
149
+ }
150
+ return args;
151
+ }
152
+ /**
153
+ * Convert tool call arguments back to CLI flag string for history reconstruction.
154
+ */
155
+ export function argsToCliString(toolName, arguments_) {
156
+ if (toolName === "bash") {
157
+ return arguments_.command ?? "";
158
+ }
159
+ if (toolName === "ls" || toolName === "read") {
160
+ const path = arguments_.path;
161
+ const rest = Object.entries(arguments_)
162
+ .filter(([k]) => k !== "path")
163
+ .map(([k, v]) => `--${k} "${String(v).replace(/"/g, '\\"')}"`)
164
+ .join(" ");
165
+ return path ? (rest ? `${path} ${rest}` : path) : rest;
166
+ }
167
+ if (toolName === "edit") {
168
+ const mapped = { ...arguments_ };
169
+ if (mapped.oldText !== undefined) {
170
+ mapped.old = mapped.oldText;
171
+ delete mapped.oldText;
172
+ }
173
+ if (mapped.newText !== undefined) {
174
+ mapped.new = mapped.newText;
175
+ delete mapped.newText;
176
+ }
177
+ return Object.entries(mapped)
178
+ .map(([k, v]) => {
179
+ if (v === true)
180
+ return `--${k}`;
181
+ const s = String(v);
182
+ return s.includes(" ") || s.includes('"') || s.includes("\n")
183
+ ? `--${k} "${s.replace(/"/g, '\\"').replace(/\n/g, "\\n")}"`
184
+ : `--${k} ${s}`;
185
+ })
186
+ .join(" ");
187
+ }
188
+ return Object.entries(arguments_)
189
+ .map(([k, v]) => {
190
+ if (v === true)
191
+ return `--${k}`;
192
+ const s = String(v);
193
+ return s.includes(" ") || s.includes('"') || s.includes("\n")
194
+ ? `--${k} "${s.replace(/"/g, '\\"').replace(/\n/g, "\\n")}"`
195
+ : `--${k} ${s}`;
196
+ })
197
+ .join(" ");
198
+ }
199
+ // ─── Tool implementations ─────────────────────────────────────────────────────
200
+ export async function execLs(cwd, args) {
201
+ const dirPath = args.path
202
+ ? isAbsolute(args.path) ? args.path : resolve(cwd, args.path)
203
+ : cwd;
204
+ const entries = await readdir(dirPath);
205
+ const lines = [];
206
+ for (const entry of entries.sort()) {
207
+ try {
208
+ const fullPath = join(dirPath, entry);
209
+ const s = await stat(fullPath);
210
+ const type = s.isDirectory() ? "dir" : "file";
211
+ const size = s.isDirectory() ? "-" : formatSize(s.size);
212
+ lines.push(`${type}\t${size}\t${entry}`);
213
+ }
214
+ catch {
215
+ lines.push(`?\t?\t${entry}`);
216
+ }
217
+ }
218
+ return {
219
+ output: lines.length === 0 ? "(empty directory)" : lines.join("\n"),
220
+ isError: false,
221
+ };
222
+ }
223
+ export async function execRead(cwd, args) {
224
+ const absolutePath = args.path
225
+ ? (isAbsolute(args.path) ? args.path : resolve(cwd, args.path))
226
+ : resolve(cwd, ".");
227
+ const buffer = await readFile(absolutePath);
228
+ const text = buffer.toString("utf-8");
229
+ const allLines = text.split("\n");
230
+ const totalLines = allLines.length;
231
+ const offset = args.offset ? Number(args.offset) : undefined;
232
+ const limit = args.limit ? Number(args.limit) : undefined;
233
+ const startLine = offset ? Math.max(0, offset - 1) : 0;
234
+ if (startLine >= totalLines) {
235
+ throw new Error(`Offset ${offset} is beyond end of file (${totalLines} lines)`);
236
+ }
237
+ let selected = limit !== undefined
238
+ ? allLines.slice(startLine, startLine + limit)
239
+ : allLines.slice(startLine);
240
+ if (selected.length > MAX_FILE_LINES) {
241
+ selected = selected.slice(0, MAX_FILE_LINES);
242
+ }
243
+ let output = selected.join("\n");
244
+ if (Buffer.byteLength(output, "utf-8") > MAX_FILE_BYTES) {
245
+ const buf = Buffer.from(output, "utf-8");
246
+ output = buf.subarray(0, MAX_FILE_BYTES).toString("utf-8");
247
+ }
248
+ const shownLines = output.split("\n").length;
249
+ const remaining = totalLines - startLine - shownLines;
250
+ if (remaining > 0) {
251
+ const nextOffset = startLine + shownLines + 1;
252
+ output += `\n\n[Showing ${shownLines} of ${totalLines} lines. Use --offset ${nextOffset} to continue.]`;
253
+ }
254
+ return { output, isError: false };
255
+ }
256
+ export async function execWrite(cwd, args) {
257
+ if (!args.path)
258
+ throw new Error("write requires --path");
259
+ if (args.content === undefined)
260
+ throw new Error("write requires --content");
261
+ const absolutePath = isAbsolute(args.path) ? args.path : resolve(cwd, args.path);
262
+ await mkdir(dirname(absolutePath), { recursive: true });
263
+ await writeFile(absolutePath, args.content, "utf-8");
264
+ return {
265
+ output: `Wrote ${String(args.content).length} bytes to ${args.path}`,
266
+ isError: false,
267
+ };
268
+ }
269
+ export async function execEdit(cwd, args) {
270
+ if (!args.path)
271
+ throw new Error("edit requires --path");
272
+ if (args.oldText === undefined)
273
+ throw new Error("edit requires --old");
274
+ if (args.newText === undefined)
275
+ throw new Error("edit requires --new");
276
+ const absolutePath = isAbsolute(args.path) ? args.path : resolve(cwd, args.path);
277
+ const content = await readFile(absolutePath, "utf-8");
278
+ const index = content.indexOf(args.oldText);
279
+ if (index === -1) {
280
+ throw new Error(`Could not find the exact text in ${args.path}. The --old text must match exactly including whitespace.`);
281
+ }
282
+ const second = content.indexOf(args.oldText, index + 1);
283
+ if (second !== -1) {
284
+ throw new Error(`Found multiple occurrences of the text in ${args.path}. Provide more context to make it unique.`);
285
+ }
286
+ const newContent = content.substring(0, index) + args.newText + content.substring(index + args.oldText.length);
287
+ await writeFile(absolutePath, newContent, "utf-8");
288
+ return { output: `Edited ${args.path}`, isError: false };
289
+ }
290
+ export async function execGrep(cwd, args) {
291
+ if (!args.pattern)
292
+ throw new Error("grep requires a pattern");
293
+ const searchDir = args.path
294
+ ? (isAbsolute(args.path) ? args.path : resolve(cwd, args.path))
295
+ : cwd;
296
+ let regex;
297
+ try {
298
+ regex = new RegExp(args.pattern, "g");
299
+ }
300
+ catch (e) {
301
+ throw new Error(`Invalid regex pattern: ${e.message}`);
302
+ }
303
+ const extFilter = args.include ? parseExtFilter(args.include) : null;
304
+ const results = [];
305
+ await grepDirectory(searchDir, regex, extFilter, results, cwd);
306
+ if (results.length === 0) {
307
+ return { output: "No matches found.", isError: false };
308
+ }
309
+ let output = results.join("\n");
310
+ if (results.length >= MAX_GREP_RESULTS) {
311
+ output += `\n\n[Truncated at ${MAX_GREP_RESULTS} results]`;
312
+ }
313
+ return { output, isError: false };
314
+ }
315
+ export async function execBash(cwd, args, signal) {
316
+ const command = args.command;
317
+ if (!command)
318
+ throw new Error("bash requires a command");
319
+ return new Promise((resolve_, reject) => {
320
+ const shell = process.env.SHELL || "/bin/bash";
321
+ const child = spawn(shell, ["-c", command], {
322
+ cwd,
323
+ stdio: ["ignore", "pipe", "pipe"],
324
+ env: { ...process.env },
325
+ });
326
+ const chunks = [];
327
+ const onAbort = () => {
328
+ child.kill("SIGTERM");
329
+ setTimeout(() => child.kill("SIGKILL"), 2000);
330
+ };
331
+ if (signal) {
332
+ if (signal.aborted) {
333
+ onAbort();
334
+ }
335
+ else {
336
+ signal.addEventListener("abort", onAbort, { once: true });
337
+ }
338
+ }
339
+ child.stdout?.on("data", (d) => chunks.push(d));
340
+ child.stderr?.on("data", (d) => chunks.push(d));
341
+ child.on("close", (code) => {
342
+ if (signal)
343
+ signal.removeEventListener("abort", onAbort);
344
+ const raw = Buffer.concat(chunks).toString("utf-8");
345
+ const output = truncateOutput(raw);
346
+ const isError = code !== 0 && code !== null;
347
+ resolve_({ output: output || "(no output)", isError });
348
+ });
349
+ child.on("error", (err) => {
350
+ if (signal)
351
+ signal.removeEventListener("abort", onAbort);
352
+ reject(err);
353
+ });
354
+ });
355
+ }
356
+ // ─── Dispatch ─────────────────────────────────────────────────────────────────
357
+ export async function dispatchTool(toolName, rawArgs, cwd, signal) {
358
+ const args = mapArgsToTool(toolName, rawArgs);
359
+ switch (toolName) {
360
+ case "ls": return execLs(cwd, args);
361
+ case "read": return execRead(cwd, args);
362
+ case "write": return execWrite(cwd, args);
363
+ case "edit": return execEdit(cwd, args);
364
+ case "grep": return execGrep(cwd, args);
365
+ case "bash": return execBash(cwd, args, signal);
366
+ default: {
367
+ // Fallback: treat unknown commands as bash
368
+ const bashCmd = `${toolName}${rawArgs ? " " + rawArgs : ""}`;
369
+ return execBash(cwd, { command: bashCmd }, signal);
370
+ }
371
+ }
372
+ }
373
+ // ─── Result formatting ────────────────────────────────────────────────────────
374
+ export function buildResultBlock(output, isError, id, total, cliCommand) {
375
+ const idAttr = id !== undefined ? ` id=${id}` : "";
376
+ const cliAttr = cliCommand ? ` cli="${cliCommand.replace(/"/g, '\\"')}"` : "";
377
+ const errAttr = isError ? " error=true" : "";
378
+ return `[RESULT${idAttr}${cliAttr}${errAttr}]\n${output}\n[/RESULT]`;
379
+ }
380
+ // ─── History rewriting ────────────────────────────────────────────────────────
381
+ /**
382
+ * Reconstruct the [CLI] text that the model originally emitted for a tool call.
383
+ */
384
+ export function reconstructCliText(toolName, arguments_) {
385
+ const cliArgs = argsToCliString(toolName, arguments_);
386
+ const inner = cliArgs ? `${toolName} ${cliArgs}` : toolName;
387
+ return `[CLI] ${inner}[/CLI]`;
388
+ }
389
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
390
+ function formatSize(bytes) {
391
+ if (bytes < 1024)
392
+ return `${bytes}B`;
393
+ if (bytes < 1024 * 1024)
394
+ return `${(bytes / 1024).toFixed(1)}KB`;
395
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
396
+ }
397
+ function parseExtFilter(include) {
398
+ if (include.startsWith("*."))
399
+ return include.substring(1);
400
+ return include;
401
+ }
402
+ const SKIP_DIRS = new Set([
403
+ "node_modules", ".git", "dist", "build", ".next", "__pycache__",
404
+ ".venv", "venv", ".cache", "coverage",
405
+ ]);
406
+ async function grepDirectory(dir, regex, extFilter, results, cwd) {
407
+ if (results.length >= MAX_GREP_RESULTS)
408
+ return;
409
+ let entries;
410
+ try {
411
+ entries = await readdir(dir);
412
+ }
413
+ catch {
414
+ return;
415
+ }
416
+ for (const entry of entries) {
417
+ if (results.length >= MAX_GREP_RESULTS)
418
+ return;
419
+ const fullPath = join(dir, entry);
420
+ let s;
421
+ try {
422
+ s = await stat(fullPath);
423
+ }
424
+ catch {
425
+ continue;
426
+ }
427
+ if (s.isDirectory()) {
428
+ if (!SKIP_DIRS.has(entry)) {
429
+ await grepDirectory(fullPath, regex, extFilter, results, cwd);
430
+ }
431
+ }
432
+ else if (s.isFile()) {
433
+ if (s.size > MAX_GREP_FILE_SIZE)
434
+ continue;
435
+ if (extFilter && !entry.endsWith(extFilter))
436
+ continue;
437
+ try {
438
+ const content = await readFile(fullPath, "utf-8");
439
+ const lines = content.split("\n");
440
+ const relPath = relative(cwd, fullPath);
441
+ for (let i = 0; i < lines.length; i++) {
442
+ regex.lastIndex = 0;
443
+ if (regex.test(lines[i])) {
444
+ results.push(`${relPath}:${i + 1}: ${lines[i].trimEnd()}`);
445
+ if (results.length >= MAX_GREP_RESULTS)
446
+ return;
447
+ }
448
+ }
449
+ }
450
+ catch { /* skip binary/unreadable */ }
451
+ }
452
+ }
453
+ }
454
+ function truncateOutput(text) {
455
+ const lines = text.split("\n");
456
+ if (lines.length > MAX_OUTPUT_LINES) {
457
+ const kept = lines.slice(lines.length - MAX_OUTPUT_LINES);
458
+ return `[${lines.length - MAX_OUTPUT_LINES} lines truncated]\n${kept.join("\n")}`;
459
+ }
460
+ if (Buffer.byteLength(text, "utf-8") > MAX_OUTPUT_BYTES) {
461
+ const buf = Buffer.from(text, "utf-8");
462
+ return buf.subarray(buf.length - MAX_OUTPUT_BYTES).toString("utf-8");
463
+ }
464
+ return text;
465
+ }
466
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/extension/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * pi-pizza extension
3
+ *
4
+ * Replaces JSON tool calling with [CLI] tag output — the "pizza" approach.
5
+ * The LLM emits [CLI] toolName args[/CLI] text blocks instead of native tool
6
+ * calls. Results are returned as [RESULT]...[/RESULT] text. Conversation
7
+ * history is rewritten so the model always sees the [CLI]/[RESULT] format.
8
+ *
9
+ * Supports: ls, read, write, edit, grep, bash
10
+ *
11
+ * Usage in pi:
12
+ * /pizza-mode — toggle pizza mode on/off
13
+ */
14
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
15
+ export default function (pi: ExtensionAPI): void;