@xrkseek/harness 0.5.11 → 0.5.13

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 (152) hide show
  1. package/node_modules/@vscode/ripgrep/LICENSE +13 -0
  2. package/node_modules/@vscode/ripgrep/README.md +33 -0
  3. package/node_modules/@vscode/ripgrep/lib/index.d.ts +1 -0
  4. package/node_modules/@vscode/ripgrep/lib/index.js +19 -0
  5. package/node_modules/@vscode/ripgrep/package.json +39 -0
  6. package/node_modules/@vscode/ripgrep-win32-x64/LICENSE +13 -0
  7. package/node_modules/@vscode/ripgrep-win32-x64/README.md +5 -0
  8. package/node_modules/@vscode/ripgrep-win32-x64/bin/rg.exe +0 -0
  9. package/node_modules/@vscode/ripgrep-win32-x64/package.json +19 -0
  10. package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts.map +1 -1
  11. package/node_modules/@xrkseek/core-agent-loop/dist/index.js +20 -5
  12. package/node_modules/@xrkseek/core-agent-loop/dist/index.js.map +1 -1
  13. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.d.ts.map +1 -1
  14. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.js +4 -2
  15. package/node_modules/@xrkseek/core-tools/dist/subagent-prompt.js.map +1 -1
  16. package/node_modules/@xrkseek/exec-fs/dist/index.d.ts +7 -9
  17. package/node_modules/@xrkseek/exec-fs/dist/index.d.ts.map +1 -1
  18. package/node_modules/@xrkseek/exec-fs/dist/index.js +60 -19
  19. package/node_modules/@xrkseek/exec-fs/dist/index.js.map +1 -1
  20. package/node_modules/@xrkseek/exec-fs/dist/ripgrep.d.ts +63 -0
  21. package/node_modules/@xrkseek/exec-fs/dist/ripgrep.d.ts.map +1 -0
  22. package/node_modules/@xrkseek/exec-fs/dist/ripgrep.js +363 -0
  23. package/node_modules/@xrkseek/exec-fs/dist/ripgrep.js.map +1 -0
  24. package/node_modules/@xrkseek/exec-fs/dist/search.d.ts +32 -3
  25. package/node_modules/@xrkseek/exec-fs/dist/search.d.ts.map +1 -1
  26. package/node_modules/@xrkseek/exec-fs/dist/search.js +189 -72
  27. package/node_modules/@xrkseek/exec-fs/dist/search.js.map +1 -1
  28. package/node_modules/@xrkseek/exec-fs/package.json +2 -0
  29. package/node_modules/@xrkseek/exec-shell/dist/index.d.ts +14 -1
  30. package/node_modules/@xrkseek/exec-shell/dist/index.d.ts.map +1 -1
  31. package/node_modules/@xrkseek/exec-shell/dist/index.js +37 -5
  32. package/node_modules/@xrkseek/exec-shell/dist/index.js.map +1 -1
  33. package/node_modules/@xrkseek/exec-subprocess/dist/capture.d.ts +73 -0
  34. package/node_modules/@xrkseek/exec-subprocess/dist/capture.d.ts.map +1 -0
  35. package/node_modules/@xrkseek/exec-subprocess/dist/capture.js +240 -0
  36. package/node_modules/@xrkseek/exec-subprocess/dist/capture.js.map +1 -0
  37. package/node_modules/@xrkseek/exec-subprocess/dist/index.d.ts +19 -0
  38. package/node_modules/@xrkseek/exec-subprocess/dist/index.d.ts.map +1 -1
  39. package/node_modules/@xrkseek/exec-subprocess/dist/index.js +58 -21
  40. package/node_modules/@xrkseek/exec-subprocess/dist/index.js.map +1 -1
  41. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts +6 -7
  42. package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
  43. package/node_modules/@xrkseek/preset-harness/dist/preset.js +14 -11
  44. package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
  45. package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
  46. package/node_modules/@xrkseek/preset-harness/package.json +1 -0
  47. package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
  48. package/node_modules/@xrkseek/preset-server/dist/preset.d.ts.map +1 -1
  49. package/node_modules/@xrkseek/preset-server/dist/preset.js +4 -1
  50. package/node_modules/@xrkseek/preset-server/dist/preset.js.map +1 -1
  51. package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
  52. package/node_modules/@xrkseek/server-config/dist/home.d.ts +1 -2
  53. package/node_modules/@xrkseek/server-config/dist/home.d.ts.map +1 -1
  54. package/node_modules/@xrkseek/server-config/dist/home.js +1 -2
  55. package/node_modules/@xrkseek/server-config/dist/home.js.map +1 -1
  56. package/node_modules/@xrkseek/server-face/dist/adapt/history-paginate.d.ts +6 -0
  57. package/node_modules/@xrkseek/server-face/dist/adapt/history-paginate.d.ts.map +1 -1
  58. package/node_modules/@xrkseek/server-face/dist/adapt/history-paginate.js +28 -1
  59. package/node_modules/@xrkseek/server-face/dist/adapt/history-paginate.js.map +1 -1
  60. package/node_modules/@xrkseek/server-face/dist/adapt/wire-ids.d.ts +11 -0
  61. package/node_modules/@xrkseek/server-face/dist/adapt/wire-ids.d.ts.map +1 -1
  62. package/node_modules/@xrkseek/server-face/dist/adapt/wire-ids.js +19 -0
  63. package/node_modules/@xrkseek/server-face/dist/adapt/wire-ids.js.map +1 -1
  64. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.d.ts +38 -2
  65. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.d.ts.map +1 -1
  66. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.js +178 -37
  67. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.js.map +1 -1
  68. package/node_modules/@xrkseek/server-face/dist/agent-roster-tools.d.ts.map +1 -1
  69. package/node_modules/@xrkseek/server-face/dist/agent-roster-tools.js +17 -6
  70. package/node_modules/@xrkseek/server-face/dist/agent-roster-tools.js.map +1 -1
  71. package/node_modules/@xrkseek/server-face/dist/collab-board.d.ts +41 -0
  72. package/node_modules/@xrkseek/server-face/dist/collab-board.d.ts.map +1 -0
  73. package/node_modules/@xrkseek/server-face/dist/collab-board.js +79 -0
  74. package/node_modules/@xrkseek/server-face/dist/collab-board.js.map +1 -0
  75. package/node_modules/@xrkseek/server-face/dist/face-schema.d.ts.map +1 -1
  76. package/node_modules/@xrkseek/server-face/dist/face-schema.js +12 -2
  77. package/node_modules/@xrkseek/server-face/dist/face-schema.js.map +1 -1
  78. package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
  79. package/node_modules/@xrkseek/server-face/dist/handlers/session.js +8 -12
  80. package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
  81. package/node_modules/@xrkseek/server-face/dist/handlers/team.d.ts.map +1 -1
  82. package/node_modules/@xrkseek/server-face/dist/handlers/team.js +13 -1
  83. package/node_modules/@xrkseek/server-face/dist/handlers/team.js.map +1 -1
  84. package/node_modules/@xrkseek/server-face/dist/index.d.ts +4 -2
  85. package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
  86. package/node_modules/@xrkseek/server-face/dist/index.js +4 -2
  87. package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
  88. package/node_modules/@xrkseek/server-face/dist/presence-dressing.d.ts +26 -0
  89. package/node_modules/@xrkseek/server-face/dist/presence-dressing.d.ts.map +1 -0
  90. package/node_modules/@xrkseek/server-face/dist/presence-dressing.js +84 -0
  91. package/node_modules/@xrkseek/server-face/dist/presence-dressing.js.map +1 -0
  92. package/node_modules/@xrkseek/server-face/dist/presence-tools.d.ts.map +1 -1
  93. package/node_modules/@xrkseek/server-face/dist/presence-tools.js +9 -5
  94. package/node_modules/@xrkseek/server-face/dist/presence-tools.js.map +1 -1
  95. package/node_modules/@xrkseek/server-face/dist/projections/index.d.ts +1 -1
  96. package/node_modules/@xrkseek/server-face/dist/projections/index.d.ts.map +1 -1
  97. package/node_modules/@xrkseek/server-face/dist/projections/index.js +1 -1
  98. package/node_modules/@xrkseek/server-face/dist/projections/index.js.map +1 -1
  99. package/node_modules/@xrkseek/server-face/dist/projections/registry.d.ts +2 -2
  100. package/node_modules/@xrkseek/server-face/dist/projections/units/turn-outline.d.ts +15 -3
  101. package/node_modules/@xrkseek/server-face/dist/projections/units/turn-outline.d.ts.map +1 -1
  102. package/node_modules/@xrkseek/server-face/dist/projections/units/turn-outline.js +23 -7
  103. package/node_modules/@xrkseek/server-face/dist/projections/units/turn-outline.js.map +1 -1
  104. package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
  105. package/node_modules/@xrkseek/server-face/dist/runtime.js +6 -4
  106. package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
  107. package/node_modules/@xrkseek/server-face/dist/session-status.d.ts +49 -1
  108. package/node_modules/@xrkseek/server-face/dist/session-status.d.ts.map +1 -1
  109. package/node_modules/@xrkseek/server-face/dist/session-status.js +89 -18
  110. package/node_modules/@xrkseek/server-face/dist/session-status.js.map +1 -1
  111. package/node_modules/@xrkseek/server-face/dist/session-thread-message.d.ts +17 -0
  112. package/node_modules/@xrkseek/server-face/dist/session-thread-message.d.ts.map +1 -0
  113. package/node_modules/@xrkseek/server-face/dist/session-thread-message.js +34 -0
  114. package/node_modules/@xrkseek/server-face/dist/session-thread-message.js.map +1 -0
  115. package/node_modules/@xrkseek/server-face/dist/session-thread-store.d.ts +2 -0
  116. package/node_modules/@xrkseek/server-face/dist/session-thread-store.d.ts.map +1 -1
  117. package/node_modules/@xrkseek/server-face/dist/session-thread-store.js +10 -0
  118. package/node_modules/@xrkseek/server-face/dist/session-thread-store.js.map +1 -1
  119. package/node_modules/@xrkseek/server-face/dist/session-thread-tools.d.ts +15 -0
  120. package/node_modules/@xrkseek/server-face/dist/session-thread-tools.d.ts.map +1 -1
  121. package/node_modules/@xrkseek/server-face/dist/session-thread-tools.js +159 -7
  122. package/node_modules/@xrkseek/server-face/dist/session-thread-tools.js.map +1 -1
  123. package/node_modules/@xrkseek/server-face/dist/settings-document.d.ts.map +1 -1
  124. package/node_modules/@xrkseek/server-face/dist/settings-document.js +36 -1
  125. package/node_modules/@xrkseek/server-face/dist/settings-document.js.map +1 -1
  126. package/node_modules/@xrkseek/server-face/dist/settings-schemas.d.ts.map +1 -1
  127. package/node_modules/@xrkseek/server-face/dist/settings-schemas.js +28 -2
  128. package/node_modules/@xrkseek/server-face/dist/settings-schemas.js.map +1 -1
  129. package/node_modules/@xrkseek/server-face/dist/subagent-registry.d.ts +6 -0
  130. package/node_modules/@xrkseek/server-face/dist/subagent-registry.d.ts.map +1 -1
  131. package/node_modules/@xrkseek/server-face/dist/subagent-registry.js +18 -0
  132. package/node_modules/@xrkseek/server-face/dist/subagent-registry.js.map +1 -1
  133. package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts.map +1 -1
  134. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js +2 -1
  135. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js.map +1 -1
  136. package/node_modules/@xrkseek/server-face/dist/ws-send-queue.d.ts +10 -0
  137. package/node_modules/@xrkseek/server-face/dist/ws-send-queue.d.ts.map +1 -1
  138. package/node_modules/@xrkseek/server-face/dist/ws-send-queue.js +68 -3
  139. package/node_modules/@xrkseek/server-face/dist/ws-send-queue.js.map +1 -1
  140. package/node_modules/@xrkseek/server-host/dist/index.d.ts +13 -8
  141. package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
  142. package/node_modules/@xrkseek/server-host/dist/index.js +30 -28
  143. package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
  144. package/node_modules/@xrkseek/workspace/dist/skills.d.ts +1 -1
  145. package/node_modules/@xrkseek/workspace/dist/skills.d.ts.map +1 -1
  146. package/node_modules/@xrkseek/workspace/dist/skills.js +1 -1
  147. package/node_modules/@xrkseek/workspace/dist/skills.js.map +1 -1
  148. package/node_modules/@xrkseek/xrk-file-reference-local/dist/search.d.ts +1 -1
  149. package/node_modules/@xrkseek/xrk-file-reference-local/dist/search.d.ts.map +1 -1
  150. package/node_modules/@xrkseek/xrk-file-reference-local/dist/search.js +23 -1
  151. package/node_modules/@xrkseek/xrk-file-reference-local/dist/search.js.map +1 -1
  152. package/package.json +5 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ripgrep.js","sourceRoot":"","sources":["../src/ripgrep.ts"],"names":[],"mappings":"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"}
