onbuzz 3.3.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 (506) hide show
  1. package/LICENSE +267 -0
  2. package/README.md +425 -0
  3. package/bin/cli.js +556 -0
  4. package/bin/loxia-terminal-v2.js +162 -0
  5. package/bin/loxia-terminal.js +90 -0
  6. package/bin/start-with-terminal.js +200 -0
  7. package/node_modules/@isaacs/balanced-match/LICENSE.md +23 -0
  8. package/node_modules/@isaacs/balanced-match/README.md +60 -0
  9. package/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts +9 -0
  10. package/node_modules/@isaacs/balanced-match/dist/commonjs/index.d.ts.map +1 -0
  11. package/node_modules/@isaacs/balanced-match/dist/commonjs/index.js +59 -0
  12. package/node_modules/@isaacs/balanced-match/dist/commonjs/index.js.map +1 -0
  13. package/node_modules/@isaacs/balanced-match/dist/commonjs/package.json +3 -0
  14. package/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts +9 -0
  15. package/node_modules/@isaacs/balanced-match/dist/esm/index.d.ts.map +1 -0
  16. package/node_modules/@isaacs/balanced-match/dist/esm/index.js +54 -0
  17. package/node_modules/@isaacs/balanced-match/dist/esm/index.js.map +1 -0
  18. package/node_modules/@isaacs/balanced-match/dist/esm/package.json +3 -0
  19. package/node_modules/@isaacs/balanced-match/package.json +79 -0
  20. package/node_modules/@isaacs/brace-expansion/LICENSE +23 -0
  21. package/node_modules/@isaacs/brace-expansion/README.md +97 -0
  22. package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts +6 -0
  23. package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.d.ts.map +1 -0
  24. package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js +199 -0
  25. package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map +1 -0
  26. package/node_modules/@isaacs/brace-expansion/dist/commonjs/package.json +3 -0
  27. package/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts +6 -0
  28. package/node_modules/@isaacs/brace-expansion/dist/esm/index.d.ts.map +1 -0
  29. package/node_modules/@isaacs/brace-expansion/dist/esm/index.js +195 -0
  30. package/node_modules/@isaacs/brace-expansion/dist/esm/index.js.map +1 -0
  31. package/node_modules/@isaacs/brace-expansion/dist/esm/package.json +3 -0
  32. package/node_modules/@isaacs/brace-expansion/package.json +60 -0
  33. package/node_modules/glob/LICENSE.md +63 -0
  34. package/node_modules/glob/README.md +1177 -0
  35. package/node_modules/glob/dist/commonjs/glob.d.ts +388 -0
  36. package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -0
  37. package/node_modules/glob/dist/commonjs/glob.js +247 -0
  38. package/node_modules/glob/dist/commonjs/glob.js.map +1 -0
  39. package/node_modules/glob/dist/commonjs/has-magic.d.ts +14 -0
  40. package/node_modules/glob/dist/commonjs/has-magic.d.ts.map +1 -0
  41. package/node_modules/glob/dist/commonjs/has-magic.js +27 -0
  42. package/node_modules/glob/dist/commonjs/has-magic.js.map +1 -0
  43. package/node_modules/glob/dist/commonjs/ignore.d.ts +24 -0
  44. package/node_modules/glob/dist/commonjs/ignore.d.ts.map +1 -0
  45. package/node_modules/glob/dist/commonjs/ignore.js +119 -0
  46. package/node_modules/glob/dist/commonjs/ignore.js.map +1 -0
  47. package/node_modules/glob/dist/commonjs/index.d.ts +97 -0
  48. package/node_modules/glob/dist/commonjs/index.d.ts.map +1 -0
  49. package/node_modules/glob/dist/commonjs/index.js +68 -0
  50. package/node_modules/glob/dist/commonjs/index.js.map +1 -0
  51. package/node_modules/glob/dist/commonjs/index.min.js +4 -0
  52. package/node_modules/glob/dist/commonjs/index.min.js.map +7 -0
  53. package/node_modules/glob/dist/commonjs/package.json +3 -0
  54. package/node_modules/glob/dist/commonjs/pattern.d.ts +76 -0
  55. package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -0
  56. package/node_modules/glob/dist/commonjs/pattern.js +219 -0
  57. package/node_modules/glob/dist/commonjs/pattern.js.map +1 -0
  58. package/node_modules/glob/dist/commonjs/processor.d.ts +59 -0
  59. package/node_modules/glob/dist/commonjs/processor.d.ts.map +1 -0
  60. package/node_modules/glob/dist/commonjs/processor.js +301 -0
  61. package/node_modules/glob/dist/commonjs/processor.js.map +1 -0
  62. package/node_modules/glob/dist/commonjs/walker.d.ts +97 -0
  63. package/node_modules/glob/dist/commonjs/walker.d.ts.map +1 -0
  64. package/node_modules/glob/dist/commonjs/walker.js +387 -0
  65. package/node_modules/glob/dist/commonjs/walker.js.map +1 -0
  66. package/node_modules/glob/dist/esm/glob.d.ts +388 -0
  67. package/node_modules/glob/dist/esm/glob.d.ts.map +1 -0
  68. package/node_modules/glob/dist/esm/glob.js +243 -0
  69. package/node_modules/glob/dist/esm/glob.js.map +1 -0
  70. package/node_modules/glob/dist/esm/has-magic.d.ts +14 -0
  71. package/node_modules/glob/dist/esm/has-magic.d.ts.map +1 -0
  72. package/node_modules/glob/dist/esm/has-magic.js +23 -0
  73. package/node_modules/glob/dist/esm/has-magic.js.map +1 -0
  74. package/node_modules/glob/dist/esm/ignore.d.ts +24 -0
  75. package/node_modules/glob/dist/esm/ignore.d.ts.map +1 -0
  76. package/node_modules/glob/dist/esm/ignore.js +115 -0
  77. package/node_modules/glob/dist/esm/ignore.js.map +1 -0
  78. package/node_modules/glob/dist/esm/index.d.ts +97 -0
  79. package/node_modules/glob/dist/esm/index.d.ts.map +1 -0
  80. package/node_modules/glob/dist/esm/index.js +55 -0
  81. package/node_modules/glob/dist/esm/index.js.map +1 -0
  82. package/node_modules/glob/dist/esm/index.min.js +4 -0
  83. package/node_modules/glob/dist/esm/index.min.js.map +7 -0
  84. package/node_modules/glob/dist/esm/package.json +3 -0
  85. package/node_modules/glob/dist/esm/pattern.d.ts +76 -0
  86. package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -0
  87. package/node_modules/glob/dist/esm/pattern.js +215 -0
  88. package/node_modules/glob/dist/esm/pattern.js.map +1 -0
  89. package/node_modules/glob/dist/esm/processor.d.ts +59 -0
  90. package/node_modules/glob/dist/esm/processor.d.ts.map +1 -0
  91. package/node_modules/glob/dist/esm/processor.js +294 -0
  92. package/node_modules/glob/dist/esm/processor.js.map +1 -0
  93. package/node_modules/glob/dist/esm/walker.d.ts +97 -0
  94. package/node_modules/glob/dist/esm/walker.d.ts.map +1 -0
  95. package/node_modules/glob/dist/esm/walker.js +381 -0
  96. package/node_modules/glob/dist/esm/walker.js.map +1 -0
  97. package/node_modules/glob/node_modules/minimatch/LICENSE.md +55 -0
  98. package/node_modules/glob/node_modules/minimatch/README.md +453 -0
  99. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
  100. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -0
  101. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
  102. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -0
  103. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
  104. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -0
  105. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js +591 -0
  106. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js.map +1 -0
  107. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
  108. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -0
  109. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js +152 -0
  110. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -0
  111. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts +15 -0
  112. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -0
  113. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js +30 -0
  114. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js.map +1 -0
  115. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts +94 -0
  116. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -0
  117. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js +1029 -0
  118. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js.map +1 -0
  119. package/node_modules/glob/node_modules/minimatch/dist/commonjs/package.json +3 -0
  120. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts +22 -0
  121. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -0
  122. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js +38 -0
  123. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -0
  124. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
  125. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -0
  126. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js +10 -0
  127. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
  128. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
  129. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -0
  130. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js +587 -0
  131. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js.map +1 -0
  132. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
  133. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -0
  134. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js +148 -0
  135. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
  136. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts +15 -0
  137. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -0
  138. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js +26 -0
  139. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js.map +1 -0
  140. package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts +94 -0
  141. package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts.map +1 -0
  142. package/node_modules/glob/node_modules/minimatch/dist/esm/index.js +1016 -0
  143. package/node_modules/glob/node_modules/minimatch/dist/esm/index.js.map +1 -0
  144. package/node_modules/glob/node_modules/minimatch/dist/esm/package.json +3 -0
  145. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts +22 -0
  146. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -0
  147. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js +34 -0
  148. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
  149. package/node_modules/glob/node_modules/minimatch/package.json +67 -0
  150. package/node_modules/glob/package.json +101 -0
  151. package/node_modules/minipass/LICENSE +15 -0
  152. package/node_modules/minipass/README.md +825 -0
  153. package/node_modules/minipass/dist/commonjs/index.d.ts +549 -0
  154. package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -0
  155. package/node_modules/minipass/dist/commonjs/index.js +1028 -0
  156. package/node_modules/minipass/dist/commonjs/index.js.map +1 -0
  157. package/node_modules/minipass/dist/commonjs/package.json +3 -0
  158. package/node_modules/minipass/dist/esm/index.d.ts +549 -0
  159. package/node_modules/minipass/dist/esm/index.d.ts.map +1 -0
  160. package/node_modules/minipass/dist/esm/index.js +1018 -0
  161. package/node_modules/minipass/dist/esm/index.js.map +1 -0
  162. package/node_modules/minipass/dist/esm/package.json +3 -0
  163. package/node_modules/minipass/package.json +82 -0
  164. package/node_modules/package-json-from-dist/LICENSE.md +63 -0
  165. package/node_modules/package-json-from-dist/README.md +110 -0
  166. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts +89 -0
  167. package/node_modules/package-json-from-dist/dist/commonjs/index.d.ts.map +1 -0
  168. package/node_modules/package-json-from-dist/dist/commonjs/index.js +134 -0
  169. package/node_modules/package-json-from-dist/dist/commonjs/index.js.map +1 -0
  170. package/node_modules/package-json-from-dist/dist/commonjs/package.json +3 -0
  171. package/node_modules/package-json-from-dist/dist/esm/index.d.ts +89 -0
  172. package/node_modules/package-json-from-dist/dist/esm/index.d.ts.map +1 -0
  173. package/node_modules/package-json-from-dist/dist/esm/index.js +129 -0
  174. package/node_modules/package-json-from-dist/dist/esm/index.js.map +1 -0
  175. package/node_modules/package-json-from-dist/dist/esm/package.json +3 -0
  176. package/node_modules/package-json-from-dist/package.json +68 -0
  177. package/node_modules/path-scurry/LICENSE.md +55 -0
  178. package/node_modules/path-scurry/README.md +636 -0
  179. package/node_modules/path-scurry/dist/commonjs/index.d.ts +1115 -0
  180. package/node_modules/path-scurry/dist/commonjs/index.d.ts.map +1 -0
  181. package/node_modules/path-scurry/dist/commonjs/index.js +2018 -0
  182. package/node_modules/path-scurry/dist/commonjs/index.js.map +1 -0
  183. package/node_modules/path-scurry/dist/commonjs/package.json +3 -0
  184. package/node_modules/path-scurry/dist/esm/index.d.ts +1115 -0
  185. package/node_modules/path-scurry/dist/esm/index.d.ts.map +1 -0
  186. package/node_modules/path-scurry/dist/esm/index.js +1983 -0
  187. package/node_modules/path-scurry/dist/esm/index.js.map +1 -0
  188. package/node_modules/path-scurry/dist/esm/package.json +3 -0
  189. package/node_modules/path-scurry/node_modules/lru-cache/LICENSE.md +55 -0
  190. package/node_modules/path-scurry/node_modules/lru-cache/README.md +383 -0
  191. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts +1323 -0
  192. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -0
  193. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js +1589 -0
  194. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map +1 -0
  195. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js +2 -0
  196. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map +7 -0
  197. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/package.json +3 -0
  198. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts +1323 -0
  199. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -0
  200. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js +1585 -0
  201. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map +1 -0
  202. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js +2 -0
  203. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map +7 -0
  204. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/package.json +3 -0
  205. package/node_modules/path-scurry/node_modules/lru-cache/package.json +101 -0
  206. package/node_modules/path-scurry/package.json +88 -0
  207. package/node_modules/rimraf/LICENSE.md +55 -0
  208. package/node_modules/rimraf/README.md +226 -0
  209. package/node_modules/rimraf/dist/commonjs/default-tmp.d.ts +3 -0
  210. package/node_modules/rimraf/dist/commonjs/default-tmp.d.ts.map +1 -0
  211. package/node_modules/rimraf/dist/commonjs/default-tmp.js +58 -0
  212. package/node_modules/rimraf/dist/commonjs/default-tmp.js.map +1 -0
  213. package/node_modules/rimraf/dist/commonjs/error.d.ts +6 -0
  214. package/node_modules/rimraf/dist/commonjs/error.d.ts.map +1 -0
  215. package/node_modules/rimraf/dist/commonjs/error.js +10 -0
  216. package/node_modules/rimraf/dist/commonjs/error.js.map +1 -0
  217. package/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts +3 -0
  218. package/node_modules/rimraf/dist/commonjs/fix-eperm.d.ts.map +1 -0
  219. package/node_modules/rimraf/dist/commonjs/fix-eperm.js +38 -0
  220. package/node_modules/rimraf/dist/commonjs/fix-eperm.js.map +1 -0
  221. package/node_modules/rimraf/dist/commonjs/fs.d.ts +15 -0
  222. package/node_modules/rimraf/dist/commonjs/fs.d.ts.map +1 -0
  223. package/node_modules/rimraf/dist/commonjs/fs.js +33 -0
  224. package/node_modules/rimraf/dist/commonjs/fs.js.map +1 -0
  225. package/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts +3 -0
  226. package/node_modules/rimraf/dist/commonjs/ignore-enoent.d.ts.map +1 -0
  227. package/node_modules/rimraf/dist/commonjs/ignore-enoent.js +24 -0
  228. package/node_modules/rimraf/dist/commonjs/ignore-enoent.js.map +1 -0
  229. package/node_modules/rimraf/dist/commonjs/index.d.ts +50 -0
  230. package/node_modules/rimraf/dist/commonjs/index.d.ts.map +1 -0
  231. package/node_modules/rimraf/dist/commonjs/index.js +78 -0
  232. package/node_modules/rimraf/dist/commonjs/index.js.map +1 -0
  233. package/node_modules/rimraf/dist/commonjs/opt-arg.d.ts +34 -0
  234. package/node_modules/rimraf/dist/commonjs/opt-arg.d.ts.map +1 -0
  235. package/node_modules/rimraf/dist/commonjs/opt-arg.js +53 -0
  236. package/node_modules/rimraf/dist/commonjs/opt-arg.js.map +1 -0
  237. package/node_modules/rimraf/dist/commonjs/package.json +3 -0
  238. package/node_modules/rimraf/dist/commonjs/path-arg.d.ts +4 -0
  239. package/node_modules/rimraf/dist/commonjs/path-arg.d.ts.map +1 -0
  240. package/node_modules/rimraf/dist/commonjs/path-arg.js +48 -0
  241. package/node_modules/rimraf/dist/commonjs/path-arg.js.map +1 -0
  242. package/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts +3 -0
  243. package/node_modules/rimraf/dist/commonjs/readdir-or-error.d.ts.map +1 -0
  244. package/node_modules/rimraf/dist/commonjs/readdir-or-error.js +19 -0
  245. package/node_modules/rimraf/dist/commonjs/readdir-or-error.js.map +1 -0
  246. package/node_modules/rimraf/dist/commonjs/retry-busy.d.ts +8 -0
  247. package/node_modules/rimraf/dist/commonjs/retry-busy.d.ts.map +1 -0
  248. package/node_modules/rimraf/dist/commonjs/retry-busy.js +65 -0
  249. package/node_modules/rimraf/dist/commonjs/retry-busy.js.map +1 -0
  250. package/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts +3 -0
  251. package/node_modules/rimraf/dist/commonjs/rimraf-manual.d.ts.map +1 -0
  252. package/node_modules/rimraf/dist/commonjs/rimraf-manual.js +8 -0
  253. package/node_modules/rimraf/dist/commonjs/rimraf-manual.js.map +1 -0
  254. package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts +4 -0
  255. package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.d.ts.map +1 -0
  256. package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js +138 -0
  257. package/node_modules/rimraf/dist/commonjs/rimraf-move-remove.js.map +1 -0
  258. package/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts +4 -0
  259. package/node_modules/rimraf/dist/commonjs/rimraf-native.d.ts.map +1 -0
  260. package/node_modules/rimraf/dist/commonjs/rimraf-native.js +24 -0
  261. package/node_modules/rimraf/dist/commonjs/rimraf-native.js.map +1 -0
  262. package/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts +4 -0
  263. package/node_modules/rimraf/dist/commonjs/rimraf-posix.d.ts.map +1 -0
  264. package/node_modules/rimraf/dist/commonjs/rimraf-posix.js +103 -0
  265. package/node_modules/rimraf/dist/commonjs/rimraf-posix.js.map +1 -0
  266. package/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts +4 -0
  267. package/node_modules/rimraf/dist/commonjs/rimraf-windows.d.ts.map +1 -0
  268. package/node_modules/rimraf/dist/commonjs/rimraf-windows.js +159 -0
  269. package/node_modules/rimraf/dist/commonjs/rimraf-windows.js.map +1 -0
  270. package/node_modules/rimraf/dist/commonjs/use-native.d.ts +4 -0
  271. package/node_modules/rimraf/dist/commonjs/use-native.d.ts.map +1 -0
  272. package/node_modules/rimraf/dist/commonjs/use-native.js +18 -0
  273. package/node_modules/rimraf/dist/commonjs/use-native.js.map +1 -0
  274. package/node_modules/rimraf/dist/esm/bin.d.mts +3 -0
  275. package/node_modules/rimraf/dist/esm/bin.d.mts.map +1 -0
  276. package/node_modules/rimraf/dist/esm/bin.mjs +250 -0
  277. package/node_modules/rimraf/dist/esm/bin.mjs.map +1 -0
  278. package/node_modules/rimraf/dist/esm/default-tmp.d.ts +3 -0
  279. package/node_modules/rimraf/dist/esm/default-tmp.d.ts.map +1 -0
  280. package/node_modules/rimraf/dist/esm/default-tmp.js +55 -0
  281. package/node_modules/rimraf/dist/esm/default-tmp.js.map +1 -0
  282. package/node_modules/rimraf/dist/esm/error.d.ts +6 -0
  283. package/node_modules/rimraf/dist/esm/error.d.ts.map +1 -0
  284. package/node_modules/rimraf/dist/esm/error.js +5 -0
  285. package/node_modules/rimraf/dist/esm/error.js.map +1 -0
  286. package/node_modules/rimraf/dist/esm/fix-eperm.d.ts +3 -0
  287. package/node_modules/rimraf/dist/esm/fix-eperm.d.ts.map +1 -0
  288. package/node_modules/rimraf/dist/esm/fix-eperm.js +33 -0
  289. package/node_modules/rimraf/dist/esm/fix-eperm.js.map +1 -0
  290. package/node_modules/rimraf/dist/esm/fs.d.ts +15 -0
  291. package/node_modules/rimraf/dist/esm/fs.d.ts.map +1 -0
  292. package/node_modules/rimraf/dist/esm/fs.js +18 -0
  293. package/node_modules/rimraf/dist/esm/fs.js.map +1 -0
  294. package/node_modules/rimraf/dist/esm/ignore-enoent.d.ts +3 -0
  295. package/node_modules/rimraf/dist/esm/ignore-enoent.d.ts.map +1 -0
  296. package/node_modules/rimraf/dist/esm/ignore-enoent.js +19 -0
  297. package/node_modules/rimraf/dist/esm/ignore-enoent.js.map +1 -0
  298. package/node_modules/rimraf/dist/esm/index.d.ts +50 -0
  299. package/node_modules/rimraf/dist/esm/index.d.ts.map +1 -0
  300. package/node_modules/rimraf/dist/esm/index.js +70 -0
  301. package/node_modules/rimraf/dist/esm/index.js.map +1 -0
  302. package/node_modules/rimraf/dist/esm/opt-arg.d.ts +34 -0
  303. package/node_modules/rimraf/dist/esm/opt-arg.d.ts.map +1 -0
  304. package/node_modules/rimraf/dist/esm/opt-arg.js +46 -0
  305. package/node_modules/rimraf/dist/esm/opt-arg.js.map +1 -0
  306. package/node_modules/rimraf/dist/esm/package.json +3 -0
  307. package/node_modules/rimraf/dist/esm/path-arg.d.ts +4 -0
  308. package/node_modules/rimraf/dist/esm/path-arg.d.ts.map +1 -0
  309. package/node_modules/rimraf/dist/esm/path-arg.js +46 -0
  310. package/node_modules/rimraf/dist/esm/path-arg.js.map +1 -0
  311. package/node_modules/rimraf/dist/esm/readdir-or-error.d.ts +3 -0
  312. package/node_modules/rimraf/dist/esm/readdir-or-error.d.ts.map +1 -0
  313. package/node_modules/rimraf/dist/esm/readdir-or-error.js +14 -0
  314. package/node_modules/rimraf/dist/esm/readdir-or-error.js.map +1 -0
  315. package/node_modules/rimraf/dist/esm/retry-busy.d.ts +8 -0
  316. package/node_modules/rimraf/dist/esm/retry-busy.d.ts.map +1 -0
  317. package/node_modules/rimraf/dist/esm/retry-busy.js +60 -0
  318. package/node_modules/rimraf/dist/esm/retry-busy.js.map +1 -0
  319. package/node_modules/rimraf/dist/esm/rimraf-manual.d.ts +3 -0
  320. package/node_modules/rimraf/dist/esm/rimraf-manual.d.ts.map +1 -0
  321. package/node_modules/rimraf/dist/esm/rimraf-manual.js +5 -0
  322. package/node_modules/rimraf/dist/esm/rimraf-manual.js.map +1 -0
  323. package/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts +4 -0
  324. package/node_modules/rimraf/dist/esm/rimraf-move-remove.d.ts.map +1 -0
  325. package/node_modules/rimraf/dist/esm/rimraf-move-remove.js +133 -0
  326. package/node_modules/rimraf/dist/esm/rimraf-move-remove.js.map +1 -0
  327. package/node_modules/rimraf/dist/esm/rimraf-native.d.ts +4 -0
  328. package/node_modules/rimraf/dist/esm/rimraf-native.d.ts.map +1 -0
  329. package/node_modules/rimraf/dist/esm/rimraf-native.js +19 -0
  330. package/node_modules/rimraf/dist/esm/rimraf-native.js.map +1 -0
  331. package/node_modules/rimraf/dist/esm/rimraf-posix.d.ts +4 -0
  332. package/node_modules/rimraf/dist/esm/rimraf-posix.d.ts.map +1 -0
  333. package/node_modules/rimraf/dist/esm/rimraf-posix.js +98 -0
  334. package/node_modules/rimraf/dist/esm/rimraf-posix.js.map +1 -0
  335. package/node_modules/rimraf/dist/esm/rimraf-windows.d.ts +4 -0
  336. package/node_modules/rimraf/dist/esm/rimraf-windows.d.ts.map +1 -0
  337. package/node_modules/rimraf/dist/esm/rimraf-windows.js +154 -0
  338. package/node_modules/rimraf/dist/esm/rimraf-windows.js.map +1 -0
  339. package/node_modules/rimraf/dist/esm/use-native.d.ts +4 -0
  340. package/node_modules/rimraf/dist/esm/use-native.d.ts.map +1 -0
  341. package/node_modules/rimraf/dist/esm/use-native.js +15 -0
  342. package/node_modules/rimraf/dist/esm/use-native.js.map +1 -0
  343. package/node_modules/rimraf/package.json +92 -0
  344. package/package.json +152 -0
  345. package/scripts/install-scanners.js +258 -0
  346. package/scripts/watchdog.js +147 -0
  347. package/src/analyzers/CSSAnalyzer.js +297 -0
  348. package/src/analyzers/ConfigValidator.js +690 -0
  349. package/src/analyzers/ESLintAnalyzer.js +320 -0
  350. package/src/analyzers/JavaScriptAnalyzer.js +261 -0
  351. package/src/analyzers/PrettierFormatter.js +247 -0
  352. package/src/analyzers/PythonAnalyzer.js +283 -0
  353. package/src/analyzers/SecurityAnalyzer.js +729 -0
  354. package/src/analyzers/SparrowAnalyzer.js +341 -0
  355. package/src/analyzers/TypeScriptAnalyzer.js +247 -0
  356. package/src/analyzers/codeCloneDetector/analyzer.js +344 -0
  357. package/src/analyzers/codeCloneDetector/detector.js +250 -0
  358. package/src/analyzers/codeCloneDetector/index.js +192 -0
  359. package/src/analyzers/codeCloneDetector/parser.js +199 -0
  360. package/src/analyzers/codeCloneDetector/reporter.js +148 -0
  361. package/src/analyzers/codeCloneDetector/scanner.js +88 -0
  362. package/src/core/agentPool.js +1957 -0
  363. package/src/core/agentScheduler.js +3212 -0
  364. package/src/core/contextManager.js +709 -0
  365. package/src/core/flowExecutor.js +928 -0
  366. package/src/core/messageProcessor.js +808 -0
  367. package/src/core/orchestrator.js +584 -0
  368. package/src/core/stateManager.js +1500 -0
  369. package/src/index.js +972 -0
  370. package/src/interfaces/cli.js +553 -0
  371. package/src/interfaces/terminal/__tests__/smoke/advancedFeatures.test.js +208 -0
  372. package/src/interfaces/terminal/__tests__/smoke/agentControl.test.js +236 -0
  373. package/src/interfaces/terminal/__tests__/smoke/agents.test.js +138 -0
  374. package/src/interfaces/terminal/__tests__/smoke/components.test.js +137 -0
  375. package/src/interfaces/terminal/__tests__/smoke/connection.test.js +350 -0
  376. package/src/interfaces/terminal/__tests__/smoke/enhancements.test.js +156 -0
  377. package/src/interfaces/terminal/__tests__/smoke/imports.test.js +332 -0
  378. package/src/interfaces/terminal/__tests__/smoke/messages.test.js +256 -0
  379. package/src/interfaces/terminal/__tests__/smoke/tools.test.js +388 -0
  380. package/src/interfaces/terminal/api/apiClient.js +299 -0
  381. package/src/interfaces/terminal/api/messageRouter.js +262 -0
  382. package/src/interfaces/terminal/api/session.js +266 -0
  383. package/src/interfaces/terminal/api/websocket.js +497 -0
  384. package/src/interfaces/terminal/components/AgentCreator.js +705 -0
  385. package/src/interfaces/terminal/components/AgentEditor.js +678 -0
  386. package/src/interfaces/terminal/components/AgentSwitcher.js +330 -0
  387. package/src/interfaces/terminal/components/ErrorBoundary.js +92 -0
  388. package/src/interfaces/terminal/components/ErrorPanel.js +264 -0
  389. package/src/interfaces/terminal/components/Header.js +28 -0
  390. package/src/interfaces/terminal/components/HelpPanel.js +231 -0
  391. package/src/interfaces/terminal/components/InputBox.js +118 -0
  392. package/src/interfaces/terminal/components/Layout.js +603 -0
  393. package/src/interfaces/terminal/components/LoadingSpinner.js +71 -0
  394. package/src/interfaces/terminal/components/MessageList.js +281 -0
  395. package/src/interfaces/terminal/components/MultilineTextInput.js +251 -0
  396. package/src/interfaces/terminal/components/SearchPanel.js +265 -0
  397. package/src/interfaces/terminal/components/SettingsPanel.js +415 -0
  398. package/src/interfaces/terminal/components/StatusBar.js +65 -0
  399. package/src/interfaces/terminal/components/TextInput.js +127 -0
  400. package/src/interfaces/terminal/config/agentEditorConstants.js +227 -0
  401. package/src/interfaces/terminal/config/constants.js +393 -0
  402. package/src/interfaces/terminal/index.js +168 -0
  403. package/src/interfaces/terminal/state/useAgentControl.js +496 -0
  404. package/src/interfaces/terminal/state/useAgents.js +537 -0
  405. package/src/interfaces/terminal/state/useConnection.js +444 -0
  406. package/src/interfaces/terminal/state/useMessages.js +630 -0
  407. package/src/interfaces/terminal/state/useTools.js +554 -0
  408. package/src/interfaces/terminal/utils/debugLogger.js +44 -0
  409. package/src/interfaces/terminal/utils/settingsStorage.js +232 -0
  410. package/src/interfaces/terminal/utils/theme.js +85 -0
  411. package/src/interfaces/webServer.js +5457 -0
  412. package/src/modules/fileExplorer/controller.js +413 -0
  413. package/src/modules/fileExplorer/index.js +37 -0
  414. package/src/modules/fileExplorer/middleware.js +92 -0
  415. package/src/modules/fileExplorer/routes.js +158 -0
  416. package/src/modules/fileExplorer/types.js +44 -0
  417. package/src/services/agentActivityService.js +399 -0
  418. package/src/services/aiService.js +2618 -0
  419. package/src/services/apiKeyManager.js +334 -0
  420. package/src/services/benchmarkService.js +196 -0
  421. package/src/services/budgetService.js +565 -0
  422. package/src/services/contextInjectionService.js +268 -0
  423. package/src/services/conversationCompactionService.js +1103 -0
  424. package/src/services/credentialVault.js +685 -0
  425. package/src/services/errorHandler.js +810 -0
  426. package/src/services/fileAttachmentService.js +547 -0
  427. package/src/services/flowContextService.js +189 -0
  428. package/src/services/memoryService.js +521 -0
  429. package/src/services/modelRouterService.js +365 -0
  430. package/src/services/modelsService.js +323 -0
  431. package/src/services/ollamaService.js +452 -0
  432. package/src/services/portRegistry.js +336 -0
  433. package/src/services/portTracker.js +223 -0
  434. package/src/services/projectDetector.js +404 -0
  435. package/src/services/promptService.js +372 -0
  436. package/src/services/qualityInspector.js +796 -0
  437. package/src/services/scheduleService.js +725 -0
  438. package/src/services/serviceRegistry.js +386 -0
  439. package/src/services/skillsService.js +486 -0
  440. package/src/services/telegramService.js +920 -0
  441. package/src/services/tokenCountingService.js +316 -0
  442. package/src/services/visualEditorBridge.js +1033 -0
  443. package/src/services/visualEditorServer.js +1727 -0
  444. package/src/services/whatsappService.js +663 -0
  445. package/src/tools/__tests__/webTool.e2e.test.js +569 -0
  446. package/src/tools/__tests__/webTool.unit.test.js +195 -0
  447. package/src/tools/agentCommunicationTool.js +1343 -0
  448. package/src/tools/agentDelayTool.js +498 -0
  449. package/src/tools/asyncToolManager.js +604 -0
  450. package/src/tools/baseTool.js +887 -0
  451. package/src/tools/browserTool.js +897 -0
  452. package/src/tools/cloneDetectionTool.js +581 -0
  453. package/src/tools/codeMapTool.js +857 -0
  454. package/src/tools/dependencyResolverTool.js +1212 -0
  455. package/src/tools/docxTool.js +623 -0
  456. package/src/tools/excelTool.js +636 -0
  457. package/src/tools/fileContentReplaceTool.js +840 -0
  458. package/src/tools/fileTreeTool.js +833 -0
  459. package/src/tools/filesystemTool.js +1217 -0
  460. package/src/tools/helpTool.js +198 -0
  461. package/src/tools/imageTool.js +1034 -0
  462. package/src/tools/importAnalyzerTool.js +1056 -0
  463. package/src/tools/jobDoneTool.js +388 -0
  464. package/src/tools/memoryTool.js +554 -0
  465. package/src/tools/pdfTool.js +627 -0
  466. package/src/tools/seekTool.js +883 -0
  467. package/src/tools/skillsTool.js +276 -0
  468. package/src/tools/staticAnalysisTool.js +2146 -0
  469. package/src/tools/taskManagerTool.js +2836 -0
  470. package/src/tools/terminalTool.js +2486 -0
  471. package/src/tools/userPromptTool.js +474 -0
  472. package/src/tools/videoTool.js +1139 -0
  473. package/src/tools/visionTool.js +507 -0
  474. package/src/tools/visualEditorTool.js +1175 -0
  475. package/src/tools/webTool.js +3114 -0
  476. package/src/tools/whatsappTool.js +457 -0
  477. package/src/types/agent.js +519 -0
  478. package/src/types/contextReference.js +972 -0
  479. package/src/types/conversation.js +730 -0
  480. package/src/types/toolCommand.js +747 -0
  481. package/src/utilities/attachmentValidator.js +288 -0
  482. package/src/utilities/browserStealth.js +630 -0
  483. package/src/utilities/configManager.js +618 -0
  484. package/src/utilities/constants.js +870 -0
  485. package/src/utilities/directoryAccessManager.js +566 -0
  486. package/src/utilities/fileProcessor.js +307 -0
  487. package/src/utilities/humanBehavior.js +453 -0
  488. package/src/utilities/jsonRepair.js +242 -0
  489. package/src/utilities/logger.js +436 -0
  490. package/src/utilities/platformUtils.js +255 -0
  491. package/src/utilities/platformUtils.test.js +98 -0
  492. package/src/utilities/stealthConstants.js +377 -0
  493. package/src/utilities/structuredFileValidator.js +699 -0
  494. package/src/utilities/tagParser.js +878 -0
  495. package/src/utilities/toolConstants.js +415 -0
  496. package/src/utilities/userDataDir.js +300 -0
  497. package/web-ui/build/brands/autopilot/favicon.svg +1 -0
  498. package/web-ui/build/brands/autopilot/logo.webp +0 -0
  499. package/web-ui/build/brands/onbuzz/favicon.svg +1 -0
  500. package/web-ui/build/brands/onbuzz/logo-text.webp +0 -0
  501. package/web-ui/build/brands/onbuzz/logo.webp +0 -0
  502. package/web-ui/build/index.html +15 -0
  503. package/web-ui/build/logo.png +0 -0
  504. package/web-ui/build/logo2.png +0 -0
  505. package/web-ui/build/static/index-SmQFfvBs.js +746 -0
  506. package/web-ui/build/static/index-V2ySwjHp.css +1 -0
