@heyhuynhgiabuu/pi-pretty 0.6.12 → 0.6.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../src/autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAEX,oBAAoB,EAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAcpD,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,UAAU,GAAG,IAAI,GAChC,oBAAoB,CAkEtB"}
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../src/autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAoB,oBAAoB,EAA2B,MAAM,wBAAwB,CAAC;AAC9G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAcpD,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,UAAU,GAAG,IAAI,GAChC,oBAAoB,CA6DtB"}
@@ -38,7 +38,7 @@ function createFffAutocompleteProvider(current, getFinder) {
38
38
  });
39
39
  if (result.ok) {
40
40
  const items = result.value.items.map((item) => ({
41
- value: item.relativePath,
41
+ value: toMentionValue(item.relativePath),
42
42
  label: item.fileName,
43
43
  description: item.relativePath.slice(0, -(item.fileName.length + 1)),
44
44
  }));
@@ -61,4 +61,7 @@ function createFffAutocompleteProvider(current, getFinder) {
61
61
  },
62
62
  };
63
63
  }
64
+ function toMentionValue(path) {
65
+ return /\s/.test(path) ? `@"${path.replaceAll('"', '\\"')}"` : `@${path}`;
66
+ }
64
67
  //# sourceMappingURL=autocomplete.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../src/autocomplete.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAqBH,sEAqEC;AAjFD,sDAAsD;AACtD,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B;;;GAGG;AACH,SAAS,eAAe,CAAC,gBAAwB;IAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC/D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,SAAgB,6BAA6B,CAC5C,OAA6B,EAC7B,SAAkC;IAElC,OAAO;QACN,KAAK,CAAC,cAAc,CACnB,KAAe,EACf,UAAkB,EAClB,SAAiB,EACjB,OAAiD;YAEjD,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAEhD,8BAA8B;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,2CAA2C;gBAC3C,OAAO,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACtE,CAAC;YAED,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE;oBACvC,QAAQ,EAAE,eAAe;iBAEzB,CAAC,CAAC;gBAEH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,MAAM,KAAK,GAAuB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACnE,KAAK,EAAE,IAAI,CAAC,YAAY;wBACxB,KAAK,EAAE,IAAI,CAAC,QAAQ;wBACpB,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBACpE,CAAC,CAAC,CAAC;oBAEJ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE,EAAE,CAAC;oBACvC,CAAC;gBACF,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,+CAA+C;YAChD,CAAC;YAED,6DAA6D;YAC7D,OAAO,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;QAED,eAAe,CACd,KAAe,EACf,UAAkB,EAClB,SAAiB,EACjB,IAAsB,EACtB,MAAc;YAEd,OAAO,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5E,CAAC;QAED,2BAA2B,CAC1B,KAAe,EACf,UAAkB,EAClB,SAAiB;YAEjB,OAAO,OAAO,CAAC,2BAA2B,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC;QACpF,CAAC;KACD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../src/autocomplete.ts"],"names":[],"mappings":"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"}
package/dist/fff.d.ts CHANGED
@@ -15,6 +15,8 @@ export declare class CursorStore {
15
15
  get(id: string): GrepCursor | undefined;
16
16
  get size(): number;
17
17
  }