@@ -14,17 +14,46 @@ export interface FsGrepOptions {
14
14
  readonly maxResults?: number;
15
15
  readonly caseInsensitive?: boolean;
16
16
  }
17
+ /** Skip heavy / generated trees so grep/glob stay interactive on monorepos. */
18
+ export declare const FS_SEARCH_SKIP_DIR_NAMES: Set<string>;
19
+ /** Soft walk ceiling (still high enough for late-sorted paths). */
20
+ export declare const FS_SEARCH_WALK_CAP = 100000;
21
+ /** Skip individual files larger than this for content grep. */
22
+ export declare const FS_GREP_MAX_FILE_BYTES = 1000000;
17
23
  /** Convert a posix-ish glob to a RegExp. Supports * and ** segments. */
18
24
  export declare function globToRegExp(pattern: string): RegExp;
19
25
  export declare function matchGlob(relPosix: string, pattern: string): boolean;
26
+ type WalkVisitor = (relPosix: string) => boolean | void | Promise<boolean | void>;
27
+ /**
28
+ * Depth-first walk under `absDir`. Skips junk dir basenames. Invokes `visit`
29
+ * for each file (posix path relative to `rootAbs`). Stop when visit returns
30
+ * false or `cap` files have been visited. Yields periodically so Host LLM /
31
+ * mux work can interleave.
32
+ */
33
+ export declare function walkFilesUnder(absDir: string, rootAbs: string, visit: WalkVisitor, cap?: number): Promise<void>;
34
+ /**
35
+ * In-process glob walk (fallback when packaged ripgrep is unavailable).
36
+ * Matches during the walk and stops at `maxResults`.
37
+ */
38
+ export declare function globWalkUnderRoot(root: string, pattern: string, options?: FsGlobOptions): Promise<readonly string[]>;
20
39
  /**
21
40
  * Collect files under `root` matching `pattern` (posix paths relative to root).
22
- * Walks with a generous traversal cap so later-sorted paths aren't missed;
23
- * only the returned list is cut at `maxResults`.
41
+ * Prefers packaged ripgrep (`@vscode/ripgrep`, Codex / pi / DSH); falls back
42
+ * to {@link globWalkUnderRoot} when the binary is missing. Set `XRK_FS_SEARCH=js`
43
+ * to force the walk.
24
44
  */
