bashkit 0.4.1__tar.gz → 0.5.0__tar.gz

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 (491) hide show
  1. {bashkit-0.4.1 → bashkit-0.5.0}/Cargo.lock +17 -6
  2. {bashkit-0.4.1 → bashkit-0.5.0}/Cargo.toml +1 -1
  3. {bashkit-0.4.1 → bashkit-0.5.0}/PKG-INFO +1 -1
  4. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/Cargo.toml +4 -5
  5. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/clap-builtins.md +5 -18
  6. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/custom_builtins.md +4 -5
  7. bashkit-0.5.0/crates/bashkit/src/builtins/cat.rs +193 -0
  8. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/compgen.rs +4 -4
  9. bashkit-0.5.0/crates/bashkit/src/builtins/generated/cat_args.rs +132 -0
  10. bashkit-0.5.0/crates/bashkit/src/builtins/generated/mod.rs +34 -0
  11. bashkit-0.5.0/crates/bashkit/src/builtins/generated/readlink_args.rs +125 -0
  12. bashkit-0.5.0/crates/bashkit/src/builtins/generated/shuf_args.rs +148 -0
  13. bashkit-0.5.0/crates/bashkit/src/builtins/generated/tac_args.rs +72 -0
  14. bashkit-0.5.0/crates/bashkit/src/builtins/generated/truncate_args.rs +99 -0
  15. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/mod.rs +56 -9
  16. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/path.rs +77 -48
  17. bashkit-0.5.0/crates/bashkit/src/builtins/shuf.rs +265 -0
  18. bashkit-0.5.0/crates/bashkit/src/builtins/textrev.rs +192 -0
  19. bashkit-0.5.0/crates/bashkit/src/builtins/truncate.rs +346 -0
  20. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interpreter/mod.rs +2 -0
  21. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/lib.rs +3 -6
  22. bashkit-0.5.0/crates/bashkit/src/tool_def.rs +1223 -0
  23. bashkit-0.5.0/crates/bashkit/tests/coreutils_differential_tests.rs +548 -0
  24. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/custom_builtins_tests.rs +0 -11
  25. bashkit-0.5.0/crates/bashkit/tests/spec_cases/bash/cat.test.sh +81 -0
  26. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/help-flag.test.sh +3 -3
  27. bashkit-0.5.0/crates/bashkit/tests/spec_cases/bash/readlink.test.sh +55 -0
  28. bashkit-0.5.0/crates/bashkit/tests/spec_cases/bash/shuf.test.sh +65 -0
  29. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/textrev.test.sh +16 -0
  30. bashkit-0.5.0/crates/bashkit/tests/spec_cases/bash/truncate.test.sh +105 -0
  31. bashkit-0.4.1/crates/bashkit/src/builtins/cat.rs +0 -109
  32. bashkit-0.4.1/crates/bashkit/src/builtins/textrev.rs +0 -132
  33. bashkit-0.4.1/crates/bashkit/src/tool_def.rs +0 -440
  34. {bashkit-0.4.1 → bashkit-0.5.0}/README.md +0 -0
  35. {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/__init__.py +0 -0
  36. {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/_bashkit.pyi +0 -0
  37. {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/deepagents.py +0 -0
  38. {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/langchain.py +0 -0
  39. {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/py.typed +0 -0
  40. {bashkit-0.4.1 → bashkit-0.5.0}/bashkit/pydantic_ai.py +0 -0
  41. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/README.md +0 -0
  42. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/benches/parallel_execution.rs +0 -0
  43. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/benches/sqlite.rs +0 -0
  44. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/compatibility.md +0 -0
  45. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/credential-injection.md +0 -0
  46. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/hooks.md +0 -0
  47. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/jq.md +0 -0
  48. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/live_mounts.md +0 -0
  49. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/logging.md +0 -0
  50. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/python.md +0 -0
  51. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/sqlite.md +0 -0
  52. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/ssh.md +0 -0
  53. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/threat-model.md +0 -0
  54. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/docs/typescript.md +0 -0
  55. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/agent_tool.rs +0 -0
  56. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/basic.rs +0 -0
  57. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/clap_builtin.rs +0 -0
  58. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/clap_builtin_subcommands.rs +0 -0
  59. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/custom_backend.rs +0 -0
  60. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/custom_builtins.rs +0 -0
  61. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/custom_filesystem_impl.rs +0 -0
  62. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/custom_fs.rs +0 -0
  63. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/git_workflow.rs +0 -0
  64. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/live_mounts.rs +0 -0
  65. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/python_external_functions.rs +0 -0
  66. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/python_scripts.rs +0 -0
  67. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/realfs_readonly.rs +0 -0
  68. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/realfs_readwrite.rs +0 -0
  69. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/resource_limits.rs +0 -0
  70. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/scripted_tool.rs +0 -0
  71. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/show_tool_output.rs +0 -0
  72. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/sqlite_basic.rs +0 -0
  73. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/sqlite_workflow.rs +0 -0
  74. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/ssh_supabase.rs +0 -0
  75. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/streaming_output.rs +0 -0
  76. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/text_files.rs +0 -0
  77. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/text_processing.rs +0 -0
  78. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/typescript_external_functions.rs +0 -0
  79. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/typescript_scripts.rs +0 -0
  80. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/examples/virtual_identity.rs +0 -0
  81. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/proptest-regressions/builtins/sqlite/tests.txt +0 -0
  82. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/alias.rs +0 -0
  83. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/archive.rs +0 -0
  84. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/arg_parser.rs +0 -0
  85. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/assert.rs +0 -0
  86. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/awk.rs +0 -0
  87. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/base64.rs +0 -0
  88. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/bc.rs +0 -0
  89. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/caller.rs +0 -0
  90. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/checksum.rs +0 -0
  91. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/clear.rs +0 -0
  92. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/column.rs +0 -0
  93. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/comm.rs +0 -0
  94. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/csv.rs +0 -0
  95. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/curl.rs +0 -0
  96. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/cuttr.rs +0 -0
  97. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/date.rs +0 -0
  98. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/diff.rs +0 -0
  99. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/dirstack.rs +0 -0
  100. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/disk.rs +0 -0
  101. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/dotenv.rs +0 -0
  102. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/echo.rs +0 -0
  103. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/environ.rs +0 -0
  104. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/envsubst.rs +0 -0
  105. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/expand.rs +0 -0
  106. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/export.rs +0 -0
  107. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/expr.rs +0 -0
  108. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/fc.rs +0 -0
  109. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/fileops.rs +0 -0
  110. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/flow.rs +0 -0
  111. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/fold.rs +0 -0
  112. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/git/client.rs +0 -0
  113. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/git/cmd.rs +0 -0
  114. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/git/config.rs +0 -0
  115. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/git/mod.rs +0 -0
  116. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/glob_cmd.rs +0 -0
  117. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/grep.rs +0 -0
  118. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/headtail.rs +0 -0
  119. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/help.rs +0 -0
  120. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/hextools.rs +0 -0
  121. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/http.rs +0 -0
  122. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/iconv.rs +0 -0
  123. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/inspect.rs +0 -0
  124. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/introspect.rs +0 -0
  125. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/join.rs +0 -0
  126. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/args.rs +0 -0
  127. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/compat.rs +0 -0
  128. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/convert.rs +0 -0
  129. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/errors.rs +0 -0
  130. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/format.rs +0 -0
  131. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/mod.rs +0 -0
  132. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/regex_compat.rs +0 -0
  133. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/jq/tests.rs +0 -0
  134. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/json.rs +0 -0
  135. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/log.rs +0 -0
  136. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ls.rs +0 -0
  137. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/mapfile.rs +0 -0
  138. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/mkfifo.rs +0 -0
  139. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/navigation.rs +0 -0
  140. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/nl.rs +0 -0
  141. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/numfmt.rs +0 -0
  142. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/parallel.rs +0 -0
  143. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/paste.rs +0 -0
  144. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/patch.rs +0 -0
  145. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/pipeline.rs +0 -0
  146. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/printf.rs +0 -0
  147. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/python.rs +0 -0
  148. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/read.rs +0 -0
  149. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/retry.rs +0 -0
  150. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/rg.rs +0 -0
  151. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/search_common.rs +0 -0
  152. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sed.rs +0 -0
  153. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/semver.rs +0 -0
  154. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/seq.rs +0 -0
  155. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sleep.rs +0 -0
  156. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sortuniq.rs +0 -0
  157. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/source.rs +0 -0
  158. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/split.rs +0 -0
  159. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/dot_commands.rs +0 -0
  160. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/engine.rs +0 -0
  161. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/formatter.rs +0 -0
  162. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/mod.rs +0 -0
  163. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/parser.rs +0 -0
  164. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/tests.rs +0 -0
  165. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/sqlite/vfs_io.rs +0 -0
  166. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/allowlist.rs +0 -0
  167. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/client.rs +0 -0
  168. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/cmd.rs +0 -0
  169. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/config.rs +0 -0
  170. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/handler.rs +0 -0
  171. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/mod.rs +0 -0
  172. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/ssh/russh_handler.rs +0 -0
  173. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/strings.rs +0 -0
  174. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/system.rs +0 -0
  175. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/template.rs +0 -0
  176. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/test.rs +0 -0
  177. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/timeout.rs +0 -0
  178. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/tomlq.rs +0 -0
  179. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/trap.rs +0 -0
  180. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/tree.rs +0 -0
  181. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/typescript.rs +0 -0
  182. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/vars.rs +0 -0
  183. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/verify.rs +0 -0
  184. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/wait.rs +0 -0
  185. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/wc.rs +0 -0
  186. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/yaml.rs +0 -0
  187. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/yes.rs +0 -0
  188. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/builtins/zip_cmd.rs +0 -0
  189. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/credential.rs +0 -0
  190. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/error.rs +0 -0
  191. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/backend.rs +0 -0
  192. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/limits.rs +0 -0
  193. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/memory.rs +0 -0
  194. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/mod.rs +0 -0
  195. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/mountable.rs +0 -0
  196. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/overlay.rs +0 -0
  197. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/posix.rs +0 -0
  198. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/realfs.rs +0 -0
  199. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/search.rs +0 -0
  200. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/fs/traits.rs +0 -0
  201. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/hooks.rs +0 -0
  202. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interop/fs.rs +0 -0
  203. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interop/mod.rs +0 -0
  204. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interpreter/glob.rs +0 -0
  205. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interpreter/jobs.rs +0 -0
  206. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/interpreter/state.rs +0 -0
  207. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/limits.rs +0 -0
  208. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/logging_impl.rs +0 -0
  209. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/network/allowlist.rs +0 -0
  210. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/network/bot_auth.rs +0 -0
  211. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/network/client.rs +0 -0
  212. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/network/mod.rs +0 -0
  213. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/ast.rs +0 -0
  214. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/budget.rs +0 -0
  215. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/lexer.rs +0 -0
  216. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/mod.rs +0 -0
  217. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/span.rs +0 -0
  218. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/parser/tokens.rs +0 -0
  219. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/scripted_tool/execute.rs +0 -0
  220. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/scripted_tool/extension.rs +0 -0
  221. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/scripted_tool/mod.rs +0 -0
  222. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/scripted_tool/toolset.rs +0 -0
  223. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/snapshot.rs +0 -0
  224. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/testing.rs +0 -0
  225. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/tool.rs +0 -0
  226. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/src/trace.rs +0 -0
  227. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/allexport_tests.rs +0 -0
  228. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_fuzz_scaffold_tests.rs +0 -0
  229. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_newline_tests.rs +0 -0
  230. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_pattern_tests.rs +0 -0
  231. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_printf_expr_test.rs +0 -0
  232. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/awk_range_pattern_tests.rs +0 -0
  233. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/background_exec_tests.rs +0 -0
  234. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/bash_source_tests.rs +0 -0
  235. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/blackbox_security_tests.rs +0 -0
  236. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/builtin_error_security_tests.rs +0 -0
  237. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/byte_range_panic_tests.rs +0 -0
  238. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/cancellation_tests.rs +0 -0
  239. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/cmdsub_quote_test.rs +0 -0
  240. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/coproc_tests.rs +0 -0
  241. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/credential_injection_tests.rs +0 -0
  242. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/custom_fs_tests.rs +0 -0
  243. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/dev_null_tests.rs +0 -0
  244. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/final_env_tests.rs +0 -0
  245. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/find_multi_path_tests.rs +0 -0
  246. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_advanced_tests.rs +0 -0
  247. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_inspection_tests.rs +0 -0
  248. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_integration_tests.rs +0 -0
  249. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_remote_security_tests.rs +0 -0
  250. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/git_security_tests.rs +0 -0
  251. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/harness_example_tests.rs +0 -0
  252. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/history_tests.rs +0 -0
  253. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_1175_test.rs +0 -0
  254. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_274_test.rs +0 -0
  255. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_275_279_282_test.rs +0 -0
  256. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_276_test.rs +0 -0
  257. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_277_test.rs +0 -0
  258. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_289_test.rs +0 -0
  259. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_290_test.rs +0 -0
  260. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_291_test.rs +0 -0
  261. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_853_test.rs +0 -0
  262. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_872_test.rs +0 -0
  263. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_873_test.rs +0 -0
  264. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/issue_875_test.rs +0 -0
  265. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/jq_fuzz_scaffold_tests.rs +0 -0
  266. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/live_mount_tests.rs +0 -0
  267. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/logging_security_tests.rs +0 -0
  268. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/mkfifo_tests.rs +0 -0
  269. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/nested_subscript_tests.rs +0 -0
  270. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/network_security_tests.rs +0 -0
  271. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/output_truncation_tests.rs +0 -0
  272. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/overlay_path_validation_tests.rs +0 -0
  273. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/proptest_differential.rs +0 -0
  274. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/proptest_security.rs +0 -0
  275. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/python_integration_tests.rs +0 -0
  276. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/python_security_tests.rs +0 -0
  277. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/realfs_tests.rs +0 -0
  278. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/regex_limit_tests.rs +0 -0
  279. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/release_profile_tests.rs +0 -0
  280. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/script_execution_tests.rs +0 -0
  281. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/security_audit_pocs.rs +0 -0
  282. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/security_failpoint_tests.rs +0 -0
  283. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/set_e_and_or_tests.rs +0 -0
  284. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/azure_discover_rank.sh +0 -0
  285. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/azure_generate_url.sh +0 -0
  286. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/azure_query_capacity.sh +0 -0
  287. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/helm_validate_chart.sh +0 -0
  288. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/jwt_test_setup.sh +0 -0
  289. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/stitch_download_asset.sh +0 -0
  290. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/stitch_fetch.sh +0 -0
  291. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/stitch_verify_setup.sh +0 -0
  292. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/superpowers_find_polluter.sh +0 -0
  293. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_fixtures/vercel_deploy.sh +0 -0
  294. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/skills_tests.rs +0 -0
  295. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/snapshot_tests.rs +0 -0
  296. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/source_function_tests.rs +0 -0
  297. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/awk.test.sh +0 -0
  298. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/delete-array.test.sh +0 -0
  299. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/dev-stderr.test.sh +0 -0
  300. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/eval-bugs.test.sh +0 -0
  301. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/filename.test.sh +0 -0
  302. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/awk/getline-file.test.sh +0 -0
  303. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/alias.test.sh +0 -0
  304. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/append_redirect.test.sh +0 -0
  305. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/arith-dynamic.test.sh +0 -0
  306. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/arithmetic-base-expansion.test.sh +0 -0
  307. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/arithmetic.test.sh +0 -0
  308. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/array-slicing.test.sh +0 -0
  309. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/array-splat.test.sh +0 -0
  310. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/arrays.test.sh +0 -0
  311. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/assoc-arrays.test.sh +0 -0
  312. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/awk-printf-width.test.sh +0 -0
  313. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/background.test.sh +0 -0
  314. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-c-exports.test.sh +0 -0
  315. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-command.test.sh +0 -0
  316. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-flags.test.sh +0 -0
  317. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-source-var.test.sh +0 -0
  318. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bash-stdin-pipe.test.sh +0 -0
  319. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/bc.test.sh +0 -0
  320. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/blackbox-edge-cases.test.sh +0 -0
  321. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/blackbox-exploration.test.sh +0 -0
  322. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/brace-expansion.test.sh +0 -0
  323. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/brace_expansion_lookahead.test.sh +0 -0
  324. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/checksum.test.sh +0 -0
  325. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/chown-kill.test.sh +0 -0
  326. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/cmd-suggestions.test.sh +0 -0
  327. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/cmdsub_depth_unquoted.test.sh +0 -0
  328. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/column.test.sh +0 -0
  329. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/comm.test.sh +0 -0
  330. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/command-not-found.test.sh +0 -0
  331. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/command-subst.test.sh +0 -0
  332. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/command.test.sh +0 -0
  333. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/command_v.test.sh +0 -0
  334. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/compgen-path.test.sh +0 -0
  335. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/conditional-short-circuit.test.sh +0 -0
  336. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/conditional.test.sh +0 -0
  337. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/control-flow.test.sh +0 -0
  338. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/cuttr.test.sh +0 -0
  339. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/date.test.sh +0 -0
  340. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/declare.test.sh +0 -0
  341. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/df.test.sh +0 -0
  342. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/diff.test.sh +0 -0
  343. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/dirstack.test.sh +0 -0
  344. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/du.test.sh +0 -0
  345. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/echo.test.sh +0 -0
  346. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/empty-bodies.test.sh +0 -0
  347. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/env.test.sh +0 -0
  348. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/errexit.test.sh +0 -0
  349. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/eval-bugs.test.sh +0 -0
  350. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/exec-command.test.sh +0 -0
  351. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-redirect.test.sh +0 -0
  352. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-variable.test.sh +0 -0
  353. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/exit-status.test.sh +0 -0
  354. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/expr.test.sh +0 -0
  355. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/extglob.test.sh +0 -0
  356. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/file.test.sh +0 -0
  357. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/fileops.test.sh +0 -0
  358. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/find.test.sh +0 -0
  359. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/functions.test.sh +0 -0
  360. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/getopts.test.sh +0 -0
  361. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/glob-options.test.sh +0 -0
  362. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/glob_match_cap.test.sh +0 -0
  363. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/globs.test.sh +0 -0
  364. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/gzip.test.sh +0 -0
  365. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/headtail.test.sh +0 -0
  366. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/heredoc-edge.test.sh +0 -0
  367. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/heredoc.test.sh +0 -0
  368. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/herestring.test.sh +0 -0
  369. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/hextools.test.sh +0 -0
  370. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/history.test.sh +0 -0
  371. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/indirect-expansion.test.sh +0 -0
  372. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/less.test.sh +0 -0
  373. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/ln.test.sh +0 -0
  374. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/ls.test.sh +0 -0
  375. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/memory_budget_desync.test.sh +0 -0
  376. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/nameref-assoc.test.sh +0 -0
  377. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/nameref.test.sh +0 -0
  378. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/negative-tests.test.sh +0 -0
  379. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/nl.test.sh +0 -0
  380. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/nounset.test.sh +0 -0
  381. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/numfmt.test.sh +0 -0
  382. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/parse-errors.test.sh +0 -0
  383. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/paste-flags.test.sh +0 -0
  384. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/paste.test.sh +0 -0
  385. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/path.test.sh +0 -0
  386. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/pipes-redirects.test.sh +0 -0
  387. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/printenv.test.sh +0 -0
  388. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/printf.test.sh +0 -0
  389. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/procsub.test.sh +0 -0
  390. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/quote.test.sh +0 -0
  391. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/read-builtin.test.sh +0 -0
  392. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/recursive-cmdsub.test.sh +0 -0
  393. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/regex-limit.test.sh +0 -0
  394. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/replace_pattern_limit.test.sh +0 -0
  395. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/script-exec.test.sh +0 -0
  396. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/seq.test.sh +0 -0
  397. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/set-allexport.test.sh +0 -0
  398. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/shell-grammar.test.sh +0 -0
  399. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/sleep.test.sh +0 -0
  400. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/sortuniq.test.sh +0 -0
  401. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/source.test.sh +0 -0
  402. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/stat.test.sh +0 -0
  403. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/string-ops.test.sh +0 -0
  404. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/strings.test.sh +0 -0
  405. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/subprocess-isolation.test.sh +0 -0
  406. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/subshell.test.sh +0 -0
  407. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/tar.test.sh +0 -0
  408. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/tar_create.test.sh +0 -0
  409. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/tee.test.sh +0 -0
  410. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/temp-binding.test.sh +0 -0
  411. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/test-operators.test.sh +0 -0
  412. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/test-tty.test.sh +0 -0
  413. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/time.test.sh +0 -0
  414. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/timeout.test.sh +0 -0
  415. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/tree.test.sh +0 -0
  416. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/type.test.sh +0 -0
  417. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/unicode.test.sh +0 -0
  418. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/unset-exported-var.test.sh +0 -0
  419. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/var-op-test.test.sh +0 -0
  420. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/variables.test.sh +0 -0
  421. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/wait.test.sh +0 -0
  422. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/watch.test.sh +0 -0
  423. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/wc.test.sh +0 -0
  424. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/word-split.test.sh +0 -0
  425. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/bash/xargs.test.sh +0 -0
  426. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/grep/eval-bugs.test.sh +0 -0
  427. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/grep/grep.test.sh +0 -0
  428. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/grep/rg.test.sh +0 -0
  429. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/jq/jq.test.sh +0 -0
  430. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/python/env_leak.test.sh +0 -0
  431. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/python/python.test.sh +0 -0
  432. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/sed/eval-bugs.test.sh +0 -0
  433. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/sed/sed.test.sh +0 -0
  434. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_cases/typescript/typescript.test.sh +0 -0
  435. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_runner.rs +0 -0
  436. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/spec_tests.rs +0 -0
  437. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_compat_tests.rs +0 -0
  438. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_differential_tests.rs +0 -0
  439. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_fuzz_tests.rs +0 -0
  440. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_integration_tests.rs +0 -0
  441. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/sqlite_security_tests.rs +0 -0
  442. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/ssh_builtin_tests.rs +0 -0
  443. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/ssh_supabase_tests.rs +0 -0
  444. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/stack_overflow_regression_tests.rs +0 -0
  445. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/subst_depth_limit_tests.rs +0 -0
  446. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/symlink_overlay_security_tests.rs +0 -0
  447. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/threat_model_tests.rs +0 -0
  448. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/tty_tests.rs +0 -0
  449. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/typescript_integration_tests.rs +0 -0
  450. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/typescript_security_tests.rs +0 -0
  451. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/unicode_security_tests.rs +0 -0
  452. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/unset_function_tests.rs +0 -0
  453. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit/tests/urandom_tests.rs +0 -0
  454. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/Cargo.toml +0 -0
  455. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/README.md +0 -0
  456. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/bash_basics.py +0 -0
  457. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/custom_filesystem_interop.py +0 -0
  458. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/data_pipeline.py +0 -0
  459. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/fastapi_async_tool.py +0 -0
  460. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/jupyter_async_test.ipynb +0 -0
  461. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/k8s_orchestrator.py +0 -0
  462. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/langgraph_async_tool.py +0 -0
  463. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/examples/llm_tool.py +0 -0
  464. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/src/lib.rs +0 -0
  465. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/_bashkit_categories.py +0 -0
  466. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/_security_advanced.py +0 -0
  467. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/_security_core.py +0 -0
  468. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_ai_adapters.py +0 -0
  469. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_async_callbacks.py +0 -0
  470. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_basic.py +0 -0
  471. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_builtins.py +0 -0
  472. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_control_flow.py +0 -0
  473. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_error_handling.py +0 -0
  474. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_fastapi_integration.py +0 -0
  475. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_filesystem_interop.py +0 -0
  476. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_integration.py +0 -0
  477. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_jupyter_compat.py +0 -0
  478. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_langgraph_integration.py +0 -0
  479. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_network_config.py +0 -0
  480. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_network_credentials.py +0 -0
  481. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_python_security.py +0 -0
  482. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_registered_tools.py +0 -0
  483. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_scripts.py +0 -0
  484. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_security.py +0 -0
  485. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_shell_injection.py +0 -0
  486. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_sqlite.py +0 -0
  487. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_streaming_output.py +0 -0
  488. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_strings_and_quoting.py +0 -0
  489. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_tool_metadata.py +0 -0
  490. {bashkit-0.4.1 → bashkit-0.5.0}/crates/bashkit-python/tests/test_vfs.py +0 -0
  491. {bashkit-0.4.1 → bashkit-0.5.0}/pyproject.toml +0 -0
@@ -345,7 +345,7 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
345
345
 
346
346
  [[package]]
347
347
  name = "bashkit"
348
- version = "0.4.1"
348
+ version = "0.5.0"
349
349
  dependencies = [
350
350
  "anyhow",
351
351
  "async-trait",
@@ -393,7 +393,7 @@ dependencies = [
393
393
 
394
394
  [[package]]
395
395
  name = "bashkit-bench"
396
- version = "0.4.1"
396
+ version = "0.5.0"
397
397
  dependencies = [
398
398
  "anyhow",
399
399
  "bashkit",
@@ -407,7 +407,7 @@ dependencies = [
407
407
 
408
408
  [[package]]
409
409
  name = "bashkit-cli"
410
- version = "0.4.1"
410
+ version = "0.5.0"
411
411
  dependencies = [
412
412
  "anyhow",
413
413
  "bashkit",
@@ -421,9 +421,20 @@ dependencies = [
421
421
  "tokio",
422
422
  ]
423
423
 
424
+ [[package]]
425
+ name = "bashkit-coreutils-port"
426
+ version = "0.5.0"
427
+ dependencies = [
428
+ "anyhow",
429
+ "prettyplease",
430
+ "proc-macro2",
431
+ "quote",
432
+ "syn",
433
+ ]
434
+
424
435
  [[package]]
425
436
  name = "bashkit-eval"
426
- version = "0.4.1"
437
+ version = "0.5.0"
427
438
  dependencies = [
428
439
  "anyhow",
429
440
  "async-trait",
@@ -440,7 +451,7 @@ dependencies = [
440
451
 
441
452
  [[package]]
442
453
  name = "bashkit-js"
443
- version = "0.4.1"
454
+ version = "0.5.0"
444
455
  dependencies = [
445
456
  "bashkit",
446
457
  "napi",
@@ -453,7 +464,7 @@ dependencies = [
453
464
 
454
465
  [[package]]
455
466
  name = "bashkit-python"
456
- version = "0.4.1"
467
+ version = "0.5.0"
457
468
  dependencies = [
458
469
  "bashkit",
459
470
  "num-bigint",
@@ -7,7 +7,7 @@ resolver = "2"
7
7
  members = ["crates/*"]
8
8
 
9
9
  [workspace.package]
10
- version = "0.4.1"
10
+ version = "0.5.0"
11
11
  edition = "2024"
12
12
  license = "MIT"
13
13
  authors = ["Everruns"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bashkit
3
- Version: 0.4.1
3
+ Version: 0.5.0
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -77,8 +77,9 @@ hmac = "0.13"
77
77
  # Logging/tracing (optional)
78
78
  tracing = { workspace = true, optional = true }
79
79
 
80
- # CLI-style argument parsing for custom builtins.
81
- clap = { workspace = true, optional = true }
80
+ # CLI-style argument parsing for custom builtins and ported coreutils
81
+ # argument surfaces. Always on see specs/coreutils-args-port.md.
82
+ clap = { workspace = true }
82
83
 
83
84
  # Embedded Python interpreter (optional)
84
85
  monty = { git = "https://github.com/pydantic/monty", rev = "49faa4c", optional = true }
@@ -91,9 +92,7 @@ zapcode-core = { version = "1.5", optional = true }
91
92
  turso_core = { workspace = true, optional = true }
92
93
 
93
94
  [features]
94
- default = ["clap-builtins"]
95
- # Enable `ClapBuiltin` for custom builtins with `#[derive(clap::Parser)]`.
96
- clap-builtins = ["dep:clap"]
95
+ default = []
97
96
  # Enable jq builtin via embedded jaq interpreter
98
97
  # Usage: cargo build --features jq
99
98
  jq = ["dep:jaq-core", "dep:jaq-std", "dep:jaq-json"]
@@ -3,21 +3,8 @@
3
3
  `ClapBuiltin` lets Rust applications define custom Bashkit commands with
4
4
  `#[derive(clap::Parser)]` argument structs. Handlers receive a
5
5
  `BashkitContext` that captures stdout, stderr, and exit code for the virtual
6
- shell. The feature is enabled by default through `clap-builtins`.
7
-
8
- Disable it for a smaller library dependency surface:
9
-
10
- ```toml
11
- [dependencies]
12
- bashkit = { version = "0.3", default-features = false }
13
- ```
14
-
15
- Enable it explicitly when default features are off:
16
-
17
- ```toml
18
- [dependencies]
19
- bashkit = { version = "0.3", default-features = false, features = ["clap-builtins"] }
20
- ```
6
+ shell. `clap` is an unconditional dependency of `bashkit`, so this trait is
7
+ always available.
21
8
 
22
9
  ## Basic Usage
23
10
 
@@ -146,6 +133,6 @@ async fn main() -> bashkit::Result<()> {
146
133
 
147
134
  ## See Also
148
135
 
149
- - [`crates/bashkit/examples/clap_builtin.rs`](../crates/bashkit/examples/clap_builtin.rs)
150
- - [`crates/bashkit/examples/clap_builtin_subcommands.rs`](../crates/bashkit/examples/clap_builtin_subcommands.rs)
151
- - [`crates/bashkit/docs/custom_builtins.md`](../crates/bashkit/docs/custom_builtins.md)
136
+ - [`crates/bashkit/examples/clap_builtin.rs`](../examples/clap_builtin.rs)
137
+ - [`crates/bashkit/examples/clap_builtin_subcommands.rs`](../examples/clap_builtin_subcommands.rs)
138
+ - [`crates/bashkit/docs/custom_builtins.md`](./custom_builtins.md)
@@ -7,7 +7,7 @@ virtual filesystem.
7
7
 
8
8
  **See also:**
9
9
  - [API Documentation](https://docs.rs/bashkit) - Full API reference
10
- - [Clap Builtins](../../../docs/clap-builtins.md) - Derive parser structs for custom builtin args
10
+ - [Clap Builtins](./clap-builtins.md) - Derive parser structs for custom builtin args
11
11
  - [Hooks](./hooks.md) - Interceptor hooks for the execution pipeline
12
12
  - [Compatibility Reference](./compatibility.md) - Supported bash features
13
13
  - [Threat Model](./threat-model.md) - Security considerations
@@ -156,10 +156,9 @@ Arguments are passed as a slice of strings, excluding the command name itself:
156
156
  let first_arg = ctx.args.first().map(|s| s.as_str()).unwrap_or("default");
157
157
  ```
158
158
 
159
- For custom builtins with richer flags, options, or subcommands, enable the
160
- default `clap-builtins` feature and implement `ClapBuiltin` with a
161
- `#[derive(clap::Parser)]` argument type. See the `clap_builtins_guide` rustdoc
162
- module for tested examples.
159
+ For custom builtins with richer flags, options, or subcommands, implement
160
+ `ClapBuiltin` with a `#[derive(clap::Parser)]` argument type. See the
161
+ `clap_builtins_guide` rustdoc module for tested examples.
163
162
 
164
163
  ### Environment Variables
165
164
 
@@ -0,0 +1,193 @@
1
+ //! cat builtin.
2
+ //!
3
+ //! Argument surface is generated from uutils/coreutils' `uu_app()` via the
4
+ //! `bashkit-coreutils-port` codegen tool — see `generated/cat_args.rs` and
5
+ //! `crates/bashkit-coreutils-port/`. Behaviour is implemented locally
6
+ //! against the bashkit VFS.
7
+
8
+ use async_trait::async_trait;
9
+ use std::ffi::OsString;
10
+ use std::path::Path;
11
+
12
+ use super::generated::cat_args::cat_command;
13
+ use super::{Builtin, Context, read_text_file};
14
+ use crate::error::Result;
15
+ use crate::interpreter::ExecResult;
16
+
17
+ pub struct Cat;
18
+
19
+ #[async_trait]
20
+ impl Builtin for Cat {
21
+ async fn execute(&self, ctx: Context<'_>) -> Result<ExecResult> {
22
+ // clap expects argv[0] = program name; bashkit's ctx.args excludes it.
23
+ let argv: Vec<OsString> = std::iter::once(OsString::from("cat"))
24
+ .chain(ctx.args.iter().map(OsString::from))
25
+ .collect();
26
+
27
+ // GNU coreutils' help layout opens with the usage line; clap's
28
+ // default template leads with the `about`. uutils handles this via
29
+ // uucore's `localized_help_template`, which we drop during codegen
30
+ // because it pulls in Fluent. Re-apply a GNU-equivalent template.
31
+ let cmd = cat_command().help_template("Usage: {usage}\n{about}\n\n{all-args}\n");
32
+ let matches = match cmd.try_get_matches_from(argv) {
33
+ Ok(m) => m,
34
+ Err(e) => {
35
+ let kind = e.kind();
36
+ let rendered = e.render().to_string();
37
+ if matches!(
38
+ kind,
39
+ clap::error::ErrorKind::DisplayHelp | clap::error::ErrorKind::DisplayVersion
40
+ ) {
41
+ return Ok(ExecResult::ok(rendered));
42
+ }
43
+ return Ok(ExecResult::err(rendered, 2));
44
+ }
45
+ };
46
+
47
+ // Composite flags: -A = -vET, -e = -vE, -t = -vT.
48
+ let g = |k: &str| matches.get_flag(k);
49
+ let show_all = g("show-all");
50
+ let number_nonblank = g("number-nonblank");
51
+ let nonprint_ends = g("e");
52
+ let nonprint_tabs = g("t");
53
+ let show_ends = g("show-ends") || show_all || nonprint_ends;
54
+ let show_tabs = g("show-tabs") || show_all || nonprint_tabs;
55
+ let show_nonprinting = g("show-nonprinting") || show_all || nonprint_ends || nonprint_tabs;
56
+ let number_all = g("number") && !number_nonblank;
57
+ let squeeze = g("squeeze-blank");
58
+
59
+ // GNU `cat` reads stdin when FILE is "-" or absent. clap defaults
60
+ // FILE to "-" so absence and "-" are unified.
61
+ let files: Vec<String> = matches
62
+ .get_many::<OsString>("file")
63
+ .map(|vs| vs.map(|v| v.to_string_lossy().into_owned()).collect())
64
+ .unwrap_or_default();
65
+
66
+ let mut raw = String::new();
67
+ for file in &files {
68
+ if file == "-" {
69
+ if let Some(stdin) = ctx.stdin {
70
+ raw.push_str(stdin);
71
+ }
72
+ } else {
73
+ let path = if Path::new(file).is_absolute() {
74
+ file.clone()
75
+ } else {
76
+ ctx.cwd.join(file).to_string_lossy().into_owned()
77
+ };
78
+ match read_text_file(&*ctx.fs, Path::new(&path), "cat").await {
79
+ Ok(t) => raw.push_str(&t),
80
+ Err(e) => return Ok(e),
81
+ }
82
+ }
83
+ }
84
+
85
+ let output = render(
86
+ &raw,
87
+ show_ends,
88
+ show_tabs,
89
+ show_nonprinting,
90
+ number_all,
91
+ number_nonblank,
92
+ squeeze,
93
+ );
94
+ Ok(ExecResult::ok(output))
95
+ }
96
+ }
97
+
98
+ /// Apply cat's display transforms in a single pass.
99
+ ///
100
+ /// One pass because numbering interacts with squeezing — squeezed blank
101
+ /// lines must not be numbered. Two passes mis-number `cat -ns`.
102
+ fn render(
103
+ raw: &str,
104
+ show_ends: bool,
105
+ show_tabs: bool,
106
+ show_nonprinting: bool,
107
+ number_all: bool,
108
+ number_nonblank: bool,
109
+ squeeze: bool,
110
+ ) -> String {
111
+ use std::fmt::Write;
112
+
113
+ let mut out = String::with_capacity(raw.len());
114
+ let mut counter: u64 = 0;
115
+ let mut prev_blank = false;
116
+
117
+ let mut iter = raw.split_inclusive('\n').peekable();
118
+ if iter.peek().is_none() {
119
+ return out;
120
+ }
121
+
122
+ for chunk in iter {
123
+ let (body, sep): (&str, &str) = match chunk.strip_suffix('\n') {
124
+ Some(b) => (b, "\n"),
125
+ None => (chunk, ""),
126
+ };
127
+ let is_blank = body.is_empty();
128
+
129
+ if squeeze && is_blank && prev_blank {
130
+ continue;
131
+ }
132
+ prev_blank = is_blank;
133
+
134
+ if number_all || (number_nonblank && !is_blank) {
135
+ counter += 1;
136
+ let _ = write!(out, "{counter:>6}\t");
137
+ }
138
+
139
+ if show_nonprinting || show_tabs {
140
+ for b in body.bytes() {
141
+ emit_byte(&mut out, b, show_tabs, show_nonprinting);
142
+ }
143
+ } else {
144
+ out.push_str(body);
145
+ }
146
+
147
+ if show_ends && !sep.is_empty() {
148
+ out.push('$');
149
+ }
150
+ out.push_str(sep);
151
+ }
152
+ out
153
+ }
154
+
155
+ /// GNU cat -v style byte rendering.
156
+ ///
157
+ /// - tab (0x09): literal '\t' unless `show_tabs` (then `^I`).
158
+ /// - bytes < 0x20 (other than tab/newline): `^X` (X = byte + 64) when
159
+ /// show_nonprinting; passed through otherwise.
160
+ /// - 0x7F (DEL): `^?`.
161
+ /// - 0x80..=0xFF (high bit set): `M-` prefix + low-7-bit rendered same way.
162
+ fn emit_byte(out: &mut String, b: u8, show_tabs: bool, show_nonprinting: bool) {
163
+ match b {
164
+ b'\t' if show_tabs => {
165
+ out.push('^');
166
+ out.push('I');
167
+ }
168
+ b'\t' => out.push('\t'),
169
+ b'\n' => out.push('\n'),
170
+ 0..=31 if show_nonprinting => {
171
+ out.push('^');
172
+ out.push((b + 64) as char);
173
+ }
174
+ 0x7f if show_nonprinting => {
175
+ out.push('^');
176
+ out.push('?');
177
+ }
178
+ 128..=255 if show_nonprinting => {
179
+ out.push_str("M-");
180
+ let low = b & 0x7f;
181
+ if (0..32).contains(&low) {
182
+ out.push('^');
183
+ out.push((low + 64) as char);
184
+ } else if low == 0x7f {
185
+ out.push('^');
186
+ out.push('?');
187
+ } else {
188
+ out.push(low as char);
189
+ }
190
+ }
191
+ _ => out.push(b as char),
192
+ }
193
+ }
@@ -29,10 +29,10 @@ const BUILTIN_COMMANDS: &[&str] = &[
29
29
  "history", "hostname", "iconv", "id", "jq", "json", "join", "kill", "ln", "local", "log", "ls",
30
30
  "mkdir", "mktemp", "mv", "nl", "od", "paste", "popd", "printenv", "printf", "pushd", "pwd",
31
31
  "read", "readlink", "readonly", "realpath", "retry", "return", "rev", "rm", "rmdir", "sed",
32
- "semver", "seq", "set", "shift", "shopt", "sleep", "sort", "source", "split", "stat",
33
- "strings", "tac", "tail", "tar", "tee", "test", "timeout", "touch", "tr", "tree", "true",
34
- "uname", "unexpand", "uniq", "unset", "wait", "watch", "wc", "wget", "whoami", "xargs", "xxd",
35
- "yes",
32
+ "semver", "seq", "set", "shift", "shopt", "shuf", "sleep", "sort", "source", "split", "stat",
33
+ "strings", "tac", "tail", "tar", "tee", "test", "timeout", "touch", "tr", "tree", "truncate",
34
+ "true", "uname", "unexpand", "uniq", "unset", "wait", "watch", "wc", "wget", "whoami", "xargs",
35
+ "xxd", "yes",
36
36
  ];
37
37
 
38
38
  #[async_trait]
@@ -0,0 +1,132 @@
1
+ // GENERATED by bashkit-coreutils-port. DO NOT EDIT.
2
+ //
3
+ // Source: uutils/coreutils@39364b6 src/uu/cat/
4
+ // Regenerate: cargo run -p bashkit-coreutils-port -- <UUTILS_DIR> cat <REV>
5
+ //
6
+ // Original uutils licensed MIT; see THIRD_PARTY_LICENSES.
7
+
8
+ #![allow(unused_imports, dead_code)]
9
+ use clap::{Arg, ArgAction, Command, builder::ValueParser};
10
+ use std::ffi::OsString;
11
+ use std::ops::RangeInclusive;
12
+ use std::str::FromStr;
13
+ mod options {
14
+ pub static FILE: &str = "file";
15
+ pub static SHOW_ALL: &str = "show-all";
16
+ pub static NUMBER_NONBLANK: &str = "number-nonblank";
17
+ pub static SHOW_NONPRINTING_ENDS: &str = "e";
18
+ pub static SHOW_ENDS: &str = "show-ends";
19
+ pub static NUMBER: &str = "number";
20
+ pub static SQUEEZE_BLANK: &str = "squeeze-blank";
21
+ pub static SHOW_NONPRINTING_TABS: &str = "t";
22
+ pub static SHOW_TABS: &str = "show-tabs";
23
+ pub static SHOW_NONPRINTING: &str = "show-nonprinting";
24
+ pub static IGNORED_U: &str = "ignored-u";
25
+ }
26
+ /// Vendored stand-in for `uucore::format_usage`.
27
+ ///
28
+ /// Upstream wraps the usage line with stylized "Usage:" prefix logic
29
+ /// driven by uucore's locale stack. For our purposes the raw string
30
+ /// is enough; clap's `override_usage` accepts the literal as-is.
31
+ fn format_usage(s: &str) -> String {
32
+ s.to_string()
33
+ }
34
+ pub fn cat_command() -> Command {
35
+ Command::new("cat")
36
+ .version(env!("CARGO_PKG_VERSION"))
37
+ .override_usage(
38
+ format_usage(&::std::string::String::from("cat [OPTION]... [FILE]...")),
39
+ )
40
+ .about(
41
+ ::std::string::String::from(
42
+ "Concatenate FILE(s), or standard input, to standard output\nWith no FILE, or when FILE is -, read standard input.",
43
+ ),
44
+ )
45
+ .infer_long_args(true)
46
+ .args_override_self(true)
47
+ .arg(
48
+ Arg::new(options::FILE)
49
+ .hide(true)
50
+ .action(ArgAction::Append)
51
+ .value_parser(clap::value_parser!(OsString))
52
+ .default_value("-")
53
+ .value_hint(clap::ValueHint::FilePath),
54
+ )
55
+ .arg(
56
+ Arg::new(options::SHOW_ALL)
57
+ .short('A')
58
+ .long(options::SHOW_ALL)
59
+ .help(::std::string::String::from("equivalent to -vET"))
60
+ .action(ArgAction::SetTrue),
61
+ )
62
+ .arg(
63
+ Arg::new(options::NUMBER_NONBLANK)
64
+ .short('b')
65
+ .long(options::NUMBER_NONBLANK)
66
+ .help(
67
+ ::std::string::String::from(
68
+ "number nonempty output lines, overrides -n",
69
+ ),
70
+ )
71
+ .action(ArgAction::SetTrue),
72
+ )
73
+ .arg(
74
+ Arg::new(options::SHOW_NONPRINTING_ENDS)
75
+ .short('e')
76
+ .help(::std::string::String::from("equivalent to -vE"))
77
+ .action(ArgAction::SetTrue),
78
+ )
79
+ .arg(
80
+ Arg::new(options::SHOW_ENDS)
81
+ .short('E')
82
+ .long(options::SHOW_ENDS)
83
+ .help(::std::string::String::from("display $ at end of each line"))
84
+ .action(ArgAction::SetTrue),
85
+ )
86
+ .arg(
87
+ Arg::new(options::NUMBER)
88
+ .short('n')
89
+ .long(options::NUMBER)
90
+ .help(::std::string::String::from("number all output lines"))
91
+ .action(ArgAction::SetTrue),
92
+ )
93
+ .arg(
94
+ Arg::new(options::SQUEEZE_BLANK)
95
+ .short('s')
96
+ .long(options::SQUEEZE_BLANK)
97
+ .help(
98
+ ::std::string::String::from("suppress repeated empty output lines"),
99
+ )
100
+ .action(ArgAction::SetTrue),
101
+ )
102
+ .arg(
103
+ Arg::new(options::SHOW_NONPRINTING_TABS)
104
+ .short('t')
105
+ .help(::std::string::String::from("equivalent to -vT"))
106
+ .action(ArgAction::SetTrue),
107
+ )
108
+ .arg(
109
+ Arg::new(options::SHOW_TABS)
110
+ .short('T')
111
+ .long(options::SHOW_TABS)
112
+ .help(::std::string::String::from("display TAB characters at ^I"))
113
+ .action(ArgAction::SetTrue),
114
+ )
115
+ .arg(
116
+ Arg::new(options::SHOW_NONPRINTING)
117
+ .short('v')
118
+ .long(options::SHOW_NONPRINTING)
119
+ .help(
120
+ ::std::string::String::from(
121
+ "use ^ and M- notation, except for LF (\\n) and TAB (\\t)",
122
+ ),
123
+ )
124
+ .action(ArgAction::SetTrue),
125
+ )
126
+ .arg(
127
+ Arg::new(options::IGNORED_U)
128
+ .short('u')
129
+ .help(::std::string::String::from("(ignored)"))
130
+ .action(ArgAction::SetTrue),
131
+ )
132
+ }
@@ -0,0 +1,34 @@
1
+ // GENERATED MODULE INDEX. Edit individual `*_args.rs` files only via the
2
+ // `bashkit-coreutils-port` codegen tool — see crates/bashkit-coreutils-port.
3
+ //
4
+ // Each `<util>_args.rs` exposes `pub fn <util>_command() -> clap::Command`
5
+ // derived from uutils/coreutils' `uu_app()` definitions, with `translate!()`
6
+ // keys resolved against the corresponding `en-US.ftl`.
7
+
8
+ /// Pinned uutils/coreutils revision used by:
9
+ ///
10
+ /// 1. The `bashkit-coreutils-port` codegen tool (drift workflow checks
11
+ /// out uutils at this rev before regenerating `<util>_args.rs`).
12
+ /// 2. The `coreutils_differential_tests` body-drift harness (drift
13
+ /// workflow builds the `coreutils` multicall from this same rev
14
+ /// before running the harness with `BASHKIT_RUN_COREUTILS_DIFF=1`).
15
+ ///
16
+ /// Single source of truth: when this constant moves, both the args
17
+ /// surfaces and the body-drift gate move with it. Bumping is normally
18
+ /// the work of the auto-PR opened by `coreutils-args-drift.yml`; manual
19
+ /// bumps require regenerating every `<util>_args.rs` file at the new
20
+ /// rev so headers stay aligned with this constant. The static test
21
+ /// `builtins::tests::generated_args_headers_match_pinned_uutils_\
22
+ /// revision` enforces that invariant.
23
+ //
24
+ // The constant is read at port time (codegen, drift workflow, justfile)
25
+ // and at test time (the invariant assertion). Nothing in the lib's
26
+ // runtime path needs it, hence `allow(dead_code)`.
27
+ #[allow(dead_code)]
28
+ pub const UUTILS_REVISION: &str = "39364b6";
29
+
30
+ pub mod cat_args;
31
+ pub mod readlink_args;
32
+ pub mod shuf_args;
33
+ pub mod tac_args;
34
+ pub mod truncate_args;
@@ -0,0 +1,125 @@
1
+ // GENERATED by bashkit-coreutils-port. DO NOT EDIT.
2
+ //
3
+ // Source: uutils/coreutils@39364b6 src/uu/readlink/
4
+ // Regenerate: cargo run -p bashkit-coreutils-port -- <UUTILS_DIR> readlink <REV>
5
+ //
6
+ // Original uutils licensed MIT; see THIRD_PARTY_LICENSES.
7
+
8
+ #![allow(unused_imports, dead_code)]
9
+ use clap::{Arg, ArgAction, Command, builder::ValueParser};
10
+ use std::ffi::OsString;
11
+ use std::ops::RangeInclusive;
12
+ use std::str::FromStr;
13
+ const OPT_CANONICALIZE: &str = "canonicalize";
14
+ const OPT_CANONICALIZE_MISSING: &str = "canonicalize-missing";
15
+ const OPT_CANONICALIZE_EXISTING: &str = "canonicalize-existing";
16
+ const OPT_NO_NEWLINE: &str = "no-newline";
17
+ const OPT_QUIET: &str = "quiet";
18
+ const OPT_SILENT: &str = "silent";
19
+ const OPT_VERBOSE: &str = "verbose";
20
+ const OPT_ZERO: &str = "zero";
21
+ const ARG_FILES: &str = "files";
22
+ /// Vendored stand-in for `uucore::format_usage`.
23
+ ///
24
+ /// Upstream wraps the usage line with stylized "Usage:" prefix logic
25
+ /// driven by uucore's locale stack. For our purposes the raw string
26
+ /// is enough; clap's `override_usage` accepts the literal as-is.
27
+ fn format_usage(s: &str) -> String {
28
+ s.to_string()
29
+ }
30
+ pub fn readlink_command() -> Command {
31
+ Command::new("readlink")
32
+ .version(env!("CARGO_PKG_VERSION"))
33
+ .about(
34
+ ::std::string::String::from(
35
+ "Print value of a symbolic link or canonical file name.",
36
+ ),
37
+ )
38
+ .override_usage(
39
+ format_usage(&::std::string::String::from("readlink [OPTION]... [FILE]...")),
40
+ )
41
+ .infer_long_args(true)
42
+ .arg(
43
+ Arg::new(OPT_CANONICALIZE)
44
+ .short('f')
45
+ .long(OPT_CANONICALIZE)
46
+ .help(
47
+ ::std::string::String::from(
48
+ "canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist",
49
+ ),
50
+ )
51
+ .action(ArgAction::SetTrue),
52
+ )
53
+ .arg(
54
+ Arg::new(OPT_CANONICALIZE_EXISTING)
55
+ .short('e')
56
+ .long("canonicalize-existing")
57
+ .help(
58
+ ::std::string::String::from(
59
+ "canonicalize by following every symlink in every component of the given name recursively, all components must exist",
60
+ ),
61
+ )
62
+ .action(ArgAction::SetTrue),
63
+ )
64
+ .arg(
65
+ Arg::new(OPT_CANONICALIZE_MISSING)
66
+ .short('m')
67
+ .long(OPT_CANONICALIZE_MISSING)
68
+ .help(
69
+ ::std::string::String::from(
70
+ "canonicalize by following every symlink in every component of the given name recursively, without requirements on components existence",
71
+ ),
72
+ )
73
+ .action(ArgAction::SetTrue),
74
+ )
75
+ .arg(
76
+ Arg::new(OPT_NO_NEWLINE)
77
+ .short('n')
78
+ .long(OPT_NO_NEWLINE)
79
+ .help(
80
+ ::std::string::String::from("do not output the trailing delimiter"),
81
+ )
82
+ .action(ArgAction::SetTrue),
83
+ )
84
+ .arg(
85
+ Arg::new(OPT_QUIET)
86
+ .short('q')
87
+ .long(OPT_QUIET)
88
+ .help(::std::string::String::from("suppress most error messages"))
89
+ .overrides_with_all([OPT_QUIET, OPT_SILENT, OPT_VERBOSE])
90
+ .action(ArgAction::SetTrue),
91
+ )
92
+ .arg(
93
+ Arg::new(OPT_SILENT)
94
+ .short('s')
95
+ .long(OPT_SILENT)
96
+ .help(::std::string::String::from("suppress most error messages"))
97
+ .overrides_with_all([OPT_QUIET, OPT_SILENT, OPT_VERBOSE])
98
+ .action(ArgAction::SetTrue),
99
+ )
100
+ .arg(
101
+ Arg::new(OPT_VERBOSE)
102
+ .short('v')
103
+ .long(OPT_VERBOSE)
104
+ .help(::std::string::String::from("report error message"))
105
+ .overrides_with_all([OPT_QUIET, OPT_SILENT, OPT_VERBOSE])
106
+ .action(ArgAction::SetTrue),
107
+ )
108
+ .arg(
109
+ Arg::new(OPT_ZERO)
110
+ .short('z')
111
+ .long(OPT_ZERO)
112
+ .help(
113
+ ::std::string::String::from(
114
+ "separate output with NUL rather than newline",
115
+ ),
116
+ )
117
+ .action(ArgAction::SetTrue),
118
+ )
119
+ .arg(
120
+ Arg::new(ARG_FILES)
121
+ .action(ArgAction::Append)
122
+ .value_parser(clap::value_parser!(OsString))
123
+ .value_hint(clap::ValueHint::AnyPath),
124
+ )
125
+ }