@@ -0,0 +1,883 @@
1
+ /**
2
+ * SeekTool - Search for content within project files
3
+ *
4
+ * Purpose:
5
+ * - Search for specific content/patterns within files
6
+ * - Support glob patterns for file paths
7
+ * - Verify imports, function usage, and variable references
8
+ * - Provide detailed match information with line numbers
9
+ */
10
+
11
+ import { BaseTool } from './baseTool.js';
12
+ import TagParser from '../utilities/tagParser.js';
13
+ import { promises as fs } from 'fs';
14
+ import path from 'path';
15
+
16
+ // Configuration constants
17
+ const SEEK_CONFIG = {
18
+ // File size limits
19
+ MAX_FILE_SIZE: 10 * 1024 * 1024, // 10MB - don't search files larger than this
20
+
21
+ // Search limits
22
+ MAX_FILES_PER_SEARCH: 1000, // Maximum files to search in one operation
23
+ MAX_MATCHES_PER_FILE: 100, // Maximum matches to return per file
24
+ MAX_TOTAL_MATCHES: 500, // Maximum total matches to return
25
+
26
+ // Performance limits
27
+ MAX_SEARCH_TERMS: 50, // Maximum number of search terms
28
+ MAX_FILE_PATHS: 100, // Maximum number of file path patterns
29
+
30
+ // Recursion limits
31
+ MAX_DIRECTORY_DEPTH: 20, // Maximum directory recursion depth
32
+
33
+ // Result formatting
34
+ MAX_LINE_CONTENT_LENGTH: 200, // Maximum line content to show in results
35
+ CONTEXT_LINES_BEFORE: 0, // Lines of context before match
36
+ CONTEXT_LINES_AFTER: 0, // Lines of context after match
37
+ };
38
+
39
+ // File encoding
40
+ const FILE_ENCODING = 'utf-8';
41
+
42
+ // Common binary file extensions to skip
43
+ const BINARY_EXTENSIONS = new Set([
44
+ '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.ico', '.svg',
45
+ '.pdf', '.zip', '.tar', '.gz', '.rar', '.7z',
46
+ '.exe', '.dll', '.so', '.dylib',
47
+ '.mp3', '.mp4', '.avi', '.mov', '.wmv',
48
+ '.woff', '.woff2', '.ttf', '.eot',
49
+ '.bin', '.dat', '.db', '.sqlite'
50
+ ]);
51
+
52
+ class SeekTool extends BaseTool {
53
+ constructor(config = {}, logger = null) {
54
+ super(config, logger);
55
+
56
+ // Tool metadata
57
+ this.requiresProject = true; // Requires project directory
58
+ this.isAsync = true; // File operations are async
59
+ this.timeout = config.timeout || 120000; // 2 minutes default
60
+
61
+ // Merge config with defaults
62
+ this.seekConfig = {
63
+ ...SEEK_CONFIG,
64
+ ...config.seekConfig
65
+ };
66
+ }
67
+
68
+ /**
69
+ * Get tool description for LLM consumption
70
+ * @returns {string} Tool description
71
+ */
72
+ getDescription() {
73
+ return `
74
+ Seek Tool: Search for specific content within project files. Ideal for verifying imports, function usage, and variable references.
75
+
76
+ USAGE:
77
+ \`\`\`json
78
+ {
79
+ "toolId": "seek",
80
+ "filePaths": ["src/**/*.js", "package.json"],
81
+ "searchTerms": ["import React", "useState"]
82
+ }
83
+ \`\`\`
84
+
85
+ PARAMETERS:
86
+ - filePaths: Array of file paths or glob patterns
87
+ - searchTerms: Array of search strings (case-sensitive, exact match)
88
+
89
+ GLOB PATTERNS:
90
+ - *.js - All .js files in directory
91
+ - **/*.js - All .js files recursively
92
+ - src/**/*.jsx - All .jsx files under src/
93
+
94
+ EXAMPLES:
95
+
96
+ Find function usage:
97
+ \`\`\`json
98
+ {
99
+ "toolId": "seek",
100
+ "filePaths": ["src/components/*.js", "src/utils/helpers.js"],
101
+ "searchTerms": ["function handleSubmit", "useState("]
102
+ }
103
+ \`\`\`
104
+
105
+ Verify imports:
106
+ \`\`\`json
107
+ {
108
+ "toolId": "seek",
109
+ "filePaths": ["src/components/Header.js"],
110
+ "searchTerms": ["import React", "from 'react'"]
111
+ }
112
+ \`\`\`
113
+
114
+ Search all JS files:
115
+ \`\`\`json
116
+ {
117
+ "toolId": "seek",
118
+ "filePaths": ["src/**/*.js"],
119
+ "searchTerms": ["apiClient", "config.apiUrl"]
120
+ }
121
+ \`\`\`
122
+
123
+ TIP: After finding matches, use code-map read-range to view surrounding context without reading entire files.
124
+
125
+ LIMITS:
126
+ - Max ${SEEK_CONFIG.MAX_FILES_PER_SEARCH} files per search
127
+ - Max ${SEEK_CONFIG.MAX_SEARCH_TERMS} search terms
128
+ - Max ${SEEK_CONFIG.MAX_FILE_SIZE / (1024 * 1024)}MB per file
129
+ - Max ${SEEK_CONFIG.MAX_TOTAL_MATCHES} matches total
130
+ `;
131
+ }
132
+
133
+ /**
134
+ * Parse parameters from tool command content
135
+ * @param {string} content - Raw tool command content
136
+ * @returns {Object} Parsed parameters
137
+ */
138
+ parseParameters(content) {
139
+ try {
140
+ // Try JSON first
141
+ if (content.trim().startsWith('{')) {
142
+ const parsed = JSON.parse(content);
143
+
144
+ return {
145
+ filePaths: parsed.filePaths || [],
146
+ searchTerms: parsed.searchTerms || []
147
+ };
148
+ }
149
+
150
+ // XML parsing
151
+ const params = {
152
+ filePaths: [],
153
+ searchTerms: []
154
+ };
155
+
156
+ // Extract in-files content
157
+ const inFilesPattern = /<in-files>([\s\S]*?)<\/in-files>/i;
158
+ const inFilesMatch = inFilesPattern.exec(content);
159
+
160
+ if (inFilesMatch) {
161
+ const filesContent = inFilesMatch[1];
162
+ params.filePaths = filesContent
163
+ .split('\n')
164
+ .map(line => line.trim())
165
+ .filter(line => line.length > 0);
166
+ }
167
+
168
+ // Extract search-terms content
169
+ const searchTermsPattern = /<search-terms>([\s\S]*?)<\/search-terms>/i;
170
+ const searchTermsMatch = searchTermsPattern.exec(content);
171
+
172
+ if (searchTermsMatch) {
173
+ const termsContent = searchTermsMatch[1];
174
+
175
+ // Extract individual <term> tags
176
+ const termPattern = /<term>(.*?)<\/term>/gi;
177
+ let termMatch;
178
+
179
+ while ((termMatch = termPattern.exec(termsContent)) !== null) {
180
+ const term = termMatch[1].trim();
181
+ if (term.length > 0) {
182
+ params.searchTerms.push(term);
183
+ }
184
+ }
185
+ }
186
+
187
+ return params;
188
+
189
+ } catch (error) {
190
+ this.logger?.error('Failed to parse seek parameters', { error: error.message });
191
+ return {
192
+ filePaths: [],
193
+ searchTerms: [],
194
+ parseError: error.message
195
+ };
196
+ }
197
+ }
198
+
199
+ /**
200
+ * Get required parameters
201
+ * @returns {Array<string>} Array of required parameter names
202
+ */
203
+ getRequiredParameters() {
204
+ return ['filePaths', 'searchTerms'];
205
+ }
206
+
207
+ /**
208
+ * Custom parameter validation
209
+ * @param {Object} params - Parameters to validate
210
+ * @returns {Object} Validation result
211
+ */
212
+ customValidateParameters(params) {
213
+ const errors = [];
214
+
215
+ // Validate filePaths
216
+ if (!params.filePaths || !Array.isArray(params.filePaths) || params.filePaths.length === 0) {
217
+ errors.push('At least one file path is required');
218
+ } else if (params.filePaths.length > this.seekConfig.MAX_FILE_PATHS) {
219
+ errors.push(`Too many file paths (max ${this.seekConfig.MAX_FILE_PATHS})`);
220
+ }
221
+
222
+ // Validate searchTerms
223
+ if (!params.searchTerms || !Array.isArray(params.searchTerms) || params.searchTerms.length === 0) {
224
+ errors.push('At least one search term is required');
225
+ } else if (params.searchTerms.length > this.seekConfig.MAX_SEARCH_TERMS) {
226
+ errors.push(`Too many search terms (max ${this.seekConfig.MAX_SEARCH_TERMS})`);
227
+ }
228
+
229
+ // Validate search terms are non-empty strings
230
+ if (params.searchTerms && Array.isArray(params.searchTerms)) {
231
+ for (const [index, term] of params.searchTerms.entries()) {
232
+ if (typeof term !== 'string' || term.trim().length === 0) {
233
+ errors.push(`Search term ${index + 1}: must be a non-empty string`);
234
+ }
235
+ }
236
+ }
237
+
238
+ // Validate file paths are non-empty strings
239
+ if (params.filePaths && Array.isArray(params.filePaths)) {
240
+ for (const [index, filePath] of params.filePaths.entries()) {
241
+ if (typeof filePath !== 'string' || filePath.trim().length === 0) {
242
+ errors.push(`File path ${index + 1}: must be a non-empty string`);
243
+ }
244
+
245
+ // Check for path traversal attempts
246
+ if (filePath.includes('..')) {
247
+ errors.push(`File path ${index + 1}: path traversal (..) not allowed for security`);
248
+ }
249
+ }
250
+ }
251
+
252
+ return {
253
+ valid: errors.length === 0,
254
+ errors
255
+ };
256
+ }
257
+
258
+ /**
259
+ * Execute tool with parsed parameters
260
+ * @param {Object} params - Parsed parameters
261
+ * @param {Object} context - Execution context
262
+ * @returns {Promise<Object>} Execution result
263
+ */
264
+ async execute(params, context) {
265
+ const { filePaths, searchTerms } = params;
266
+ const { projectDir, agentId, directoryAccess } = context;
267
+
268
+ // IMPORTANT: Get all accessible directories for the agent
269
+ // This includes workingDirectory, readOnlyDirectories, and writeEnabledDirectories
270
+ let workingDirectory = projectDir || process.cwd();
271
+ let accessibleDirectories = [workingDirectory];
272
+
273
+ if (directoryAccess && directoryAccess.workingDirectory) {
274
+ workingDirectory = directoryAccess.workingDirectory;
275
+
276
+ // Collect all accessible directories (for read operations)
277
+ accessibleDirectories = this.getAllAccessibleDirectories(directoryAccess);
278
+
279
+ this.logger?.info('Using agent configured directory access', {
280
+ workingDirectory: directoryAccess.workingDirectory,
281
+ totalAccessibleDirs: accessibleDirectories.length,
282
+ readOnlyDirs: directoryAccess.readOnlyDirectories?.length || 0,
283
+ writeEnabledDirs: directoryAccess.writeEnabledDirectories?.length || 0,
284
+ agentId
285
+ });
286
+ }
287
+
288
+ if (!workingDirectory) {
289
+ throw new Error('Project directory is required for seek tool');
290
+ }
291
+
292
+ this.logger?.info('Executing seek tool', {
293
+ filePathCount: filePaths.length,
294
+ searchTermCount: searchTerms.length,
295
+ workingDirectory,
296
+ accessibleDirectories: accessibleDirectories.length,
297
+ agentId
298
+ });
299
+
300
+ try {
301
+ // Resolve file paths (expand globs)
302
+ // Pass accessible directories for validation (if agent has directoryAccess configured)
303
+ const resolveResult = await this.resolveFilePaths(
304
+ filePaths,
305
+ workingDirectory,
306
+ directoryAccess ? accessibleDirectories : null
307
+ );
308
+
309
+ const resolvedFiles = resolveResult.found;
310
+ const notFoundFiles = resolveResult.notFound;
311
+
312
+ // Check file count limit
313
+ if (resolvedFiles.length > this.seekConfig.MAX_FILES_PER_SEARCH) {
314
+ return {
315
+ success: false,
316
+ error: `Too many files to search (${resolvedFiles.length}). Maximum is ${this.seekConfig.MAX_FILES_PER_SEARCH}. Use more specific file patterns.`,
317
+ filesResolved: resolvedFiles.length,
318
+ filesNotFound: notFoundFiles.length
319
+ };
320
+ }
321
+
322
+ // Search in files
323
+ const searchResult = await this.searchFiles(resolvedFiles, searchTerms, workingDirectory);
324
+
325
+ // Format results
326
+ const formattedResults = this.formatResults(
327
+ searchResult.matches,
328
+ searchResult.errorFiles,
329
+ notFoundFiles,
330
+ resolvedFiles.length
331
+ );
332
+
333
+ return {
334
+ success: true,
335
+ filesSearched: resolvedFiles.length,
336
+ filesNotFound: notFoundFiles.length,
337
+ filesWithErrors: searchResult.errorFiles.length,
338
+ totalMatches: searchResult.matches.length,
339
+ matchesByTerm: searchResult.matchesByTerm,
340
+ formattedResults,
341
+ toolUsed: 'seek',
342
+ guidance: searchResult.matches.length > 0
343
+ ? 'To view code context around matches, use code-map read-range with the file path and line numbers from above. Example: {"toolId":"code-map","parameters":{"action":"read-range","filePath":"<matched-file>","startLine":<line-5>,"endLine":<line+25>}}'
344
+ : undefined
345
+ };
346
+
347
+ } catch (error) {
348
+ this.logger?.error('Seek tool execution failed', { error: error.message });
349
+ throw error;
350
+ }
351
+ }
352
+
353
+ /**
354
+ * Get all accessible directories for read operations
355
+ * @param {Object} directoryAccess - Directory access configuration
356
+ * @returns {Array<string>} Array of accessible directory paths
357
+ * @private
358
+ */
359
+ getAllAccessibleDirectories(directoryAccess) {
360
+ const directories = new Set();
361
+
362
+ // Add working directory
363
+ if (directoryAccess.workingDirectory) {
364
+ directories.add(directoryAccess.workingDirectory);
365
+ }
366
+
367
+ // Add read-only directories
368
+ if (directoryAccess.readOnlyDirectories && Array.isArray(directoryAccess.readOnlyDirectories)) {
369
+ for (const dir of directoryAccess.readOnlyDirectories) {
370
+ directories.add(dir);
371
+ }
372
+ }
373
+
374
+ // Add write-enabled directories (if you can write, you can read)
375
+ if (directoryAccess.writeEnabledDirectories && Array.isArray(directoryAccess.writeEnabledDirectories)) {
376
+ for (const dir of directoryAccess.writeEnabledDirectories) {
377
+ directories.add(dir);
378
+ }
379
+ }
380
+
381
+ return Array.from(directories);
382
+ }
383
+
384
+ /**
385
+ * Check if a path is within any accessible directory
386
+ * @param {string} targetPath - Path to check
387
+ * @param {Array<string>} accessibleDirs - Array of accessible directories
388
+ * @returns {boolean} True if path is accessible
389
+ * @private
390
+ */
391
+ isPathAccessible(targetPath, accessibleDirs) {
392
+ for (const dir of accessibleDirs) {
393
+ const relative = path.relative(dir, targetPath);
394
+ const isWithin = !relative.startsWith('..') && !path.isAbsolute(relative);
395
+ if (isWithin) {
396
+ return true;
397
+ }
398
+ }
399
+ return false;
400
+ }
401
+
402
+ /**
403
+ * Resolve file paths, expanding glob patterns
404
+ * @param {Array<string>} filePaths - File paths with possible glob patterns
405
+ * @param {string} projectDir - Project directory
406
+ * @param {Array<string>} accessibleDirs - Optional array of accessible directories
407
+ * @returns {Promise<Object>} Object with found and notFound arrays
408
+ * @private
409
+ */
410
+ async resolveFilePaths(filePaths, projectDir, accessibleDirs = null) {
411
+ const result = {
412
+ found: [],
413
+ notFound: []
414
+ };
415
+
416
+ for (const filePath of filePaths) {
417
+ const normalizedPath = filePath.trim();
418
+
419
+ if (normalizedPath.includes('*')) {
420
+ // Handle glob patterns
421
+ const globResult = await this.expandGlobPattern(normalizedPath, projectDir);
422
+
423
+ if (globResult.found.length > 0) {
424
+ result.found.push(...globResult.found);
425
+ } else {
426
+ result.notFound.push(`${normalizedPath} (no matching files)`);
427
+ }
428
+ } else {
429
+ // Handle direct file reference
430
+ const absolutePath = path.isAbsolute(normalizedPath)
431
+ ? normalizedPath
432
+ : path.resolve(projectDir, normalizedPath);
433
+
434
+ // Check if path is within accessible directories (if configured)
435
+ if (accessibleDirs && accessibleDirs.length > 0) {
436
+ if (!this.isPathAccessible(absolutePath, accessibleDirs)) {
437
+ result.notFound.push(`${normalizedPath} (not in accessible directories)`);
438
+ continue;
439
+ }
440
+ }
441
+
442
+ try {
443
+ const stats = await fs.stat(absolutePath);
444
+
445
+ if (stats.isFile()) {
446
+ result.found.push(absolutePath);
447
+ } else if (stats.isDirectory()) {
448
+ result.notFound.push(`${normalizedPath} (is a directory, not a file)`);
449
+ } else {
450
+ result.notFound.push(`${normalizedPath} (not a regular file)`);
451
+ }
452
+ } catch (error) {
453
+ result.notFound.push(`${normalizedPath} (${error.code || error.message})`);
454
+ }
455
+ }
456
+ }
457
+
458
+ return result;
459
+ }
460
+
461
+ /**
462
+ * Expand glob pattern to matching file paths
463
+ * @param {string} pattern - Glob pattern
464
+ * @param {string} projectDir - Project directory
465
+ * @returns {Promise<Object>} Object with found files
466
+ * @private
467
+ */
468
+ async expandGlobPattern(pattern, projectDir) {
469
+ const result = { found: [] };
470
+
471
+ // Handle recursive pattern: src/**/*.js
472
+ if (pattern.includes('**/')) {
473
+ const [baseDir, filePattern] = pattern.split('**/');
474
+ const basePath = path.resolve(projectDir, baseDir);
475
+
476
+ try {
477
+ const stats = await fs.stat(basePath);
478
+
479
+ if (stats.isDirectory()) {
480
+ await this.findFilesRecursively(
481
+ basePath,
482
+ filePattern,
483
+ result.found,
484
+ 0,
485
+ this.seekConfig.MAX_DIRECTORY_DEPTH
486
+ );
487
+ }
488
+ } catch (error) {
489
+ // Directory doesn't exist
490
+ this.logger?.warn('Base directory not found for glob pattern', { basePath, error: error.message });
491
+ }
492
+ }
493
+ // Handle simple pattern: src/*.js
494
+ else if (pattern.includes('*')) {
495
+ const dirPath = path.dirname(path.resolve(projectDir, pattern));
496
+ const filePattern = path.basename(pattern);
497
+
498
+ try {
499
+ const stats = await fs.stat(dirPath);
500
+
501
+ if (stats.isDirectory()) {
502
+ const files = await fs.readdir(dirPath);
503
+
504
+ for (const file of files) {
505
+ const filePath = path.join(dirPath, file);
506
+
507
+ try {
508
+ const fileStats = await fs.stat(filePath);
509
+
510
+ if (fileStats.isFile() && this.matchesPattern(file, filePattern)) {
511
+ result.found.push(filePath);
512
+ }
513
+ } catch (error) {
514
+ // Skip files we can't stat
515
+ continue;
516
+ }
517
+ }
518
+ }
519
+ } catch (error) {
520
+ // Directory doesn't exist
521
+ this.logger?.warn('Directory not found for glob pattern', { dirPath, error: error.message });
522
+ }
523
+ }
524
+
525
+ return result;
526
+ }
527
+
528
+ /**
529
+ * Find files recursively matching a pattern
530
+ * @param {string} dir - Directory to search
531
+ * @param {string} filePattern - File pattern to match
532
+ * @param {Array<string>} results - Results array
533
+ * @param {number} currentDepth - Current recursion depth
534
+ * @param {number} maxDepth - Maximum recursion depth
535
+ * @returns {Promise<void>}
536
+ * @private
537
+ */
538
+ async findFilesRecursively(dir, filePattern, results, currentDepth, maxDepth) {
539
+ // Prevent infinite recursion
540
+ if (currentDepth >= maxDepth) {
541
+ this.logger?.warn('Maximum directory depth reached', { dir, currentDepth });
542
+ return;
543
+ }
544
+
545
+ try {
546
+ const entries = await fs.readdir(dir, { withFileTypes: true });
547
+
548
+ for (const entry of entries) {
549
+ // Skip hidden files and directories
550
+ if (entry.name.startsWith('.')) {
551
+ continue;
552
+ }
553
+
554
+ const fullPath = path.join(dir, entry.name);
555
+
556
+ try {
557
+ if (entry.isDirectory()) {
558
+ // Skip common large directories
559
+ if (this.shouldSkipDirectory(entry.name)) {
560
+ continue;
561
+ }
562
+
563
+ await this.findFilesRecursively(
564
+ fullPath,
565
+ filePattern,
566
+ results,
567
+ currentDepth + 1,
568
+ maxDepth
569
+ );
570
+ } else if (entry.isFile()) {
571
+ if (this.matchesPattern(entry.name, filePattern)) {
572
+ results.push(fullPath);
573
+
574
+ // Stop if we've found too many files
575
+ if (results.length >= this.seekConfig.MAX_FILES_PER_SEARCH) {
576
+ return;
577
+ }
578
+ }
579
+ }
580
+ } catch (error) {
581
+ // Skip entries we can't access
582
+ continue;
583
+ }
584
+ }
585
+ } catch (error) {
586
+ this.logger?.warn('Error reading directory', { dir, error: error.message });
587
+ }
588
+ }
589
+
590
+ /**
591
+ * Check if filename matches a wildcard pattern
592
+ * @param {string} filename - Filename to check
593
+ * @param {string} pattern - Wildcard pattern
594
+ * @returns {boolean} True if matches
595
+ * @private
596
+ */
597
+ matchesPattern(filename, pattern) {
598
+ // Simple wildcard matching
599
+ const regexPattern = pattern
600
+ .split('*')
601
+ .map(part => this.escapeRegExp(part))
602
+ .join('.*');
603
+
604
+ const regex = new RegExp(`^${regexPattern}$`, 'i');
605
+ return regex.test(filename);
606
+ }
607
+
608
+ /**
609
+ * Escape special regex characters
610
+ * @param {string} string - String to escape
611
+ * @returns {string} Escaped string
612
+ * @private
613
+ */
614
+ escapeRegExp(string) {
615
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
616
+ }
617
+
618
+ /**
619
+ * Check if directory should be skipped during recursive search
620
+ * @param {string} dirName - Directory name
621
+ * @returns {boolean} True if should skip
622
+ * @private
623
+ */
624
+ shouldSkipDirectory(dirName) {
625
+ const skipDirs = new Set([
626
+ 'node_modules',
627
+ '.git',
628
+ 'dist',
629
+ 'build',
630
+ 'coverage',
631
+ '.next',
632
+ '.nuxt',
633
+ 'out',
634
+ 'target',
635
+ 'vendor',
636
+ '__pycache__',
637
+ '.cache',
638
+ 'tmp',
639
+ 'temp'
640
+ ]);
641
+
642
+ return skipDirs.has(dirName.toLowerCase());
643
+ }
644
+
645
+ /**
646
+ * Check if file should be skipped (binary files)
647
+ * @param {string} filePath - File path
648
+ * @returns {boolean} True if should skip
649
+ * @private
650
+ */
651
+ shouldSkipFile(filePath) {
652
+ const ext = path.extname(filePath).toLowerCase();
653
+ return BINARY_EXTENSIONS.has(ext);
654
+ }
655
+
656
+ /**
657
+ * Search for terms in multiple files
658
+ * @param {Array<string>} filePaths - File paths to search
659
+ * @param {Array<string>} searchTerms - Search terms
660
+ * @param {string} projectDir - Project directory for relative paths
661
+ * @returns {Promise<Object>} Search results
662
+ * @private
663
+ */
664
+ async searchFiles(filePaths, searchTerms, projectDir) {
665
+ const allMatches = [];
666
+ const errorFiles = [];
667
+ let totalMatches = 0;
668
+
669
+ for (const filePath of filePaths) {
670
+ // Skip binary files
671
+ if (this.shouldSkipFile(filePath)) {
672
+ continue;
673
+ }
674
+
675
+ try {
676
+ // Check file size
677
+ const stats = await fs.stat(filePath);
678
+
679
+ if (stats.size > this.seekConfig.MAX_FILE_SIZE) {
680
+ errorFiles.push({
681
+ filePath: path.relative(projectDir, filePath),
682
+ error: `File too large (${Math.round(stats.size / (1024 * 1024))}MB, max ${Math.round(this.seekConfig.MAX_FILE_SIZE / (1024 * 1024))}MB)`
683
+ });
684
+ continue;
685
+ }
686
+
687
+ // Search in file
688
+ const matches = await this.searchInFile(filePath, searchTerms, projectDir);
689
+
690
+ allMatches.push(...matches);
691
+ totalMatches += matches.length;
692
+
693
+ // Stop if we've exceeded max total matches
694
+ if (totalMatches >= this.seekConfig.MAX_TOTAL_MATCHES) {
695
+ this.logger?.warn('Maximum total matches reached', { totalMatches });
696
+ break;
697
+ }
698
+
699
+ } catch (error) {
700
+ errorFiles.push({
701
+ filePath: path.relative(projectDir, filePath),
702
+ error: error.message
703
+ });
704
+ }
705
+ }
706
+
707
+ // Group matches by search term
708
+ const matchesByTerm = {};
709
+
710
+ for (const match of allMatches) {
711
+ if (!matchesByTerm[match.term]) {
712
+ matchesByTerm[match.term] = [];
713
+ }
714
+
715
+ matchesByTerm[match.term].push({
716
+ filePath: match.filePath,
717
+ lineNumber: match.lineNumber,
718
+ lineContent: match.lineContent
719
+ });
720
+ }
721
+
722
+ return {
723
+ matches: allMatches,
724
+ matchesByTerm,
725
+ errorFiles
726
+ };
727
+ }
728
+
729
+ /**
730
+ * Search for terms in a single file
731
+ * @param {string} filePath - File path
732
+ * @param {Array<string>} searchTerms - Search terms
733
+ * @param {string} projectDir - Project directory for relative paths
734
+ * @returns {Promise<Array<Object>>} Matches found
735
+ * @private
736
+ */
737
+ async searchInFile(filePath, searchTerms, projectDir) {
738
+ const matches = [];
739
+ let matchesInFile = 0;
740
+
741
+ try {
742
+ // Read file content
743
+ const content = await fs.readFile(filePath, FILE_ENCODING);
744
+
745
+ // Split into lines
746
+ const lines = content.split('\n');
747
+ const relativePath = path.relative(projectDir, filePath);
748
+
749
+ // Search each line
750
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
751
+ const line = lines[lineIndex];
752
+ const lineNumber = lineIndex + 1; // 1-based line numbers
753
+
754
+ // Check each search term
755
+ for (const term of searchTerms) {
756
+ if (line.includes(term)) {
757
+ // Truncate line content if too long
758
+ let lineContent = line;
759
+ if (lineContent.length > this.seekConfig.MAX_LINE_CONTENT_LENGTH) {
760
+ const termIndex = lineContent.indexOf(term);
761
+ const start = Math.max(0, termIndex - 50);
762
+ const end = Math.min(lineContent.length, termIndex + term.length + 50);
763
+ lineContent = (start > 0 ? '...' : '') +
764
+ lineContent.substring(start, end) +
765
+ (end < lineContent.length ? '...' : '');
766
+ }
767
+
768
+ matches.push({
769
+ term,
770
+ filePath: relativePath,
771
+ lineNumber,
772
+ lineContent: lineContent.trim()
773
+ });
774
+
775
+ matchesInFile++;
776
+
777
+ // Limit matches per file
778
+ if (matchesInFile >= this.seekConfig.MAX_MATCHES_PER_FILE) {
779
+ this.logger?.warn('Maximum matches per file reached', { filePath: relativePath });
780
+ return matches;
781
+ }
782
+ }
783
+ }
784
+ }
785
+
786
+ } catch (error) {
787
+ throw new Error(`Failed to read file: ${error.message}`);
788
+ }
789
+
790
+ return matches;
791
+ }
792
+
793
+ /**
794
+ * Format search results for display
795
+ * @param {Array<Object>} matches - Search matches
796
+ * @param {Array<Object>} errorFiles - Files with errors
797
+ * @param {Array<string>} notFoundFiles - Files not found
798
+ * @param {number} filesSearched - Number of files searched
799
+ * @returns {string} Formatted results
800
+ * @private
801
+ */
802
+ formatResults(matches, errorFiles, notFoundFiles, filesSearched) {
803
+ let output = '';
804
+
805
+ // Report files not found
806
+ if (notFoundFiles.length > 0) {
807
+ output += 'FILES NOT FOUND:\n';
808
+ for (const file of notFoundFiles) {
809
+ output += ` - ${file}\n`;
810
+ }
811
+ output += '\n';
812
+ }
813
+
814
+ // Report files with errors
815
+ if (errorFiles.length > 0) {
816
+ output += 'FILES WITH ERRORS:\n';
817
+ for (const file of errorFiles) {
818
+ output += ` - ${file.filePath}: ${file.error}\n`;
819
+ }
820
+ output += '\n';
821
+ }
822
+
823
+ // Report search results
824
+ if (matches.length === 0) {
825
+ output += `No matches found for the specified search terms in ${filesSearched} file(s).\n`;
826
+ } else {
827
+ // Group by term
828
+ const matchesByTerm = {};
829
+ for (const match of matches) {
830
+ if (!matchesByTerm[match.term]) {
831
+ matchesByTerm[match.term] = [];
832
+ }
833
+ matchesByTerm[match.term].push(match);
834
+ }
835
+
836
+ output += `SEARCH RESULTS (${matches.length} total matches in ${filesSearched} file(s)):\n\n`;
837
+
838
+ for (const [term, termMatches] of Object.entries(matchesByTerm)) {
839
+ output += `Search term: "${term}" (${termMatches.length} matches)\n`;
840
+
841
+ for (const match of termMatches) {
842
+ output += ` ${match.filePath}:${match.lineNumber} - ${match.lineContent}\n`;
843
+ }
844
+
845
+ output += '\n';
846
+ }
847
+
848
+ // Add warning if max matches reached
849
+ if (matches.length >= this.seekConfig.MAX_TOTAL_MATCHES) {
850
+ output += `⚠️ Maximum matches limit reached (${this.seekConfig.MAX_TOTAL_MATCHES}). Some matches may not be shown.\n`;
851
+ }
852
+ }
853
+
854
+ return output.trim();
855
+ }
856
+
857
+ /**
858
+ * Get supported file extensions
859
+ * @returns {Array<string>} Array of supported extensions
860
+ */
861
+ getSupportedExtensions() {
862
+ return [
863
+ '.js', '.jsx', '.ts', '.tsx',
864
+ '.json', '.xml', '.html', '.css', '.scss', '.sass', '.less',
865
+ '.md', '.txt', '.log',
866
+ '.py', '.rb', '.java', '.go', '.rs',
867
+ '.c', '.cpp', '.h', '.hpp',
868
+ '.sh', '.bash', '.zsh',
869
+ '.yml', '.yaml', '.toml', '.ini', '.conf'
870
+ ];
871
+ }
872
+
873
+ /**
874
+ * Resource cleanup
875
+ * @param {string} operationId - Operation identifier
876
+ */
877
+ async cleanup(operationId) {
878
+ // No persistent resources to clean up
879
+ this.logger?.info('Seek tool cleanup completed', { operationId });
880
+ }
881
+ }
882
+
883
+ export default SeekTool;