25
45
  export declare function globUnderRoot(root: string, pattern: string, options?: FsGlobOptions): Promise<readonly string[]>;
46
+ /** Line scan without allocating a full `split` array (hot for large files). */
47
+ export declare function forEachLine(text: string, fn: (line: string, lineNo: number) => boolean): void;
48
+ /**
49
+ * In-process content search (fallback when packaged ripgrep is unavailable).
50
+ */
51
+ export declare function grepWalkUnderRoot(root: string, pattern: string, options?: FsGrepOptions): Promise<readonly FsGrepHit[]>;
26
52
  /**
27
- * Search file contents under root for a JS RegExp `pattern` string.
53
+ * Search file contents under root. Prefers packaged ripgrep (`--json`);
54
+ * falls back to {@link grepWalkUnderRoot} when the binary is missing.
55
+ * Set `XRK_FS_SEARCH=js` to force the walk.
28
56
  */
29
57
  export declare function grepUnderRoot(root: string, pattern: string, options?: FsGrepOptions): Promise<readonly FsGrepHit[]>;
58
+ export {};
30
59
  //# sourceMappingURL=search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmCpD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGpE;AA8BD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAmB5B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAoE/B"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,aAsBnC,CAAC;AAEH,mEAAmE;AACnE,eAAO,MAAM,kBAAkB,SAAU,CAAC;AAC1C,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,UAAY,CAAC;AAIhD,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmCpD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGpE;AAED,KAAK,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAElF;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,WAAW,EAClB,GAAG,GAAE,MAA2B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAa5B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAc5B;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,GAC5C,IAAI,CAaN;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CA0E/B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAc/B"}
