groove-dev 0.27.93 → 0.27.96

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 (511) hide show
  1. package/CLAUDE.md +7 -0
  2. package/README.md +25 -52
  3. package/moe-training/package.json +2 -1
  4. package/node_modules/@groove-dev/cli/package.json +1 -1
  5. package/node_modules/@groove-dev/daemon/package.json +1 -1
  6. package/node_modules/@groove-dev/daemon/src/api.js +39 -23
  7. package/node_modules/@groove-dev/daemon/src/introducer.js +21 -6
  8. package/node_modules/@groove-dev/daemon/src/process.js +20 -2
  9. package/node_modules/@groove-dev/daemon/src/providers/gemini.js +27 -28
  10. package/node_modules/@groove-dev/gui/dist/assets/{index-VB4_k5Pz.js → index-BgTyFy4f.js} +331 -331
  11. package/node_modules/@groove-dev/gui/dist/assets/{index-Bo6AeNmM.css → index-QADLyUj5.css} +1 -1
  12. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  13. package/node_modules/@groove-dev/gui/package.json +1 -1
  14. package/node_modules/@groove-dev/gui/src/components/agents/agent-file-tree.jsx +68 -16
  15. package/node_modules/@groove-dev/gui/src/components/agents/agent-panel.jsx +2 -0
  16. package/node_modules/@groove-dev/gui/src/components/agents/code-review.jsx +9 -1
  17. package/node_modules/@groove-dev/gui/src/components/agents/workspace-mode.jsx +2 -2
  18. package/node_modules/@groove-dev/gui/src/components/editor/code-editor.jsx +1 -1
  19. package/node_modules/@groove-dev/gui/src/stores/groove.js +40 -26
  20. package/node_modules/@groove-dev/gui/src/views/agents.jsx +14 -65
  21. package/node_modules/base64-js/LICENSE +21 -0
  22. package/node_modules/base64-js/README.md +34 -0
  23. package/node_modules/base64-js/base64js.min.js +1 -0
  24. package/node_modules/base64-js/index.d.ts +3 -0
  25. package/node_modules/base64-js/index.js +150 -0
  26. package/node_modules/base64-js/package.json +47 -0
  27. package/node_modules/better-sqlite3/LICENSE +21 -0
  28. package/node_modules/better-sqlite3/README.md +99 -0
  29. package/node_modules/better-sqlite3/binding.gyp +38 -0
  30. package/node_modules/better-sqlite3/deps/common.gypi +68 -0
  31. package/node_modules/better-sqlite3/deps/copy.js +31 -0
  32. package/node_modules/better-sqlite3/deps/defines.gypi +41 -0
  33. package/node_modules/better-sqlite3/deps/download.sh +122 -0
  34. package/node_modules/better-sqlite3/deps/patches/1208.patch +15 -0
  35. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +268845 -0
  36. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +14335 -0
  37. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3ext.h +739 -0
  38. package/node_modules/better-sqlite3/deps/sqlite3.gyp +80 -0
  39. package/node_modules/better-sqlite3/deps/test_extension.c +21 -0
  40. package/node_modules/better-sqlite3/lib/database.js +90 -0
  41. package/node_modules/better-sqlite3/lib/index.js +3 -0
  42. package/node_modules/better-sqlite3/lib/methods/aggregate.js +43 -0
  43. package/node_modules/better-sqlite3/lib/methods/backup.js +67 -0
  44. package/node_modules/better-sqlite3/lib/methods/function.js +31 -0
  45. package/node_modules/better-sqlite3/lib/methods/inspect.js +7 -0
  46. package/node_modules/better-sqlite3/lib/methods/pragma.js +12 -0
  47. package/node_modules/better-sqlite3/lib/methods/serialize.js +16 -0
  48. package/node_modules/better-sqlite3/lib/methods/table.js +189 -0
  49. package/node_modules/better-sqlite3/lib/methods/transaction.js +78 -0
  50. package/node_modules/better-sqlite3/lib/methods/wrappers.js +54 -0
  51. package/node_modules/better-sqlite3/lib/sqlite-error.js +20 -0
  52. package/node_modules/better-sqlite3/lib/util.js +12 -0
  53. package/node_modules/better-sqlite3/package.json +59 -0
  54. package/node_modules/better-sqlite3/src/addon.cpp +47 -0
  55. package/node_modules/better-sqlite3/src/better_sqlite3.cpp +74 -0
  56. package/node_modules/better-sqlite3/src/objects/backup.cpp +120 -0
  57. package/node_modules/better-sqlite3/src/objects/backup.hpp +36 -0
  58. package/node_modules/better-sqlite3/src/objects/database.cpp +417 -0
  59. package/node_modules/better-sqlite3/src/objects/database.hpp +103 -0
  60. package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +113 -0
  61. package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +50 -0
  62. package/node_modules/better-sqlite3/src/objects/statement.cpp +383 -0
  63. package/node_modules/better-sqlite3/src/objects/statement.hpp +58 -0
  64. package/node_modules/better-sqlite3/src/util/bind-map.cpp +73 -0
  65. package/node_modules/better-sqlite3/src/util/binder.cpp +193 -0
  66. package/node_modules/better-sqlite3/src/util/constants.cpp +172 -0
  67. package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +121 -0
  68. package/node_modules/better-sqlite3/src/util/custom-function.cpp +59 -0
  69. package/node_modules/better-sqlite3/src/util/custom-table.cpp +409 -0
  70. package/node_modules/better-sqlite3/src/util/data-converter.cpp +17 -0
  71. package/node_modules/better-sqlite3/src/util/data.cpp +194 -0
  72. package/node_modules/better-sqlite3/src/util/helpers.cpp +109 -0
  73. package/node_modules/better-sqlite3/src/util/macros.cpp +83 -0
  74. package/node_modules/better-sqlite3/src/util/query-macros.cpp +71 -0
  75. package/node_modules/better-sqlite3/src/util/row-builder.cpp +49 -0
  76. package/node_modules/bindings/LICENSE.md +22 -0
  77. package/node_modules/bindings/README.md +98 -0
  78. package/node_modules/bindings/bindings.js +221 -0
  79. package/node_modules/bindings/package.json +28 -0
  80. package/node_modules/bl/.travis.yml +17 -0
  81. package/node_modules/bl/BufferList.js +396 -0
  82. package/node_modules/bl/LICENSE.md +13 -0
  83. package/node_modules/bl/README.md +247 -0
  84. package/node_modules/bl/bl.js +84 -0
  85. package/node_modules/bl/package.json +37 -0
  86. package/node_modules/bl/test/convert.js +21 -0
  87. package/node_modules/bl/test/indexOf.js +492 -0
  88. package/node_modules/bl/test/isBufferList.js +32 -0
  89. package/node_modules/bl/test/test.js +869 -0
  90. package/node_modules/buffer/AUTHORS.md +70 -0
  91. package/node_modules/buffer/LICENSE +21 -0
  92. package/node_modules/buffer/README.md +410 -0
  93. package/node_modules/buffer/index.d.ts +186 -0
  94. package/node_modules/buffer/index.js +1817 -0
  95. package/node_modules/buffer/package.json +96 -0
  96. package/node_modules/decompress-response/index.d.ts +22 -0
  97. package/node_modules/decompress-response/index.js +58 -0
  98. package/node_modules/decompress-response/license +9 -0
  99. package/node_modules/decompress-response/node_modules/mimic-response/index.d.ts +17 -0
  100. package/node_modules/decompress-response/node_modules/mimic-response/index.js +77 -0
  101. package/node_modules/decompress-response/node_modules/mimic-response/license +9 -0
  102. package/node_modules/decompress-response/node_modules/mimic-response/package.json +42 -0
  103. package/node_modules/decompress-response/node_modules/mimic-response/readme.md +78 -0
  104. package/node_modules/decompress-response/package.json +56 -0
  105. package/node_modules/decompress-response/readme.md +48 -0
  106. package/node_modules/deep-extend/LICENSE +20 -0
  107. package/node_modules/deep-extend/README.md +91 -0
  108. package/node_modules/deep-extend/index.js +1 -0
  109. package/node_modules/deep-extend/lib/deep-extend.js +150 -0
  110. package/node_modules/deep-extend/package.json +62 -0
  111. package/node_modules/end-of-stream/LICENSE +21 -0
  112. package/node_modules/end-of-stream/README.md +54 -0
  113. package/node_modules/end-of-stream/index.js +96 -0
  114. package/node_modules/end-of-stream/package.json +37 -0
  115. package/node_modules/expand-template/.travis.yml +6 -0
  116. package/node_modules/expand-template/LICENSE +21 -0
  117. package/node_modules/expand-template/README.md +43 -0
  118. package/node_modules/expand-template/index.js +26 -0
  119. package/node_modules/expand-template/package.json +29 -0
  120. package/node_modules/expand-template/test.js +67 -0
  121. package/node_modules/file-uri-to-path/.npmignore +1 -0
  122. package/node_modules/file-uri-to-path/.travis.yml +30 -0
  123. package/node_modules/file-uri-to-path/History.md +21 -0
  124. package/node_modules/file-uri-to-path/LICENSE +20 -0
  125. package/node_modules/file-uri-to-path/README.md +74 -0
  126. package/node_modules/file-uri-to-path/index.d.ts +2 -0
  127. package/node_modules/file-uri-to-path/index.js +66 -0
  128. package/node_modules/file-uri-to-path/package.json +32 -0
  129. package/node_modules/file-uri-to-path/test/test.js +24 -0
  130. package/node_modules/file-uri-to-path/test/tests.json +13 -0
  131. package/node_modules/fs-constants/LICENSE +21 -0
  132. package/node_modules/fs-constants/README.md +26 -0
  133. package/node_modules/fs-constants/browser.js +1 -0
  134. package/node_modules/fs-constants/index.js +1 -0
  135. package/node_modules/fs-constants/package.json +19 -0
  136. package/node_modules/github-from-package/.travis.yml +4 -0
  137. package/node_modules/github-from-package/LICENSE +18 -0
  138. package/node_modules/github-from-package/example/package.json +8 -0
  139. package/node_modules/github-from-package/example/url.js +3 -0
  140. package/node_modules/github-from-package/index.js +17 -0
  141. package/node_modules/github-from-package/package.json +30 -0
  142. package/node_modules/github-from-package/readme.markdown +53 -0
  143. package/node_modules/github-from-package/test/a.json +8 -0
  144. package/node_modules/github-from-package/test/b.json +5 -0
  145. package/node_modules/github-from-package/test/c.json +5 -0
  146. package/node_modules/github-from-package/test/d.json +7 -0
  147. package/node_modules/github-from-package/test/e.json +5 -0
  148. package/node_modules/github-from-package/test/url.js +19 -0
  149. package/node_modules/ieee754/LICENSE +11 -0
  150. package/node_modules/ieee754/README.md +51 -0
  151. package/node_modules/ieee754/index.d.ts +10 -0
  152. package/node_modules/ieee754/index.js +85 -0
  153. package/node_modules/ieee754/package.json +52 -0
  154. package/node_modules/ini/LICENSE +15 -0
  155. package/node_modules/ini/README.md +102 -0
  156. package/node_modules/ini/ini.js +206 -0
  157. package/node_modules/ini/package.json +33 -0
  158. package/node_modules/minimist/.eslintrc +29 -0
  159. package/node_modules/minimist/.github/FUNDING.yml +12 -0
  160. package/node_modules/minimist/.nycrc +14 -0
  161. package/node_modules/minimist/CHANGELOG.md +298 -0
  162. package/node_modules/minimist/LICENSE +18 -0
  163. package/node_modules/minimist/README.md +121 -0
  164. package/node_modules/minimist/example/parse.js +4 -0
  165. package/node_modules/minimist/index.js +263 -0
  166. package/node_modules/minimist/package.json +75 -0
  167. package/node_modules/minimist/test/all_bool.js +34 -0
  168. package/node_modules/minimist/test/bool.js +177 -0
  169. package/node_modules/minimist/test/dash.js +43 -0
  170. package/node_modules/minimist/test/default_bool.js +37 -0
  171. package/node_modules/minimist/test/dotted.js +24 -0
  172. package/node_modules/minimist/test/kv_short.js +32 -0
  173. package/node_modules/minimist/test/long.js +33 -0
  174. package/node_modules/minimist/test/num.js +38 -0
  175. package/node_modules/minimist/test/parse.js +209 -0
  176. package/node_modules/minimist/test/parse_modified.js +11 -0
  177. package/node_modules/minimist/test/proto.js +64 -0
  178. package/node_modules/minimist/test/short.js +69 -0
  179. package/node_modules/minimist/test/stop_early.js +17 -0
  180. package/node_modules/minimist/test/unknown.js +104 -0
  181. package/node_modules/minimist/test/whitespace.js +10 -0
  182. package/node_modules/mkdirp-classic/LICENSE +21 -0
  183. package/node_modules/mkdirp-classic/README.md +18 -0
  184. package/node_modules/mkdirp-classic/index.js +98 -0
  185. package/node_modules/mkdirp-classic/package.json +18 -0
  186. package/node_modules/moe-training/DEPLOY_CENTRAL_COMMAND.md +413 -0
  187. package/node_modules/moe-training/client/consent.js +96 -0
  188. package/node_modules/moe-training/client/envelope-builder.js +56 -0
  189. package/node_modules/moe-training/client/index.js +10 -0
  190. package/node_modules/moe-training/client/parsers/claude-code.js +108 -0
  191. package/node_modules/moe-training/client/parsers/codex.js +80 -0
  192. package/node_modules/moe-training/client/parsers/gemini.js +80 -0
  193. package/node_modules/moe-training/client/parsers/grok.js +16 -0
  194. package/node_modules/moe-training/client/parsers/index.js +20 -0
  195. package/node_modules/moe-training/client/scrubber.js +128 -0
  196. package/node_modules/moe-training/client/session-attestation.js +115 -0
  197. package/node_modules/moe-training/client/step-classifier.js +68 -0
  198. package/node_modules/moe-training/client/trajectory-capture.js +307 -0
  199. package/node_modules/moe-training/client/transmission-queue.js +104 -0
  200. package/node_modules/moe-training/package.json +21 -0
  201. package/node_modules/moe-training/server/enrichment.js +24 -0
  202. package/node_modules/moe-training/server/index.js +119 -0
  203. package/node_modules/moe-training/server/ledger.js +110 -0
  204. package/node_modules/moe-training/server/routes/ingest.js +96 -0
  205. package/node_modules/moe-training/server/routes/sessions.js +43 -0
  206. package/node_modules/moe-training/server/routes/stats.js +31 -0
  207. package/node_modules/moe-training/server/scoring.js +63 -0
  208. package/node_modules/moe-training/server/session-registry.js +156 -0
  209. package/node_modules/moe-training/server/stats.js +129 -0
  210. package/node_modules/moe-training/server/stitcher.js +69 -0
  211. package/node_modules/moe-training/server/storage.js +147 -0
  212. package/node_modules/moe-training/server/verifier.js +102 -0
  213. package/node_modules/moe-training/shared/constants.js +30 -0
  214. package/node_modules/moe-training/shared/crypto.js +45 -0
  215. package/node_modules/moe-training/shared/envelope-schema.js +220 -0
  216. package/node_modules/moe-training/test/client/consent.test.js +121 -0
  217. package/node_modules/moe-training/test/client/envelope-builder.test.js +107 -0
  218. package/node_modules/moe-training/test/client/parsers/claude-code.test.js +119 -0
  219. package/node_modules/moe-training/test/client/parsers/codex.test.js +83 -0
  220. package/node_modules/moe-training/test/client/parsers/gemini.test.js +99 -0
  221. package/node_modules/moe-training/test/client/scrubber.test.js +143 -0
  222. package/node_modules/moe-training/test/client/session-attestation-security.test.js +95 -0
  223. package/node_modules/moe-training/test/client/step-classifier.test.js +135 -0
  224. package/node_modules/moe-training/test/client/transmission-queue.test.js +33 -0
  225. package/node_modules/moe-training/test/integration/handshake.test.js +260 -0
  226. package/node_modules/moe-training/test/server/ingest-security.test.js +166 -0
  227. package/node_modules/moe-training/test/server/ledger.test.js +131 -0
  228. package/node_modules/moe-training/test/server/scoring.test.js +242 -0
  229. package/node_modules/moe-training/test/server/session-registry.test.js +125 -0
  230. package/node_modules/moe-training/test/server/stitcher.test.js +157 -0
  231. package/node_modules/moe-training/test/server/verifier.test.js +232 -0
  232. package/node_modules/moe-training/test/shared/crypto.test.js +87 -0
  233. package/node_modules/moe-training/test/shared/envelope-schema.test.js +351 -0
  234. package/node_modules/napi-build-utils/.github/workflows/run-npm-tests.yml +31 -0
  235. package/node_modules/napi-build-utils/LICENSE +21 -0
  236. package/node_modules/napi-build-utils/README.md +52 -0
  237. package/node_modules/napi-build-utils/index.js +214 -0
  238. package/node_modules/napi-build-utils/index.md +0 -0
  239. package/node_modules/napi-build-utils/package.json +42 -0
  240. package/node_modules/prebuild-install/CHANGELOG.md +131 -0
  241. package/node_modules/prebuild-install/CONTRIBUTING.md +6 -0
  242. package/node_modules/prebuild-install/LICENSE +21 -0
  243. package/node_modules/prebuild-install/README.md +163 -0
  244. package/node_modules/prebuild-install/asset.js +44 -0
  245. package/node_modules/prebuild-install/bin.js +78 -0
  246. package/node_modules/prebuild-install/download.js +142 -0
  247. package/node_modules/prebuild-install/error.js +14 -0
  248. package/node_modules/prebuild-install/help.txt +16 -0
  249. package/node_modules/prebuild-install/index.js +1 -0
  250. package/node_modules/prebuild-install/log.js +33 -0
  251. package/node_modules/prebuild-install/node_modules/node-abi/LICENSE +21 -0
  252. package/node_modules/prebuild-install/node_modules/node-abi/README.md +54 -0
  253. package/node_modules/prebuild-install/node_modules/node-abi/abi_registry.json +439 -0
  254. package/node_modules/prebuild-install/node_modules/node-abi/index.js +179 -0
  255. package/node_modules/prebuild-install/node_modules/node-abi/package.json +45 -0
  256. package/node_modules/prebuild-install/node_modules/semver/LICENSE +15 -0
  257. package/node_modules/prebuild-install/node_modules/semver/README.md +665 -0
  258. package/node_modules/prebuild-install/node_modules/semver/bin/semver.js +191 -0
  259. package/node_modules/prebuild-install/node_modules/semver/classes/comparator.js +143 -0
  260. package/node_modules/prebuild-install/node_modules/semver/classes/index.js +7 -0
  261. package/node_modules/prebuild-install/node_modules/semver/classes/range.js +557 -0
  262. package/node_modules/prebuild-install/node_modules/semver/classes/semver.js +333 -0
  263. package/node_modules/prebuild-install/node_modules/semver/functions/clean.js +8 -0
  264. package/node_modules/prebuild-install/node_modules/semver/functions/cmp.js +54 -0
  265. package/node_modules/prebuild-install/node_modules/semver/functions/coerce.js +62 -0
  266. package/node_modules/prebuild-install/node_modules/semver/functions/compare-build.js +9 -0
  267. package/node_modules/prebuild-install/node_modules/semver/functions/compare-loose.js +5 -0
  268. package/node_modules/prebuild-install/node_modules/semver/functions/compare.js +7 -0
  269. package/node_modules/prebuild-install/node_modules/semver/functions/diff.js +60 -0
  270. package/node_modules/prebuild-install/node_modules/semver/functions/eq.js +5 -0
  271. package/node_modules/prebuild-install/node_modules/semver/functions/gt.js +5 -0
  272. package/node_modules/prebuild-install/node_modules/semver/functions/gte.js +5 -0
  273. package/node_modules/prebuild-install/node_modules/semver/functions/inc.js +21 -0
  274. package/node_modules/prebuild-install/node_modules/semver/functions/lt.js +5 -0
  275. package/node_modules/prebuild-install/node_modules/semver/functions/lte.js +5 -0
  276. package/node_modules/prebuild-install/node_modules/semver/functions/major.js +5 -0
  277. package/node_modules/prebuild-install/node_modules/semver/functions/minor.js +5 -0
  278. package/node_modules/prebuild-install/node_modules/semver/functions/neq.js +5 -0
  279. package/node_modules/prebuild-install/node_modules/semver/functions/parse.js +18 -0
  280. package/node_modules/prebuild-install/node_modules/semver/functions/patch.js +5 -0
  281. package/node_modules/prebuild-install/node_modules/semver/functions/prerelease.js +8 -0
  282. package/node_modules/prebuild-install/node_modules/semver/functions/rcompare.js +5 -0
  283. package/node_modules/prebuild-install/node_modules/semver/functions/rsort.js +5 -0
  284. package/node_modules/prebuild-install/node_modules/semver/functions/satisfies.js +12 -0
  285. package/node_modules/prebuild-install/node_modules/semver/functions/sort.js +5 -0
  286. package/node_modules/prebuild-install/node_modules/semver/functions/valid.js +8 -0
  287. package/node_modules/prebuild-install/node_modules/semver/index.js +91 -0
  288. package/node_modules/prebuild-install/node_modules/semver/internal/constants.js +37 -0
  289. package/node_modules/prebuild-install/node_modules/semver/internal/debug.js +11 -0
  290. package/node_modules/prebuild-install/node_modules/semver/internal/identifiers.js +29 -0
  291. package/node_modules/prebuild-install/node_modules/semver/internal/lrucache.js +42 -0
  292. package/node_modules/prebuild-install/node_modules/semver/internal/parse-options.js +17 -0
  293. package/node_modules/prebuild-install/node_modules/semver/internal/re.js +223 -0
  294. package/node_modules/prebuild-install/node_modules/semver/package.json +78 -0
  295. package/node_modules/prebuild-install/node_modules/semver/preload.js +4 -0
  296. package/node_modules/prebuild-install/node_modules/semver/range.bnf +16 -0
  297. package/node_modules/prebuild-install/node_modules/semver/ranges/gtr.js +6 -0
  298. package/node_modules/prebuild-install/node_modules/semver/ranges/intersects.js +9 -0
  299. package/node_modules/prebuild-install/node_modules/semver/ranges/ltr.js +6 -0
  300. package/node_modules/prebuild-install/node_modules/semver/ranges/max-satisfying.js +27 -0
  301. package/node_modules/prebuild-install/node_modules/semver/ranges/min-satisfying.js +26 -0
  302. package/node_modules/prebuild-install/node_modules/semver/ranges/min-version.js +63 -0
  303. package/node_modules/prebuild-install/node_modules/semver/ranges/outside.js +82 -0
  304. package/node_modules/prebuild-install/node_modules/semver/ranges/simplify.js +49 -0
  305. package/node_modules/prebuild-install/node_modules/semver/ranges/subset.js +249 -0
  306. package/node_modules/prebuild-install/node_modules/semver/ranges/to-comparators.js +10 -0
  307. package/node_modules/prebuild-install/node_modules/semver/ranges/valid.js +13 -0
  308. package/node_modules/prebuild-install/package.json +67 -0
  309. package/node_modules/prebuild-install/proxy.js +35 -0
  310. package/node_modules/prebuild-install/rc.js +64 -0
  311. package/node_modules/prebuild-install/util.js +143 -0
  312. package/node_modules/pump/.github/FUNDING.yml +2 -0
  313. package/node_modules/pump/.travis.yml +5 -0
  314. package/node_modules/pump/LICENSE +21 -0
  315. package/node_modules/pump/README.md +74 -0
  316. package/node_modules/pump/SECURITY.md +5 -0
  317. package/node_modules/pump/empty.js +1 -0
  318. package/node_modules/pump/index.js +86 -0
  319. package/node_modules/pump/package.json +30 -0
  320. package/node_modules/pump/test-browser.js +66 -0
  321. package/node_modules/pump/test-node.js +53 -0
  322. package/node_modules/rc/LICENSE.APACHE2 +15 -0
  323. package/node_modules/rc/LICENSE.BSD +26 -0
  324. package/node_modules/rc/LICENSE.MIT +24 -0
  325. package/node_modules/rc/README.md +227 -0
  326. package/node_modules/rc/browser.js +7 -0
  327. package/node_modules/rc/cli.js +4 -0
  328. package/node_modules/rc/index.js +53 -0
  329. package/node_modules/rc/lib/utils.js +104 -0
  330. package/node_modules/rc/package.json +29 -0
  331. package/node_modules/rc/test/ini.js +16 -0
  332. package/node_modules/rc/test/nested-env-vars.js +50 -0
  333. package/node_modules/rc/test/test.js +59 -0
  334. package/node_modules/readable-stream/CONTRIBUTING.md +38 -0
  335. package/node_modules/readable-stream/GOVERNANCE.md +136 -0
  336. package/node_modules/readable-stream/LICENSE +47 -0
  337. package/node_modules/readable-stream/README.md +106 -0
  338. package/node_modules/readable-stream/errors-browser.js +127 -0
  339. package/node_modules/readable-stream/errors.js +116 -0
  340. package/node_modules/readable-stream/experimentalWarning.js +17 -0
  341. package/node_modules/readable-stream/lib/_stream_duplex.js +126 -0
  342. package/node_modules/readable-stream/lib/_stream_passthrough.js +37 -0
  343. package/node_modules/readable-stream/lib/_stream_readable.js +1027 -0
  344. package/node_modules/readable-stream/lib/_stream_transform.js +190 -0
  345. package/node_modules/readable-stream/lib/_stream_writable.js +641 -0
  346. package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +180 -0
  347. package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +183 -0
  348. package/node_modules/readable-stream/lib/internal/streams/destroy.js +96 -0
  349. package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +86 -0
  350. package/node_modules/readable-stream/lib/internal/streams/from-browser.js +3 -0
  351. package/node_modules/readable-stream/lib/internal/streams/from.js +52 -0
  352. package/node_modules/readable-stream/lib/internal/streams/pipeline.js +86 -0
  353. package/node_modules/readable-stream/lib/internal/streams/state.js +22 -0
  354. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  355. package/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  356. package/node_modules/readable-stream/package.json +68 -0
  357. package/node_modules/readable-stream/readable-browser.js +9 -0
  358. package/node_modules/readable-stream/readable.js +16 -0
  359. package/node_modules/simple-concat/.travis.yml +3 -0
  360. package/node_modules/simple-concat/LICENSE +20 -0
  361. package/node_modules/simple-concat/README.md +44 -0
  362. package/node_modules/simple-concat/index.js +15 -0
  363. package/node_modules/simple-concat/package.json +47 -0
  364. package/node_modules/simple-concat/test/basic.js +41 -0
  365. package/node_modules/simple-get/.github/dependabot.yml +15 -0
  366. package/node_modules/simple-get/.github/workflows/ci.yml +23 -0
  367. package/node_modules/simple-get/LICENSE +20 -0
  368. package/node_modules/simple-get/README.md +333 -0
  369. package/node_modules/simple-get/index.js +108 -0
  370. package/node_modules/simple-get/package.json +67 -0
  371. package/node_modules/string_decoder/LICENSE +48 -0
  372. package/node_modules/string_decoder/README.md +47 -0
  373. package/node_modules/string_decoder/lib/string_decoder.js +296 -0
  374. package/node_modules/string_decoder/package.json +34 -0
  375. package/node_modules/strip-json-comments/index.js +70 -0
  376. package/node_modules/strip-json-comments/license +21 -0
  377. package/node_modules/strip-json-comments/package.json +42 -0
  378. package/node_modules/strip-json-comments/readme.md +64 -0
  379. package/node_modules/tar-fs/.travis.yml +6 -0
  380. package/node_modules/tar-fs/LICENSE +21 -0
  381. package/node_modules/tar-fs/README.md +165 -0
  382. package/node_modules/tar-fs/index.js +363 -0
  383. package/node_modules/tar-fs/node_modules/chownr/LICENSE +15 -0
  384. package/node_modules/tar-fs/node_modules/chownr/README.md +3 -0
  385. package/node_modules/tar-fs/node_modules/chownr/chownr.js +167 -0
  386. package/node_modules/tar-fs/node_modules/chownr/package.json +29 -0
  387. package/node_modules/tar-fs/package.json +41 -0
  388. package/node_modules/tar-fs/test/fixtures/a/hello.txt +1 -0
  389. package/node_modules/tar-fs/test/fixtures/b/a/test.txt +1 -0
  390. package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
  391. package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
  392. package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
  393. package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
  394. package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
  395. package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
  396. package/node_modules/tar-fs/test/fixtures/e/file +0 -0
  397. package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
  398. package/node_modules/tar-fs/test/index.js +346 -0
  399. package/node_modules/tar-stream/LICENSE +21 -0
  400. package/node_modules/tar-stream/README.md +168 -0
  401. package/node_modules/tar-stream/extract.js +257 -0
  402. package/node_modules/tar-stream/headers.js +295 -0
  403. package/node_modules/tar-stream/index.js +2 -0
  404. package/node_modules/tar-stream/pack.js +255 -0
  405. package/node_modules/tar-stream/package.json +58 -0
  406. package/node_modules/tar-stream/sandbox.js +11 -0
  407. package/node_modules/tunnel-agent/LICENSE +55 -0
  408. package/node_modules/tunnel-agent/README.md +4 -0
  409. package/node_modules/tunnel-agent/index.js +244 -0
  410. package/node_modules/tunnel-agent/package.json +22 -0
  411. package/node_modules/util-deprecate/History.md +16 -0
  412. package/node_modules/util-deprecate/LICENSE +24 -0
  413. package/node_modules/util-deprecate/README.md +53 -0
  414. package/node_modules/util-deprecate/browser.js +67 -0
  415. package/node_modules/util-deprecate/node.js +6 -0
  416. package/node_modules/util-deprecate/package.json +27 -0
  417. package/node_modules/uuid/CHANGELOG.md +274 -0
  418. package/node_modules/uuid/CONTRIBUTING.md +18 -0
  419. package/node_modules/uuid/LICENSE.md +9 -0
  420. package/node_modules/uuid/README.md +466 -0
  421. package/node_modules/uuid/dist/bin/uuid +2 -0
  422. package/node_modules/uuid/dist/commonjs-browser/index.js +79 -0
  423. package/node_modules/uuid/dist/commonjs-browser/md5.js +223 -0
  424. package/node_modules/uuid/dist/commonjs-browser/native.js +11 -0
  425. package/node_modules/uuid/dist/commonjs-browser/nil.js +8 -0
  426. package/node_modules/uuid/dist/commonjs-browser/parse.js +45 -0
  427. package/node_modules/uuid/dist/commonjs-browser/regex.js +8 -0
  428. package/node_modules/uuid/dist/commonjs-browser/rng.js +25 -0
  429. package/node_modules/uuid/dist/commonjs-browser/sha1.js +104 -0
  430. package/node_modules/uuid/dist/commonjs-browser/stringify.js +44 -0
  431. package/node_modules/uuid/dist/commonjs-browser/v1.js +107 -0
  432. package/node_modules/uuid/dist/commonjs-browser/v3.js +16 -0
  433. package/node_modules/uuid/dist/commonjs-browser/v35.js +80 -0
  434. package/node_modules/uuid/dist/commonjs-browser/v4.js +43 -0
  435. package/node_modules/uuid/dist/commonjs-browser/v5.js +16 -0
  436. package/node_modules/uuid/dist/commonjs-browser/validate.js +17 -0
  437. package/node_modules/uuid/dist/commonjs-browser/version.js +21 -0
  438. package/node_modules/uuid/dist/esm-browser/index.js +9 -0
  439. package/node_modules/uuid/dist/esm-browser/md5.js +215 -0
  440. package/node_modules/uuid/dist/esm-browser/native.js +4 -0
  441. package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
  442. package/node_modules/uuid/dist/esm-browser/parse.js +35 -0
  443. package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
  444. package/node_modules/uuid/dist/esm-browser/rng.js +18 -0
  445. package/node_modules/uuid/dist/esm-browser/sha1.js +96 -0
  446. package/node_modules/uuid/dist/esm-browser/stringify.js +33 -0
  447. package/node_modules/uuid/dist/esm-browser/v1.js +95 -0
  448. package/node_modules/uuid/dist/esm-browser/v3.js +4 -0
  449. package/node_modules/uuid/dist/esm-browser/v35.js +66 -0
  450. package/node_modules/uuid/dist/esm-browser/v4.js +29 -0
  451. package/node_modules/uuid/dist/esm-browser/v5.js +4 -0
  452. package/node_modules/uuid/dist/esm-browser/validate.js +7 -0
  453. package/node_modules/uuid/dist/esm-browser/version.js +11 -0
  454. package/node_modules/uuid/dist/esm-node/index.js +9 -0
  455. package/node_modules/uuid/dist/esm-node/md5.js +13 -0
  456. package/node_modules/uuid/dist/esm-node/native.js +4 -0
  457. package/node_modules/uuid/dist/esm-node/nil.js +1 -0
  458. package/node_modules/uuid/dist/esm-node/parse.js +35 -0
  459. package/node_modules/uuid/dist/esm-node/regex.js +1 -0
  460. package/node_modules/uuid/dist/esm-node/rng.js +12 -0
  461. package/node_modules/uuid/dist/esm-node/sha1.js +13 -0
  462. package/node_modules/uuid/dist/esm-node/stringify.js +33 -0
  463. package/node_modules/uuid/dist/esm-node/v1.js +95 -0
  464. package/node_modules/uuid/dist/esm-node/v3.js +4 -0
  465. package/node_modules/uuid/dist/esm-node/v35.js +66 -0
  466. package/node_modules/uuid/dist/esm-node/v4.js +29 -0
  467. package/node_modules/uuid/dist/esm-node/v5.js +4 -0
  468. package/node_modules/uuid/dist/esm-node/validate.js +7 -0
  469. package/node_modules/uuid/dist/esm-node/version.js +11 -0
  470. package/node_modules/uuid/dist/index.js +79 -0
  471. package/node_modules/uuid/dist/md5-browser.js +223 -0
  472. package/node_modules/uuid/dist/md5.js +23 -0
  473. package/node_modules/uuid/dist/native-browser.js +11 -0
  474. package/node_modules/uuid/dist/native.js +15 -0
  475. package/node_modules/uuid/dist/nil.js +8 -0
  476. package/node_modules/uuid/dist/parse.js +45 -0
  477. package/node_modules/uuid/dist/regex.js +8 -0
  478. package/node_modules/uuid/dist/rng-browser.js +25 -0
  479. package/node_modules/uuid/dist/rng.js +24 -0
  480. package/node_modules/uuid/dist/sha1-browser.js +104 -0
  481. package/node_modules/uuid/dist/sha1.js +23 -0
  482. package/node_modules/uuid/dist/stringify.js +44 -0
  483. package/node_modules/uuid/dist/uuid-bin.js +85 -0
  484. package/node_modules/uuid/dist/v1.js +107 -0
  485. package/node_modules/uuid/dist/v3.js +16 -0
  486. package/node_modules/uuid/dist/v35.js +80 -0
  487. package/node_modules/uuid/dist/v4.js +43 -0
  488. package/node_modules/uuid/dist/v5.js +16 -0
  489. package/node_modules/uuid/dist/validate.js +17 -0
  490. package/node_modules/uuid/dist/version.js +21 -0
  491. package/node_modules/uuid/package.json +135 -0
  492. package/node_modules/uuid/wrapper.mjs +10 -0
  493. package/package.json +5 -3
  494. package/packages/cli/package.json +1 -1
  495. package/packages/daemon/package.json +1 -1
  496. package/packages/daemon/src/api.js +39 -23
  497. package/packages/daemon/src/introducer.js +21 -6
  498. package/packages/daemon/src/process.js +20 -2
  499. package/packages/daemon/src/providers/gemini.js +27 -28
  500. package/packages/gui/dist/assets/{index-VB4_k5Pz.js → index-BgTyFy4f.js} +331 -331
  501. package/packages/gui/dist/assets/{index-Bo6AeNmM.css → index-QADLyUj5.css} +1 -1
  502. package/packages/gui/dist/index.html +2 -2
  503. package/packages/gui/package.json +1 -1
  504. package/packages/gui/src/components/agents/agent-file-tree.jsx +68 -16
  505. package/packages/gui/src/components/agents/agent-panel.jsx +2 -0
  506. package/packages/gui/src/components/agents/code-review.jsx +9 -1
  507. package/packages/gui/src/components/agents/workspace-mode.jsx +2 -2
  508. package/packages/gui/src/components/editor/code-editor.jsx +1 -1
  509. package/packages/gui/src/stores/groove.js +40 -26
  510. package/packages/gui/src/views/agents.jsx +14 -65
  511. package/workspace.png +0 -0
