agentic-pi 0.2.3 → 0.2.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.
- package/README.md +57 -2
- package/dist/args.d.ts +11 -0
- package/dist/args.js +17 -0
- package/dist/args.js.map +1 -1
- package/dist/extensions/file-search/index.d.ts +66 -0
- package/dist/extensions/file-search/index.js +86 -0
- package/dist/extensions/file-search/index.js.map +1 -0
- package/dist/run.d.ts +18 -0
- package/dist/run.js +11 -0
- package/dist/run.js.map +1 -1
- package/dist/runner.js +56 -1
- package/dist/runner.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -246,6 +246,53 @@ When skipped (no keys / `--no-web-search`), `status: "skipped"` carries a
|
|
|
246
246
|
(explicit provider whose key is missing, or an unknown provider name)
|
|
247
247
|
surface as a warning before the run starts.
|
|
248
248
|
|
|
249
|
+
### 9. Default file search via FFF
|
|
250
|
+
|
|
251
|
+
agentic-pi bundles [`@ff-labs/pi-fff`](https://github.com/dmtrKovalenko/fff/tree/main/packages/pi-fff)
|
|
252
|
+
— a Rust-backed, git-aware, frecency-ranked, SIMD-accelerated fuzzy file/content
|
|
253
|
+
search — as the **default** file-search backend. It ships as a dependency and is
|
|
254
|
+
loaded for **every** run with no per-host `pi install` required.
|
|
255
|
+
|
|
256
|
+
**`override` mode by default.** FFF registers under Pi's built-in tool names
|
|
257
|
+
(`find`, `grep`, `multi_grep`), transparently replacing the built-ins. The agent
|
|
258
|
+
gets faster, git-aware search with zero prompt changes. Switch behaviour with
|
|
259
|
+
`--file-search-mode`:
|
|
260
|
+
|
|
261
|
+
| Mode | Tool names | Notes |
|
|
262
|
+
| --- | --- | --- |
|
|
263
|
+
| `override` (default) | `find`, `grep`, `multi_grep` | Transparent replacement of Pi's built-ins. |
|
|
264
|
+
| `tools-only` | `fffind`, `ffgrep`, `fff-multi-grep` | Added alongside Pi's built-ins; the agent chooses. |
|
|
265
|
+
| `tools-and-ui` | same as `tools-only` | Adds `@`-mention autocomplete — useless headless; not recommended. |
|
|
266
|
+
|
|
267
|
+
The CLI flag maps to FFF's `PI_FFF_MODE` env var. An explicit `PI_FFF_MODE` in the
|
|
268
|
+
environment wins over the flag. Pass `--no-file-search` to disable FFF entirely and
|
|
269
|
+
fall back to Pi's built-in `find`/`grep`.
|
|
270
|
+
|
|
271
|
+
**Host-process execution.** Like web search, FFF runs in the agentic-pi process,
|
|
272
|
+
**not** inside the Gondolin guest. Under `--sandbox gondolin`, `read`/`write`/`edit`/
|
|
273
|
+
`bash` route through the VM while `find`/`grep` (FFF) run host-side against the
|
|
274
|
+
bind-mounted workspace. Paths align (cwd is the mount), and FFF only touches the
|
|
275
|
+
local filesystem — no egress or secret exposure.
|
|
276
|
+
|
|
277
|
+
**Native binary.** FFF is a native Rust library (`@ff-labs/fff-node`) shipped as
|
|
278
|
+
prebuilt per-platform binaries (`fff-bin-linux-x64-gnu`/`-musl`, `darwin`, `win32`).
|
|
279
|
+
npm auto-selects the correct one at install time. In containers, run `npm install`
|
|
280
|
+
on the target platform — do **not** copy `node_modules` across glibc↔musl.
|
|
281
|
+
|
|
282
|
+
**Safe by default.** If pi-fff can't be resolved or its native binary fails to load
|
|
283
|
+
on the platform, the run is **not** aborted — file search skips with
|
|
284
|
+
`reason: "resolve-failed"` (surfaced as a warning) and the agent falls back to Pi's
|
|
285
|
+
built-in `find`/`grep`.
|
|
286
|
+
|
|
287
|
+
**Event stream.** A third `extension_status` event mirrors the others:
|
|
288
|
+
|
|
289
|
+
```jsonl
|
|
290
|
+
{"type":"extension_status","extension":"file-search","status":"configured","mode":"override","toolCount":3,"sessionId":"…","timestamp":"…"}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
When disabled or unavailable, `status: "skipped"` carries a `reason` of
|
|
294
|
+
`disabled-by-flag` or `resolve-failed`.
|
|
295
|
+
|
|
249
296
|
## When to use this
|
|
250
297
|
|
|
251
298
|
- You have an orchestrator that calls a coding agent once per workflow
|
|
@@ -261,8 +308,9 @@ surface as a warning before the run starts.
|
|
|
261
308
|
- You want generic MCP support. Pi has none by design and agentic-pi inherits
|
|
262
309
|
that decision; only the GitHub tool surface is built-in.
|
|
263
310
|
- You want a different tool surface (Linear, GitLab, internal APIs). Fork the
|
|
264
|
-
`extensions/github/` directory as a template
|
|
265
|
-
|
|
311
|
+
`extensions/github/` directory as a template. agentic-pi bundles specific Pi
|
|
312
|
+
extensions (GitHub, web search, FFF file search) but does not (yet) load
|
|
313
|
+
arbitrary operator-supplied extensions as a runtime plugin system.
|
|
266
314
|
|
|
267
315
|
## Usage
|
|
268
316
|
|
|
@@ -307,6 +355,8 @@ GITHUB_TOKEN=ghp_…
|
|
|
307
355
|
| `--no-network` | Disable sandbox HTTP egress entirely. Ignored when `--sandbox=none`. |
|
|
308
356
|
| `--web-search-provider <p>` | Force web-search provider: `tavily` \| `brave` \| `exa`. Default: auto-detect by env. See section 8. |
|
|
309
357
|
| `--no-web-search` | Disable the web-search extension (no `web_search`/`web_fetch` tools). |
|
|
358
|
+
| `--no-file-search` | Disable the bundled FFF file-search extension; fall back to Pi's built-in `find`/`grep`. |
|
|
359
|
+
| `--file-search-mode <m>` | FFF mode: `override` (default) \| `tools-only` \| `tools-and-ui`. Overridden by the `PI_FFF_MODE` env var. See section 9. |
|
|
310
360
|
| `--web-search-max-calls <n>` | Cap combined `web_search` + `web_fetch` calls per run. Default: 30. |
|
|
311
361
|
|
|
312
362
|
Reads the prompt from stdin. Emits JSONL on stdout. Exits 0 on `agent_end`,
|
|
@@ -319,6 +369,7 @@ Reads the prompt from stdin. Emits JSONL on stdout. Exits 0 on `agent_end`,
|
|
|
319
369
|
{"type":"sandbox_status","backend":"none","status":{"backend":"none"},"sessionId":"<uuid>","timestamp":"…"}
|
|
320
370
|
{"type":"extension_status","extension":"github","status":"configured","profile":"read","toolCount":18,"sessionId":"<uuid>","timestamp":"…"}
|
|
321
371
|
{"type":"extension_status","extension":"web-search","status":"configured","provider":"tavily","toolCount":2,"maxCalls":30,"sessionId":"<uuid>","timestamp":"…"}
|
|
372
|
+
{"type":"extension_status","extension":"file-search","status":"configured","mode":"override","toolCount":3,"sessionId":"<uuid>","timestamp":"…"}
|
|
322
373
|
{"type":"agent_start","sessionId":"<uuid>","timestamp":"…"}
|
|
323
374
|
{"type":"turn_start","sessionId":"<uuid>","timestamp":"…"}
|
|
324
375
|
{"type":"message_start","message":{…},"sessionId":"<uuid>","timestamp":"…"}
|
|
@@ -399,6 +450,7 @@ console.log(result.records.length); // full event log
|
|
|
399
450
|
| `sandbox` | `{backend, status}` \| `undefined` | Mirror of the `sandbox_status` event. |
|
|
400
451
|
| `github` | `{status, reason, profile, toolCount}` \| `undefined` | Mirror of the GitHub `extension_status` event. |
|
|
401
452
|
| `webSearch` | `{status, reason, provider, toolCount, maxCalls}` \| `undefined` | Mirror of the web-search `extension_status` event. |
|
|
453
|
+
| `fileSearch` | `{status, reason, mode, toolCount}` \| `undefined` | Mirror of the FFF file-search `extension_status` event. |
|
|
402
454
|
| `records` | `EmitterRecord[]` | Every JSONL record in order. Same shape that the CLI writes. |
|
|
403
455
|
| `warnings` | `string[]` | Warnings that would have gone to stderr in CLI mode. |
|
|
404
456
|
|
|
@@ -450,6 +502,7 @@ which walks `test/` for `*.test.ts`.
|
|
|
450
502
|
| `test/extensions/github/profiles.test.ts` | Profile → tool allowlist (counts, superset structure, scope tiering) | — |
|
|
451
503
|
| `test/extensions/github/credentials.test.ts` | `assertSafeToken` and `credentialsFilePath` validation | — |
|
|
452
504
|
| `test/extensions/web-search/*.test.ts` | Provider selection, extension wiring, safe-fetch rails, HTML extraction, rate limiter, per-provider normalization (all with injected `fetchImpl`) | — |
|
|
505
|
+
| `test/extensions/file-search/index.test.ts` | FFF extension wiring: mode → tool names, package resolution, disabled-by-flag + resolve-failed skips | — |
|
|
453
506
|
| `test/sandbox/preflight.test.ts` | Preflight returns a structured ok\|error result | — |
|
|
454
507
|
| `test/run.integration.test.ts` | Programmatic `run()`: RunResult populated, onEvent fires for every record, **child-process check confirms zero stdout/stderr leak from library** | `OPENAI_API_KEY` not set |
|
|
455
508
|
| `test/run-sandbox.integration.test.ts` | `run({ sandbox: "gondolin" })` boots a VM, agent's `write` tool produces a host file via the mount | `OPENAI_API_KEY` not set OR QEMU/preflight unavailable |
|
|
@@ -521,6 +574,8 @@ src/
|
|
|
521
574
|
credentials.ts git credential-store file writer (mode 600)
|
|
522
575
|
profiles.ts 4 profiles → tool name allowlists
|
|
523
576
|
tools.ts 31 defineTool() registrations
|
|
577
|
+
extensions/file-search/
|
|
578
|
+
index.ts loadFileSearchExtension() — resolves bundled @ff-labs/pi-fff
|
|
524
579
|
sandbox/
|
|
525
580
|
index.ts buildSandbox(backend) dispatcher
|
|
526
581
|
preflight.ts QEMU + accelerator detection (refuses to start if hung)
|
package/dist/args.d.ts
CHANGED
|
@@ -76,6 +76,17 @@ export interface RunConfig {
|
|
|
76
76
|
* Set via `--web-search-max-calls <n>`.
|
|
77
77
|
*/
|
|
78
78
|
webSearchMaxCalls?: number;
|
|
79
|
+
/**
|
|
80
|
+
* File-search extension (FFF) toggle. Default: true — bundled and
|
|
81
|
+
* enabled for every run. Pass `--no-file-search` to fall back to Pi's
|
|
82
|
+
* built-in find/grep.
|
|
83
|
+
*/
|
|
84
|
+
fileSearch: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* FFF mode. Default: "override" (FFF replaces built-in find/grep under
|
|
87
|
+
* the same names). Set via `--file-search-mode <override|tools-only|tools-and-ui>`.
|
|
88
|
+
*/
|
|
89
|
+
fileSearchMode?: "override" | "tools-only" | "tools-and-ui";
|
|
79
90
|
}
|
|
80
91
|
export declare function printHelp(): void;
|
|
81
92
|
export declare function parseArgs(argv: string[]): RunConfig;
|
package/dist/args.js
CHANGED
|
@@ -43,6 +43,11 @@ Flags:
|
|
|
43
43
|
--web-search-max-calls <n> Cap combined web_search + web_fetch calls per run.
|
|
44
44
|
Default: 30. When exceeded, further calls return a
|
|
45
45
|
structured error result.
|
|
46
|
+
--no-file-search Disable the bundled FFF file-search extension; fall
|
|
47
|
+
back to Pi's built-in find/grep.
|
|
48
|
+
--file-search-mode <m> FFF mode: override | tools-only | tools-and-ui.
|
|
49
|
+
Default: override (FFF replaces built-in find/grep
|
|
50
|
+
under the same names). Overridden by PI_FFF_MODE env.
|
|
46
51
|
--sandbox-image <name> Image to boot when --sandbox=gondolin. Values:
|
|
47
52
|
'default' (recommended) — bundled agentic-pi-dev image
|
|
48
53
|
with git/gh/node/python/rust baked in (auto-downloaded).
|
|
@@ -64,6 +69,7 @@ export function parseArgs(argv) {
|
|
|
64
69
|
dangerouslySkipPermissions: false,
|
|
65
70
|
sandbox: "none",
|
|
66
71
|
webSearch: true,
|
|
72
|
+
fileSearch: true,
|
|
67
73
|
};
|
|
68
74
|
for (let i = 0; i < argv.length; i++) {
|
|
69
75
|
const arg = argv[i];
|
|
@@ -176,6 +182,17 @@ export function parseArgs(argv) {
|
|
|
176
182
|
config.webSearchMaxCalls = n;
|
|
177
183
|
break;
|
|
178
184
|
}
|
|
185
|
+
case "--no-file-search":
|
|
186
|
+
config.fileSearch = false;
|
|
187
|
+
break;
|
|
188
|
+
case "--file-search-mode": {
|
|
189
|
+
const v = next();
|
|
190
|
+
if (v !== "override" && v !== "tools-only" && v !== "tools-and-ui") {
|
|
191
|
+
throw new Error(`invalid --file-search-mode '${v}'. Expected: override | tools-only | tools-and-ui`);
|
|
192
|
+
}
|
|
193
|
+
config.fileSearchMode = v;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
179
196
|
case "-h":
|
|
180
197
|
case "--help":
|
|
181
198
|
printHelp();
|
package/dist/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-search extension entry point.
|
|
3
|
+
*
|
|
4
|
+
* Bundles FFF (`@ff-labs/pi-fff`) — a Rust-backed, git-aware,
|
|
5
|
+
* frecency-ranked fuzzy file/content search — as agentic-pi's default
|
|
6
|
+
* file-search backend, so every run gets it without a per-host
|
|
7
|
+
* `pi install`.
|
|
8
|
+
*
|
|
9
|
+
* Unlike the `github` and `web-search` extensions, this one does NOT
|
|
10
|
+
* contribute a `customTools` array. pi-fff is a full Pi extension
|
|
11
|
+
* (registers tools + an `@`-mention enhancer via an ExtensionFactory), so
|
|
12
|
+
* it is loaded through Pi's resource loader, not the SDK's `customTools`
|
|
13
|
+
* channel. This module's job is to:
|
|
14
|
+
*
|
|
15
|
+
* 1. Resolve the installed pi-fff package directory (the value the
|
|
16
|
+
* runner hands to `DefaultResourceLoader.additionalExtensionPaths`).
|
|
17
|
+
* 2. Decide the FFF mode the runner publishes via the `PI_FFF_MODE` env.
|
|
18
|
+
*
|
|
19
|
+
* Mirrors the other extensions' "safe by default" contract: if the
|
|
20
|
+
* package can't be resolved (missing / incompatible native binary), we
|
|
21
|
+
* skip with a reason rather than aborting the run, and the agent falls
|
|
22
|
+
* back to Pi's built-in `find`/`grep`.
|
|
23
|
+
*/
|
|
24
|
+
/** FFF mode. `override` replaces Pi's built-in find/grep under the same names. */
|
|
25
|
+
export type FileSearchMode = "override" | "tools-only" | "tools-and-ui";
|
|
26
|
+
export declare const VALID_FILE_SEARCH_MODES: FileSearchMode[];
|
|
27
|
+
export declare const DEFAULT_FILE_SEARCH_MODE: FileSearchMode;
|
|
28
|
+
export type FileSearchSkipReason = "disabled-by-flag" | "resolve-failed";
|
|
29
|
+
export interface FileSearchExtensionConfig {
|
|
30
|
+
/** When false, the extension is force-skipped (disabled-by-flag). Default: true. */
|
|
31
|
+
fileSearch?: boolean;
|
|
32
|
+
/** FFF mode. Default: "override". */
|
|
33
|
+
fileSearchMode?: FileSearchMode;
|
|
34
|
+
/**
|
|
35
|
+
* Resolver override (injected by tests). Returns the absolute path to the
|
|
36
|
+
* installed `@ff-labs/pi-fff` package directory, or throws.
|
|
37
|
+
*/
|
|
38
|
+
resolvePackageDir?: () => string;
|
|
39
|
+
}
|
|
40
|
+
export interface FileSearchExtensionResult {
|
|
41
|
+
status: "configured" | "skipped";
|
|
42
|
+
reason?: FileSearchSkipReason;
|
|
43
|
+
message?: string;
|
|
44
|
+
/** The FFF mode in effect (echoed for observability). */
|
|
45
|
+
mode?: FileSearchMode;
|
|
46
|
+
/**
|
|
47
|
+
* Absolute path to the pi-fff package directory. The runner passes this
|
|
48
|
+
* to `DefaultResourceLoader.additionalExtensionPaths`. Undefined when
|
|
49
|
+
* skipped.
|
|
50
|
+
*/
|
|
51
|
+
packageDir?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Tool names the agent will see, derived from `mode` (for the
|
|
54
|
+
* `extension_status` event only — the tools themselves are registered by
|
|
55
|
+
* pi-fff, not here).
|
|
56
|
+
*/
|
|
57
|
+
toolNames: string[];
|
|
58
|
+
}
|
|
59
|
+
export declare function loadFileSearchExtension(config?: FileSearchExtensionConfig): FileSearchExtensionResult;
|
|
60
|
+
/**
|
|
61
|
+
* True if the skip is something the user almost certainly wants surfaced
|
|
62
|
+
* as a warning. A resolve failure means file search was meant to work but
|
|
63
|
+
* the install/binary is broken; `disabled-by-flag` is an explicit choice
|
|
64
|
+
* and stays silent.
|
|
65
|
+
*/
|
|
66
|
+
export declare function isMisconfigurationSkip(result: FileSearchExtensionResult): boolean;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-search extension entry point.
|
|
3
|
+
*
|
|
4
|
+
* Bundles FFF (`@ff-labs/pi-fff`) — a Rust-backed, git-aware,
|
|
5
|
+
* frecency-ranked fuzzy file/content search — as agentic-pi's default
|
|
6
|
+
* file-search backend, so every run gets it without a per-host
|
|
7
|
+
* `pi install`.
|
|
8
|
+
*
|
|
9
|
+
* Unlike the `github` and `web-search` extensions, this one does NOT
|
|
10
|
+
* contribute a `customTools` array. pi-fff is a full Pi extension
|
|
11
|
+
* (registers tools + an `@`-mention enhancer via an ExtensionFactory), so
|
|
12
|
+
* it is loaded through Pi's resource loader, not the SDK's `customTools`
|
|
13
|
+
* channel. This module's job is to:
|
|
14
|
+
*
|
|
15
|
+
* 1. Resolve the installed pi-fff package directory (the value the
|
|
16
|
+
* runner hands to `DefaultResourceLoader.additionalExtensionPaths`).
|
|
17
|
+
* 2. Decide the FFF mode the runner publishes via the `PI_FFF_MODE` env.
|
|
18
|
+
*
|
|
19
|
+
* Mirrors the other extensions' "safe by default" contract: if the
|
|
20
|
+
* package can't be resolved (missing / incompatible native binary), we
|
|
21
|
+
* skip with a reason rather than aborting the run, and the agent falls
|
|
22
|
+
* back to Pi's built-in `find`/`grep`.
|
|
23
|
+
*/
|
|
24
|
+
import { createRequire } from "node:module";
|
|
25
|
+
import { dirname } from "node:path";
|
|
26
|
+
export const VALID_FILE_SEARCH_MODES = [
|
|
27
|
+
"override",
|
|
28
|
+
"tools-only",
|
|
29
|
+
"tools-and-ui",
|
|
30
|
+
];
|
|
31
|
+
export const DEFAULT_FILE_SEARCH_MODE = "override";
|
|
32
|
+
/** Tool names FFF exposes per mode (see @ff-labs/pi-fff src/index.ts). */
|
|
33
|
+
function toolNamesForMode(mode) {
|
|
34
|
+
return mode === "override"
|
|
35
|
+
? ["find", "grep", "multi_grep"]
|
|
36
|
+
: ["fffind", "ffgrep", "fff-multi-grep"];
|
|
37
|
+
}
|
|
38
|
+
function defaultResolvePackageDir() {
|
|
39
|
+
// Resolve relative to this module so it works regardless of the
|
|
40
|
+
// consumer's cwd. `@ff-labs/pi-fff/package.json` is always present; its
|
|
41
|
+
// directory is what the loader's package resolver reads the `pi`
|
|
42
|
+
// manifest from.
|
|
43
|
+
const require = createRequire(import.meta.url);
|
|
44
|
+
return dirname(require.resolve("@ff-labs/pi-fff/package.json"));
|
|
45
|
+
}
|
|
46
|
+
export function loadFileSearchExtension(config = {}) {
|
|
47
|
+
if (config.fileSearch === false) {
|
|
48
|
+
return {
|
|
49
|
+
status: "skipped",
|
|
50
|
+
reason: "disabled-by-flag",
|
|
51
|
+
message: "file search disabled via --no-file-search",
|
|
52
|
+
toolNames: [],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const mode = config.fileSearchMode ?? DEFAULT_FILE_SEARCH_MODE;
|
|
56
|
+
const resolve = config.resolvePackageDir ?? defaultResolvePackageDir;
|
|
57
|
+
let packageDir;
|
|
58
|
+
try {
|
|
59
|
+
packageDir = resolve();
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
return {
|
|
63
|
+
status: "skipped",
|
|
64
|
+
reason: "resolve-failed",
|
|
65
|
+
message: `could not resolve @ff-labs/pi-fff: ${err.message}`,
|
|
66
|
+
mode,
|
|
67
|
+
toolNames: [],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
status: "configured",
|
|
72
|
+
mode,
|
|
73
|
+
packageDir,
|
|
74
|
+
toolNames: toolNamesForMode(mode),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* True if the skip is something the user almost certainly wants surfaced
|
|
79
|
+
* as a warning. A resolve failure means file search was meant to work but
|
|
80
|
+
* the install/binary is broken; `disabled-by-flag` is an explicit choice
|
|
81
|
+
* and stays silent.
|
|
82
|
+
*/
|
|
83
|
+
export function isMisconfigurationSkip(result) {
|
|
84
|
+
return result.status === "skipped" && result.reason === "resolve-failed";
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/file-search/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,UAAU;IACV,YAAY;IACZ,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAmB,UAAU,CAAC;AAoCnE,0EAA0E;AAC1E,SAAS,gBAAgB,CAAC,IAAoB;IAC5C,OAAO,IAAI,KAAK,UAAU;QACxB,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC;QAChC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,wBAAwB;IAC/B,gEAAgE;IAChE,wEAAwE;IACxE,iEAAiE;IACjE,iBAAiB;IACjB,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,SAAoC,EAAE;IAEtC,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAChC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,kBAAkB;YAC1B,OAAO,EAAE,2CAA2C;YACpD,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,IAAI,wBAAwB,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB,IAAI,wBAAwB,CAAC;IAErE,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,OAAO,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,gBAAgB;YACxB,OAAO,EAAE,sCAAuC,GAAa,CAAC,OAAO,EAAE;YACvE,IAAI;YACJ,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,IAAI;QACJ,UAAU;QACV,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC;KAClC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAiC;IACtE,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB,CAAC;AAC3E,CAAC"}
|
package/dist/run.d.ts
CHANGED
|
@@ -90,6 +90,17 @@ export interface RunOptions {
|
|
|
90
90
|
* payload (the agent can recover).
|
|
91
91
|
*/
|
|
92
92
|
webSearchMaxCalls?: number;
|
|
93
|
+
/**
|
|
94
|
+
* File-search extension (FFF) toggle. Default: `true` — bundled and
|
|
95
|
+
* enabled for every run. Set to `false` to fall back to Pi's built-in
|
|
96
|
+
* `find`/`grep`.
|
|
97
|
+
*/
|
|
98
|
+
fileSearch?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* FFF mode. Default: `"override"` (FFF replaces built-in `find`/`grep`
|
|
101
|
+
* under the same names). The `PI_FFF_MODE` env var, if set, wins.
|
|
102
|
+
*/
|
|
103
|
+
fileSearchMode?: "override" | "tools-only" | "tools-and-ui";
|
|
93
104
|
/**
|
|
94
105
|
* Called for every emitted JSONL record in order. Same shape that the
|
|
95
106
|
* CLI writes to stdout, with `sessionId` and `timestamp` already injected.
|
|
@@ -170,6 +181,13 @@ export interface RunResult {
|
|
|
170
181
|
toolCount: number;
|
|
171
182
|
maxCalls?: number;
|
|
172
183
|
};
|
|
184
|
+
fileSearch?: {
|
|
185
|
+
status: "configured" | "skipped";
|
|
186
|
+
reason?: string;
|
|
187
|
+
message?: string;
|
|
188
|
+
mode?: string;
|
|
189
|
+
toolCount: number;
|
|
190
|
+
};
|
|
173
191
|
/** Every JSONL record the run emitted, in order. */
|
|
174
192
|
records: EmitterRecord[];
|
|
175
193
|
/** Warnings that would have gone to stderr in CLI mode. */
|
package/dist/run.js
CHANGED
|
@@ -49,6 +49,8 @@ export async function run(options) {
|
|
|
49
49
|
webSearch: options.webSearch ?? true,
|
|
50
50
|
webSearchProvider: options.webSearchProvider,
|
|
51
51
|
webSearchMaxCalls: options.webSearchMaxCalls,
|
|
52
|
+
fileSearch: options.fileSearch ?? true,
|
|
53
|
+
fileSearchMode: options.fileSearchMode,
|
|
52
54
|
};
|
|
53
55
|
const collector = new CollectorSink(options.onEvent);
|
|
54
56
|
const sink = options.extraSink
|
|
@@ -106,6 +108,15 @@ function buildResult(exitCode, records, warnings) {
|
|
|
106
108
|
maxCalls: r.maxCalls,
|
|
107
109
|
};
|
|
108
110
|
}
|
|
111
|
+
else if (r.extension === "file-search") {
|
|
112
|
+
result.fileSearch = {
|
|
113
|
+
status: r.status,
|
|
114
|
+
reason: r.reason,
|
|
115
|
+
message: r.message,
|
|
116
|
+
mode: r.mode,
|
|
117
|
+
toolCount: r.toolCount ?? 0,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
109
120
|
break;
|
|
110
121
|
case "message_end": {
|
|
111
122
|
// Accumulate assistant text. Pi's message structure:
|
package/dist/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,EACL,aAAa,EACb,OAAO,GAGR,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAwB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.js
CHANGED
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
* an `onWarn` callback for the same reason — so library consumers never
|
|
11
11
|
* see `process.stderr` writes they didn't ask for.
|
|
12
12
|
*/
|
|
13
|
-
import { AuthStorage, ModelRegistry, SessionManager, createAgentSession, } from "@earendil-works/pi-coding-agent";
|
|
13
|
+
import { AuthStorage, DefaultResourceLoader, ModelRegistry, SessionManager, createAgentSession, getAgentDir, } from "@earendil-works/pi-coding-agent";
|
|
14
14
|
import { Emitter } from "./emitter.js";
|
|
15
15
|
import { loadGitHubExtension, isMisconfigurationSkip } from "./extensions/github/index.js";
|
|
16
16
|
import { loadWebSearchExtension, isMisconfigurationSkip as isWebSearchMisconfig, } from "./extensions/web-search/index.js";
|
|
17
|
+
import { loadFileSearchExtension, isMisconfigurationSkip as isFileSearchMisconfig, } from "./extensions/file-search/index.js";
|
|
17
18
|
import { resolveModel } from "./models.js";
|
|
18
19
|
import { buildSandbox } from "./sandbox/index.js";
|
|
19
20
|
import { ensureImage, ImageLoaderError } from "./sandbox/images/loader.js";
|
|
@@ -56,6 +57,24 @@ export async function runOnce(config, prompt, deps) {
|
|
|
56
57
|
// WEB_SEARCH_PROVIDER to override". Soft warning, not a misconfig.
|
|
57
58
|
warn(`web-search: ${webSearch.message}`);
|
|
58
59
|
}
|
|
60
|
+
// File-search extension (FFF). Bundled, default-on. Unlike github /
|
|
61
|
+
// web-search it doesn't contribute customTools — it's a full Pi
|
|
62
|
+
// extension loaded through the resource loader below. Here we only
|
|
63
|
+
// resolve the package and decide the mode; load failures are
|
|
64
|
+
// non-fatal (the agent falls back to Pi's built-in find/grep).
|
|
65
|
+
const fileSearch = loadFileSearchExtension({
|
|
66
|
+
fileSearch: config.fileSearch,
|
|
67
|
+
fileSearchMode: config.fileSearchMode,
|
|
68
|
+
});
|
|
69
|
+
// pi-fff reads its mode from the PI_FFF_MODE env in SDK mode (there is
|
|
70
|
+
// no CLI flag source). Publish the resolved mode, but never clobber an
|
|
71
|
+
// explicit operator-set value.
|
|
72
|
+
if (fileSearch.status === "configured" && fileSearch.mode && !process.env.PI_FFF_MODE) {
|
|
73
|
+
process.env.PI_FFF_MODE = fileSearch.mode;
|
|
74
|
+
}
|
|
75
|
+
if (isFileSearchMisconfig(fileSearch)) {
|
|
76
|
+
warn(`file-search extension disabled (${fileSearch.reason}): ${fileSearch.message ?? ""}`);
|
|
77
|
+
}
|
|
59
78
|
// Compose the env for the sandbox VM. Order (later wins):
|
|
60
79
|
// 1. Auto-injected GITHUB_TOKEN/GH_TOKEN from a minted installation
|
|
61
80
|
// token (when sandbox=gondolin AND github extension is configured).
|
|
@@ -135,6 +154,32 @@ export async function runOnce(config, prompt, deps) {
|
|
|
135
154
|
const noToolsMode = config.noBuiltinTools ? "builtin" :
|
|
136
155
|
sandbox.suppressBuiltins ? "builtin" :
|
|
137
156
|
undefined;
|
|
157
|
+
// Build the resource loader ourselves so we can inject the bundled
|
|
158
|
+
// pi-fff extension via additionalExtensionPaths while preserving Pi's
|
|
159
|
+
// default discovery (~/.pi/agent + project .pi). Mirrors the loader
|
|
160
|
+
// createAgentSession would build by default (same cwd + agentDir).
|
|
161
|
+
const agentDir = getAgentDir();
|
|
162
|
+
const resourceLoader = new DefaultResourceLoader({
|
|
163
|
+
cwd: config.cwd,
|
|
164
|
+
agentDir,
|
|
165
|
+
additionalExtensionPaths: fileSearch.packageDir ? [fileSearch.packageDir] : [],
|
|
166
|
+
});
|
|
167
|
+
await resourceLoader.reload();
|
|
168
|
+
// A load failure (e.g. missing native binary for this platform) is
|
|
169
|
+
// collected, not thrown — downgrade to a skip and warn so the run
|
|
170
|
+
// continues on Pi's built-in find/grep.
|
|
171
|
+
if (fileSearch.status === "configured" && fileSearch.packageDir) {
|
|
172
|
+
const loadError = resourceLoader
|
|
173
|
+
.getExtensions()
|
|
174
|
+
.errors.find((e) => e.path.startsWith(fileSearch.packageDir));
|
|
175
|
+
if (loadError) {
|
|
176
|
+
fileSearch.status = "skipped";
|
|
177
|
+
fileSearch.reason = "resolve-failed";
|
|
178
|
+
fileSearch.message = `pi-fff failed to load: ${loadError.error}`;
|
|
179
|
+
fileSearch.toolNames = [];
|
|
180
|
+
warn(`file-search extension disabled (resolve-failed): ${loadError.error}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
138
183
|
const { session } = await createAgentSession({
|
|
139
184
|
cwd: config.cwd,
|
|
140
185
|
model,
|
|
@@ -142,6 +187,7 @@ export async function runOnce(config, prompt, deps) {
|
|
|
142
187
|
sessionManager,
|
|
143
188
|
authStorage,
|
|
144
189
|
modelRegistry,
|
|
190
|
+
resourceLoader,
|
|
145
191
|
tools: config.tools,
|
|
146
192
|
noTools: noToolsMode,
|
|
147
193
|
customTools: [...sandbox.customTools, ...github.customTools, ...webSearch.customTools],
|
|
@@ -176,6 +222,15 @@ export async function runOnce(config, prompt, deps) {
|
|
|
176
222
|
toolCount: webSearch.toolNames.length,
|
|
177
223
|
maxCalls: webSearch.maxCalls,
|
|
178
224
|
});
|
|
225
|
+
emitter.event({
|
|
226
|
+
type: "extension_status",
|
|
227
|
+
extension: "file-search",
|
|
228
|
+
status: fileSearch.status,
|
|
229
|
+
reason: fileSearch.reason,
|
|
230
|
+
message: fileSearch.message,
|
|
231
|
+
mode: fileSearch.mode,
|
|
232
|
+
toolCount: fileSearch.toolNames.length,
|
|
233
|
+
});
|
|
179
234
|
let sawError = false;
|
|
180
235
|
let agentEndSeen = false;
|
|
181
236
|
const unsubscribe = session.subscribe((event) => {
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,kBAAkB,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-pi",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "A drop-in coding-agent harness built on earendil-works/pi, designed to replace opencode in workflow-driven systems like lastlight.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"@earendil-works/gondolin": "^0.12.0",
|
|
47
47
|
"@earendil-works/pi-ai": "^0.75.4",
|
|
48
48
|
"@earendil-works/pi-coding-agent": "^0.75.4",
|
|
49
|
+
"@ff-labs/pi-fff": "^0.9.4",
|
|
49
50
|
"@octokit/auth-app": "^7.1.4",
|
|
50
51
|
"@octokit/rest": "^21.0.2",
|
|
51
52
|
"@sinclair/typebox": "^0.34.0",
|