@@ -1,6 +1,37 @@
1
1
  import { readdir, readFile as fsReadFile, stat as fsStat } from "node:fs/promises";
2
2
  import path from "node:path";
3
+ import { scheduler } from "node:timers/promises";
3
4
  import { resolveWithinRoot } from "./paths.js";
5
+ /** Skip heavy / generated trees so grep/glob stay interactive on monorepos. */
6
+ export const FS_SEARCH_SKIP_DIR_NAMES = new Set([
7
+ ".git",
8
+ "node_modules",
9
+ "dist",
10
+ "build",
11
+ "out",
12
+ "coverage",
13
+ ".next",
14
+ ".nuxt",
15
+ ".turbo",
16
+ ".cache",
17
+ ".parcel-cache",
18
+ ".vite",
19
+ "__pycache__",
20
+ ".venv",
21
+ "venv",
22
+ "target",
23
+ ".idea",
24
+ ".gradle",
25
+ ".codegraph",
26
+ ".scratch-opus",
27
+ "Pods",
28
+ ]);
29
+ /** Soft walk ceiling (still high enough for late-sorted paths). */
30
+ export const FS_SEARCH_WALK_CAP = 100_000;
31
+ /** Skip individual files larger than this for content grep. */
32
+ export const FS_GREP_MAX_FILE_BYTES = 1_000_000;
33
+ /** Yield the event loop this often while walking / grepping. */
34
+ const YIELD_EVERY = 48;
4
35
  /** Convert a posix-ish glob to a RegExp. Supports * and ** segments. */
