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,627 @@
1
+ /**
2
+ * PDF Tool - Read, extract, and create PDF files
3
+ *
4
+ * Purpose:
5
+ * - Get PDF metadata (page count, info)
6
+ * - Extract text content from specific page ranges
7
+ * - Create PDF files from HTML content using Puppeteer
8
+ * - Provide structured access to PDF documents
9
+ */
10
+
11
+ import { BaseTool } from './baseTool.js';
12
+ import TagParser from '../utilities/tagParser.js';
13
+ import fs from 'fs/promises';
14
+ import path from 'path';
15
+
16
+ // Dynamic import for pdf2json
17
+ let PDFParser = null;
18
+
19
+ // Dynamic import for puppeteer (used for PDF creation)
20
+ let puppeteerModule = null;
21
+
22
+ class PdfTool extends BaseTool {
23
+ constructor(config = {}, logger = null) {
24
+ super(config, logger);
25
+ this.id = 'pdf';
26
+ this.name = 'PDF Tool';
27
+ this.description = 'Read, extract, and create PDF files';
28
+ this.version = '2.0.0';
29
+ this.capabilities = ['pdf-read', 'pdf-info', 'pdf-create'];
30
+ this.requiresProject = false;
31
+ this.isAsync = false;
32
+ this.pdfParserLoaded = false;
33
+ this.pdfParserError = null;
34
+ this.puppeteerLoaded = false;
35
+ this.puppeteerError = null;
36
+ }
37
+
38
+ /**
39
+ * Lazily load pdf2json module
40
+ * @returns {Promise<boolean>} Whether loading succeeded
41
+ */
42
+ async loadPdfParser() {
43
+ if (this.pdfParserLoaded) return true;
44
+ if (this.pdfParserError) return false;
45
+
46
+ try {
47
+ const module = await import('pdf2json');
48
+ PDFParser = module.default;
49
+ this.pdfParserLoaded = true;
50
+ return true;
51
+ } catch (error) {
52
+ this.pdfParserError = error.message;
53
+ this.logger?.error('Failed to load pdf2json', { error: error.message });
54
+ return false;
55
+ }
56
+ }
57
+
58
+ /**
59
+ * Lazily load puppeteer module for PDF creation
60
+ * @returns {Promise<boolean>} Whether loading succeeded
61
+ */
62
+ async loadPuppeteer() {
63
+ if (this.puppeteerLoaded) return true;
64
+ if (this.puppeteerError) return false;
65
+
66
+ try {
67
+ const module = await import('puppeteer');
68
+ puppeteerModule = module.default;
69
+ this.puppeteerLoaded = true;
70
+ return true;
71
+ } catch (error) {
72
+ this.puppeteerError = error.message;
73
+ this.logger?.error('Failed to load puppeteer', { error: error.message });
74
+ return false;
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Get tool description for LLM consumption
80
+ * @returns {string} Tool description
81
+ */
82
+ getDescription() {
83
+ return `
84
+ PDF Tool: Read, extract, and create PDF files.
85
+
86
+ USAGE:
87
+ \`\`\`json
88
+ {
89
+ "toolId": "pdf",
90
+ "actions": [{
91
+ "action": "get-info",
92
+ "filePath": "/path/to/document.pdf"
93
+ }]
94
+ }
95
+ \`\`\`
96
+
97
+ ACTIONS:
98
+
99
+ 1. **get-info** - Get PDF metadata (page count, title, author, etc.)
100
+ - filePath: Path to PDF file (required)
101
+
102
+ 2. **read-pages** - Extract text content from specific pages
103
+ - filePath: Path to PDF file (required)
104
+ - startPage: First page to read, 1-indexed, inclusive (default: 1)
105
+ - endPage: Last page to read, exclusive (default: startPage + 10)
106
+ - IMPORTANT: Read max 10 pages at once for optimal performance
107
+
108
+ 3. **create-pdf** - Create a PDF from HTML content
109
+ - outputPath: Output file path (required, relative to project dir or absolute)
110
+ - htmlContent: Full HTML string to render (required)
111
+ - pageSize: Page size - A4 (default), Letter, Legal, Tabloid, A3, A5
112
+ - orientation: portrait (default) or landscape
113
+ - margins: Object with top, right, bottom, left in CSS units (default: 1cm each)
114
+ - printBackground: Whether to print background colors/images (default: true)
115
+ - displayHeaderFooter: Show header/footer (default: false)
116
+ - headerTemplate: HTML template for header
117
+ - footerTemplate: HTML template for footer
118
+
119
+ EXAMPLES:
120
+
121
+ 1. Get PDF info:
122
+ \`\`\`json
123
+ {
124
+ "toolId": "pdf",
125
+ "actions": [{
126
+ "action": "get-info",
127
+ "filePath": "documents/report.pdf"
128
+ }]
129
+ }
130
+ \`\`\`
131
+
132
+ 2. Read pages 1-10:
133
+ \`\`\`json
134
+ {
135
+ "toolId": "pdf",
136
+ "actions": [{
137
+ "action": "read-pages",
138
+ "filePath": "documents/report.pdf",
139
+ "startPage": 1,
140
+ "endPage": 11
141
+ }]
142
+ }
143
+ \`\`\`
144
+
145
+ 3. Create a PDF from HTML:
146
+ \`\`\`json
147
+ {
148
+ "toolId": "pdf",
149
+ "actions": [{
150
+ "action": "create-pdf",
151
+ "outputPath": "output/report.pdf",
152
+ "htmlContent": "<html><head><style>body{font-family:Arial;margin:2cm}h1{color:#333}</style></head><body><h1>Report</h1><p>Content here...</p></body></html>",
153
+ "pageSize": "A4",
154
+ "orientation": "portrait"
155
+ }]
156
+ }
157
+ \`\`\`
158
+
159
+ 4. Create a landscape PDF with custom margins:
160
+ \`\`\`json
161
+ {
162
+ "toolId": "pdf",
163
+ "actions": [{
164
+ "action": "create-pdf",
165
+ "outputPath": "output/wide-report.pdf",
166
+ "htmlContent": "<html><body><h1>Wide Report</h1><table>...</table></body></html>",
167
+ "pageSize": "Letter",
168
+ "orientation": "landscape",
169
+ "margins": { "top": "2cm", "right": "1.5cm", "bottom": "2cm", "left": "1.5cm" }
170
+ }]
171
+ }
172
+ \`\`\`
173
+
174
+ NOTES:
175
+ - Page numbers are 1-indexed (first page is 1)
176
+ - endPage is exclusive (like Python range)
177
+ - Recommend reading max 10 pages at a time to avoid token limits
178
+ - For create-pdf: Design full HTML with CSS styling for best results
179
+ - The HTML is rendered in a headless browser, so all CSS features are supported
180
+ - Use inline styles or <style> blocks in the HTML for styling
181
+ `.trim();
182
+ }
183
+
184
+ /**
185
+ * Parse parameters from tool command content
186
+ * @param {string} content - Raw tool command content
187
+ * @returns {Object} Parsed parameters object
188
+ */
189
+ parseParameters(content) {
190
+ try {
191
+ // Try to extract structured content using TagParser
192
+ const actionMatches = TagParser.extractContent(content, 'action');
193
+ const filePathMatches = TagParser.extractContent(content, 'filePath');
194
+ const startPageMatches = TagParser.extractContent(content, 'startPage');
195
+ const endPageMatches = TagParser.extractContent(content, 'endPage');
196
+
197
+ const action = actionMatches.length > 0 ? actionMatches[0].trim() : 'get-info';
198
+ const filePath = filePathMatches.length > 0 ? filePathMatches[0].trim() : '';
199
+ const startPage = startPageMatches.length > 0 ? parseInt(startPageMatches[0], 10) : 1;
200
+ const endPage = endPageMatches.length > 0 ? parseInt(endPageMatches[0], 10) : startPage + 10;
201
+
202
+ return {
203
+ actions: [{
204
+ action,
205
+ filePath,
206
+ startPage,
207
+ endPage
208
+ }]
209
+ };
210
+ } catch (error) {
211
+ throw new Error(`Failed to parse PDF tool parameters: ${error.message}`);
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Get supported actions
217
+ * @returns {Array<string>}
218
+ */
219
+ getSupportedActions() {
220
+ return ['get-info', 'read-pages', 'create-pdf'];
221
+ }
222
+
223
+ /**
224
+ * Execute PDF tool action
225
+ * @param {Object} params - Parsed parameters
226
+ * @param {Object} context - Execution context
227
+ * @returns {Promise<Object>} Execution result
228
+ */
229
+ async execute(params, context) {
230
+ const { actions } = params;
231
+
232
+ if (!actions || actions.length === 0) {
233
+ return {
234
+ success: false,
235
+ error: 'No actions provided',
236
+ output: 'Please specify an action (get-info, read-pages, or create-pdf)'
237
+ };
238
+ }
239
+
240
+ const action = actions[0];
241
+ const { projectDir } = context;
242
+
243
+ // Handle create-pdf early (it doesn't need read-oriented validation)
244
+ if (action.action === 'create-pdf') {
245
+ try {
246
+ return await this.createPdf(action, context);
247
+ } catch (error) {
248
+ this.logger?.error('PDF creation error', { error: error.message });
249
+ return {
250
+ success: false,
251
+ error: error.message,
252
+ output: `Failed to create PDF: ${error.message}`
253
+ };
254
+ }
255
+ }
256
+
257
+ // --- Read-oriented actions below: require filePath, file existence, pdf2json ---
258
+
259
+ // Resolve file path
260
+ let filePath = action.filePath;
261
+ if (!filePath) {
262
+ return {
263
+ success: false,
264
+ error: 'File path is required',
265
+ output: 'Please provide a filePath parameter'
266
+ };
267
+ }
268
+
269
+ // Make path absolute if relative
270
+ if (!path.isAbsolute(filePath)) {
271
+ filePath = path.resolve(projectDir || process.cwd(), filePath);
272
+ }
273
+
274
+ // Check file exists
275
+ try {
276
+ await fs.access(filePath);
277
+ } catch {
278
+ return {
279
+ success: false,
280
+ error: `File not found: ${filePath}`,
281
+ output: `The PDF file does not exist: ${filePath}`
282
+ };
283
+ }
284
+
285
+ // Check file extension
286
+ if (!filePath.toLowerCase().endsWith('.pdf')) {
287
+ return {
288
+ success: false,
289
+ error: 'Not a PDF file',
290
+ output: `The file must have a .pdf extension: ${filePath}`
291
+ };
292
+ }
293
+
294
+ // Load pdf2json module
295
+ const loaded = await this.loadPdfParser();
296
+ if (!loaded) {
297
+ return {
298
+ success: false,
299
+ error: 'PDF parsing not available',
300
+ output: `PDF parsing module could not be loaded: ${this.pdfParserError}`
301
+ };
302
+ }
303
+
304
+ try {
305
+ switch (action.action) {
306
+ case 'get-info':
307
+ return await this.getInfo(filePath);
308
+ case 'read-pages':
309
+ return await this.readPages(filePath, action.startPage, action.endPage);
310
+ default:
311
+ return {
312
+ success: false,
313
+ error: `Unknown action: ${action.action}`,
314
+ output: `Supported actions: get-info, read-pages, create-pdf`
315
+ };
316
+ }
317
+ } catch (error) {
318
+ this.logger?.error('PDF tool error', { action: action.action, filePath, error: error.message });
319
+ return {
320
+ success: false,
321
+ error: error.message,
322
+ output: `Failed to process PDF: ${error.message}`
323
+ };
324
+ }
325
+ }
326
+
327
+ /**
328
+ * Parse PDF file using pdf2json
329
+ * @param {string} filePath - Path to PDF file
330
+ * @returns {Promise<Object>} Parsed PDF data
331
+ */
332
+ async parsePdf(filePath) {
333
+ return new Promise((resolve, reject) => {
334
+ const pdfParser = new PDFParser();
335
+
336
+ pdfParser.on('pdfParser_dataError', (errData) => {
337
+ reject(new Error(errData.parserError || 'PDF parsing failed'));
338
+ });
339
+
340
+ pdfParser.on('pdfParser_dataReady', (pdfData) => {
341
+ resolve(pdfData);
342
+ });
343
+
344
+ pdfParser.loadPDF(filePath);
345
+ });
346
+ }
347
+
348
+ /**
349
+ * Extract text from a PDF page
350
+ * @param {Object} page - Page data from pdf2json
351
+ * @returns {string} Extracted text
352
+ */
353
+ extractPageText(page) {
354
+ if (!page || !page.Texts) return '';
355
+
356
+ const texts = [];
357
+ for (const textItem of page.Texts) {
358
+ if (textItem.R) {
359
+ for (const run of textItem.R) {
360
+ if (run.T) {
361
+ // Decode URI-encoded text
362
+ texts.push(decodeURIComponent(run.T));
363
+ }
364
+ }
365
+ }
366
+ }
367
+ return texts.join(' ');
368
+ }
369
+
370
+ /**
371
+ * Get PDF info (page count, metadata)
372
+ * @param {string} filePath - Path to PDF file
373
+ * @returns {Promise<Object>} PDF info
374
+ */
375
+ async getInfo(filePath) {
376
+ const pdfData = await this.parsePdf(filePath);
377
+
378
+ const pageCount = pdfData.Pages ? pdfData.Pages.length : 0;
379
+ const meta = pdfData.Meta || {};
380
+
381
+ const info = {
382
+ pageCount,
383
+ title: meta.Title || null,
384
+ author: meta.Author || null,
385
+ subject: meta.Subject || null,
386
+ creator: meta.Creator || null,
387
+ producer: meta.Producer || null,
388
+ creationDate: meta.CreationDate || null,
389
+ modificationDate: meta.ModDate || null
390
+ };
391
+
392
+ // Build output message
393
+ let output = `PDF Info for: ${path.basename(filePath)}\n`;
394
+ output += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
395
+ output += `Pages: ${info.pageCount}\n`;
396
+ if (info.title) output += `Title: ${info.title}\n`;
397
+ if (info.author) output += `Author: ${info.author}\n`;
398
+ if (info.subject) output += `Subject: ${info.subject}\n`;
399
+ if (info.creator) output += `Creator: ${info.creator}\n`;
400
+ if (info.creationDate) output += `Created: ${info.creationDate}\n`;
401
+
402
+ return {
403
+ success: true,
404
+ action: 'get-info',
405
+ filePath,
406
+ info,
407
+ output,
408
+ message: `PDF has ${info.pageCount} pages`
409
+ };
410
+ }
411
+
412
+ /**
413
+ * Create a PDF from HTML content using Puppeteer
414
+ * @param {Object} action - Action parameters
415
+ * @param {Object} context - Execution context
416
+ * @returns {Promise<Object>} Creation result
417
+ */
418
+ async createPdf(action, context) {
419
+ const { projectDir } = context;
420
+ const { outputPath, htmlContent, pageSize, orientation, margins, printBackground, displayHeaderFooter, headerTemplate, footerTemplate } = action;
421
+
422
+ // Validate required parameters
423
+ if (!outputPath) {
424
+ return {
425
+ success: false,
426
+ error: 'Output path is required',
427
+ output: 'Please provide an outputPath parameter for the PDF file'
428
+ };
429
+ }
430
+
431
+ if (!htmlContent) {
432
+ return {
433
+ success: false,
434
+ error: 'HTML content is required',
435
+ output: 'Please provide htmlContent parameter with the HTML to render as PDF'
436
+ };
437
+ }
438
+
439
+ // Resolve output path
440
+ let resolvedPath = outputPath;
441
+ if (!path.isAbsolute(resolvedPath)) {
442
+ resolvedPath = path.resolve(projectDir || process.cwd(), resolvedPath);
443
+ }
444
+
445
+ // Security: prevent path traversal
446
+ const baseDir = projectDir || process.cwd();
447
+ const normalizedPath = path.normalize(resolvedPath);
448
+ if (!normalizedPath.startsWith(path.normalize(baseDir))) {
449
+ return {
450
+ success: false,
451
+ error: 'Path traversal detected',
452
+ output: 'Output path must be within the project directory'
453
+ };
454
+ }
455
+
456
+ // Ensure output directory exists
457
+ const outputDir = path.dirname(resolvedPath);
458
+ await fs.mkdir(outputDir, { recursive: true });
459
+
460
+ // Ensure .pdf extension
461
+ if (!resolvedPath.toLowerCase().endsWith('.pdf')) {
462
+ resolvedPath += '.pdf';
463
+ }
464
+
465
+ // Load puppeteer
466
+ const loaded = await this.loadPuppeteer();
467
+ if (!loaded) {
468
+ return {
469
+ success: false,
470
+ error: 'Puppeteer not available',
471
+ output: `Puppeteer could not be loaded for PDF creation: ${this.puppeteerError}`
472
+ };
473
+ }
474
+
475
+ // Map page size names to Puppeteer format
476
+ const pageSizeMap = {
477
+ 'A4': 'A4',
478
+ 'A3': 'A3',
479
+ 'A5': 'A5',
480
+ 'Letter': 'Letter',
481
+ 'Legal': 'Legal',
482
+ 'Tabloid': 'Tabloid'
483
+ };
484
+
485
+ const format = pageSizeMap[pageSize] || 'A4';
486
+ const landscape = orientation === 'landscape';
487
+ const defaultMargin = '1cm';
488
+ const pdfMargins = {
489
+ top: margins?.top || defaultMargin,
490
+ right: margins?.right || defaultMargin,
491
+ bottom: margins?.bottom || defaultMargin,
492
+ left: margins?.left || defaultMargin
493
+ };
494
+
495
+ let browser = null;
496
+ try {
497
+ browser = await puppeteerModule.launch({
498
+ headless: true,
499
+ args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage']
500
+ });
501
+
502
+ const page = await browser.newPage();
503
+ await page.setContent(htmlContent, { waitUntil: 'networkidle0', timeout: 30000 });
504
+
505
+ const pdfOptions = {
506
+ path: resolvedPath,
507
+ format,
508
+ landscape,
509
+ margin: pdfMargins,
510
+ printBackground: printBackground !== false,
511
+ displayHeaderFooter: displayHeaderFooter || false
512
+ };
513
+
514
+ if (displayHeaderFooter) {
515
+ if (headerTemplate) pdfOptions.headerTemplate = headerTemplate;
516
+ if (footerTemplate) pdfOptions.footerTemplate = footerTemplate;
517
+ }
518
+
519
+ await page.pdf(pdfOptions);
520
+ await browser.close();
521
+ browser = null;
522
+
523
+ // Get file stats
524
+ const stats = await fs.stat(resolvedPath);
525
+
526
+ const output = `PDF created successfully!\n` +
527
+ `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n` +
528
+ `File: ${resolvedPath}\n` +
529
+ `Size: ${(stats.size / 1024).toFixed(1)} KB\n` +
530
+ `Page size: ${format}\n` +
531
+ `Orientation: ${landscape ? 'landscape' : 'portrait'}\n` +
532
+ `Margins: ${pdfMargins.top} / ${pdfMargins.right} / ${pdfMargins.bottom} / ${pdfMargins.left}`;
533
+
534
+ return {
535
+ success: true,
536
+ action: 'create-pdf',
537
+ outputPath: resolvedPath,
538
+ fileSize: stats.size,
539
+ format,
540
+ landscape,
541
+ output,
542
+ message: `PDF created: ${resolvedPath} (${(stats.size / 1024).toFixed(1)} KB)`
543
+ };
544
+
545
+ } catch (error) {
546
+ throw error;
547
+ } finally {
548
+ if (browser) {
549
+ try { await browser.close(); } catch { /* ignore close errors */ }
550
+ }
551
+ }
552
+ }
553
+
554
+ /**
555
+ * Read text content from specific pages
556
+ * @param {string} filePath - Path to PDF file
557
+ * @param {number} startPage - Start page (1-indexed, inclusive)
558
+ * @param {number} endPage - End page (exclusive)
559
+ * @returns {Promise<Object>} Page content
560
+ */
561
+ async readPages(filePath, startPage = 1, endPage = null) {
562
+ const pdfData = await this.parsePdf(filePath);
563
+
564
+ const totalPages = pdfData.Pages ? pdfData.Pages.length : 0;
565
+
566
+ // Validate page range
567
+ if (startPage < 1) startPage = 1;
568
+ if (endPage === null) endPage = Math.min(startPage + 10, totalPages + 1);
569
+ if (endPage > totalPages + 1) endPage = totalPages + 1;
570
+ if (startPage > totalPages) {
571
+ return {
572
+ success: false,
573
+ error: `Start page ${startPage} exceeds total pages ${totalPages}`,
574
+ output: `The PDF only has ${totalPages} pages. Cannot start from page ${startPage}.`
575
+ };
576
+ }
577
+
578
+ // Warn if requesting more than 10 pages
579
+ const pageCount = endPage - startPage;
580
+ const warnings = [];
581
+ if (pageCount > 10) {
582
+ warnings.push(`Reading ${pageCount} pages. Consider reading max 10 pages at a time for better performance.`);
583
+ }
584
+
585
+ // Extract requested pages (convert to 0-indexed)
586
+ const requestedPages = [];
587
+ for (let i = startPage - 1; i < Math.min(endPage - 1, totalPages); i++) {
588
+ const page = pdfData.Pages[i];
589
+ const content = this.extractPageText(page);
590
+ requestedPages.push({
591
+ pageNumber: i + 1,
592
+ content: content.trim() || ''
593
+ });
594
+ }
595
+
596
+ // Build output
597
+ let output = `PDF Content: ${path.basename(filePath)}\n`;
598
+ output += `Pages ${startPage} to ${endPage - 1} of ${totalPages}\n`;
599
+ output += `━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n`;
600
+
601
+ for (const page of requestedPages) {
602
+ output += `── Page ${page.pageNumber} ──\n`;
603
+ output += page.content || '(No text content on this page)';
604
+ output += '\n\n';
605
+ }
606
+
607
+ if (warnings.length > 0) {
608
+ output += `\n⚠️ Warnings:\n${warnings.map(w => `- ${w}`).join('\n')}`;
609
+ }
610
+
611
+ return {
612
+ success: true,
613
+ action: 'read-pages',
614
+ filePath,
615
+ totalPages,
616
+ startPage,
617
+ endPage,
618
+ pagesRead: requestedPages.length,
619
+ pages: requestedPages,
620
+ warnings,
621
+ output,
622
+ message: `Read ${requestedPages.length} pages (${startPage}-${endPage - 1}) of ${totalPages} total`
623
+ };
624
+ }
625
+ }
626
+
627
+ export default PdfTool;