18
+ export declare function getSharedFffService(fffModule?: typeof import("@ff-labs/fff-node"), agentDir?: string): FffService;
19
+ export declare function resetSharedFffServiceForTests(): void;
18
20
  export declare class FffService {
19
21
  finder: FffFileFinder | null;
20
22
  partialIndex: boolean;
@@ -23,6 +25,7 @@ export declare class FffService {
23
25
  private dbDir;
24
26
  private finderPromise;
25
27
  constructor(fffModule?: typeof import("@ff-labs/fff-node"), agentDir?: string);
28
+ configure(fffModule?: typeof import("@ff-labs/fff-node"), agentDir?: string): void;
26
29
  /** Returns true if the FFF native module is loaded (installed). */
27
30
  isModuleLoaded(): boolean;
28
31
  get isAvailable(): boolean;
@@ -30,6 +33,7 @@ export declare class FffService {
30
33
  tryLoadModule(): Promise<boolean>;
31
34
  ensureFinder(cwd: string): Promise<void>;
32
35
  private _createFinder;
36
+ private createFinder;
33
37
  destroy(): void;
34
38
  getFinder(): import("@ff-labs/fff-node").FileFinder | null;
35
39
  getCursorStore(): CursorStore;
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;AAMD,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;IAY7E,mEAAmE;IACnE,cAAc,IAAI,OAAO;IAIzB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,4FAA4F;IACtF,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAiBjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAShC,aAAa;IAwB3B,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;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"}
package/dist/fff.js CHANGED
@@ -8,6 +8,8 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.FffService = exports.CursorStore = void 0;
11
+ exports.getSharedFffService = getSharedFffService;
12
+ exports.resetSharedFffServiceForTests = resetSharedFffServiceForTests;
11
13
  const node_fs_1 = require("node:fs");
12
14
  const node_path_1 = require("node:path");
13
15
  // ---------------------------------------------------------------------------
@@ -41,6 +43,23 @@ exports.CursorStore = CursorStore;
41
43
  // ---------------------------------------------------------------------------
42
44
  // FffService — wraps a single FileFinder instance
43
45
  // ---------------------------------------------------------------------------
46
+ const SHARED_FFF_SERVICE_KEY = Symbol.for("pi-pretty.fff-service");
47
+ function getSharedFffService(fffModule, agentDir) {
48
+ const sharedGlobal = globalThis;
49
+ const existing = sharedGlobal[SHARED_FFF_SERVICE_KEY];
50
+ if (existing) {
51
+ existing.service.configure(fffModule, agentDir);
52
+ return existing.service;
53
+ }
54
+ const service = new FffService(fffModule, agentDir);
55
+ sharedGlobal[SHARED_FFF_SERVICE_KEY] = { service };
56
+ return service;
57
+ }
58
+ function resetSharedFffServiceForTests() {
59
+ const sharedGlobal = globalThis;
60
+ sharedGlobal[SHARED_FFF_SERVICE_KEY]?.service.destroy();
61
+ delete sharedGlobal[SHARED_FFF_SERVICE_KEY];
62
+ }
44
63
  class FffService {
45
64
  finder = null;
46
65
  partialIndex = false;
@@ -49,14 +68,18 @@ class FffService {
49
68
  dbDir = null;
50
69
  finderPromise = null;
51
70
  constructor(fffModule, agentDir) {
52
- if (fffModule) {
71
+ this.configure(fffModule, agentDir);
72
+ }
73
+ configure(fffModule, agentDir) {
74
+ if (fffModule)
53
75
  this.fffModule = fffModule;
54
- if (agentDir) {
55
- this.dbDir = (0, node_path_1.join)(agentDir, "pi-pretty", "fff");
56
- try {
57
- (0, node_fs_1.mkdirSync)(this.dbDir, { recursive: true });
58
- }
59
- catch { /* ignore */ }
76
+ if (agentDir) {
77
+ this.dbDir = (0, node_path_1.join)(agentDir, "pi-pretty", "fff");
78
+ try {
79
+ (0, node_fs_1.mkdirSync)(this.dbDir, { recursive: true });
80
+ }
81
+ catch {
82
+ // FFF can still run without persistent frecency/history paths.
60
83
  }
61
84
  }
62
85
  }
@@ -79,7 +102,9 @@ class FffService {
79
102
  try {
80
103
  (0, node_fs_1.mkdirSync)(this.dbDir, { recursive: true });
81
104
  }
82
- catch { /* ignore */ }
105
+ catch {
106
+ /* ignore */
107
+ }
83
108
  }
84
109
  return true;
85
110
  }
@@ -92,9 +117,15 @@ class FffService {
92
117
  return;
93
118
  if (this.finderPromise)
94
119
  return this.finderPromise;
95
- this.finderPromise = this._createFinder(cwd);
96
- await this.finderPromise;
97
- this.finderPromise = null;
120
+ const promise = this._createFinder(cwd);
121
+ this.finderPromise = promise;
122
+ try {
123
+ await promise;
124
+ }
125
+ finally {
126
+ if (this.finderPromise === promise)
127
+ this.finderPromise = null;
128
+ }
98
129
  }
99
130
  async _createFinder(cwd) {
100
131
  if (!this.fffModule)
@@ -103,12 +134,7 @@ class FffService {
103
134
  this.finder.destroy();
104
135
  this.finder = null;
105
136
  }
106
- const result = this.fffModule.FileFinder.create({
107
- basePath: cwd,
108
- frecencyDbPath: this.dbDir ? (0, node_path_1.join)(this.dbDir, "frecency.mdb") : "",
109
- historyDbPath: this.dbDir ? (0, node_path_1.join)(this.dbDir, "history.mdb") : "",
110
- aiMode: true,
111
- });
137
+ const result = this.createFinder(cwd, this.dbDir);
112
138
  if (!result.ok) {
113
139
  throw new Error(`FFF init failed: ${result.error}`);
114
140
  }
@@ -116,6 +142,31 @@ class FffService {
116
142
  const scan = await this.finder.waitForScan(15_000);
117
143
  this.partialIndex = scan.ok && !scan.value;
118
144
  }
145
+ createFinder(cwd, dbDir) {
146
+ if (!this.fffModule)
147
+ throw new Error("FFF module is not loaded");
148
+ const result = this.fffModule.FileFinder.create({
149
+ basePath: cwd,
150
+ frecencyDbPath: dbDir ? (0, node_path_1.join)(dbDir, "frecency.mdb") : "",
151
+ historyDbPath: dbDir ? (0, node_path_1.join)(dbDir, "history.mdb") : "",
152
+ aiMode: true,
153
+ });
154
+ if (result.ok || !isAlreadyOpenError(result.error) || !dbDir)
155
+ return result;
156
+ const isolatedDir = (0, node_path_1.join)(dbDir, `runtime-${process.pid}-${Date.now()}`);
157
+ try {
158
+ (0, node_fs_1.mkdirSync)(isolatedDir, { recursive: true });
159
+ }
160
+ catch {
161
+ return result;
162
+ }
163
+ return this.fffModule.FileFinder.create({
164
+ basePath: cwd,
165
+ frecencyDbPath: (0, node_path_1.join)(isolatedDir, "frecency.mdb"),
166
+ historyDbPath: (0, node_path_1.join)(isolatedDir, "history.mdb"),
167
+ aiMode: true,
168
+ });
169
+ }
119
170
  destroy() {
120
171
  if (this.finder && !this.finder.isDestroyed) {
121
172
  this.finder.destroy();
@@ -132,4 +183,7 @@ class FffService {
132
183
  }
133
184
  }
134
185
  exports.FffService = FffService;
186
+ function isAlreadyOpenError(error) {
187
+ return /environment already open/i.test(error);
188
+ }
135
189
  //# sourceMappingURL=fff.js.map
package/dist/fff.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fff.js","sourceRoot":"","sources":["../src/fff.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,qCAAoC;AACpC,yCAAiC;AAIjC,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAE9E,MAAa,WAAW;IACf,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IACxC,OAAO,GAAG,CAAC,CAAC;IACZ,OAAO,CAAS;IAExB,YAAY,OAAO,GAAG,GAAG;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAkB;QACvB,MAAM,EAAE,GAAG,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC/C,IAAI,KAAK;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;IAED,GAAG,CAAC,EAAU;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC;CACD;AA1BD,kCA0BC;AAED,8EAA8E;AAC9E,kDAAkD;AAClD,8EAA8E;AAE9E,MAAa,UAAU;IACtB,MAAM,GAAyB,IAAI,CAAC;IACpC,YAAY,GAAG,KAAK,CAAC;IACrB,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAExB,SAAS,GAA8C,IAAI,CAAC;IAC5D,KAAK,GAAkB,IAAI,CAAC;IAC5B,aAAa,GAAyB,IAAI,CAAC;IAEnD,YAAY,SAA8C,EAAE,QAAiB;QAC5E,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,KAAK,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,CAAC;oBACJ,IAAA,mBAAS,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACzB,CAAC;QACF,CAAC;IACF,CAAC;IAED,mEAAmE;IACnE,cAAc;QACb,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;IAChC,CAAC;IAED,IAAI,WAAW;QACd,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;IACzD,CAAC;IAED,4FAA4F;IAC5F,KAAK,CAAC,aAAa;QAClB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAC9C,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC,KAAK,GAAG,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;gBACrE,IAAI,CAAC;oBACJ,IAAA,mBAAS,EAAC,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5C,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACzB,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC7B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO;QACpD,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC;QAElD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,aAAa,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,GAAW;QACtC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/C,QAAQ,EAAE,GAAG;YACb,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE;YAClE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;YAChE,MAAM,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5C,CAAC;IAED,OAAO;QACN,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,cAAc;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;CACD;AAjGD,gCAiGC"}
1
+ {"version":3,"file":"fff.js","sourceRoot":"","sources":["../src/fff.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -47,7 +47,7 @@ async function piPrettyExtension(pi, deps) {
47
47
  // should still work even when SDK tool factories are unavailable.
48
48
  const maybeGetAgentDir = deps?.sdk?.getAgentDir;
49
49
  const agentDir = typeof maybeGetAgentDir === "function" ? maybeGetAgentDir() : (0, config_js_1.getDefaultAgentDir)();
50
- let fffService = new fff_js_1.FffService(deps?.fffModule, agentDir);
50
+ let fffService = (0, fff_js_1.getSharedFffService)(deps?.fffModule, agentDir);
51
51
  // Ripgrep fallback for multi_grep
52
52
  const multiGrepFallback = deps?.multiGrepRipgrepFallback ?? multi_grep_fallback_js_1.runMultiGrepRipgrepFallback;
53
53
  // Text component for custom rendering (DI-friendly)
@@ -143,11 +143,11 @@ async function piPrettyExtension(pi, deps) {
143
143
  }
144
144
  });
145
145
  pi.on("session_shutdown", async () => {
146
- // Intentionally do not destroy the native FFF finder on session shutdown.
146
+ // Intentionally keep the native FFF finder on session shutdown.
147
147
  // Pi can emit shutdown/start during resume or session switching while the
148
- // process keeps running. Native teardown during that transition has caused
149
- // hard process crashes in published installs; let process exit reclaim it.
150
- fffService = null;
148
+ // process keeps running. Native teardown, or dropping the JS handle while the
149
+ // native LMDB frecency env stays open, can make the next init fail with
150
+ // "environment already open in this program". Let process exit reclaim it.
151
151
  });
152
152
  // ------------------------------------------------------------------
153
153
  // Resolve SDK tools, if available
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heyhuynhgiabuu/pi-pretty",
3
- "version": "0.6.12",
3
+ "version": "0.6.14",
4
4
  "description": "Pretty terminal output for pi — syntax-highlighted file reads, colored bash output, tree-view directory listings, and more.",
5
5
  "keywords": [
6
6
  "pi",
@@ -36,7 +36,7 @@
36
36
  "test:watch": "vitest --passWithNoTests"
37
37
  },
38
38
  "dependencies": {
39
- "@ff-labs/fff-node": "^0.9.4",
39
+ "@ff-labs/fff-node": "^0.9.6",
40
40
  "@shikijs/cli": "^4.0.2",
41
41
  "typebox": "1.1.38"
42
42
  },
@@ -5,11 +5,7 @@
5
5
  * suggestions with FFF frecency-ranked file search results.
6
6
  */
7
7
 
8
- import type {
9
- AutocompleteItem,
10
- AutocompleteProvider,
11
- AutocompleteSuggestions,
12
- } from "@earendil-works/pi-tui";
8
+ import type { AutocompleteItem, AutocompleteProvider, AutocompleteSuggestions } from "@earendil-works/pi-tui";
13
9
  import type { FileFinder } from "@ff-labs/fff-node";
14
10
 
15
11
  /** How many @-mention suggestions to show at most. */
@@ -53,12 +49,11 @@ export function createFffAutocompleteProvider(
53
49
  try {
54
50
  const result = finder.fileSearch(query, {
55
51
  pageSize: MAX_SUGGESTIONS,
56
-
57
52
  });
58
53
 
59
54
  if (result.ok) {
60
55
  const items: AutocompleteItem[] = result.value.items.map((item) => ({
61
- value: item.relativePath,
56
+ value: toMentionValue(item.relativePath),
62
57
  label: item.fileName,
63
58
  description: item.relativePath.slice(0, -(item.fileName.length + 1)),
64
59
  }));
@@ -85,12 +80,12 @@ export function createFffAutocompleteProvider(
85
80
  return current.applyCompletion(lines, cursorLine, cursorCol, item, prefix);
86
81
  },
87
82
 
88
- shouldTriggerFileCompletion(
89
- lines: string[],
90
- cursorLine: number,
91
- cursorCol: number,
92
- ): boolean {
83
+ shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {
93
84
  return current.shouldTriggerFileCompletion?.(lines, cursorLine, cursorCol) ?? true;
94
85
  },
95
86
  };
96
87
  }
88
+
89
+ function toMentionValue(path: string): string {
90
+ return /\s/.test(path) ? `@"${path.replaceAll('"', '\\"')}"` : `@${path}`;
91
+ }
package/src/fff.ts CHANGED
@@ -47,6 +47,35 @@ export class CursorStore {
47
47
  // FffService — wraps a single FileFinder instance
48
48
  // ---------------------------------------------------------------------------
49
49
 
50
+ const SHARED_FFF_SERVICE_KEY = Symbol.for("pi-pretty.fff-service");
51
+
52
+ type SharedFffState = {
53
+ service: FffService;
54
+ };
55
+
56
+ type GlobalWithFffService = typeof globalThis & {
57
+ [SHARED_FFF_SERVICE_KEY]?: SharedFffState;
58
+ };
59
+
60
+ export function getSharedFffService(fffModule?: typeof import("@ff-labs/fff-node"), agentDir?: string): FffService {
61
+ const sharedGlobal = globalThis as GlobalWithFffService;
62
+ const existing = sharedGlobal[SHARED_FFF_SERVICE_KEY];
63
+ if (existing) {
64
+ existing.service.configure(fffModule, agentDir);
65
+ return existing.service;
66
+ }
67
+
68
+ const service = new FffService(fffModule, agentDir);
69
+ sharedGlobal[SHARED_FFF_SERVICE_KEY] = { service };
70
+ return service;
71
+ }
72
+
73
+ export function resetSharedFffServiceForTests(): void {
74
+ const sharedGlobal = globalThis as GlobalWithFffService;
75
+ sharedGlobal[SHARED_FFF_SERVICE_KEY]?.service.destroy();
76
+ delete sharedGlobal[SHARED_FFF_SERVICE_KEY];
77
+ }
78
+
50
79
  export class FffService {
51
80
  finder: FffFileFinder | null = null;
52
81
  partialIndex = false;
@@ -57,13 +86,17 @@ export class FffService {
57
86
  private finderPromise: Promise<void> | null = null;
58
87
 
59
88
  constructor(fffModule?: typeof import("@ff-labs/fff-node"), agentDir?: string) {
60
- if (fffModule) {
61
- this.fffModule = fffModule;
62
- if (agentDir) {
63
- this.dbDir = join(agentDir, "pi-pretty", "fff");
64
- try {
65
- mkdirSync(this.dbDir, { recursive: true });
66
- } catch { /* ignore */ }
89
+ this.configure(fffModule, agentDir);
90
+ }
91
+
92
+ configure(fffModule?: typeof import("@ff-labs/fff-node"), agentDir?: string): void {
93
+ if (fffModule) this.fffModule = fffModule;
94
+ if (agentDir) {
95
+ this.dbDir = join(agentDir, "pi-pretty", "fff");
96
+ try {
97
+ mkdirSync(this.dbDir, { recursive: true });
98
+ } catch {
99
+ // FFF can still run without persistent frecency/history paths.
67
100
  }
68
101
  }
69
102
  }
@@ -87,7 +120,9 @@ export class FffService {
87
120
  this.dbDir = join(process.env.HOME, ".pi/agent", "pi-pretty", "fff");
88
121
  try {
89
122
  mkdirSync(this.dbDir, { recursive: true });
90
- } catch { /* ignore */ }
123
+ } catch {
124
+ /* ignore */
125
+ }
91
126
  }
92
127
  return true;
93
128
  } catch {
@@ -99,9 +134,13 @@ export class FffService {
99
134
  if (this.finder && !this.finder.isDestroyed) return;
100
135
  if (this.finderPromise) return this.finderPromise;
101
136
 
102
- this.finderPromise = this._createFinder(cwd);
103
- await this.finderPromise;
104
- this.finderPromise = null;
137
+ const promise = this._createFinder(cwd);
138
+ this.finderPromise = promise;
139
+ try {
140
+ await promise;
141
+ } finally {
142
+ if (this.finderPromise === promise) this.finderPromise = null;
143
+ }
105
144
  }
106
145
 
107
146
  private async _createFinder(cwd: string): Promise<void> {
@@ -112,13 +151,7 @@ export class FffService {
112
151
  this.finder = null;
113
152
  }
114
153
 
115
- const result = this.fffModule.FileFinder.create({
116
- basePath: cwd,
117
- frecencyDbPath: this.dbDir ? join(this.dbDir, "frecency.mdb") : "",
118
- historyDbPath: this.dbDir ? join(this.dbDir, "history.mdb") : "",
119
- aiMode: true,
120
- });
121
-
154
+ const result = this.createFinder(cwd, this.dbDir);
122
155
  if (!result.ok) {
123
156
  throw new Error(`FFF init failed: ${result.error}`);
124
157
  }
@@ -128,6 +161,33 @@ export class FffService {
128
161
  this.partialIndex = scan.ok && !scan.value;
129
162
  }
130
163
 
164
+ private createFinder(
165
+ cwd: string,
166
+ dbDir: string | null,
167
+ ): ReturnType<typeof import("@ff-labs/fff-node").FileFinder.create> {
168
+ if (!this.fffModule) throw new Error("FFF module is not loaded");
169
+ const result = this.fffModule.FileFinder.create({
170
+ basePath: cwd,
171
+ frecencyDbPath: dbDir ? join(dbDir, "frecency.mdb") : "",
172
+ historyDbPath: dbDir ? join(dbDir, "history.mdb") : "",
173
+ aiMode: true,
174
+ });
175
+ if (result.ok || !isAlreadyOpenError(result.error) || !dbDir) return result;
176
+
177
+ const isolatedDir = join(dbDir, `runtime-${process.pid}-${Date.now()}`);
178
+ try {
179
+ mkdirSync(isolatedDir, { recursive: true });
180
+ } catch {
181
+ return result;
182
+ }
183
+ return this.fffModule.FileFinder.create({
184
+ basePath: cwd,
185
+ frecencyDbPath: join(isolatedDir, "frecency.mdb"),
186
+ historyDbPath: join(isolatedDir, "history.mdb"),
187
+ aiMode: true,
188
+ });
189
+ }
190
+
131
191
  destroy(): void {
132
192
  if (this.finder && !this.finder.isDestroyed) {
133
193
  this.finder.destroy();
@@ -145,3 +205,7 @@ export class FffService {
145
205
  return this.cursorStore;
146
206
  }
147
207
  }
208
+
209
+ function isAlreadyOpenError(error: string): boolean {
210
+ return /environment already open/i.test(error);
211
+ }
package/src/index.ts CHANGED
@@ -15,7 +15,7 @@ export { __imageInternals } from "./image.js";
15
15
  import type { ExtensionAPI, ExtensionContext, ExtensionCommandContext } from "@earendil-works/pi-coding-agent";
16
16
 
17
17
  import type { PiPrettyDeps } from "./types.js";
18
- import { FffService } from "./fff.js";
18
+ import { getSharedFffService, type FffService } from "./fff.js";
19
19
  import { registerReadTool } from "./tools/read.js";
20
20
  import { registerBashTool } from "./tools/bash.js";
21
21
  import { registerLsTool } from "./tools/ls.js";
@@ -60,7 +60,7 @@ export default async function piPrettyExtension(pi: ExtensionAPI, deps?: PiPrett
60
60
 
61
61
  const maybeGetAgentDir = deps?.sdk?.getAgentDir;
62
62
  const agentDir = typeof maybeGetAgentDir === "function" ? maybeGetAgentDir() : getDefaultAgentDir();
63
- let fffService: FffService | null = new FffService(deps?.fffModule, agentDir);
63
+ let fffService: FffService | null = getSharedFffService(deps?.fffModule, agentDir);
64
64
 
65
65
  // Ripgrep fallback for multi_grep
66
66
  const multiGrepFallback = deps?.multiGrepRipgrepFallback ?? runMultiGrepRipgrepFallback;
@@ -167,11 +167,11 @@ export default async function piPrettyExtension(pi: ExtensionAPI, deps?: PiPrett
167
167
  });
168
168
 
169
169
  pi.on("session_shutdown", async () => {
170
- // Intentionally do not destroy the native FFF finder on session shutdown.
170
+ // Intentionally keep the native FFF finder on session shutdown.
171
171
  // Pi can emit shutdown/start during resume or session switching while the
172
- // process keeps running. Native teardown during that transition has caused
173
- // hard process crashes in published installs; let process exit reclaim it.
174
- fffService = null;
172
+ // process keeps running. Native teardown, or dropping the JS handle while the
173
+ // native LMDB frecency env stays open, can make the next init fail with
174
+ // "environment already open in this program". Let process exit reclaim it.
175
175
  });
176
176
 
177
177
  // ------------------------------------------------------------------