@@ -0,0 +1,165 @@
1
+ # tar-fs
2
+
3
+ filesystem bindings for [tar-stream](https://github.com/mafintosh/tar-stream).
4
+
5
+ ```
6
+ npm install tar-fs
7
+ ```
8
+
9
+ [![build status](https://secure.travis-ci.org/mafintosh/tar-fs.png)](http://travis-ci.org/mafintosh/tar-fs)
10
+
11
+ ## Usage
12
+
13
+ tar-fs allows you to pack directories into tarballs and extract tarballs into directories.
14
+
15
+ It doesn't gunzip for you, so if you want to extract a `.tar.gz` with this you'll need to use something like [gunzip-maybe](https://github.com/mafintosh/gunzip-maybe) in addition to this.
16
+
17
+ ``` js
18
+ var tar = require('tar-fs')
19
+ var fs = require('fs')
20
+
21
+ // packing a directory
22
+ tar.pack('./my-directory').pipe(fs.createWriteStream('my-tarball.tar'))
23
+
24
+ // extracting a directory
25
+ fs.createReadStream('my-other-tarball.tar').pipe(tar.extract('./my-other-directory'))
26
+ ```
27
+
28
+ To ignore various files when packing or extracting add a ignore function to the options. `ignore`
29
+ is also an alias for `filter`. Additionally you get `header` if you use ignore while extracting.
30
+ That way you could also filter by metadata.
31
+
32
+ ``` js
33
+ var pack = tar.pack('./my-directory', {
34
+ ignore: function(name) {
35
+ return path.extname(name) === '.bin' // ignore .bin files when packing
36
+ }
37
+ })
38
+
39
+ var extract = tar.extract('./my-other-directory', {
40
+ ignore: function(name) {
41
+ return path.extname(name) === '.bin' // ignore .bin files inside the tarball when extracing
42
+ }
43
+ })
44
+
45
+ var extractFilesDirs = tar.extract('./my-other-other-directory', {
46
+ ignore: function(_, header) {
47
+ // pass files & directories, ignore e.g. symlinks
48
+ return header.type !== 'file' && header.type !== 'directory'
49
+ }
50
+ })
51
+ ```
52
+
53
+ You can also specify which entries to pack using the `entries` option
54
+
55
+ ```js
56
+ var pack = tar.pack('./my-directory', {
57
+ entries: ['file1', 'subdir/file2'] // only the specific entries will be packed
58
+ })
59
+ ```
60
+
61
+ If you want to modify the headers when packing/extracting add a map function to the options
62
+
63
+ ``` js
64
+ var pack = tar.pack('./my-directory', {
65
+ map: function(header) {
66
+ header.name = 'prefixed/'+header.name
67
+ return header
68
+ }
69
+ })
70
+
71
+ var extract = tar.extract('./my-directory', {
72
+ map: function(header) {
73
+ header.name = 'another-prefix/'+header.name
74
+ return header
75
+ }
76
+ })
77
+ ```
78
+
79
+ Similarly you can use `mapStream` incase you wanna modify the input/output file streams
80
+
81
+ ``` js
82
+ var pack = tar.pack('./my-directory', {
83
+ mapStream: function(fileStream, header) {
84
+ // NOTE: the returned stream HAS to have the same length as the input stream.
85
+ // If not make sure to update the size in the header passed in here.
86
+ if (path.extname(header.name) === '.js') {
87
+ return fileStream.pipe(someTransform)
88
+ }
89
+ return fileStream;
90
+ }
91
+ })
92
+
93
+ var extract = tar.extract('./my-directory', {
94
+ mapStream: function(fileStream, header) {
95
+ if (path.extname(header.name) === '.js') {
96
+ return fileStream.pipe(someTransform)
97
+ }
98
+ return fileStream;
99
+ }
100
+ })
101
+ ```
102
+
103
+ Set `options.fmode` and `options.dmode` to ensure that files/directories extracted have the corresponding modes
104
+
105
+ ``` js
106
+ var extract = tar.extract('./my-directory', {
107
+ dmode: parseInt(555, 8), // all dirs should be readable
108
+ fmode: parseInt(444, 8) // all files should be readable
109
+ })
110
+ ```
111
+
112
+ It can be useful to use `dmode` and `fmode` if you are packing/unpacking tarballs between *nix/windows to ensure that all files/directories unpacked are readable.
113
+
114
+ Alternatively you can set `options.readable` and/or `options.writable` to set the dmode and fmode to readable/writable.
115
+
116
+ ``` js
117
+ var extract = tar.extract('./my-directory', {
118
+ readable: true, // all dirs and files should be readable
119
+ writable: true, // all dirs and files should be writable
120
+ })
121
+ ```
122
+
123
+ Set `options.strict` to `false` if you want to ignore errors due to unsupported entry types (like device files)
124
+
125
+ To dereference symlinks (pack the contents of the symlink instead of the link itself) set `options.dereference` to `true`.
126
+
127
+ ## Copy a directory
128
+
129
+ Copying a directory with permissions and mtime intact is as simple as
130
+
131
+ ``` js
132
+ tar.pack('source-directory').pipe(tar.extract('dest-directory'))
133
+ ```
134
+
135
+ ## Interaction with [`tar-stream`](https://github.com/mafintosh/tar-stream)
136
+
137
+ Use `finalize: false` and the `finish` hook to
138
+ leave the pack stream open for further entries (see
139
+ [`tar-stream#pack`](https://github.com/mafintosh/tar-stream#packing)),
140
+ and use `pack` to pass an existing pack stream.
141
+
142
+ ``` js
143
+ var mypack = tar.pack('./my-directory', {
144
+ finalize: false,
145
+ finish: function(sameAsMypack) {
146
+ mypack.entry({name: 'generated-file.txt'}, "hello")
147
+ tar.pack('./other-directory', {
148
+ pack: sameAsMypack
149
+ })
150
+ }
151
+ })
152
+ ```
153
+
154
+
155
+ ## Performance
156
+
157
+ Packing and extracting a 6.1 GB with 2496 directories and 2398 files yields the following results on my Macbook Air.
158
+ [See the benchmark here](https://gist.github.com/mafintosh/8102201)
159
+
160
+ * tar-fs: 34.261 seconds
161
+ * [node-tar](https://github.com/isaacs/node-tar): 366.123 seconds (or 10x slower)
162
+
163
+ ## License
164
+
165
+ MIT
@@ -0,0 +1,363 @@
1
+ var chownr = require('chownr')
2
+ var tar = require('tar-stream')
3
+ var pump = require('pump')
4
+ var mkdirp = require('mkdirp-classic')
5
+ var fs = require('fs')
6
+ var path = require('path')
7
+ var os = require('os')
8
+
9
+ var win32 = os.platform() === 'win32'
10
+
11
+ var noop = function () {}
12
+
13
+ var echo = function (name) {
14
+ return name
15
+ }
16
+
17
+ var normalize = !win32 ? echo : function (name) {
18
+ return name.replace(/\\/g, '/').replace(/[:?<>|]/g, '_')
19
+ }
20
+
21
+ var statAll = function (fs, stat, cwd, ignore, entries, sort) {
22
+ var queue = entries || ['.']
23
+
24
+ return function loop (callback) {
25
+ if (!queue.length) return callback()
26
+ var next = queue.shift()
27
+ var nextAbs = path.join(cwd, next)
28
+
29
+ stat.call(fs, nextAbs, function (err, stat) {
30
+ if (err) return callback(err)
31
+
32
+ if (!stat.isDirectory()) return callback(null, next, stat)
33
+
34
+ fs.readdir(nextAbs, function (err, files) {
35
+ if (err) return callback(err)
36
+
37
+ if (sort) files.sort()
38
+ for (var i = 0; i < files.length; i++) {
39
+ if (!ignore(path.join(cwd, next, files[i]))) queue.push(path.join(next, files[i]))
40
+ }
41
+
42
+ callback(null, next, stat)
43
+ })
44
+ })
45
+ }
46
+ }
47
+
48
+ var strip = function (map, level) {
49
+ return function (header) {
50
+ header.name = header.name.split('/').slice(level).join('/')
51
+
52
+ var linkname = header.linkname
53
+ if (linkname && (header.type === 'link' || path.isAbsolute(linkname))) {
54
+ header.linkname = linkname.split('/').slice(level).join('/')
55
+ }
56
+
57
+ return map(header)
58
+ }
59
+ }
60
+
61
+ exports.pack = function (cwd, opts) {
62
+ if (!cwd) cwd = '.'
63
+ if (!opts) opts = {}
64
+
65
+ var xfs = opts.fs || fs
66
+ var ignore = opts.ignore || opts.filter || noop
67
+ var map = opts.map || noop
68
+ var mapStream = opts.mapStream || echo
69
+ var statNext = statAll(xfs, opts.dereference ? xfs.stat : xfs.lstat, cwd, ignore, opts.entries, opts.sort)
70
+ var strict = opts.strict !== false
71
+ var umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
72
+ var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
73
+ var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
74
+ var pack = opts.pack || tar.pack()
75
+ var finish = opts.finish || noop
76
+
77
+ if (opts.strip) map = strip(map, opts.strip)
78
+
79
+ if (opts.readable) {
80
+ dmode |= parseInt(555, 8)
81
+ fmode |= parseInt(444, 8)
82
+ }
83
+ if (opts.writable) {
84
+ dmode |= parseInt(333, 8)
85
+ fmode |= parseInt(222, 8)
86
+ }
87
+
88
+ var onsymlink = function (filename, header) {
89
+ xfs.readlink(path.join(cwd, filename), function (err, linkname) {
90
+ if (err) return pack.destroy(err)
91
+ header.linkname = normalize(linkname)
92
+ pack.entry(header, onnextentry)
93
+ })
94
+ }
95
+
96
+ var onstat = function (err, filename, stat) {
97
+ if (err) return pack.destroy(err)
98
+ if (!filename) {
99
+ if (opts.finalize !== false) pack.finalize()
100
+ return finish(pack)
101
+ }
102
+
103
+ if (stat.isSocket()) return onnextentry() // tar does not support sockets...
104
+
105
+ var header = {
106
+ name: normalize(filename),
107
+ mode: (stat.mode | (stat.isDirectory() ? dmode : fmode)) & umask,
108
+ mtime: stat.mtime,
109
+ size: stat.size,
110
+ type: 'file',
111
+ uid: stat.uid,
112
+ gid: stat.gid
113
+ }
114
+
115
+ if (stat.isDirectory()) {
116
+ header.size = 0
117
+ header.type = 'directory'
118
+ header = map(header) || header
119
+ return pack.entry(header, onnextentry)
120
+ }
121
+
122
+ if (stat.isSymbolicLink()) {
123
+ header.size = 0
124
+ header.type = 'symlink'
125
+ header = map(header) || header
126
+ return onsymlink(filename, header)
127
+ }
128
+
129
+ // TODO: add fifo etc...
130
+
131
+ header = map(header) || header
132
+
133
+ if (!stat.isFile()) {
134
+ if (strict) return pack.destroy(new Error('unsupported type for ' + filename))
135
+ return onnextentry()
136
+ }
137
+
138
+ var entry = pack.entry(header, onnextentry)
139
+ if (!entry) return
140
+
141
+ var rs = mapStream(xfs.createReadStream(path.join(cwd, filename), { start: 0, end: header.size > 0 ? header.size - 1 : header.size }), header)
142
+
143
+ rs.on('error', function (err) { // always forward errors on destroy
144
+ entry.destroy(err)
145
+ })
146
+
147
+ pump(rs, entry)
148
+ }
149
+
150
+ var onnextentry = function (err) {
151
+ if (err) return pack.destroy(err)
152
+ statNext(onstat)
153
+ }
154
+
155
+ onnextentry()
156
+
157
+ return pack
158
+ }
159
+
160
+ var head = function (list) {
161
+ return list.length ? list[list.length - 1] : null
162
+ }
163
+
164
+ var processGetuid = function () {
165
+ return process.getuid ? process.getuid() : -1
166
+ }
167
+
168
+ var processUmask = function () {
169
+ return process.umask ? process.umask() : 0
170
+ }
171
+
172
+ exports.extract = function (cwd, opts) {
173
+ if (!cwd) cwd = '.'
174
+ if (!opts) opts = {}
175
+
176
+ var xfs = opts.fs || fs
177
+ var ignore = opts.ignore || opts.filter || noop
178
+ var map = opts.map || noop
179
+ var mapStream = opts.mapStream || echo
180
+ var own = opts.chown !== false && !win32 && processGetuid() === 0
181
+ var extract = opts.extract || tar.extract()
182
+ var stack = []
183
+ var now = new Date()
184
+ var umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
185
+ var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
186
+ var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
187
+ var strict = opts.strict !== false
188
+
189
+ if (opts.strip) map = strip(map, opts.strip)
190
+
191
+ if (opts.readable) {
192
+ dmode |= parseInt(555, 8)
193
+ fmode |= parseInt(444, 8)
194
+ }
195
+ if (opts.writable) {
196
+ dmode |= parseInt(333, 8)
197
+ fmode |= parseInt(222, 8)
198
+ }
199
+
200
+ var utimesParent = function (name, cb) { // we just set the mtime on the parent dir again everytime we write an entry
201
+ var top
202
+ while ((top = head(stack)) && name.slice(0, top[0].length) !== top[0]) stack.pop()
203
+ if (!top) return cb()
204
+ xfs.utimes(top[0], now, top[1], cb)
205
+ }
206
+
207
+ var utimes = function (name, header, cb) {
208
+ if (opts.utimes === false) return cb()
209
+
210
+ if (header.type === 'directory') return xfs.utimes(name, now, header.mtime, cb)
211
+ if (header.type === 'symlink') return utimesParent(name, cb) // TODO: how to set mtime on link?
212
+
213
+ xfs.utimes(name, now, header.mtime, function (err) {
214
+ if (err) return cb(err)
215
+ utimesParent(name, cb)
216
+ })
217
+ }
218
+
219
+ var chperm = function (name, header, cb) {
220
+ var link = header.type === 'symlink'
221
+
222
+ /* eslint-disable node/no-deprecated-api */
223
+ var chmod = link ? xfs.lchmod : xfs.chmod
224
+ var chown = link ? xfs.lchown : xfs.chown
225
+ /* eslint-enable node/no-deprecated-api */
226
+
227
+ if (!chmod) return cb()
228
+
229
+ var mode = (header.mode | (header.type === 'directory' ? dmode : fmode)) & umask
230
+
231
+ if (chown && own) chown.call(xfs, name, header.uid, header.gid, onchown)
232
+ else onchown(null)
233
+
234
+ function onchown (err) {
235
+ if (err) return cb(err)
236
+ if (!chmod) return cb()
237
+ chmod.call(xfs, name, mode, cb)
238
+ }
239
+ }
240
+
241
+ extract.on('entry', function (header, stream, next) {
242
+ header = map(header) || header
243
+ header.name = normalize(header.name)
244
+ var name = path.join(cwd, path.join('/', header.name))
245
+
246
+ if (ignore(name, header)) {
247
+ stream.resume()
248
+ return next()
249
+ }
250
+
251
+ var stat = function (err) {
252
+ if (err) return next(err)
253
+ utimes(name, header, function (err) {
254
+ if (err) return next(err)
255
+ if (win32) return next()
256
+ chperm(name, header, next)
257
+ })
258
+ }
259
+
260
+ var onsymlink = function () {
261
+ if (win32) return next() // skip symlinks on win for now before it can be tested
262
+ xfs.unlink(name, function () {
263
+ var dst = path.resolve(path.dirname(name), header.linkname)
264
+ if (!inCwd(dst, cwd)) return next(new Error(name + ' is not a valid symlink'))
265
+
266
+ xfs.symlink(header.linkname, name, stat)
267
+ })
268
+ }
269
+
270
+ var onlink = function () {
271
+ if (win32) return next() // skip links on win for now before it can be tested
272
+ xfs.unlink(name, function () {
273
+ var srcpath = path.join(cwd, path.join('/', header.linkname))
274
+
275
+ xfs.realpath(srcpath, function (err, dst) {
276
+ if (err || !inCwd(dst, cwd)) return next(new Error(name + ' is not a valid hardlink'))
277
+
278
+ xfs.link(dst, name, function (err) {
279
+ if (err && err.code === 'EPERM' && opts.hardlinkAsFilesFallback) {
280
+ stream = xfs.createReadStream(srcpath)
281
+ return onfile()
282
+ }
283
+
284
+ stat(err)
285
+ })
286
+ })
287
+ })
288
+ }
289
+
290
+ var onfile = function () {
291
+ var ws = xfs.createWriteStream(name)
292
+ var rs = mapStream(stream, header)
293
+
294
+ ws.on('error', function (err) { // always forward errors on destroy
295
+ rs.destroy(err)
296
+ })
297
+
298
+ pump(rs, ws, function (err) {
299
+ if (err) return next(err)
300
+ ws.on('close', stat)
301
+ })
302
+ }
303
+
304
+ if (header.type === 'directory') {
305
+ stack.push([name, header.mtime])
306
+ return mkdirfix(name, {
307
+ fs: xfs, own: own, uid: header.uid, gid: header.gid
308
+ }, stat)
309
+ }
310
+
311
+ var dir = path.dirname(name)
312
+
313
+ validate(xfs, dir, path.join(cwd, '.'), function (err, valid) {
314
+ if (err) return next(err)
315
+ if (!valid) return next(new Error(dir + ' is not a valid path'))
316
+
317
+ mkdirfix(dir, {
318
+ fs: xfs, own: own, uid: header.uid, gid: header.gid
319
+ }, function (err) {
320
+ if (err) return next(err)
321
+
322
+ switch (header.type) {
323
+ case 'file': return onfile()
324
+ case 'link': return onlink()
325
+ case 'symlink': return onsymlink()
326
+ }
327
+
328
+ if (strict) return next(new Error('unsupported type for ' + name + ' (' + header.type + ')'))
329
+
330
+ stream.resume()
331
+ next()
332
+ })
333
+ })
334
+ })
335
+
336
+ if (opts.finish) extract.on('finish', opts.finish)
337
+
338
+ return extract
339
+ }
340
+
341
+ function validate (fs, name, root, cb) {
342
+ if (name === root) return cb(null, true)
343
+ fs.lstat(name, function (err, st) {
344
+ if (err && err.code !== 'ENOENT') return cb(err)
345
+ if (err || st.isDirectory()) return validate(fs, path.join(name, '..'), root, cb)
346
+ cb(null, false)
347
+ })
348
+ }
349
+
350
+ function mkdirfix (name, opts, cb) {
351
+ mkdirp(name, { fs: opts.fs }, function (err, made) {
352
+ if (!err && made && opts.own) {
353
+ chownr(made, opts.uid, opts.gid, cb)
354
+ } else {
355
+ cb(err)
356
+ }
357
+ })
358
+ }
359
+
360
+ function inCwd (dst, cwd) {
361
+ cwd = path.resolve(cwd)
362
+ return cwd === dst || dst.startsWith(cwd + path.sep)
363
+ }
@@ -0,0 +1,15 @@
1
+ The ISC License
2
+
3
+ Copyright (c) Isaac Z. Schlueter and Contributors
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
15
+ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
@@ -0,0 +1,3 @@
1
+ Like `chown -R`.
2
+
3
+ Takes the same arguments as `fs.chown()`
@@ -0,0 +1,167 @@
1
+ 'use strict'
2
+ const fs = require('fs')
3
+ const path = require('path')
4
+
5
+ /* istanbul ignore next */
6
+ const LCHOWN = fs.lchown ? 'lchown' : 'chown'
7
+ /* istanbul ignore next */
8
+ const LCHOWNSYNC = fs.lchownSync ? 'lchownSync' : 'chownSync'
9
+
10
+ /* istanbul ignore next */
11
+ const needEISDIRHandled = fs.lchown &&
12
+ !process.version.match(/v1[1-9]+\./) &&
13
+ !process.version.match(/v10\.[6-9]/)
14
+
15
+ const lchownSync = (path, uid, gid) => {
16
+ try {
17
+ return fs[LCHOWNSYNC](path, uid, gid)
18
+ } catch (er) {
19
+ if (er.code !== 'ENOENT')
20
+ throw er
21
+ }
22
+ }
23
+
24
+ /* istanbul ignore next */
25
+ const chownSync = (path, uid, gid) => {
26
+ try {
27
+ return fs.chownSync(path, uid, gid)
28
+ } catch (er) {
29
+ if (er.code !== 'ENOENT')
30
+ throw er
31
+ }
32
+ }
33
+
34
+ /* istanbul ignore next */
35
+ const handleEISDIR =
36
+ needEISDIRHandled ? (path, uid, gid, cb) => er => {
37
+ // Node prior to v10 had a very questionable implementation of
38
+ // fs.lchown, which would always try to call fs.open on a directory
39
+ // Fall back to fs.chown in those cases.
40
+ if (!er || er.code !== 'EISDIR')
41
+ cb(er)
42
+ else
43
+ fs.chown(path, uid, gid, cb)
44
+ }
45
+ : (_, __, ___, cb) => cb
46
+
47
+ /* istanbul ignore next */
48
+ const handleEISDirSync =
49
+ needEISDIRHandled ? (path, uid, gid) => {
50
+ try {
51
+ return lchownSync(path, uid, gid)
52
+ } catch (er) {
53
+ if (er.code !== 'EISDIR')
54
+ throw er
55
+ chownSync(path, uid, gid)
56
+ }
57
+ }
58
+ : (path, uid, gid) => lchownSync(path, uid, gid)
59
+
60
+ // fs.readdir could only accept an options object as of node v6
61
+ const nodeVersion = process.version
62
+ let readdir = (path, options, cb) => fs.readdir(path, options, cb)
63
+ let readdirSync = (path, options) => fs.readdirSync(path, options)
64
+ /* istanbul ignore next */
65
+ if (/^v4\./.test(nodeVersion))
66
+ readdir = (path, options, cb) => fs.readdir(path, cb)
67
+
68
+ const chown = (cpath, uid, gid, cb) => {
69
+ fs[LCHOWN](cpath, uid, gid, handleEISDIR(cpath, uid, gid, er => {
70
+ // Skip ENOENT error
71
+ cb(er && er.code !== 'ENOENT' ? er : null)
72
+ }))
73
+ }
74
+
75
+ const chownrKid = (p, child, uid, gid, cb) => {
76
+ if (typeof child === 'string')
77
+ return fs.lstat(path.resolve(p, child), (er, stats) => {
78
+ // Skip ENOENT error
79
+ if (er)
80
+ return cb(er.code !== 'ENOENT' ? er : null)
81
+ stats.name = child
82
+ chownrKid(p, stats, uid, gid, cb)
83
+ })
84
+
85
+ if (child.isDirectory()) {
86
+ chownr(path.resolve(p, child.name), uid, gid, er => {
87
+ if (er)
88
+ return cb(er)
89
+ const cpath = path.resolve(p, child.name)
90
+ chown(cpath, uid, gid, cb)
91
+ })
92
+ } else {
93
+ const cpath = path.resolve(p, child.name)
94
+ chown(cpath, uid, gid, cb)
95
+ }
96
+ }
97
+
98
+
99
+ const chownr = (p, uid, gid, cb) => {
100
+ readdir(p, { withFileTypes: true }, (er, children) => {
101
+ // any error other than ENOTDIR or ENOTSUP means it's not readable,
102
+ // or doesn't exist. give up.
103
+ if (er) {
104
+ if (er.code === 'ENOENT')
105
+ return cb()
106
+ else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP')
107
+ return cb(er)
108
+ }
109
+ if (er || !children.length)
110
+ return chown(p, uid, gid, cb)
111
+
112
+ let len = children.length
113
+ let errState = null
114
+ const then = er => {
115
+ if (errState)
116
+ return
117
+ if (er)
118
+ return cb(errState = er)
119
+ if (-- len === 0)
120
+ return chown(p, uid, gid, cb)
121
+ }
122
+
123
+ children.forEach(child => chownrKid(p, child, uid, gid, then))
124
+ })
125
+ }
126
+
127
+ const chownrKidSync = (p, child, uid, gid) => {
128
+ if (typeof child === 'string') {
129
+ try {
130
+ const stats = fs.lstatSync(path.resolve(p, child))
131
+ stats.name = child
132
+ child = stats
133
+ } catch (er) {
134
+ if (er.code === 'ENOENT')
135
+ return
136
+ else
137
+ throw er
138
+ }
139
+ }
140
+
141
+ if (child.isDirectory())
142
+ chownrSync(path.resolve(p, child.name), uid, gid)
143
+
144
+ handleEISDirSync(path.resolve(p, child.name), uid, gid)
145
+ }
146
+
147
+ const chownrSync = (p, uid, gid) => {
148
+ let children
149
+ try {
150
+ children = readdirSync(p, { withFileTypes: true })
151
+ } catch (er) {
152
+ if (er.code === 'ENOENT')
153
+ return
154
+ else if (er.code === 'ENOTDIR' || er.code === 'ENOTSUP')
155
+ return handleEISDirSync(p, uid, gid)
156
+ else
157
+ throw er
158
+ }
159
+
160
+ if (children && children.length)
161
+ children.forEach(child => chownrKidSync(p, child, uid, gid))
162
+
163
+ return handleEISDirSync(p, uid, gid)
164
+ }
165
+
166
+ module.exports = chownr
167
+ chownr.sync = chownrSync