5
36
  export function globToRegExp(pattern) {
6
37
  const norm = pattern.replace(/\\/g, "/").replace(/^\/+/, "");
@@ -44,62 +75,119 @@ export function matchGlob(relPosix, pattern) {
44
75
  const rel = relPosix.replace(/\\/g, "/").replace(/^\.\//, "");
45
76
  return globToRegExp(pattern).test(rel);
46
77
  }
47
- async function walkFiles(absDir, rootAbs, out, cap) {
48
- if (out.length >= cap)
49
- return;
50
- let entries;
51
- try {
52
- entries = await readdir(absDir, { withFileTypes: true });
53
- }
54
- catch {
55
- return;
56
- }
57
- for (const ent of entries) {
58
- if (out.length >= cap)
59
- return;
60
- if (ent.name === ".git" || ent.name === "node_modules")
61
- continue;
62
- const abs = path.join(absDir, ent.name);
63
- if (ent.isDirectory()) {
64
- await walkFiles(abs, rootAbs, out, cap);
65
- continue;
78
+ /**
79
+ * Depth-first walk under `absDir`. Skips junk dir basenames. Invokes `visit`
80
+ * for each file (posix path relative to `rootAbs`). Stop when visit returns
81
+ * false or `cap` files have been visited. Yields periodically so Host LLM /
82
+ * mux work can interleave.
83
+ */
84
+ export async function walkFilesUnder(absDir, rootAbs, visit, cap = FS_SEARCH_WALK_CAP) {
85
+ let visited = 0;
86
+ let sinceYield = 0;
87
+ const walk = async (dir) => {
88
+ if (visited >= cap)
89
+ return false;
90
+ let entries;
91
+ try {
92
+ entries = await readdir(dir, { withFileTypes: true });
66
93
  }
67
- if (ent.isFile()) {
94
+ catch {
95
+ return true;
96
+ }
97
+ for (const ent of entries) {
98
+ if (visited >= cap)
99
+ return false;
100
+ if (ent.isDirectory()) {
101
+ if (FS_SEARCH_SKIP_DIR_NAMES.has(ent.name))
102
+ continue;
103
+ const abs = path.join(dir, ent.name);
104
+ if (!(await walk(abs)))
105
+ return false;
106
+ continue;
107
+ }
108
+ if (!ent.isFile())
109
+ continue;
110
+ const abs = path.join(dir, ent.name);
68
111
  const rel = path.relative(rootAbs, abs).replace(/\\/g, "/");
69
- out.push(rel);
112
+ visited += 1;
113
+ sinceYield += 1;
114
+ if (sinceYield >= YIELD_EVERY) {
115
+ sinceYield = 0;
116
+ await scheduler.yield();
117
+ }
118
+ const cont = await visit(rel);
119
+ if (cont === false)
120
+ return false;
70
121
  }
71
- }
122
+ return true;
123
+ };
124
+ await walk(absDir);
72
125
  }
73
126
  /**
74
- * Collect files under `root` matching `pattern` (posix paths relative to root).
75
- * Walks with a generous traversal cap so later-sorted paths aren't missed;
76
- * only the returned list is cut at `maxResults`.
127
+ * In-process glob walk (fallback when packaged ripgrep is unavailable).
128
+ * Matches during the walk and stops at `maxResults`.
77
129
  */
78
- export async function globUnderRoot(root, pattern, options) {
130
+ export async function globWalkUnderRoot(root, pattern, options) {
79
131
  const rootAbs = path.resolve(root);
80
132
  const maxResults = options?.maxResults ?? 200;
81
133
  if (!pattern || typeof pattern !== "string") {
82
134
  throw new Error("glob pattern required");
83
135
  }
84
- const all = [];
85
- // Walk cap decoupled from maxResults: a 200-result request must still see
86
- // every file (the old Math.max(maxResults*4, 2000) truncated the walk at
87
- // 2000 entries, silently dropping later paths like README.md).
88
- await walkFiles(rootAbs, rootAbs, all, 100_000);
89
136
  const matched = [];
90
- for (const rel of all) {
91
- if (matchGlob(rel, pattern)) {
92
- matched.push(rel);
93
- if (matched.length >= maxResults)
94
- break;
137
+ await walkFilesUnder(rootAbs, rootAbs, (rel) => {
138
+ if (!matchGlob(rel, pattern))
139
+ return;
140
+ matched.push(rel);
141
+ if (matched.length >= maxResults)
142
+ return false;
143
+ });
144
+ return matched;
145
+ }
146
+ /**
147
+ * Collect files under `root` matching `pattern` (posix paths relative to root).
148
+ * Prefers packaged ripgrep (`@vscode/ripgrep`, Codex / pi / DSH); falls back
149
+ * to {@link globWalkUnderRoot} when the binary is missing. Set `XRK_FS_SEARCH=js`
150
+ * to force the walk.
151
+ */
152
+ export async function globUnderRoot(root, pattern, options) {
153
+ if (!pattern || typeof pattern !== "string") {
154
+ throw new Error("glob pattern required");
155
+ }
156
+ const { preferJsSearch, RipgrepUnavailableError, globWithRipgrep } = await import("./ripgrep.js");
157
+ if (!preferJsSearch()) {
158
+ try {
159
+ return await globWithRipgrep(root, pattern, options);
160
+ }
161
+ catch (err) {
162
+ if (!(err instanceof RipgrepUnavailableError))
163
+ throw err;
95
164
  }
96
165
  }
97
- return matched;
166
+ return globWalkUnderRoot(root, pattern, options);
167
+ }
168
+ /** Line scan without allocating a full `split` array (hot for large files). */
169
+ export function forEachLine(text, fn) {
170
+ let start = 0;
171
+ let lineNo = 1;
172
+ while (start <= text.length) {
173
+ let end = text.indexOf("\n", start);
174
+ if (end < 0)
175
+ end = text.length;
176
+ let line = text.slice(start, end);
177
+ if (line.endsWith("\r"))
178
+ line = line.slice(0, -1);
179
+ if (!fn(line, lineNo))
180
+ return;
181
+ if (end === text.length)
182
+ break;
183
+ start = end + 1;
184
+ lineNo += 1;
185
+ }
98
186
  }
99
187
  /**
100
- * Search file contents under root for a JS RegExp `pattern` string.
188
+ * In-process content search (fallback when packaged ripgrep is unavailable).
101
189
  */
102
- export async function grepUnderRoot(root, pattern, options) {
190
+ export async function grepWalkUnderRoot(root, pattern, options) {
103
191
  if (!pattern || typeof pattern !== "string") {
104
192
  throw new Error("grep pattern required");
105
193
  }
@@ -118,56 +206,85 @@ export async function grepUnderRoot(root, pattern, options) {
118
206
  const message = err instanceof Error ? err.message : String(err);
119
207
  throw new Error(`invalid grep pattern: ${message}`, { cause: err });
120
208
  }
121
- let files = [];
122
- const scopeAbs = scope === "." || scope === ""
123
- ? rootAbs
124
- : resolveWithinRoot(rootAbs, scope);
125
- const st = await fsStat(scopeAbs);
126
- if (st.isFile()) {
127
- const rel = path.relative(rootAbs, scopeAbs).replace(/\\/g, "/");
128
- files = [rel];
129
- }
130
- else if (st.isDirectory()) {
131
- const gathered = [];
132
- // Walk cap decoupled from maxResults: same truncation fix as globUnderRoot.
133
- await walkFiles(scopeAbs, rootAbs, gathered, 100_000);
134
- files = gathered;
135
- }
136
- if (fileGlob) {
137
- files = files.filter((f) => matchGlob(f, fileGlob));
138
- }
139
209
  const hits = [];
140
- for (const rel of files) {
141
- if (hits.length >= maxResults)
142
- break;
210
+ const scanFile = async (rel) => {
211
+ if (fileGlob && !matchGlob(rel, fileGlob))
212
+ return true;
143
213
  const abs = resolveWithinRoot(rootAbs, rel);
214
+ let st;
215
+ try {
216
+ st = await fsStat(abs);
217
+ }
218
+ catch {
219
+ return true;
220
+ }
221
+ if (!st.isFile() || st.size > FS_GREP_MAX_FILE_BYTES)
222
+ return true;
144
223
  let text;
145
224
  try {
146
225
  const buf = await fsReadFile(abs);
147
- if (buf.byteLength > 1_000_000)
148
- continue;
226
+ if (buf.byteLength > FS_GREP_MAX_FILE_BYTES)
227
+ return true;
228
+ // Cheap binary reject before UTF-8 decode of the whole buffer.
229
+ const sample = buf.subarray(0, Math.min(buf.byteLength, 8192));
230
+ if (sample.includes(0))
231
+ return true;
149
232
  text = buf.toString("utf8");
150
233
  }
151
234
  catch {
152
- continue;
235
+ return true;
153
236
  }
154
- if (text.includes("\0"))
155
- continue;
156
- const lines = text.split(/\r?\n/);
157
- for (let i = 0; i < lines.length; i += 1) {
158
- if (hits.length >= maxResults)
159
- break;
160
- const line = lines[i] ?? "";
237
+ forEachLine(text, (line, lineNo) => {
161
238
  re.lastIndex = 0;
162
239
  if (re.test(line)) {
163
240
  hits.push({
164
241
  path: rel,
165
- line: i + 1,
242
+ line: lineNo,
166
243
  text: line.length > 400 ? `${line.slice(0, 400)}…` : line,
167
244
  });
245
+ if (hits.length >= maxResults)
246
+ return false;
168
247
  }
169
- }
248
+ return true;
249
+ });
250
+ return hits.length < maxResults;
251
+ };
252
+ const scopeAbs = scope === "." || scope === ""
253
+ ? rootAbs
254
+ : resolveWithinRoot(rootAbs, scope);
255
+ const st = await fsStat(scopeAbs);
256
+ if (st.isFile()) {
257
+ const rel = path.relative(rootAbs, scopeAbs).replace(/\\/g, "/");
258
+ await scanFile(rel);
259
+ return hits;
170
260
  }
261
+ if (!st.isDirectory())
262
+ return hits;
263
+ await walkFilesUnder(scopeAbs, rootAbs, async (rel) => {
264
+ if (!(await scanFile(rel)))
265
+ return false;
266
+ });
171
267
  return hits;
172
268
  }
269
+ /**
270
+ * Search file contents under root. Prefers packaged ripgrep (`--json`);
271
+ * falls back to {@link grepWalkUnderRoot} when the binary is missing.
272
+ * Set `XRK_FS_SEARCH=js` to force the walk.
273
+ */
274
+ export async function grepUnderRoot(root, pattern, options) {
275
+ if (!pattern || typeof pattern !== "string") {
276
+ throw new Error("grep pattern required");
277
+ }
278
+ const { preferJsSearch, RipgrepUnavailableError, grepWithRipgrep } = await import("./ripgrep.js");
279
+ if (!preferJsSearch()) {
280
+ try {
281
+ return await grepWithRipgrep(root, pattern, options);
282
+ }
283
+ catch (err) {
284
+ if (!(err instanceof RipgrepUnavailableError))
285
+ throw err;
286
+ }
287
+ }
288
+ return grepWalkUnderRoot(root, pattern, options);
289
+ }
173
290
  //# sourceMappingURL=search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAqB/C,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxB,GAAG,IAAI,UAAU,CAAC;gBAClB,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,GAAG,IAAI,IAAI,CAAC;gBACZ,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,GAAG,IAAI,OAAO,CAAC;YACf,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,GAAG,IAAI,MAAM,CAAC;YACd,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,CAAC,CAAC;QACX,CAAC;QACD,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,GAAG,IAAI,GAAG,CAAC;IACX,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9D,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,MAAc,EACd,OAAe,EACf,GAAa,EACb,GAAW;IAEX,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO;IAC9B,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO;QAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;YAAE,SAAS;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,MAAM,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAAe,EACf,OAAuB;IAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,GAAG,CAAC;IAC9C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,0EAA0E;IAC1E,yEAAyE;IACzE,+DAA+D;IAC/D,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;gBAAE,MAAM;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAAe,EACf,OAAuB;IAEvB,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,GAAG,CAAC;IAC9C,MAAM,KAAK,GAAG,OAAO,EAAE,IAAI,IAAI,GAAG,CAAC;IACnC,MAAM,QAAQ,GAAG,OAAO,EAAE,IAAI,CAAC;IAE/B,IAAI,KAAK,GAAG,GAAG,CAAC;IAChB,IAAI,OAAO,EAAE,eAAe;QAAE,KAAK,IAAI,GAAG,CAAC;IAC3C,IAAI,EAAU,CAAC;IACf,IAAI,CAAC;QACH,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,MAAM,QAAQ,GACZ,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,EAAE;QAC3B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAExC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;SAAM,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,4EAA4E;QAC5E,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtD,KAAK,GAAG,QAAQ,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,GAAgB,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU;YAAE,MAAM;QACrC,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,GAAG,CAAC,UAAU,GAAG,SAAS;gBAAE,SAAS;YACzC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU;gBAAE,MAAM;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;YACjB,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;iBAC1D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,10 @@
14
14
  "README.md"
15
15
  ],
16
16
  "dependencies": {
17
+ "@vscode/ripgrep": "^1.18.0",
17
18
  "@xrkseek/attachment": "workspace:*",
18
19
  "@xrkseek/core-tools": "workspace:*",
20
+ "@xrkseek/exec-subprocess": "workspace:*",
19
21
  "@xrkseek/protocol": "workspace:*"
20
22
  },
21
23
  "license": "MIT",
@@ -1,5 +1,5 @@
1
1
  import type { ToolDefinition } from "@xrkseek/core-tools";
2
- import type { SubprocessService } from "@xrkseek/exec-subprocess";
2
+ import { type SubprocessService } from "@xrkseek/exec-subprocess";
3
3
  export { candidatePwshPaths, PWSH_ENCODING_PREAMBLE, resolvePwshPath, } from "./resolve-pwsh.js";
4
4
  export type ShellBackend = "bash" | "cmd" | "pwsh";
5
5
  /**
@@ -21,6 +21,13 @@ export interface ShellJobInfo {
21
21
  readonly signal?: NodeJS.Signals | null;
22
22
  readonly stdout?: string;
23
23
  readonly stderr?: string;
24
+ /**
25
+ * Complete-stream spill files when the in-memory 256KiB tail dropped the head
26
+ * (DSH OutputCollector). Omitted from Face wire JobView; surfaced in
27
+ * `job_output` text when truncated.
28
+ */
29
+ readonly stdoutSpillPath?: string;
30
+ readonly stderrSpillPath?: string;
24
31
  /** Managed-job producer detail (DSH JobOutcome.detail). */
25
32
  readonly detail?: string;
26
33
  /** Epoch ms when the job reached a terminal status; absent while live/stopping. */
@@ -155,6 +162,12 @@ export interface ShellLocalOptions {
155
162
  readonly prepareArgv?: (argv: readonly string[], cwd: string | undefined, signal: AbortSignal | undefined, ctx?: {
156
163
  readonly ownerSessionId?: string;
157
164
  }) => Promise<readonly string[]>;
165
+ /**
166
+ * Directory for subprocess spill files on overflow (prefer Host
167
+ * `{XRK_HOME}/spill` so paths stay inside `hostReadableRoots`). When set,
168
+ * bash jobs enable spill; omit for in-memory tail only.
169
+ */
170
+ readonly spillDir?: string;
158
171
  }
159
172
  /**
160
173
  * One AbortSignal for preparation + execution (DSH bash-local `deadline`).
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import path from "node:path";
2
+ import { appendUtf8TailCap, prepareSpillBinding, StreamTailCollector, SUBPROCESS_CAPTURE_MAX_BYTES, } from "@xrkseek/exec-subprocess";
2
3
  import { fitWithErrorHead, fitWithSuffix } from "./bytes.js";
3
4
  import { presentBashCall, presentBashResult } from "./present.js";
4
5
  import { PWSH_ENCODING_PREAMBLE, resolvePwshPath, } from "./resolve-pwsh.js";
@@ -95,6 +96,8 @@ export function createLocalShell(options) {
95
96
  const backend = options.backend ?? defaultBackend();
96
97
  const pwshPath = resolvePwshPath(options.pwshPath);
97
98
  const defaultCwd = options.defaultCwd?.trim() || undefined;
99
+ const spillDir = options.spillDir?.trim() || undefined;
100
+ const spillOpts = spillDir !== undefined ? prepareSpillBinding({ spillDir }) : undefined;
98
101
  const maxJobs = options.maxJobs ?? 64;
99
102
  const maxConcurrent = options.maxConcurrentJobs ?? DEFAULT_MAX_CONCURRENT_JOBS;
100
103
  if (!Number.isSafeInteger(maxConcurrent) || maxConcurrent < 1) {
@@ -139,6 +142,14 @@ export function createLocalShell(options) {
139
142
  throw new Error(`background job limit reached (limit: ${maxConcurrent}); use job_kill to stop an unneeded job, wait for it to finish, then retry`);
140
143
  }
141
144
  }
145
+ function dropJob(id) {
146
+ const job = jobs.get(id);
147
+ if (job === undefined)
148
+ return;
149
+ StreamTailCollector.unlinkSpill(job.info.stdoutSpillPath);
150
+ StreamTailCollector.unlinkSpill(job.info.stderrSpillPath);
151
+ jobs.delete(id);
152
+ }
142
153
  function pruneSettled() {
143
154
  const settled = [...jobs.entries()]
144
155
  .filter(([, job]) => isTerminalStatus(job.info.status))
@@ -148,7 +159,7 @@ export function createLocalShell(options) {
148
159
  const oldest = settled.shift();
149
160
  if (oldest === undefined)
150
161
  break;
151
- jobs.delete(oldest[0]);
162
+ dropJob(oldest[0]);
152
163
  }
153
164
  }
154
165
  function pruneIfNeeded() {
@@ -159,7 +170,7 @@ export function createLocalShell(options) {
159
170
  for (const [id] of finished) {
160
171
  if (jobs.size <= maxJobs)
161
172
  break;
162
- jobs.delete(id);
173
+ dropJob(id);
163
174
  }
164
175
  }
165
176
  function markReported(job) {
@@ -202,7 +213,10 @@ export function createLocalShell(options) {
202
213
  if (!job || isTerminalStatus(job.info.status))
203
214
  return;
204
215
  const prev = job.info[channel] ?? "";
205
- job.info = { ...job.info, [channel]: prev + chunk };
216
+ job.info = {
217
+ ...job.info,
218
+ [channel]: appendUtf8TailCap(prev, chunk, SUBPROCESS_CAPTURE_MAX_BYTES),
219
+ };
206
220
  scheduleOutputNotify();
207
221
  }
208
222
  function track(command, handle, ownerSessionId, id) {
@@ -235,6 +249,12 @@ export function createLocalShell(options) {
235
249
  : {}),
236
250
  stdout: r.stdout,
237
251
  stderr: r.stderr,
252
+ ...(r.stdoutSpillPath !== undefined
253
+ ? { stdoutSpillPath: r.stdoutSpillPath }
254
+ : {}),
255
+ ...(r.stderrSpillPath !== undefined
256
+ ? { stderrSpillPath: r.stderrSpillPath }
257
+ : {}),
238
258
  finishedAt: Date.now(),
239
259
  });
240
260
  })
@@ -278,6 +298,8 @@ export function createLocalShell(options) {
278
298
  ...(spawnCwd ? { cwd: spawnCwd } : {}),
279
299
  // Remaining budget lives on `deadline` — do not restart timeoutMs.
280
300
  ...(deadline ? { signal: deadline } : {}),
301
+ // Opt-in spill under `{XRK_HOME}/spill` (readable); default off elsewhere.
302
+ ...(spillOpts !== undefined ? { spill: spillOpts } : { spill: false }),
281
303
  onStdout: (chunk) => {
282
304
  appendLiveOutput(id, "stdout", chunk);
283
305
  },
@@ -413,6 +435,13 @@ export function createLocalShell(options) {
413
435
  }
414
436
  if (body.length === 0)
415
437
  body = "(no output)";
438
+ const spills = [
439
+ job.info.stdoutSpillPath,
440
+ job.info.stderrSpillPath,
441
+ ].filter((p) => typeof p === "string" && p.length > 0);
442
+ if (spills.length > 0) {
443
+ body += `\n[some output was dropped from memory; full output: ${spills.join(", ")}]`;
444
+ }
416
445
  return body;
417
446
  },
418
447
  waitJob(id, timeoutMs, signal) {
@@ -531,7 +560,8 @@ export function createLocalShell(options) {
531
560
  }
532
561
  }
533
562
  await Promise.all(all.map((j) => j.settled));
534
- jobs.clear();
563
+ for (const id of [...jobs.keys()])
564
+ dropJob(id);
535
565
  notifyChanged();
536
566
  },
537
567
  };
@@ -851,7 +881,9 @@ export function createBashTools(shell, options = {}) {
851
881
  },
852
882
  {
853
883
  name: "job_output",
854
- description: "Read a background job. Stream jobs return only output since the previous read. Every response ends with `[status: ...]`. Reads are non-blocking unless `wait: true`.",
884
+ description: "Read a background job. Stream jobs return only output since the previous read. " +
885
+ "Every response ends with `[status: ...]`. Reads are non-blocking unless `wait: true`. " +
886
+ "If the body notes a spill file under product home, use read_file on that absolute path for the full log.",
855
887
  parameters: {
856
888
  type: "object",
857
889
  properties: {