@heyhuynhgiabuu/pi-pretty 0.6.25 → 0.6.27

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.
Files changed (61) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +47 -17
  3. package/dist/config.d.ts +16 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +30 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/fff.d.ts +16 -1
  8. package/dist/fff.d.ts.map +1 -1
  9. package/dist/fff.js +139 -33
  10. package/dist/fff.js.map +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +192 -43
  13. package/dist/index.js.map +1 -1
  14. package/dist/prompt-editor.d.ts +11 -0
  15. package/dist/prompt-editor.d.ts.map +1 -0
  16. package/dist/prompt-editor.js +78 -0
  17. package/dist/prompt-editor.js.map +1 -0
  18. package/dist/render.d.ts +9 -1
  19. package/dist/render.d.ts.map +1 -1
  20. package/dist/render.js +25 -9
  21. package/dist/render.js.map +1 -1
  22. package/dist/tools/bash.d.ts.map +1 -1
  23. package/dist/tools/bash.js +73 -30
  24. package/dist/tools/bash.js.map +1 -1
  25. package/dist/tools/find.d.ts.map +1 -1
  26. package/dist/tools/find.js +29 -10
  27. package/dist/tools/find.js.map +1 -1
  28. package/dist/tools/grep.d.ts.map +1 -1
  29. package/dist/tools/grep.js +20 -10
  30. package/dist/tools/grep.js.map +1 -1
  31. package/dist/tools/ls.d.ts.map +1 -1
  32. package/dist/tools/ls.js +10 -5
  33. package/dist/tools/ls.js.map +1 -1
  34. package/dist/tools/metrics.d.ts +6 -1
  35. package/dist/tools/metrics.d.ts.map +1 -1
  36. package/dist/tools/metrics.js +21 -8
  37. package/dist/tools/metrics.js.map +1 -1
  38. package/dist/tools/read.d.ts +2 -1
  39. package/dist/tools/read.d.ts.map +1 -1
  40. package/dist/tools/read.js +93 -30
  41. package/dist/tools/read.js.map +1 -1
  42. package/dist/types.d.ts +13 -3
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/working-indicator.d.ts +91 -26
  45. package/dist/working-indicator.d.ts.map +1 -1
  46. package/dist/working-indicator.js +259 -77
  47. package/dist/working-indicator.js.map +1 -1
  48. package/package.json +7 -6
  49. package/src/config.ts +51 -0
  50. package/src/fff.ts +158 -29
  51. package/src/index.ts +207 -47
  52. package/src/prompt-editor.ts +102 -0
  53. package/src/render.ts +30 -11
  54. package/src/tools/bash.ts +94 -32
  55. package/src/tools/find.ts +39 -17
  56. package/src/tools/grep.ts +26 -15
  57. package/src/tools/ls.ts +19 -10
  58. package/src/tools/metrics.ts +28 -8
  59. package/src/tools/read.ts +122 -30
  60. package/src/types.ts +14 -3
  61. package/src/working-indicator.ts +309 -88
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.6.27] - 2026-09-09
4
+
5
+ ### Added
6
+
7
+ - User messages render with a `❯` prompt icon using `userMessageText`; live input follows Pi's active thinking-level color (`thinkingOff` through `thinkingMax`) for its icon and now renders as a theme-colored rounded box.
8
+
9
+ ### Fixed
10
+
11
+ - Tool titles again have one blank row above and below them, and custom tool bodies now retain one blank row below their output. Host `edit`/`write` renderers remain unchanged.
12
+ - Collapsed file-read previews now place their line count and `ctrl+o` expand hint in the title row instead of a separate body row.
13
+ - Collapsed `bash`, `find`, `grep`, and `ls` summaries now appear in their title rows instead of separate body rows.
14
+ - Collapsed reads of Pi's `README.md`, `docs/`, and `examples/` paths now use the `read docs` label, matching Pi's default renderer.
15
+ - The working shimmer now uses Pi's embedded working-status row at the top border of the input when supported, with the older above-editor widget retained as a compatibility fallback.
16
+ - The working shimmer no longer appends its own interrupt hint or live token-count suffix; legacy `workingIndicator.hint` configuration remains accepted but is ignored.
17
+ - Hidden-thinking labels now include left padding and show millisecond precision below one second (`250ms` instead of `0s`).
18
+ - FFF no longer surfaces a startup error when Pi launches from the exact home directory or filesystem root. It now falls back to SDK-backed `find`/`grep`; home and root indexing require explicit opt-in via `pi-pretty.json`, environment variables, or CLI flags.
19
+ - FFF initialization failures no longer duplicate the `FFF init failed:` prefix; unexpected failures are reported once as warnings.
20
+
21
+ ## [0.6.26] - 2026-09-05
22
+
23
+ ### Added
24
+
25
+ - Hidden-thinking elapsed timer: `Thinking... Xs` while thinking, then `Thought for Xs`. Completed messages keep their own durations for the session; multiple thinking runs within one message share its accumulated thinking time. Durations are not persisted across restarts.
26
+ - Live output-token count on the working indicator, using provider usage when available and a character-based estimate otherwise.
27
+
28
+ ### Fixed
29
+
30
+ - Load the pi extension from `src/index.ts` so jiti honors host SDK aliases even when a local checkout has its own SDK dependency. This prevents the per-message label patch from targeting a different class and making completed rows mirror the active timer. The Node package entry remains `dist/index.js`.
31
+ - Remove blank bottom-padding rows under `bash`, `read`, `find`, `grep`, and `ls` titles, including skill-read headers and expanded result-leading gaps. Preserve top padding and result-body/footer spacing; host `edit`/`write` renderers are unchanged.
32
+
33
+ ### Maintenance
34
+
35
+ - Update Pi development dependencies to `^0.85.0` and include `@earendil-works/pi-server` for the development SDK import graph.
36
+
3
37
  ## [0.6.25] - 2026-08-29
