pi-ghost-autocomplete 0.3.1 → 0.4.0

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 (83) hide show
  1. package/LICENSE +561 -0
  2. package/README.md +464 -236
  3. package/dist/bench-cli.js +1 -47
  4. package/dist/bench.d.ts +137 -5
  5. package/dist/bench.js +1 -241
  6. package/dist/config.d.ts +47 -1
  7. package/dist/context-aggregator.d.ts +18 -6
  8. package/dist/cycle-manager.d.ts +83 -0
  9. package/dist/entropy-stop.d.ts +105 -0
  10. package/dist/eval-dataset.d.ts +55 -0
  11. package/dist/fuzzy-matcher.d.ts +12 -1
  12. package/dist/ghost-editor.d.ts +332 -6
  13. package/dist/index.d.ts +21 -1
  14. package/dist/index.js +1 -210
  15. package/dist/intent.d.ts +179 -0
  16. package/dist/metrics.d.ts +103 -3
  17. package/dist/path-index.d.ts +4 -1
  18. package/dist/path-matcher.d.ts +13 -1
  19. package/dist/profile-store.d.ts +85 -0
  20. package/dist/profile.d.ts +167 -0
  21. package/dist/providers/cloud-provider.d.ts +14 -2
  22. package/dist/providers/local-provider.d.ts +12 -2
  23. package/dist/providers/openai-compat-provider.d.ts +35 -2
  24. package/dist/providers/race.d.ts +62 -2
  25. package/dist/providers/types.d.ts +109 -2
  26. package/dist/recent-paths.d.ts +4 -1
  27. package/dist/replay-cli.js +2 -0
  28. package/dist/replay.d.ts +102 -0
  29. package/package.json +90 -79
  30. package/dist/bench-cli.d.ts +0 -3
  31. package/dist/bench-cli.d.ts.map +0 -1
  32. package/dist/bench-cli.js.map +0 -1
  33. package/dist/bench.d.ts.map +0 -1
  34. package/dist/bench.js.map +0 -1
  35. package/dist/config.d.ts.map +0 -1
  36. package/dist/config.js +0 -187
  37. package/dist/config.js.map +0 -1
  38. package/dist/context-aggregator.d.ts.map +0 -1
  39. package/dist/context-aggregator.js +0 -58
  40. package/dist/context-aggregator.js.map +0 -1
  41. package/dist/fuzzy-matcher.d.ts.map +0 -1
  42. package/dist/fuzzy-matcher.js +0 -160
  43. package/dist/fuzzy-matcher.js.map +0 -1
  44. package/dist/ghost-editor.d.ts.map +0 -1
  45. package/dist/ghost-editor.js +0 -445
  46. package/dist/ghost-editor.js.map +0 -1
  47. package/dist/index.d.ts.map +0 -1
  48. package/dist/index.js.map +0 -1
  49. package/dist/metrics.d.ts.map +0 -1
  50. package/dist/metrics.js +0 -98
  51. package/dist/metrics.js.map +0 -1
  52. package/dist/path-index.d.ts.map +0 -1
  53. package/dist/path-index.js +0 -148
  54. package/dist/path-index.js.map +0 -1
  55. package/dist/path-matcher.d.ts.map +0 -1
  56. package/dist/path-matcher.js +0 -85
  57. package/dist/path-matcher.js.map +0 -1
  58. package/dist/providers/cloud-provider.d.ts.map +0 -1
  59. package/dist/providers/cloud-provider.js +0 -52
  60. package/dist/providers/cloud-provider.js.map +0 -1
  61. package/dist/providers/local-provider.d.ts.map +0 -1
  62. package/dist/providers/local-provider.js +0 -36
  63. package/dist/providers/local-provider.js.map +0 -1
  64. package/dist/providers/openai-compat-provider.d.ts.map +0 -1
  65. package/dist/providers/openai-compat-provider.js +0 -128
  66. package/dist/providers/openai-compat-provider.js.map +0 -1
  67. package/dist/providers/openai-completions-runner.d.ts +0 -28
  68. package/dist/providers/openai-completions-runner.d.ts.map +0 -1
  69. package/dist/providers/openai-completions-runner.js +0 -46
  70. package/dist/providers/openai-completions-runner.js.map +0 -1
  71. package/dist/providers/race.d.ts.map +0 -1
  72. package/dist/providers/race.js +0 -128
  73. package/dist/providers/race.js.map +0 -1
  74. package/dist/providers/truncate.d.ts +0 -7
  75. package/dist/providers/truncate.d.ts.map +0 -1
  76. package/dist/providers/truncate.js +0 -39
  77. package/dist/providers/truncate.js.map +0 -1
  78. package/dist/providers/types.d.ts.map +0 -1
  79. package/dist/providers/types.js +0 -2
  80. package/dist/providers/types.js.map +0 -1
  81. package/dist/recent-paths.d.ts.map +0 -1
  82. package/dist/recent-paths.js +0 -114
  83. package/dist/recent-paths.js.map +0 -1