4
38
 
5
39
  ### Added
package/README.md CHANGED
@@ -5,15 +5,16 @@
5
5
 
6
6
  A [pi](https://pi.dev) extension that upgrades built-in tool output in the terminal and includes built-in FFF-powered search for `find`/`grep`.
7
7
 
8
- Tool **result bodies** start **collapsed** (header + line count). Use Pi **Ctrl+O** (`app.tools.expand`) on a tool block to show full output; **Ctrl+Shift+O** expands all. See [Pi keybindings](https://pi.dev/docs/latest/keybindings).
8
+ Tool **result bodies** start **collapsed** (header + line count) and retain a blank row below their output. Use Pi **Ctrl+O** (`app.tools.expand`) on a tool block to show full output; **Ctrl+Shift+O** expands all. See [Pi keybindings](https://pi.dev/docs/latest/keybindings).
9
9
 
10
10
  It currently enhances:
11
11
 
12
- - **`read`**: syntax-highlighted text previews with line numbers, plus inline image rendering when the terminal supports it
12
+ - **user messages**: a `❯` prompt icon using `userMessageText`; **live input** follows the active thinking-level color for its icon
13
+ - **`read`**: syntax-highlighted text previews with line numbers, `read docs` labels for Pi documentation reads, plus inline image rendering when the terminal supports it
13
14
  - **`bash`**: colored exit summary (`exit 0`/`exit 1`) with a preview body of command output
14
15
  - **`ls`**: Nerd Font file icons with tree-oriented rendering
15
16
  - **`find` / `grep`**: built-in FFF-backed search with frecency-aware results, plus grouped/highlighted rendering
16
- - **working indicator**: an [oh-my-pi](https://github.com/can1357/oh-my-pi)-style shimmer sweep over the streaming `Working…` row — flush-left, rotating phrases, per-session accent tint (see [Working indicator](#working-indicator-shimmer))
17
+ - **working indicator**: an [oh-my-pi](https://github.com/can1357/oh-my-pi)-style shimmer sweep in the input's top-border `Working…` row — flush-left, rotating phrases, per-session accent tint (see [Working indicator](#working-indicator-shimmer))
17
18
  - **thinking label**: the hidden-thinking `Thinking...` label gets the same shimmer treatment (see [Thinking label](#thinking-label-shimmer))
18
19
 
19
20
  > Companion to [@heyhuynhgiabuu/pi-diff](https://github.com/buddingnewinsights/pi-diff) for `write`/`edit` diff rendering.
@@ -121,6 +122,16 @@ Use them when:
121
122
  - `find` results are frecency-aware, so files you touch more often can bubble up earlier.
122
123
  - `grep` can show a cursor notice when more results are available.
123
124
  - If you see a partial index warning, let the session settle or run `/fff-rescan`.
125
+ - When Pi starts in the exact home directory or filesystem root, FFF stays disabled by default and `find`/`grep` use Pi's SDK fallback instead of interrupting startup. Broader indexing requires explicit opt-in below.
126
+
127
+ To opt into home or root indexing for a session:
128
+
129
+ ```bash
130
+ PRETTY_FFF_HOME_SCAN=1 pi
131
+ PRETTY_FFF_ROOT_SCAN=1 pi
132
+ ```
133
+
134
+ The equivalent Pi flags are `--pretty-fff-home-scan` and `--pretty-fff-root-scan`. Root scanning is intentionally never enabled by default because it can watch a very large filesystem and expose unrelated files to the agent.
124
135
 
125
136
  ## Configuration
126
137
 
@@ -141,6 +152,10 @@ Place a JSON file alongside Pi's `settings.json` to customize pi-pretty. Every o
141
152
  "maxHlChars": 80000,
142
153
  "maxPreviewLines": 80,
143
154
  "cacheLimit": 128,
155
+ "fff": {
156
+ "enableHomeScanning": false,
157
+ "enableRootScanning": false
158
+ },
144
159
  "workingIndicator": {
145
160
  "text": ["Working…", "Thinking…"]
146
161
  }
@@ -158,6 +173,8 @@ Place a JSON file alongside Pi's `settings.json` to customize pi-pretty. Every o
158
173
  | `maxHlChars` | positive int | `PRETTY_MAX_HL_CHARS` | `80000` |
159
174
  | `maxPreviewLines` | positive int | `PRETTY_MAX_PREVIEW_LINES` | `80` |
160
175
  | `cacheLimit` | positive int | `PRETTY_CACHE_LIMIT` | `128` |
176
+ | `fff.enableHomeScanning` | boolean | `PRETTY_FFF_HOME_SCAN` (`1`/`0`) | `false` |
177
+ | `fff.enableRootScanning` | boolean | `PRETTY_FFF_ROOT_SCAN` (`1`/`0`) | `false` |
161
178
  | `workingIndicator.enabled` | boolean | `PRETTY_WORKING_INDICATOR` (`on`/`off`) | `true` |
162
179
  | `workingIndicator.text` | string or string[] (phrases rotated per sweep; env accepts comma-separated) | `PRETTY_WORKING_INDICATOR_TEXT` | `["Working…"]` |
163
180
  | `workingIndicator.mode` | `shimmer` \| `kitt` \| `static` | `PRETTY_WORKING_INDICATOR_MODE` | `shimmer` |
@@ -165,11 +182,12 @@ Place a JSON file alongside Pi's `settings.json` to customize pi-pretty. Every o
165
182
  | `workingIndicator.mid` | theme color name or `#hex` | — | `muted` |
166
183
  | `workingIndicator.high` | theme color name or `#hex` | — | `accent` |
167
184
  | `workingIndicator.bold` | boolean | — | `true` |
168
- | `workingIndicator.hint` | boolean | — | `true` |
185
+ | `workingIndicator.hint` | boolean | — | deprecated (ignored) |
169
186
  | `workingIndicator.sessionAccent` | boolean | — | `true` |
170
187
  | `thinkingIndicator.enabled` | boolean | `PRETTY_THINKING_INDICATOR` (`on`/`off`) | `true` |
171
188
 
172
189
  - Config values take priority over theme-provided backgrounds (`toolBg` / `toolErrorBg`).
190
+ - Precedence for FFF scan scope is CLI flag > environment variable > `pi-pretty.json` > safe default (`false`).
173
191
  - All options except `background.*` are read once at startup; restart pi to apply changes to them (`background.*` applies live).
174
192
  - To override the config directory, set `PRETTY_CONFIG_DIR` env var.
175
193
 
@@ -177,13 +195,14 @@ Place a JSON file alongside Pi's `settings.json` to customize pi-pretty. Every o
177
195
 
178
196
  While the agent streams, pi-pretty replaces pi's static `Working...` row with an
179
197
  [oh-my-pi](https://github.com/can1357/oh-my-pi)-style shimmer: a bright accent band sweeps across the
180
- text at 30 cells/second over a dim braille spinner, followed by the interrupt hint, rendered
181
- **flush-left**. Pi's own loader row carries a built-in 1-column indent that the extension API cannot
182
- change, so pi-pretty hides it (`setWorkingVisible(false)`) and draws the row with its own zero-padding
183
- widget, animated above the editor while the agent runs. Mode `kitt` swaps the sweep for a
184
- ping-ponging scanner head with a decay trail; `static` renders a single unanimated frame. Tier
185
- colors resolve `#rrggbb` hex first, then the active pi theme color name, then built-in fallbacks.
186
- Set `workingIndicator.enabled: false` (or `PRETTY_WORKING_INDICATOR=off`) to restore pi's default
198
+ text at 30 cells/second over a dim braille spinner, rendered **flush-left** in Pi's embedded
199
+ working-status row at the top border of the input. The custom row contains only the spinner and
200
+ shimmer text; it does not append Pi's interrupt hint or token-count status. On hosts that provide
201
+ Pi's embedded working-status API, pi-pretty supplies its custom frames to that row; older hosts
202
+ fall back to a zero-padding widget above the editor. Mode `kitt` swaps the sweep for a ping-ponging
203
+ scanner head with a decay trail; `static` renders a single unanimated frame. Tier colors resolve
204
+ `#rrggbb` hex first, then the active pi theme color name, then built-in fallbacks. Set
205
+ `workingIndicator.enabled: false` (or `PRETTY_WORKING_INDICATOR=off`) to restore pi's default
187
206
  indicator. TUI sessions only; theme changes take effect on the next session.
188
207
 
189
208
  `text` accepts a single phrase or an array — the sweep plays each phrase in order, one full band
@@ -197,12 +216,23 @@ hues at uniform perceived brightness. Renaming the session re-tints the indicato
197
216
 
198
217
  ### Thinking label (shimmer)
199
218
 
200
- With thinking blocks hidden (pi's `hideThinkingBlock` setting), the static `Thinking...` label gets
201
- the same shimmer: italic `thinkingText` base with the accent band (and the session accent tint)
202
- sweeping through it. Pi renders that label as static text and the only extension lever is
203
- `setHiddenThinkingLabel(label)`, which rebuilds chat children — so the shimmer advances at a
204
- throttled 100ms cadence driven by natural streaming updates, and only while the agent is streaming
205
- and thinking blocks stay hidden. When the run ends, pi's default label is restored. Inherits
219
+ With thinking blocks hidden (pi's `hideThinkingBlock` setting), the label shows elapsed reasoning
220
+ time (`Thinking... 12s`) under the same shimmer: italic `thinkingText` base with the accent band
221
+ (and the session accent tint) sweeping through it. Both the active and completed labels have one
222
+ leading space for consistent output alignment. On the first text or tool delta it freezes as
223
+ `Thought for 12s`. Durations below one second use milliseconds (`250ms` instead of `0s`); longer
224
+ durations retain compact whole-second units (`12s`, `1m 05s`, `1h 02m 03s`).
225
+
226
+ Each row keeps its own label: pi-pretty intercepts the host's per-row label fan-out
227
+ (`AssistantMessageComponent.prototype.setHiddenThinkingLabel`), so the streaming row animates while
228
+ completed rows stay frozen at their own `Thought for 12s` instead of every row mirroring the latest
229
+ write. Durations live for the current session (they are not persisted across restarts). A message
230
+ with several thinking runs (interleaved `thinking → text → thinking`, common on Gemini) shares one
231
+ label line per run, so those runs accumulate a single per-message total — a later run resumes the
232
+ count instead of rewinding to zero. If the host class is missing or reshaped, the intercept falls
233
+ back to pi's global-label behavior — including restoring the default `Thinking...` at message end so
234
+ older rows are never mislabeled. The 30fps ticker runs only while the current message's last block
235
+ is thinking, bounding the cost of `setHiddenThinkingLabel(label)` rebuilding chat children. Inherits
206
236
  `mode`, `bold`, and the palette/accent from `workingIndicator`.
207
237
 
208
238
  ### Environment variables
package/dist/config.d.ts CHANGED
@@ -28,6 +28,7 @@ export interface WorkingIndicatorConfig {
28
28
  mid?: string;
29
29
  high?: string;
30
30
  bold?: boolean;
31
+ /** @deprecated Retained for config compatibility; the working row no longer renders this hint. */
31
32
  hint?: boolean;
32
33
  /** Tint the indicator with a stable per-session accent color. */
33
34
  sessionAccent?: boolean;
@@ -35,6 +36,16 @@ export interface WorkingIndicatorConfig {
35
36
  export interface ThinkingIndicatorConfig {
36
37
  enabled?: boolean;
37
38
  }
39
+ export interface FffConfig {
40
+ /** Allow FFF to index the user's home directory when Pi starts there. */
41
+ enableHomeScanning?: boolean;
42
+ /** Allow FFF to index the filesystem root when Pi starts there. */
43
+ enableRootScanning?: boolean;
44
+ }
45
+ export interface FffScanSettings {
46
+ enableHomeScanning: boolean;
47
+ enableRootScanning: boolean;
48
+ }
38
49
  export interface PrettyConfig {
39
50
  background?: {
40
51
  tool?: string;
@@ -49,6 +60,7 @@ export interface PrettyConfig {
49
60
  cacheLimit?: number;
50
61
  workingIndicator?: WorkingIndicatorConfig;
51
62
  thinkingIndicator?: ThinkingIndicatorConfig;
63
+ fff?: FffConfig;
52
64
  }
53
65
  /** Normalize a comma-separated env value or JSON array into tool names. */
54
66
  export declare function normalizeToolList(value: unknown): string[];
@@ -60,6 +72,10 @@ export declare function normalizeToolList(value: unknown): string[];
60
72
  */
61
73
  export declare function loadConfig(agentDir?: string | undefined): PrettyConfig;
62
74
  export declare function getConfigDir(): string | undefined;
75
+ export declare function resolveFffScanSettings(config: Pick<PrettyConfig, "fff">, flags?: {
76
+ enableHomeScanning?: boolean | string;
77
+ enableRootScanning?: boolean | string;
78
+ }, env?: NodeJS.ProcessEnv): FffScanSettings;
63
79
  /**
64
80
  * Merge env tool sets with config-file tool lists: a non-empty env set wins
65
81
  * over the config file (12-factor precedence); otherwise config applies.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,eAAO,IAAI,GAAG,QAAY,CAAC;AAE3B,eAAO,MAAM,OAAO,6BAA2B,CAAC;AAChD,eAAO,MAAM,MAAM,0BAAwB,CAAC;AAC5C,eAAO,MAAM,OAAO,0BAAwB,CAAC;AAC7C,eAAO,MAAM,QAAQ,6BAA2B,CAAC;AACjD,eAAO,MAAM,MAAM,6BAA2B,CAAC;AAC/C,eAAO,MAAM,SAAS,4BAA0B,CAAC;AACjD,eAAO,MAAM,OAAO,6BAA2B,CAAC;AAChD,eAAO,MAAM,QAAQ,6BAA2B,CAAC;AAGjD,eAAO,IAAI,OAAO,QAAa,CAAC;AAChC,eAAO,IAAI,QAAQ,QAAa,CAAC;AAMjC,KAAK,WAAW,GAAG;IAClB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C,CAAC;AAiCF,MAAM,WAAW,sBAAsB;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrC,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iEAAiE;IACjE,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC5B,UAAU,CAAC,EAAE;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC5C;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAM1D;AAMD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,QAAQ,qBAAiB,GAAG,YAAY,CA0DlE;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EACxB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,GAAG,aAAa,CAAC,GACxD;IAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAK3D;AAaD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAWjF;AAMD,wBAAgB,SAAS,IAAI,MAAM,CAOlC;AAOD,eAAO,IAAI,SAAS,SAAgD,CAAC;AAErE,eAAO,MAAM,MAAM,QAA2B,CAAC;AAC/C,eAAO,MAAM,UAAU,QAA0B,CAAC;AA4DlD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAMD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAkD7C,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAKlE;AAMD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,eAAO,IAAI,YAAY,QAAwC,CAAC;AAChE,eAAO,IAAI,iBAAiB,QAAyC,CAAC;AACtE,eAAO,IAAI,WAAW,QAAoC,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAQtD;AAMD,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAGvD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -103,6 +103,17 @@ export function loadConfig(agentDir = getConfigDir()) {
103
103
  config.maxPreviewLines = maxPreviewLines;
104
104
  if (cacheLimit)
105
105
  config.cacheLimit = cacheLimit;
106
+ const fff = parsed.fff;
107
+ if (fff && typeof fff === "object") {
108
+ const fffConfig = {};
109
+ const src = fff;
110
+ if (typeof src.enableHomeScanning === "boolean")
111
+ fffConfig.enableHomeScanning = src.enableHomeScanning;
112
+ if (typeof src.enableRootScanning === "boolean")
113
+ fffConfig.enableRootScanning = src.enableRootScanning;
114
+ if (Object.keys(fffConfig).length > 0)
115
+ config.fff = fffConfig;
116
+ }
106
117
  const workingIndicator = parsed.workingIndicator;
107
118
  if (workingIndicator && typeof workingIndicator === "object") {
108
119
  const wi = {};
@@ -150,6 +161,25 @@ export function loadConfig(agentDir = getConfigDir()) {
150
161
  export function getConfigDir() {
151
162
  return process.env.PRETTY_CONFIG_DIR ?? getDefaultAgentDir();
152
163
  }
164
+ function parseBooleanOverride(value) {
165
+ if (typeof value === "boolean")
166
+ return value;
167
+ if (typeof value !== "string")
168
+ return undefined;
169
+ const normalized = value.trim().toLowerCase();
170
+ if (normalized === "1" || normalized === "true" || normalized === "on")
171
+ return true;
172
+ if (normalized === "0" || normalized === "false" || normalized === "off")
173
+ return false;
174
+ return undefined;
175
+ }
176
+ export function resolveFffScanSettings(config, flags = {}, env = process.env) {
177
+ const resolve = (flagValue, envName, configValue) => parseBooleanOverride(flagValue) ?? parseBooleanOverride(env[envName]) ?? configValue ?? false;
178
+ return {
179
+ enableHomeScanning: resolve(flags.enableHomeScanning, "PRETTY_FFF_HOME_SCAN", config.fff?.enableHomeScanning),
180
+ enableRootScanning: resolve(flags.enableRootScanning, "PRETTY_FFF_ROOT_SCAN", config.fff?.enableRootScanning),
181
+ };
182
+ }
153
183
  /**
154
184
  * Merge env tool sets with config-file tool lists: a non-empty env set wins
155
185
  * over the config file (12-factor precedence); otherwise config applies.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/fff.d.ts CHANGED
@@ -6,6 +6,18 @@
6
6
  * Graceful fallback: if FFF is not installed or fails, tools degrade to SDK.
7
7
  */
8
8
  import type { FileFinder as FffFileFinder, GrepCursor } from "@ff-labs/fff-node";
9
+ export interface FffInitOptions {
10
+ enableHomeDirScanning: boolean;
11
+ enableFsRootScanning: boolean;
12
+ }
13
+ export type FffInitFailureKind = "restricted-base-path" | "native";
14
+ export type FffRestrictedScanScope = "home" | "root";
15
+ export declare class FffInitError extends Error {
16
+ readonly kind: FffInitFailureKind;
17
+ readonly restrictedScope: FffRestrictedScanScope | undefined;
18
+ constructor(kind: FffInitFailureKind, message: string, restrictedScope?: FffRestrictedScanScope);
19
+ }
20
+ export declare function isFffRestrictedBasePathError(error: unknown, options: FffInitOptions): boolean;
9
21
  export declare class CursorStore {
10
22
  private cursors;
11
23
  private counter;
@@ -23,7 +35,9 @@ export declare class FffService {
23
35
  cursorStore: CursorStore;
24
36
  private fffModule;
25
37
  private dbDir;
38
+ private finderConfig;
26
39
  private finderPromise;
40
+ private finderPromiseConfig;
27
41
  constructor(fffModule?: typeof import("@ff-labs/fff-node"), agentDir?: string);
28
42
  configure(fffModule?: typeof import("@ff-labs/fff-node"), agentDir?: string): void;
29
43
  /** Returns true if the FFF native module is loaded (installed). */
@@ -31,10 +45,11 @@ export declare class FffService {
31
45
  get isAvailable(): boolean;
32
46
  /** Attempt to load FFF module dynamically (called during session_start if not injected). */
33
47
  tryLoadModule(): Promise<boolean>;
34
- ensureFinder(cwd: string): Promise<void>;
48
+ ensureFinder(cwd: string, options?: FffInitOptions): Promise<void>;
35
49
  private _createFinder;
36
50
  private createFinder;
37
51
  destroy(): void;
52
+ private disposeFinder;
38
53
  getFinder(): import("@ff-labs/fff-node").FileFinder | null;
39
54
  getCursorStore(): CursorStore;
40
55
  }
package/dist/fff.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fff.d.ts","sourceRoot":"","sources":["../src/fff.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,UAAU,IAAI,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMjF,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,SAAM;IAIzB,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAUjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIvC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACD;AAgBD,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,cAAc,mBAAmB,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAWjH;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAIpD;AAED,qBAAa,UAAU;IACtB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,YAAY,UAAS;IACrB,WAAW,cAAqB;IAEhC,OAAO,CAAC,SAAS,CAAmD;IACpE,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,aAAa,CAA8B;gBAEvC,SAAS,CAAC,EAAE,cAAc,mBAAmB,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM;IAI7E,SAAS,CAAC,SAAS,CAAC,EAAE,cAAc,mBAAmB,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAYlF,mEAAmE;IACnE,cAAc,IAAI,OAAO;IAIzB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,4FAA4F;IACtF,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAahC,aAAa;IAkB3B,OAAO,CAAC,YAAY;IA2BpB,OAAO,IAAI,IAAI;IASf,SAAS,IAAI,OAAO,mBAAmB,EAAE,UAAU,GAAG,IAAI;IAI1D,cAAc,IAAI,WAAW;CAG7B"}
1
+ {"version":3,"file":"fff.d.ts","sourceRoot":"","sources":["../src/fff.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,UAAU,IAAI,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC9B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,oBAAoB,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GAAG,QAAQ,CAAC;AACnE,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,qBAAa,YAAa,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,sBAAsB,GAAG,SAAS,CAAC;gBAEjD,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,sBAAsB;CAM/F;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAK7F;AAWD,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,SAAM;IAIzB,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAUjC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIvC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACD;AAsBD,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,cAAc,mBAAmB,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAWjH;AAED,wBAAgB,6BAA6B,IAAI,IAAI,CAIpD;AAED,qBAAa,UAAU;IACtB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAQ;IACpC,YAAY,UAAS;IACrB,WAAW,cAAqB;IAEhC,OAAO,CAAC,SAAS,CAAmD;IACpE,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,mBAAmB,CAA6B;gBAE5C,SAAS,CAAC,EAAE,cAAc,mBAAmB,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM;IAI7E,SAAS,CAAC,SAAS,CAAC,EAAE,cAAc,mBAAmB,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAYlF,mEAAmE;IACnE,cAAc,IAAI,OAAO;IAIzB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,4FAA4F;IACtF,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBjC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAyC,GAAG,OAAO,CAAC,IAAI,CAAC;YAkCpF,aAAa;IAyC3B,OAAO,CAAC,YAAY;IAgCpB,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,aAAa;IAOrB,SAAS,IAAI,OAAO,mBAAmB,EAAE,UAAU,GAAG,IAAI;IAI1D,cAAc,IAAI,WAAW;CAG7B"}
package/dist/fff.js CHANGED
@@ -5,8 +5,32 @@
5
5
  * Tools check `isAvailable` and use `finder` directly for search operations.
6
6
  * Graceful fallback: if FFF is not installed or fails, tools degrade to SDK.
7
7
  */
8
- import { mkdirSync } from "node:fs";
9
- import { join } from "node:path";
8
+ import { mkdirSync, realpathSync } from "node:fs";
9
+ import { homedir } from "node:os";
10
+ import { join, parse, resolve } from "node:path";
11
+ export class FffInitError extends Error {
12
+ kind;
13
+ restrictedScope;
14
+ constructor(kind, message, restrictedScope) {
15
+ super(message);
16
+ this.name = "FffInitError";
17
+ this.kind = kind;
18
+ this.restrictedScope = restrictedScope;
19
+ }
20
+ }
21
+ export function isFffRestrictedBasePathError(error, options) {
22
+ if (!(error instanceof FffInitError) || error.kind !== "restricted-base-path")
23
+ return false;
24
+ if (error.restrictedScope === "home")
25
+ return !options.enableHomeDirScanning;
26
+ if (error.restrictedScope === "root")
27
+ return !options.enableFsRootScanning;
28
+ return false;
29
+ }
30
+ const DEFAULT_FFF_INIT_OPTIONS = {
31
+ enableHomeDirScanning: false,
32
+ enableFsRootScanning: false,
33
+ };
10
34
  // ---------------------------------------------------------------------------
11
35
  // Cursor store — pagination cursors for grep
12
36
  // ---------------------------------------------------------------------------
@@ -60,7 +84,9 @@ export class FffService {
60
84
  cursorStore = new CursorStore();
61
85
  fffModule = null;
62
86
  dbDir = null;
87
+ finderConfig = null;
63
88
  finderPromise = null;
89
+ finderPromiseConfig = null;
64
90
  constructor(fffModule, agentDir) {
65
91
  this.configure(fffModule, agentDir);
66
92
  }
@@ -106,44 +132,90 @@ export class FffService {
106
132
  return false;
107
133
  }
108
134
  }
109
- async ensureFinder(cwd) {
110
- if (this.finder && !this.finder.isDestroyed)
111
- return;
112
- if (this.finderPromise)
113
- return this.finderPromise;
114
- const promise = this._createFinder(cwd);
115
- this.finderPromise = promise;
116
- try {
117
- await promise;
118
- }
119
- finally {
120
- if (this.finderPromise === promise)
121
- this.finderPromise = null;
135
+ async ensureFinder(cwd, options = DEFAULT_FFF_INIT_OPTIONS) {
136
+ const requestedConfig = finderConfig(cwd, options);
137
+ for (;;) {
138
+ if (this.finder && !this.finder.isDestroyed && sameFinderConfig(this.finderConfig, requestedConfig))
139
+ return;
140
+ const pending = this.finderPromise;
141
+ if (pending) {
142
+ const pendingConfig = this.finderPromiseConfig;
143
+ try {
144
+ await pending;
145
+ }
146
+ catch (error) {
147
+ // A concurrent request for the same scope must observe the same
148
+ // failure. A different scope can retry after the pending attempt.
149
+ if (sameFinderConfig(pendingConfig, requestedConfig))
150
+ throw error;
151
+ }
152
+ continue;
153
+ }
154
+ const promise = this._createFinder(cwd, options, requestedConfig);
155
+ this.finderPromise = promise;
156
+ this.finderPromiseConfig = requestedConfig;
157
+ try {
158
+ await promise;
159
+ return;
160
+ }
161
+ finally {
162
+ if (this.finderPromise === promise) {
163
+ this.finderPromise = null;
164
+ this.finderPromiseConfig = null;
165
+ }
166
+ }
122
167
  }
123
168
  }
124
- async _createFinder(cwd) {
169
+ async _createFinder(cwd, options, config) {
125
170
  if (!this.fffModule)
126
171
  return;
127
- if (this.finder && !this.finder.isDestroyed) {
128
- this.finder.destroy();
129
- this.finder = null;
130
- }
131
- const result = this.createFinder(cwd, this.dbDir);
172
+ const result = this.createFinder(cwd, this.dbDir, options);
132
173
  if (!result.ok) {
133
- throw new Error(`FFF init failed: ${result.error}`);
174
+ const kind = isRestrictedBasePathMessage(result.error) ? "restricted-base-path" : "native";
175
+ throw new FffInitError(kind, result.error, kind === "restricted-base-path" ? restrictedScanScope(cwd) : undefined);
176
+ }
177
+ const candidate = result.value;
178
+ let scan;
179
+ try {
180
+ scan = await candidate.waitForScan(15_000);
181
+ }
182
+ catch (error) {
183
+ if (!candidate.isDestroyed) {
184
+ try {
185
+ candidate.destroy();
186
+ }
187
+ catch {
188
+ // Preserve the scan failure; the candidate is no longer selected.
189
+ }
190
+ }
191
+ throw error;
134
192
  }
135
- this.finder = result.value;
136
- const scan = await this.finder.waitForScan(15_000);
193
+ const previous = this.finder;
194
+ this.finder = candidate;
137
195
  this.partialIndex = scan.ok && !scan.value;
196
+ this.finderConfig = config;
197
+ if (previous && previous !== candidate && !previous.isDestroyed) {
198
+ try {
199
+ previous.destroy();
200
+ }
201
+ catch {
202
+ // Keep the replacement active; native cleanup is best effort.
203
+ }
204
+ }
138
205
  }
139
- createFinder(cwd, dbDir) {
206
+ createFinder(cwd, dbDir, options) {
140
207
  if (!this.fffModule)
141
208
  throw new Error("FFF module is not loaded");
142
- const result = this.fffModule.FileFinder.create({
209
+ const commonOptions = {
143
210
  basePath: cwd,
211
+ aiMode: true,
212
+ enableHomeDirScanning: options.enableHomeDirScanning,
213
+ enableFsRootScanning: options.enableFsRootScanning,
214
+ };
215
+ const result = this.fffModule.FileFinder.create({
216
+ ...commonOptions,
144
217
  frecencyDbPath: dbDir ? join(dbDir, "frecency.mdb") : "",
145
218
  historyDbPath: dbDir ? join(dbDir, "history.mdb") : "",
146
- aiMode: true,
147
219
  });
148
220
  if (result.ok || !isAlreadyOpenError(result.error) || !dbDir)
149
221
  return result;
@@ -155,19 +227,22 @@ export class FffService {
155
227
  return result;
156
228
  }
157
229
  return this.fffModule.FileFinder.create({
158
- basePath: cwd,
230
+ ...commonOptions,
159
231
  frecencyDbPath: join(isolatedDir, "frecency.mdb"),
160
232
  historyDbPath: join(isolatedDir, "history.mdb"),
161
- aiMode: true,
162
233
  });
163
234
  }
164
235
  destroy() {
165
- if (this.finder && !this.finder.isDestroyed) {
236
+ this.disposeFinder();
237
+ this.finderPromise = null;
238
+ this.finderPromiseConfig = null;
239
+ }
240
+ disposeFinder() {
241
+ if (this.finder && !this.finder.isDestroyed)
166
242
  this.finder.destroy();
167
- this.finder = null;
168
- }
243
+ this.finder = null;
244
+ this.finderConfig = null;
169
245
  this.partialIndex = false;
170
- this.finderPromise = null;
171
246
  }
172
247
  getFinder() {
173
248
  return this.finder;
@@ -176,7 +251,38 @@ export class FffService {
176
251
  return this.cursorStore;
177
252
  }
178
253
  }
254
+ function finderConfig(cwd, options) {
255
+ return {
256
+ basePath: canonicalPath(cwd),
257
+ enableHomeDirScanning: options.enableHomeDirScanning,
258
+ enableFsRootScanning: options.enableFsRootScanning,
259
+ };
260
+ }
261
+ function sameFinderConfig(left, right) {
262
+ return (left?.basePath === right.basePath &&
263
+ left.enableHomeDirScanning === right.enableHomeDirScanning &&
264
+ left.enableFsRootScanning === right.enableFsRootScanning);
265
+ }
179
266
  function isAlreadyOpenError(error) {
180
267
  return /environment already open/i.test(error);
181
268
  }
269
+ function isRestrictedBasePathMessage(error) {
270
+ return /certain FFF features in a file system root or home directories/i.test(error);
271
+ }
272
+ function restrictedScanScope(cwd) {
273
+ const basePath = canonicalPath(cwd);
274
+ if (basePath === parse(basePath).root)
275
+ return "root";
276
+ if (basePath === canonicalPath(homedir()))
277
+ return "home";
278
+ return undefined;
279
+ }
280
+ function canonicalPath(path) {
281
+ try {
282
+ return realpathSync.native(path);
283
+ }
284
+ catch {
285
+ return resolve(path);
286
+ }
287
+ }
182
288
  //# sourceMappingURL=fff.js.map