package/package.json CHANGED
@@ -1,79 +1,90 @@
1
- {
2
- "name": "pi-ghost-autocomplete",
3
- "version": "0.3.1",
4
- "description": "Inline ghost-text autocomplete extension for the Pi coding agent (pi.dev). Cloud and local LLM providers, zero-flicker rendering, no popup interference.",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "bin": {
9
- "pi-ghost-bench": "./dist/bench-cli.js"
10
- },
11
- "exports": {
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "import": "./dist/index.js"
15
- },
16
- "./bench": {
17
- "types": "./dist/bench.d.ts",
18
- "import": "./dist/bench.js"
19
- }
20
- },
21
- "files": [
22
- "dist",
23
- "README.md"
24
- ],
25
- "scripts": {
26
- "clean": "node -e \"fs.rmSync('dist',{recursive:true,force:true})\"",
27
- "build": "tsc -p tsconfig.json",
28
- "typecheck": "tsc -p tsconfig.json --noEmit",
29
- "test": "vitest run",
30
- "test:watch": "vitest",
31
- "prepublishOnly": "npm run clean && npm run build"
32
- },
33
- "engines": {
34
- "node": ">=20.0.0"
35
- },
36
- "pi": {
37
- "extensions": [
38
- "./dist/index.js"
39
- ]
40
- },
41
- "author": "Alessandro",
42
- "repository": {
43
- "type": "git",
44
- "url": "https://github.com/pungggi/pi-ghost-autocomplete"
45
- },
46
- "homepage": "https://github.com/pungggi/pi-ghost-autocomplete#readme",
47
- "license": "MIT",
48
- "keywords": [
49
- "pi",
50
- "pi.dev",
51
- "pi-package",
52
- "pi-extension",
53
- "autocomplete",
54
- "ghost-text",
55
- "tui",
56
- "llm",
57
- "ollama",
58
- "groq"
59
- ],
60
- "peerDependencies": {
61
- "@earendil-works/pi-agent-core": "^0.74.0",
62
- "@earendil-works/pi-ai": "^0.74.0",
63
- "@earendil-works/pi-coding-agent": "^0.74.0",
64
- "@earendil-works/pi-tui": "^0.74.0"
65
- },
66
- "devDependencies": {
67
- "@earendil-works/pi-agent-core": "^0.74.0",
68
- "@earendil-works/pi-ai": "^0.74.0",
69
- "@earendil-works/pi-coding-agent": "^0.74.0",
70
- "@earendil-works/pi-tui": "^0.74.0",
71
- "@types/node": "^20.11.0",
72
- "typescript": "^5.4.0",
73
- "vitest": "^1.6.1"
74
- },
75
- "dependencies": {
76
- "string-width": "^7.2.0",
77
- "strip-ansi": "^7.2.0"
78
- }
79
- }
1
+ {
2
+ "name": "pi-ghost-autocomplete",
3
+ "version": "0.4.0",
4
+ "description": "Inline ghost-text autocomplete extension for the Pi coding agent (pi.dev). Cloud and local LLM providers, zero-flicker rendering, no popup interference.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "pi-ghost-bench": "./dist/bench-cli.js",
10
+ "pi-ghost-replay": "./dist/replay-cli.js"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ },
17
+ "./bench": {
18
+ "types": "./dist/bench.d.ts",
19
+ "import": "./dist/bench.js"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "!dist/**/*.node",
25
+ "README.md"
26
+ ],
27
+ "scripts": {
28
+ "clean": "node -e \"fs.rmSync('dist',{recursive:true,force:true})\"",
29
+ "build": "node scripts/build.mjs",
30
+ "build:dev": "tsc -p tsconfig.json",
31
+ "typecheck": "tsc -p tsconfig.json --noEmit",
32
+ "test": "vitest run",
33
+ "test:watch": "vitest",
34
+ "prepack": "node scripts/build.mjs"
35
+ },
36
+ "engines": {
37
+ "node": ">=20.0.0"
38
+ },
39
+ "pi": {
40
+ "extensions": [
41
+ "./dist/index.js"
42
+ ]
43
+ },
44
+ "author": "Alessandro",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/pungggi/pi-autocompletion-ghost"
48
+ },
49
+ "homepage": "https://github.com/pungggi/pi-autocompletion-ghost#readme",
50
+ "license": "SSPL-1.0",
51
+ "keywords": [
52
+ "pi",
53
+ "pi.dev",
54
+ "pi-package",
55
+ "pi-extension",
56
+ "autocomplete",
57
+ "ghost-text",
58
+ "tui",
59
+ "llm",
60
+ "ollama",
61
+ "groq"
62
+ ],
63
+ "peerDependencies": {
64
+ "@earendil-works/pi-agent-core": "^0.74.0",
65
+ "@earendil-works/pi-ai": "^0.74.0",
66
+ "@earendil-works/pi-coding-agent": "^0.74.0",
67
+ "@earendil-works/pi-tui": "^0.74.0"
68
+ },
69
+ "devDependencies": {
70
+ "@earendil-works/pi-agent-core": "^0.74.0",
71
+ "@earendil-works/pi-ai": "^0.74.0",
72
+ "@earendil-works/pi-coding-agent": "^0.74.0",
73
+ "@earendil-works/pi-tui": "^0.74.0",
74
+ "@types/node": "^20.11.0",
75
+ "esbuild": "^0.28.1",
76
+ "javascript-obfuscator": "^5.4.3",
77
+ "typescript": "^5.4.0",
78
+ "vitest": "^1.6.1"
79
+ },
80
+ "dependencies": {
81
+ "string-width": "^7.2.0",
82
+ "strip-ansi": "^7.2.0"
83
+ },
84
+ "optionalDependencies": {
85
+ "pi-ghost-autocomplete-darwin-arm64": "0.4.0",
86
+ "pi-ghost-autocomplete-linux-arm64-gnu": "0.4.0",
87
+ "pi-ghost-autocomplete-linux-x64-gnu": "0.4.0",
88
+ "pi-ghost-autocomplete-win32-x64-msvc": "0.4.0"
89
+ }
90
+ }
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=bench-cli.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bench-cli.d.ts","sourceRoot":"","sources":["../src/bench-cli.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bench-cli.js","sourceRoot":"","sources":["../src/bench-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,YAAY,GAAG,sCAAsC,CAAC;AAE5D,KAAK,UAAU,IAAI;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B,OAAO;IACR,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC;IAErE,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,wCAAwC,MAAM,2BAA2B,CACzE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC;AAED,SAAS,KAAK;IACb,OAAO;QACN,gCAAgC;QAChC,EAAE;QACF,+EAA+E;QAC/E,gDAAgD;QAChD,2BAA2B;QAC3B,EAAE;QACF,yEAAyE;QACzE,EAAE;KACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,KAAK,IAAI,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"bench.d.ts","sourceRoot":"","sources":["../src/bench.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,aAAa,EAAkC,MAAM,cAAc,CAAC;AAErG;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;CAMb,CAAC;AAEX,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,eAAe,GAAG,KAAK,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,SAAS,CAAC;IACzB,GAAG,EAAE,SAAS,CAAC;IACf,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrF;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAChC,IAAI,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAG5D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC/C,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACpB,CAcA;AAaD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACxB,OAAO,EAAE,aAAa,EAAE,EACxB,MAAM,SAAa,EACnB,WAAW,SAAI,GACb,eAAe,CAajB;AAqHD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA8B5D;AAMD;;GAEG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAGzE"}
package/dist/bench.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bench.js","sourceRoot":"","sources":["../src/bench.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,eAAe,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,0BAA0B;IAC1C,IAAI,EAAE,eAAe,CAAC;IACtB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC,mBAAmB,GAAG,mBAAmB,GAAG,0BAA0B,CAAC,CAAC;IACvF,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,cAAc,GACvB,mBAAmB,GACnB,mBAAmB,GACnB,0BAA0B,GAC1B,kBAAkB,CAAC;AAEtB,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,mBAOlC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,mBAOlC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,0BAQpC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAK5B,CAAC;AAqBF,wBAAgB,iBAAiB,IAAI,WAAW,CAwC/C"}
package/dist/config.js DELETED
@@ -1,187 +0,0 @@
1
- import { getModels } from "@earendil-works/pi-ai";
2
- export const DEFAULT_CLOUD_CONFIG = {
3
- kind: "cloud",
4
- provider: "groq",
5
- modelId: "llama-3.1-8b-instant",
6
- debounceMs: 150,
7
- maxTokens: 64,
8
- maxRecentMessages: 4,
9
- };
10
- export const DEFAULT_LOCAL_CONFIG = {
11
- kind: "local",
12
- baseUrl: "http://localhost:11434",
13
- modelId: "qwen2.5-coder:1.5b",
14
- debounceMs: 400,
15
- maxTokens: 48,
16
- maxRecentMessages: 2,
17
- };
18
- export const DEFAULT_MERCURY_CONFIG = {
19
- kind: "openai-compat",
20
- providerName: "mercury-edit",
21
- baseUrl: "https://api.inceptionlabs.ai/v1",
22
- modelId: "mercury-edit-2",
23
- debounceMs: 150,
24
- maxTokens: 64,
25
- maxRecentMessages: 4,
26
- };
27
- export const DEFAULT_CONFIG = {
28
- enabled: true,
29
- provider: DEFAULT_MERCURY_CONFIG,
30
- minChars: 3,
31
- maxLineLength: 240,
32
- };
33
- /**
34
- * Default per-provider model id when racing. Models chosen for speed; users
35
- * can override individually with `PI_GHOST_RACE_<NAME>_MODEL`.
36
- */
37
- const RACE_DEFAULT_MODELS = {
38
- groq: "llama-3.1-8b-instant",
39
- cerebras: "llama-3.1-8b",
40
- };
41
- /**
42
- * Aliases recognized as Mercury Edit (Inception Labs). Limited to the brand
43
- * name and the specific model version — broader aliases like bare "mercury"
44
- * or "inception" would lock in a routing that might surprise a user wanting
45
- * a future model from the same vendor.
46
- */
47
- const MERCURY_ALIASES = new Set(["mercury", "mercury-2", "mercury-edit", "mercury-edit-2"]);
48
- const MERCURY_DEFAULT_BASE_URL = "https://api.inceptionlabs.ai/v1";
49
- const MERCURY_DEFAULT_MODEL = "mercury-edit-2";
50
- export function readConfigFromEnv() {
51
- const raceList = process.env.PI_GHOST_RACE_PROVIDERS;
52
- const mode = process.env.PI_GHOST_PROVIDER?.toLowerCase();
53
- const cfg = {
54
- enabled: process.env.PI_GHOST_DISABLED !== "1",
55
- provider: raceList
56
- ? buildRaceFromEnv(raceList)
57
- : mode === "local"
58
- ? { ...DEFAULT_LOCAL_CONFIG }
59
- : mode === "cloud"
60
- ? { ...DEFAULT_CLOUD_CONFIG }
61
- : { ...DEFAULT_MERCURY_CONFIG },
62
- minChars: numEnv("PI_GHOST_MIN_CHARS", DEFAULT_CONFIG.minChars),
63
- maxLineLength: numEnv("PI_GHOST_MAX_LINE", DEFAULT_CONFIG.maxLineLength),
64
- };
65
- if (cfg.provider.kind === "cloud") {
66
- if (process.env.PI_GHOST_PROVIDER_NAME)
67
- cfg.provider.provider = process.env.PI_GHOST_PROVIDER_NAME;
68
- if (process.env.PI_GHOST_MODEL)
69
- cfg.provider.modelId = process.env.PI_GHOST_MODEL;
70
- if (process.env.PI_GHOST_API_KEY)
71
- cfg.provider.apiKey = process.env.PI_GHOST_API_KEY;
72
- cfg.provider.debounceMs = numEnv("PI_GHOST_DEBOUNCE_MS", cfg.provider.debounceMs);
73
- cfg.provider.maxTokens = numEnv("PI_GHOST_MAX_TOKENS", cfg.provider.maxTokens);
74
- cfg.provider.maxRecentMessages = numEnv("PI_GHOST_RECENT", cfg.provider.maxRecentMessages);
75
- }
76
- else if (cfg.provider.kind === "openai-compat") {
77
- if (process.env.PI_GHOST_BASE_URL)
78
- cfg.provider.baseUrl = process.env.PI_GHOST_BASE_URL;
79
- else if (process.env.INCEPTION_BASE_URL)
80
- cfg.provider.baseUrl = process.env.INCEPTION_BASE_URL;
81
- if (process.env.PI_GHOST_MODEL)
82
- cfg.provider.modelId = process.env.PI_GHOST_MODEL;
83
- if (process.env.PI_GHOST_API_KEY)
84
- cfg.provider.apiKey = process.env.PI_GHOST_API_KEY;
85
- else if (process.env.INCEPTION_API_KEY)
86
- cfg.provider.apiKey = process.env.INCEPTION_API_KEY;
87
- cfg.provider.debounceMs = numEnv("PI_GHOST_DEBOUNCE_MS", cfg.provider.debounceMs);
88
- cfg.provider.maxTokens = numEnv("PI_GHOST_MAX_TOKENS", cfg.provider.maxTokens);
89
- cfg.provider.maxRecentMessages = numEnv("PI_GHOST_RECENT", cfg.provider.maxRecentMessages);
90
- }
91
- else if (cfg.provider.kind === "local") {
92
- if (process.env.PI_GHOST_BASE_URL)
93
- cfg.provider.baseUrl = process.env.PI_GHOST_BASE_URL;
94
- if (process.env.PI_GHOST_MODEL)
95
- cfg.provider.modelId = process.env.PI_GHOST_MODEL;
96
- cfg.provider.debounceMs = numEnv("PI_GHOST_DEBOUNCE_MS", cfg.provider.debounceMs);
97
- cfg.provider.maxTokens = numEnv("PI_GHOST_MAX_TOKENS", cfg.provider.maxTokens);
98
- cfg.provider.maxRecentMessages = numEnv("PI_GHOST_RECENT", cfg.provider.maxRecentMessages);
99
- }
100
- return cfg;
101
- }
102
- function buildRaceFromEnv(raceList) {
103
- const names = raceList
104
- .split(",")
105
- .map((s) => s.trim().toLowerCase())
106
- .filter((s) => s.length > 0);
107
- const members = [];
108
- for (const name of names) {
109
- const member = buildRaceMember(name);
110
- if (member)
111
- members.push(member);
112
- }
113
- const pauseMs = numEnv("PI_GHOST_RACE_PAUSE_MS", 400);
114
- const cooldownMs = numEnv("PI_GHOST_RACE_COOLDOWN_MS", 1500);
115
- const cutoffMs = numEnv("PI_GHOST_RACE_CUTOFF_MS", 700);
116
- return {
117
- kind: "race",
118
- members,
119
- pauseMs,
120
- cooldownMs,
121
- cutoffMs,
122
- maxRecentMessages: numEnv("PI_GHOST_RECENT", DEFAULT_CLOUD_CONFIG.maxRecentMessages),
123
- };
124
- }
125
- function buildRaceMember(name) {
126
- const upper = name.replace(/[^A-Za-z0-9]/g, "_").toUpperCase();
127
- if (name === "local" || name === "ollama") {
128
- return {
129
- ...DEFAULT_LOCAL_CONFIG,
130
- baseUrl: process.env[`PI_GHOST_RACE_${upper}_BASE_URL`] ?? DEFAULT_LOCAL_CONFIG.baseUrl,
131
- modelId: process.env[`PI_GHOST_RACE_${upper}_MODEL`] ?? DEFAULT_LOCAL_CONFIG.modelId,
132
- };
133
- }
134
- if (MERCURY_ALIASES.has(name)) {
135
- const baseUrl = process.env[`PI_GHOST_RACE_${upper}_BASE_URL`] ??
136
- process.env.INCEPTION_BASE_URL ??
137
- MERCURY_DEFAULT_BASE_URL;
138
- const modelId = process.env[`PI_GHOST_RACE_${upper}_MODEL`] ?? MERCURY_DEFAULT_MODEL;
139
- const apiKey = process.env[`PI_GHOST_RACE_${upper}_API_KEY`] ?? process.env.INCEPTION_API_KEY;
140
- return {
141
- kind: "openai-compat",
142
- providerName: "mercury-edit",
143
- baseUrl,
144
- modelId,
145
- ...(apiKey !== undefined ? { apiKey } : {}),
146
- debounceMs: DEFAULT_CLOUD_CONFIG.debounceMs,
147
- maxTokens: DEFAULT_CLOUD_CONFIG.maxTokens,
148
- maxRecentMessages: DEFAULT_CLOUD_CONFIG.maxRecentMessages,
149
- };
150
- }
151
- const provider = name;
152
- if (!isKnownCloudProvider(provider)) {
153
- process.stderr.write(`Pi Ghost: ignoring unknown race provider '${name}' in PI_GHOST_RACE_PROVIDERS\n`);
154
- return null;
155
- }
156
- const modelEnv = process.env[`PI_GHOST_RACE_${upper}_MODEL`];
157
- const modelId = modelEnv ?? RACE_DEFAULT_MODELS[provider] ?? DEFAULT_CLOUD_CONFIG.modelId;
158
- const apiKey = process.env[`PI_GHOST_RACE_${upper}_API_KEY`];
159
- return {
160
- ...DEFAULT_CLOUD_CONFIG,
161
- provider,
162
- modelId,
163
- ...(apiKey !== undefined ? { apiKey } : {}),
164
- };
165
- }
166
- /**
167
- * Return true when pi-ai recognizes `name` as a cloud provider with at least
168
- * one registered model. Used at config-parse time to reject typos in
169
- * `PI_GHOST_RACE_PROVIDERS` before they cause repeated runtime errors.
170
- */
171
- function isKnownCloudProvider(name) {
172
- try {
173
- const models = getModels(name);
174
- return Array.isArray(models) && models.length > 0;
175
- }
176
- catch {
177
- return false;
178
- }
179
- }
180
- function numEnv(name, fallback) {
181
- const raw = process.env[name];
182
- if (!raw)
183
- return fallback;
184
- const v = Number(raw);
185
- return Number.isFinite(v) && v >= 0 ? v : fallback;
186
- }
187
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-aggregator.d.ts","sourceRoot":"","sources":["../src/context-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAiBrF;AAiBD,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAYrD"}
@@ -1,58 +0,0 @@
1
- /**
2
- * Read up to `max` recent user/assistant messages from the current branch.
3
- * Returns oldest-first. Tool calls and non-text content are ignored — ghost
4
- * predictions only need conversational context, not full agent transcripts.
5
- */
6
- export function getRecentMessages(ctx, max) {
7
- if (max <= 0)
8
- return [];
9
- const branch = safeBranch(ctx);
10
- if (!branch)
11
- return [];
12
- const out = [];
13
- for (let i = branch.length - 1; i >= 0 && out.length < max; i--) {
14
- const entry = branch[i];
15
- if (!entry || entry.type !== "message")
16
- continue;
17
- const role = roleOf(entry.message);
18
- if (role !== "user" && role !== "assistant")
19
- continue;
20
- const text = extractText(entry.message);
21
- if (!text)
22
- continue;
23
- out.push({ role, text });
24
- }
25
- out.reverse();
26
- return out;
27
- }
28
- function safeBranch(ctx) {
29
- try {
30
- return ctx.sessionManager.getBranch();
31
- }
32
- catch {
33
- return undefined;
34
- }
35
- }
36
- function roleOf(msg) {
37
- if (msg && typeof msg === "object" && "role" in msg && typeof msg.role === "string") {
38
- return msg.role;
39
- }
40
- return undefined;
41
- }
42
- export function extractText(msg) {
43
- if (!msg || typeof msg !== "object" || !("content" in msg))
44
- return "";
45
- const content = msg.content;
46
- if (typeof content === "string")
47
- return content.trim();
48
- if (!Array.isArray(content))
49
- return "";
50
- const parts = [];
51
- for (const c of content) {
52
- if (c && typeof c === "object" && "type" in c && c.type === "text" && "text" in c && typeof c.text === "string") {
53
- parts.push(c.text);
54
- }
55
- }
56
- return parts.join("").trim();
57
- }
58
- //# sourceMappingURL=context-aggregator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-aggregator.js","sourceRoot":"","sources":["../src/context-aggregator.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAqB,EAAE,GAAW;IACnE,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW;YAAE,SAAS;QACtD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,GAAG,CAAC,OAAO,EAAE,CAAC;IACd,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,GAAqB;IACxC,IAAI,CAAC;QACJ,OAAO,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,MAAM,CAAC,GAAiB;IAChC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrF,OAAO,GAAG,CAAC,IAAI,CAAC;IACjB,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAiB;IAC5C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACtE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjH,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fuzzy-matcher.d.ts","sourceRoot":"","sources":["../src/fuzzy-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,MAAM,WAAW,gBAAgB;IAChC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACjC;AAsBD,MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAE5E,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,+FAA+F;IAC/F,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAqB9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,gBAAqB,GACzB,UAAU,GAAG,IAAI,CAuDnB"}
@@ -1,160 +0,0 @@
1
- import { recentBoost } from "./recent-paths.js";
2
- const ACTION_WORDS = new Set([
3
- "open",
4
- "edit",
5
- "read",
6
- "show",
7
- "view",
8
- "find",
9
- "check",
10
- "look",
11
- "load",
12
- "import",
13
- "include",
14
- "see",
15
- "run",
16
- ]);
17
- const FUZZY_CHAR = /[A-Za-z0-9_.\-]/;
18
- const QUOTE_CHARS = new Set(['"', "'", "`"]);
19
- const MIN_FUZZY_LEN = 3;
20
- /**
21
- * Extract a fuzzy-search token from `line` ending at `col`. Returns null when
22
- * the token is shorter than the minimum length, contains a `/` (path-prefix
23
- * mode handles slashed tokens), or starts at col 0 with no preceding word.
24
- *
25
- * `hasActionTrigger` is true when the word immediately before the token is one
26
- * of the action verbs that gate medium-confidence fuzzy matches.
27
- */
28
- export function extractFuzzyToken(line, col) {
29
- if (col < MIN_FUZZY_LEN)
30
- return null;
31
- let start = col;
32
- while (start > 0) {
33
- const ch = line[start - 1];
34
- if (!ch || !FUZZY_CHAR.test(ch))
35
- break;
36
- start--;
37
- }
38
- const token = line.slice(start, col);
39
- if (token.length < MIN_FUZZY_LEN)
40
- return null;
41
- if (token.includes("/"))
42
- return null;
43
- const prev = start > 0 ? line[start - 1] : undefined;
44
- // Skip fuzzy when token sits in a path context (`src/foo`); path-prefix
45
- // matcher owns slashed tokens.
46
- if (prev === "/")
47
- return null;
48
- return {
49
- token,
50
- startCol: start,
51
- hasActionTrigger: hasActionTrigger(line.slice(0, start)),
52
- insideQuote: prev !== undefined && QUOTE_CHARS.has(prev),
53
- };
54
- }
55
- /**
56
- * True when `prefix` ends with an action verb followed by whitespace.
57
- */
58
- export function hasActionTrigger(prefix) {
59
- const m = prefix.match(/(?:^|\s)([A-Za-z]+)\s+$/);
60
- if (!m || !m[1])
61
- return false;
62
- return ACTION_WORDS.has(m[1].toLowerCase());
63
- }
64
- /**
65
- * Pick the best fuzzy match for `token` across the index.
66
- *
67
- * Scoring bands (per PRD):
68
- * - basename-prefix: 85 + boosts
69
- * - fuzzy-basename: 60-80 + boosts
70
- * - fuzzy-path: 45-70 + boosts
71
- *
72
- * Boosts: cwd subtree (+5), shorter paths (up to +5).
73
- *
74
- * Caller is responsible for trigger gating (action-word requirement at score
75
- * 70-84). Scores < 70 should not be shown deterministically.
76
- */
77
- export function findFuzzyFilename(index, token, opts = {}) {
78
- if (token.length < MIN_FUZZY_LEN)
79
- return null;
80
- const lowerToken = token.toLowerCase();
81
- const cwdRel = relSubtree(index.root, index.cwd);
82
- const recent = opts.recentPaths ?? null;
83
- let best = null;
84
- for (const f of index.files) {
85
- const bn = basename(f);
86
- const lowerBn = bn.toLowerCase();
87
- const inSub = cwdRel === "" || f.startsWith(cwdRel);
88
- const subBoost = inSub ? 5 : 0;
89
- const shortBoost = Math.max(0, 5 - Math.floor(f.length / 30));
90
- const recentBoostV = recentBoost(f, recent);
91
- let candidate = null;
92
- if (lowerBn.startsWith(lowerToken)) {
93
- const score = 85 + subBoost + shortBoost + recentBoostV;
94
- const suffix = bn.slice(token.length);
95
- if (suffix) {
96
- candidate = {
97
- match: f,
98
- score,
99
- band: "basename-prefix",
100
- ghost: suffix,
101
- replace: false,
102
- insert: suffix,
103
- };
104
- }
105
- }
106
- else if (isSubsequence(lowerToken, lowerBn)) {
107
- const ratio = token.length / bn.length;
108
- const score = 60 + Math.floor(ratio * 20) + subBoost + shortBoost + recentBoostV;
109
- candidate = {
110
- match: f,
111
- score,
112
- band: "fuzzy-basename",
113
- ghost: f,
114
- replace: true,
115
- insert: f,
116
- };
117
- }
118
- else if (isSubsequence(lowerToken, f.toLowerCase())) {
119
- const ratio = token.length / f.length;
120
- const score = 45 + Math.floor(ratio * 25) + subBoost + shortBoost + recentBoostV;
121
- candidate = {
122
- match: f,
123
- score,
124
- band: "fuzzy-path",
125
- ghost: f,
126
- replace: true,
127
- insert: f,
128
- };
129
- }
130
- if (candidate && (!best || candidate.score > best.score)) {
131
- best = candidate;
132
- }
133
- }
134
- return best;
135
- }
136
- function isSubsequence(needle, hay) {
137
- if (!needle)
138
- return true;
139
- let i = 0;
140
- for (let j = 0; j < hay.length && i < needle.length; j++) {
141
- if (needle[i] === hay[j])
142
- i++;
143
- }
144
- return i === needle.length;
145
- }
146
- function basename(p) {
147
- const i = p.lastIndexOf("/");
148
- return i < 0 ? p : p.slice(i + 1);
149
- }
150
- function relSubtree(root, cwd) {
151
- const r = root.replace(/\\/g, "/").replace(/\/+$/, "");
152
- const c = cwd.replace(/\\/g, "/").replace(/\/+$/, "");
153
- if (c === r)
154
- return "";
155
- const prefix = `${r}/`;
156
- if (c.startsWith(prefix))
157
- return `${c.slice(prefix.length)}/`;
158
- return "";
159
- }
160
- //# sourceMappingURL=fuzzy-matcher.js.map