bashkit 0.1.18__tar.gz → 0.1.19__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 (436) hide show
  1. {bashkit-0.1.18 → bashkit-0.1.19}/Cargo.lock +9 -9
  2. {bashkit-0.1.18 → bashkit-0.1.19}/Cargo.toml +1 -1
  3. bashkit-0.1.19/PKG-INFO +402 -0
  4. bashkit-0.1.19/README.md +365 -0
  5. {bashkit-0.1.18 → bashkit-0.1.19}/bashkit/__init__.py +27 -8
  6. bashkit-0.1.19/bashkit/_bashkit.pyi +1135 -0
  7. {bashkit-0.1.18 → bashkit-0.1.19}/bashkit/deepagents.py +20 -5
  8. {bashkit-0.1.18 → bashkit-0.1.19}/bashkit/langchain.py +18 -4
  9. {bashkit-0.1.18 → bashkit-0.1.19}/bashkit/pydantic_ai.py +7 -2
  10. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/README.md +23 -0
  11. bashkit-0.1.19/crates/bashkit/docs/credential-injection.md +191 -0
  12. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/scripted_tool.rs +4 -4
  13. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/fileops.rs +192 -10
  14. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/help.rs +1 -1
  15. bashkit-0.1.19/crates/bashkit/src/credential.rs +528 -0
  16. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/backend.rs +6 -0
  17. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/memory.rs +20 -0
  18. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/mountable.rs +7 -0
  19. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/overlay.rs +54 -0
  20. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/posix.rs +6 -0
  21. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/realfs.rs +10 -2
  22. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/traits.rs +5 -0
  23. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/git/mod.rs +1 -0
  24. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/interpreter/mod.rs +64 -8
  25. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/lib.rs +124 -3
  26. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/parser/ast.rs +34 -0
  27. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/parser/lexer.rs +25 -2
  28. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/parser/mod.rs +90 -29
  29. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/parser/tokens.rs +7 -0
  30. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/scripted_tool/execute.rs +103 -117
  31. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/scripted_tool/mod.rs +372 -151
  32. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/scripted_tool/toolset.rs +205 -28
  33. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/ssh/config.rs +10 -7
  34. bashkit-0.1.19/crates/bashkit/src/tool_def.rs +440 -0
  35. bashkit-0.1.19/crates/bashkit/tests/credential_injection_tests.rs +578 -0
  36. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/fileops.test.sh +9 -0
  37. bashkit-0.1.19/crates/bashkit-python/README.md +365 -0
  38. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/examples/bash_basics.py +29 -1
  39. bashkit-0.1.19/crates/bashkit-python/examples/data_pipeline.py +306 -0
  40. bashkit-0.1.19/crates/bashkit-python/examples/llm_tool.py +216 -0
  41. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/src/lib.rs +813 -41
  42. bashkit-0.1.18/crates/bashkit-python/tests/test_bashkit.py → bashkit-0.1.19/crates/bashkit-python/tests/_bashkit_categories.py +255 -1
  43. bashkit-0.1.18/crates/bashkit-python/tests/test_security_advanced.py → bashkit-0.1.19/crates/bashkit-python/tests/_security_advanced.py +10 -10
  44. bashkit-0.1.19/crates/bashkit-python/tests/_security_core.py +563 -0
  45. bashkit-0.1.18/crates/bashkit-python/tests/test_frameworks.py → bashkit-0.1.19/crates/bashkit-python/tests/test_ai_adapters.py +3 -3
  46. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/tests/test_async_callbacks.py +8 -0
  47. bashkit-0.1.19/crates/bashkit-python/tests/test_basic.py +63 -0
  48. bashkit-0.1.19/crates/bashkit-python/tests/test_builtins.py +325 -0
  49. bashkit-0.1.19/crates/bashkit-python/tests/test_control_flow.py +24 -0
  50. bashkit-0.1.19/crates/bashkit-python/tests/test_error_handling.py +43 -0
  51. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/tests/test_langgraph_integration.py +3 -1
  52. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/tests/test_python_security.py +8 -8
  53. bashkit-0.1.19/crates/bashkit-python/tests/test_scripts.py +300 -0
  54. bashkit-0.1.19/crates/bashkit-python/tests/test_security.py +66 -0
  55. bashkit-0.1.19/crates/bashkit-python/tests/test_strings_and_quoting.py +243 -0
  56. bashkit-0.1.19/crates/bashkit-python/tests/test_tool_metadata.py +44 -0
  57. bashkit-0.1.19/crates/bashkit-python/tests/test_vfs.py +42 -0
  58. bashkit-0.1.18/PKG-INFO +0 -313
  59. bashkit-0.1.18/README.md +0 -276
  60. bashkit-0.1.18/bashkit/_bashkit.pyi +0 -210
  61. bashkit-0.1.18/crates/bashkit-python/README.md +0 -276
  62. bashkit-0.1.18/crates/bashkit-python/tests/test_security.py +0 -283
  63. {bashkit-0.1.18 → bashkit-0.1.19}/bashkit/py.typed +0 -0
  64. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/Cargo.toml +0 -0
  65. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/benches/parallel_execution.rs +0 -0
  66. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/docs/compatibility.md +0 -0
  67. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/docs/custom_builtins.md +0 -0
  68. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/docs/hooks.md +0 -0
  69. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/docs/live_mounts.md +0 -0
  70. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/docs/logging.md +0 -0
  71. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/docs/python.md +0 -0
  72. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/docs/ssh.md +0 -0
  73. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/docs/threat-model.md +0 -0
  74. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/docs/typescript.md +0 -0
  75. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/agent_tool.rs +0 -0
  76. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/basic.rs +0 -0
  77. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/custom_backend.rs +0 -0
  78. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/custom_builtins.rs +0 -0
  79. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/custom_filesystem_impl.rs +0 -0
  80. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/custom_fs.rs +0 -0
  81. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/git_workflow.rs +0 -0
  82. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/live_mounts.rs +0 -0
  83. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/python_external_functions.rs +0 -0
  84. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/python_scripts.rs +0 -0
  85. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/realfs_readonly.rs +0 -0
  86. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/realfs_readwrite.rs +0 -0
  87. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/resource_limits.rs +0 -0
  88. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/show_tool_output.rs +0 -0
  89. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/ssh_supabase.rs +0 -0
  90. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/streaming_output.rs +0 -0
  91. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/text_files.rs +0 -0
  92. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/text_processing.rs +0 -0
  93. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/typescript_external_functions.rs +0 -0
  94. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/typescript_scripts.rs +0 -0
  95. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/examples/virtual_identity.rs +0 -0
  96. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/alias.rs +0 -0
  97. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/archive.rs +0 -0
  98. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/arg_parser.rs +0 -0
  99. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/assert.rs +0 -0
  100. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/awk.rs +0 -0
  101. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/base64.rs +0 -0
  102. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/bc.rs +0 -0
  103. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/caller.rs +0 -0
  104. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/cat.rs +0 -0
  105. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/checksum.rs +0 -0
  106. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/clear.rs +0 -0
  107. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/column.rs +0 -0
  108. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/comm.rs +0 -0
  109. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/compgen.rs +0 -0
  110. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/csv.rs +0 -0
  111. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/curl.rs +0 -0
  112. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/cuttr.rs +0 -0
  113. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/date.rs +0 -0
  114. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/diff.rs +0 -0
  115. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/dirstack.rs +0 -0
  116. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/disk.rs +0 -0
  117. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/dotenv.rs +0 -0
  118. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/echo.rs +0 -0
  119. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/environ.rs +0 -0
  120. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/envsubst.rs +0 -0
  121. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/expand.rs +0 -0
  122. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/export.rs +0 -0
  123. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/expr.rs +0 -0
  124. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/fc.rs +0 -0
  125. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/flow.rs +0 -0
  126. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/fold.rs +0 -0
  127. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/git.rs +0 -0
  128. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/glob_cmd.rs +0 -0
  129. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/grep.rs +0 -0
  130. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/headtail.rs +0 -0
  131. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/hextools.rs +0 -0
  132. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/http.rs +0 -0
  133. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/iconv.rs +0 -0
  134. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/inspect.rs +0 -0
  135. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/introspect.rs +0 -0
  136. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/join.rs +0 -0
  137. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/jq.rs +0 -0
  138. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/json.rs +0 -0
  139. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/log.rs +0 -0
  140. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/ls.rs +0 -0
  141. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/mapfile.rs +0 -0
  142. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/mkfifo.rs +0 -0
  143. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/mod.rs +0 -0
  144. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/navigation.rs +0 -0
  145. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/nl.rs +0 -0
  146. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/numfmt.rs +0 -0
  147. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/parallel.rs +0 -0
  148. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/paste.rs +0 -0
  149. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/patch.rs +0 -0
  150. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/path.rs +0 -0
  151. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/pipeline.rs +0 -0
  152. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/printf.rs +0 -0
  153. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/python.rs +0 -0
  154. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/read.rs +0 -0
  155. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/retry.rs +0 -0
  156. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/rg.rs +0 -0
  157. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/search_common.rs +0 -0
  158. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/sed.rs +0 -0
  159. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/semver.rs +0 -0
  160. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/seq.rs +0 -0
  161. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/sleep.rs +0 -0
  162. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/sortuniq.rs +0 -0
  163. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/source.rs +0 -0
  164. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/split.rs +0 -0
  165. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/ssh.rs +0 -0
  166. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/strings.rs +0 -0
  167. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/system.rs +0 -0
  168. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/template.rs +0 -0
  169. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/test.rs +0 -0
  170. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/textrev.rs +0 -0
  171. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/timeout.rs +0 -0
  172. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/tomlq.rs +0 -0
  173. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/trap.rs +0 -0
  174. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/tree.rs +0 -0
  175. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/typescript.rs +0 -0
  176. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/vars.rs +0 -0
  177. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/verify.rs +0 -0
  178. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/wait.rs +0 -0
  179. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/wc.rs +0 -0
  180. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/yaml.rs +0 -0
  181. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/yes.rs +0 -0
  182. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/builtins/zip_cmd.rs +0 -0
  183. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/error.rs +0 -0
  184. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/limits.rs +0 -0
  185. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/mod.rs +0 -0
  186. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/fs/search.rs +0 -0
  187. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/git/client.rs +0 -0
  188. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/git/config.rs +0 -0
  189. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/hooks.rs +0 -0
  190. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/interpreter/glob.rs +0 -0
  191. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/interpreter/jobs.rs +0 -0
  192. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/interpreter/state.rs +0 -0
  193. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/limits.rs +0 -0
  194. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/logging_impl.rs +0 -0
  195. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/network/allowlist.rs +0 -0
  196. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/network/bot_auth.rs +0 -0
  197. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/network/client.rs +0 -0
  198. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/network/mod.rs +0 -0
  199. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/parser/budget.rs +0 -0
  200. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/parser/span.rs +0 -0
  201. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/snapshot.rs +0 -0
  202. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/ssh/allowlist.rs +0 -0
  203. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/ssh/client.rs +0 -0
  204. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/ssh/handler.rs +0 -0
  205. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/ssh/mod.rs +0 -0
  206. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/ssh/russh_handler.rs +0 -0
  207. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/tool.rs +0 -0
  208. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/src/trace.rs +0 -0
  209. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/allexport_tests.rs +0 -0
  210. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/awk_fuzz_scaffold_tests.rs +0 -0
  211. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/awk_newline_tests.rs +0 -0
  212. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/awk_pattern_tests.rs +0 -0
  213. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/awk_printf_expr_test.rs +0 -0
  214. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/background_exec_tests.rs +0 -0
  215. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/bash_source_tests.rs +0 -0
  216. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/blackbox_security_tests.rs +0 -0
  217. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/builtin_error_security_tests.rs +0 -0
  218. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/byte_range_panic_tests.rs +0 -0
  219. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/cancellation_tests.rs +0 -0
  220. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/cmdsub_quote_test.rs +0 -0
  221. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/coproc_tests.rs +0 -0
  222. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/custom_builtins_tests.rs +0 -0
  223. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/custom_fs_tests.rs +0 -0
  224. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/dev_null_tests.rs +0 -0
  225. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/final_env_tests.rs +0 -0
  226. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/find_multi_path_tests.rs +0 -0
  227. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/git_advanced_tests.rs +0 -0
  228. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/git_inspection_tests.rs +0 -0
  229. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/git_integration_tests.rs +0 -0
  230. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/git_remote_security_tests.rs +0 -0
  231. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/git_security_tests.rs +0 -0
  232. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/history_tests.rs +0 -0
  233. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_1175_test.rs +0 -0
  234. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_274_test.rs +0 -0
  235. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_275_279_282_test.rs +0 -0
  236. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_276_test.rs +0 -0
  237. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_277_test.rs +0 -0
  238. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_289_test.rs +0 -0
  239. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_290_test.rs +0 -0
  240. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_291_test.rs +0 -0
  241. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_853_test.rs +0 -0
  242. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_872_test.rs +0 -0
  243. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_873_test.rs +0 -0
  244. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/issue_875_test.rs +0 -0
  245. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/jq_fuzz_scaffold_tests.rs +0 -0
  246. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/live_mount_tests.rs +0 -0
  247. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/logging_security_tests.rs +0 -0
  248. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/mkfifo_tests.rs +0 -0
  249. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/nested_subscript_tests.rs +0 -0
  250. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/network_security_tests.rs +0 -0
  251. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/output_truncation_tests.rs +0 -0
  252. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/overlay_path_validation_tests.rs +0 -0
  253. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/proptest_differential.rs +0 -0
  254. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/proptest_security.rs +0 -0
  255. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/python_integration_tests.rs +0 -0
  256. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/python_security_tests.rs +0 -0
  257. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/realfs_tests.rs +0 -0
  258. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/regex_limit_tests.rs +0 -0
  259. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/script_execution_tests.rs +0 -0
  260. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/security_audit_pocs.rs +0 -0
  261. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/security_failpoint_tests.rs +0 -0
  262. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/set_e_and_or_tests.rs +0 -0
  263. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/azure_discover_rank.sh +0 -0
  264. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/azure_generate_url.sh +0 -0
  265. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/azure_query_capacity.sh +0 -0
  266. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/helm_validate_chart.sh +0 -0
  267. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/jwt_test_setup.sh +0 -0
  268. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/stitch_download_asset.sh +0 -0
  269. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/stitch_fetch.sh +0 -0
  270. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/stitch_verify_setup.sh +0 -0
  271. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/superpowers_find_polluter.sh +0 -0
  272. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_fixtures/vercel_deploy.sh +0 -0
  273. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/skills_tests.rs +0 -0
  274. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/snapshot_tests.rs +0 -0
  275. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/source_function_tests.rs +0 -0
  276. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/awk/awk.test.sh +0 -0
  277. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/awk/delete-array.test.sh +0 -0
  278. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/awk/dev-stderr.test.sh +0 -0
  279. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/awk/eval-bugs.test.sh +0 -0
  280. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/awk/filename.test.sh +0 -0
  281. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/awk/getline-file.test.sh +0 -0
  282. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/alias.test.sh +0 -0
  283. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/append_redirect.test.sh +0 -0
  284. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/arith-dynamic.test.sh +0 -0
  285. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/arithmetic-base-expansion.test.sh +0 -0
  286. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/arithmetic.test.sh +0 -0
  287. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/array-slicing.test.sh +0 -0
  288. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/array-splat.test.sh +0 -0
  289. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/arrays.test.sh +0 -0
  290. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/assoc-arrays.test.sh +0 -0
  291. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/awk-printf-width.test.sh +0 -0
  292. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/background.test.sh +0 -0
  293. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/bash-c-exports.test.sh +0 -0
  294. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/bash-command.test.sh +0 -0
  295. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/bash-flags.test.sh +0 -0
  296. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/bash-source-var.test.sh +0 -0
  297. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/bash-stdin-pipe.test.sh +0 -0
  298. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/bc.test.sh +0 -0
  299. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/blackbox-edge-cases.test.sh +0 -0
  300. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/blackbox-exploration.test.sh +0 -0
  301. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/brace-expansion.test.sh +0 -0
  302. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/brace_expansion_lookahead.test.sh +0 -0
  303. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/checksum.test.sh +0 -0
  304. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/chown-kill.test.sh +0 -0
  305. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/cmd-suggestions.test.sh +0 -0
  306. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/cmdsub_depth_unquoted.test.sh +0 -0
  307. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/column.test.sh +0 -0
  308. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/comm.test.sh +0 -0
  309. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/command-not-found.test.sh +0 -0
  310. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/command-subst.test.sh +0 -0
  311. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/command.test.sh +0 -0
  312. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/command_v.test.sh +0 -0
  313. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/compgen-path.test.sh +0 -0
  314. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/conditional-short-circuit.test.sh +0 -0
  315. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/conditional.test.sh +0 -0
  316. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/control-flow.test.sh +0 -0
  317. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/cuttr.test.sh +0 -0
  318. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/date.test.sh +0 -0
  319. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/declare.test.sh +0 -0
  320. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/df.test.sh +0 -0
  321. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/diff.test.sh +0 -0
  322. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/dirstack.test.sh +0 -0
  323. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/du.test.sh +0 -0
  324. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/echo.test.sh +0 -0
  325. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/empty-bodies.test.sh +0 -0
  326. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/env.test.sh +0 -0
  327. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/errexit.test.sh +0 -0
  328. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/eval-bugs.test.sh +0 -0
  329. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/exec-command.test.sh +0 -0
  330. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/exec-fd-redirect.test.sh +0 -0
  331. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/exec-fd-variable.test.sh +0 -0
  332. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/exit-status.test.sh +0 -0
  333. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/expr.test.sh +0 -0
  334. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/extglob.test.sh +0 -0
  335. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/file.test.sh +0 -0
  336. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/find.test.sh +0 -0
  337. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/functions.test.sh +0 -0
  338. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/getopts.test.sh +0 -0
  339. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/glob-options.test.sh +0 -0
  340. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/glob_match_cap.test.sh +0 -0
  341. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/globs.test.sh +0 -0
  342. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/gzip.test.sh +0 -0
  343. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/headtail.test.sh +0 -0
  344. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/help-flag.test.sh +0 -0
  345. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/heredoc-edge.test.sh +0 -0
  346. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/heredoc.test.sh +0 -0
  347. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/herestring.test.sh +0 -0
  348. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/hextools.test.sh +0 -0
  349. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/history.test.sh +0 -0
  350. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/indirect-expansion.test.sh +0 -0
  351. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/less.test.sh +0 -0
  352. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/ln.test.sh +0 -0
  353. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/ls.test.sh +0 -0
  354. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/memory_budget_desync.test.sh +0 -0
  355. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/nameref-assoc.test.sh +0 -0
  356. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/nameref.test.sh +0 -0
  357. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/negative-tests.test.sh +0 -0
  358. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/nl.test.sh +0 -0
  359. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/nounset.test.sh +0 -0
  360. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/numfmt.test.sh +0 -0
  361. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/parse-errors.test.sh +0 -0
  362. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/paste-flags.test.sh +0 -0
  363. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/paste.test.sh +0 -0
  364. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/path.test.sh +0 -0
  365. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/pipes-redirects.test.sh +0 -0
  366. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/printenv.test.sh +0 -0
  367. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/printf.test.sh +0 -0
  368. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/procsub.test.sh +0 -0
  369. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/quote.test.sh +0 -0
  370. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/read-builtin.test.sh +0 -0
  371. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/recursive-cmdsub.test.sh +0 -0
  372. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/regex-limit.test.sh +0 -0
  373. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/replace_pattern_limit.test.sh +0 -0
  374. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/script-exec.test.sh +0 -0
  375. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/seq.test.sh +0 -0
  376. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/set-allexport.test.sh +0 -0
  377. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/shell-grammar.test.sh +0 -0
  378. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/sleep.test.sh +0 -0
  379. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/sortuniq.test.sh +0 -0
  380. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/source.test.sh +0 -0
  381. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/stat.test.sh +0 -0
  382. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/string-ops.test.sh +0 -0
  383. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/strings.test.sh +0 -0
  384. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/subprocess-isolation.test.sh +0 -0
  385. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/subshell.test.sh +0 -0
  386. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/tar.test.sh +0 -0
  387. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/tar_create.test.sh +0 -0
  388. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/tee.test.sh +0 -0
  389. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/temp-binding.test.sh +0 -0
  390. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/test-operators.test.sh +0 -0
  391. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/test-tty.test.sh +0 -0
  392. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/textrev.test.sh +0 -0
  393. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/time.test.sh +0 -0
  394. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/timeout.test.sh +0 -0
  395. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/tree.test.sh +0 -0
  396. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/type.test.sh +0 -0
  397. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/unicode.test.sh +0 -0
  398. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/unset-exported-var.test.sh +0 -0
  399. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/var-op-test.test.sh +0 -0
  400. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/variables.test.sh +0 -0
  401. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/wait.test.sh +0 -0
  402. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/watch.test.sh +0 -0
  403. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/wc.test.sh +0 -0
  404. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/word-split.test.sh +0 -0
  405. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/bash/xargs.test.sh +0 -0
  406. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/grep/eval-bugs.test.sh +0 -0
  407. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/grep/grep.test.sh +0 -0
  408. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/grep/rg.test.sh +0 -0
  409. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/jq/jq.test.sh +0 -0
  410. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/python/env_leak.test.sh +0 -0
  411. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/python/python.test.sh +0 -0
  412. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/sed/eval-bugs.test.sh +0 -0
  413. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/sed/sed.test.sh +0 -0
  414. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_cases/typescript/typescript.test.sh +0 -0
  415. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_runner.rs +0 -0
  416. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/spec_tests.rs +0 -0
  417. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/ssh_builtin_tests.rs +0 -0
  418. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/ssh_supabase_tests.rs +0 -0
  419. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/stack_overflow_regression_tests.rs +0 -0
  420. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/subst_depth_limit_tests.rs +0 -0
  421. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/symlink_overlay_security_tests.rs +0 -0
  422. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/threat_model_tests.rs +0 -0
  423. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/tty_tests.rs +0 -0
  424. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/typescript_integration_tests.rs +0 -0
  425. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/typescript_security_tests.rs +0 -0
  426. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/unicode_security_tests.rs +0 -0
  427. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/unset_function_tests.rs +0 -0
  428. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit/tests/urandom_tests.rs +0 -0
  429. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/Cargo.toml +0 -0
  430. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/examples/fastapi_async_tool.py +0 -0
  431. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/examples/k8s_orchestrator.py +0 -0
  432. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/examples/langgraph_async_tool.py +0 -0
  433. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/tests/test_fastapi_integration.py +0 -0
  434. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/tests/test_integration.py +0 -0
  435. {bashkit-0.1.18 → bashkit-0.1.19}/crates/bashkit-python/tests/test_shell_injection.py +0 -0
  436. {bashkit-0.1.18 → bashkit-0.1.19}/pyproject.toml +0 -0
@@ -319,7 +319,7 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
319
319
 
320
320
  [[package]]
321
321
  name = "bashkit"
322
- version = "0.1.18"
322
+ version = "0.1.19"
323
323
  dependencies = [
324
324
  "anyhow",
325
325
  "async-trait",
@@ -365,7 +365,7 @@ dependencies = [
365
365
 
366
366
  [[package]]
367
367
  name = "bashkit-bench"
368
- version = "0.1.18"
368
+ version = "0.1.19"
369
369
  dependencies = [
370
370
  "anyhow",
371
371
  "bashkit",
@@ -380,7 +380,7 @@ dependencies = [
380
380
 
381
381
  [[package]]
382
382
  name = "bashkit-cli"
383
- version = "0.1.18"
383
+ version = "0.1.19"
384
384
  dependencies = [
385
385
  "anyhow",
386
386
  "bashkit",
@@ -396,7 +396,7 @@ dependencies = [
396
396
 
397
397
  [[package]]
398
398
  name = "bashkit-eval"
399
- version = "0.1.18"
399
+ version = "0.1.19"
400
400
  dependencies = [
401
401
  "anyhow",
402
402
  "async-trait",
@@ -412,7 +412,7 @@ dependencies = [
412
412
 
413
413
  [[package]]
414
414
  name = "bashkit-js"
415
- version = "0.1.18"
415
+ version = "0.1.19"
416
416
  dependencies = [
417
417
  "bashkit",
418
418
  "napi",
@@ -425,7 +425,7 @@ dependencies = [
425
425
 
426
426
  [[package]]
427
427
  name = "bashkit-python"
428
- version = "0.1.18"
428
+ version = "0.1.19"
429
429
  dependencies = [
430
430
  "bashkit",
431
431
  "num-bigint",
@@ -4607,9 +4607,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
4607
4607
 
4608
4608
  [[package]]
4609
4609
  name = "rustls-webpki"
4610
- version = "0.103.10"
4610
+ version = "0.103.12"
4611
4611
  source = "registry+https://github.com/rust-lang/crates.io-index"
4612
- checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef"
4612
+ checksum = "8279bb85272c9f10811ae6a6c547ff594d6a7f3c6c6b02ee9726d1d0dcfcdd06"
4613
4613
  dependencies = [
4614
4614
  "aws-lc-rs",
4615
4615
  "ring",
@@ -5321,7 +5321,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
5321
5321
  checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
5322
5322
  dependencies = [
5323
5323
  "fastrand",
5324
- "getrandom 0.3.4",
5324
+ "getrandom 0.4.2",
5325
5325
  "once_cell",
5326
5326
  "rustix",
5327
5327
  "windows-sys 0.61.2",
@@ -7,7 +7,7 @@ resolver = "2"
7
7
  members = ["crates/*"]
8
8
 
9
9
  [workspace.package]
10
- version = "0.1.18"
10
+ version = "0.1.19"
11
11
  edition = "2024"
12
12
  license = "MIT"
13
13
  authors = ["Everruns"]
@@ -0,0 +1,402 @@
1
+ Metadata-Version: 2.4
2
+ Name: bashkit
3
+ Version: 0.1.19
4
+ Classifier: Development Status :: 4 - Beta
5
+ Classifier: Intended Audience :: Developers
6
+ Classifier: License :: OSI Approved :: MIT License
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Programming Language :: Python :: 3.9
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Rust
14
+ Classifier: Topic :: Software Development :: Interpreters
15
+ Classifier: Topic :: Security
16
+ Requires-Dist: deepagents>=0.3.11 ; extra == 'deepagents'
17
+ Requires-Dist: langchain-anthropic>=0.3 ; extra == 'deepagents'
18
+ Requires-Dist: pytest>=7.0 ; extra == 'dev'
19
+ Requires-Dist: pytest-asyncio>=0.23 ; extra == 'dev'
20
+ Requires-Dist: langchain-core>=0.3 ; extra == 'langchain'
21
+ Requires-Dist: langchain-anthropic>=0.3 ; extra == 'langchain'
22
+ Requires-Dist: pydantic-ai>=1.0 ; extra == 'pydantic-ai'
23
+ Provides-Extra: deepagents
24
+ Provides-Extra: dev
25
+ Provides-Extra: langchain
26
+ Provides-Extra: pydantic-ai
27
+ Summary: A sandboxed bash interpreter for AI agents
28
+ Keywords: bash,sandbox,ai,agent,shell,interpreter
29
+ License: MIT
30
+ Requires-Python: >=3.9
31
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
32
+ Project-URL: Changelog, https://github.com/everruns/bashkit/releases
33
+ Project-URL: Homepage, https://github.com/everruns/bashkit
34
+ Project-URL: Issues, https://github.com/everruns/bashkit/issues
35
+ Project-URL: Repository, https://github.com/everruns/bashkit
36
+
37
+ # Bashkit
38
+
39
+ [![PyPI](https://img.shields.io/pypi/v/bashkit)](https://pypi.org/project/bashkit/)
40
+
41
+ Sandboxed bash interpreter for Python. Native bindings to the `bashkit` Rust core for fast, in-process execution with a virtual filesystem.
42
+
43
+ ## Features
44
+
45
+ - Sandboxed execution in-process, without containers or subprocess orchestration
46
+ - Full bash syntax: variables, pipelines, redirects, loops, functions, and arrays
47
+ - 160 built-in commands including `grep`, `sed`, `awk`, `jq`, `curl`, and `find`
48
+ - Persistent interpreter state across calls, including variables, cwd, and VFS contents
49
+ - Direct virtual filesystem APIs, constructor mounts, and live host mounts
50
+ - Snapshot and restore support on `Bash` and `BashTool`
51
+ - AI integrations for LangChain, PydanticAI, and Deep Agents
52
+
53
+ ## Installation
54
+
55
+ ```bash
56
+ pip install bashkit
57
+
58
+ # Optional integrations
59
+ pip install 'bashkit[langchain]'
60
+ pip install 'bashkit[pydantic-ai]'
61
+ pip install 'bashkit[deepagents]'
62
+ ```
63
+
64
+ ## Quick Start
65
+
66
+ ### Sync Execution
67
+
68
+ ```python
69
+ from bashkit import Bash
70
+
71
+ bash = Bash()
72
+
73
+ result = bash.execute_sync("echo 'Hello, World!'")
74
+ print(result.stdout) # Hello, World!
75
+
76
+ bash.execute_sync("export APP_ENV=dev")
77
+ print(bash.execute_sync("echo $APP_ENV").stdout) # dev
78
+ ```
79
+
80
+ ### Async Execution
81
+
82
+ ```python
83
+ import asyncio
84
+ from bashkit import Bash
85
+
86
+
87
+ async def main():
88
+ bash = Bash()
89
+
90
+ result = await bash.execute("echo -e 'banana\\napple\\ncherry' | sort")
91
+ print(result.stdout) # apple\nbanana\ncherry
92
+
93
+ await bash.execute("printf 'data\\n' > /tmp/file.txt")
94
+ saved = await bash.execute("cat /tmp/file.txt")
95
+ print(saved.stdout) # data
96
+
97
+
98
+ asyncio.run(main())
99
+ ```
100
+
101
+ ## Configuration
102
+
103
+ ### Constructor Options
104
+
105
+ ```python
106
+ from bashkit import Bash
107
+
108
+ bash = Bash(
109
+ username="agent",
110
+ hostname="sandbox",
111
+ max_commands=1000,
112
+ max_loop_iterations=10000,
113
+ max_memory=10 * 1024 * 1024,
114
+ timeout_seconds=30,
115
+ python=False,
116
+ )
117
+ ```
118
+
119
+ ## Virtual Filesystem
120
+
121
+ ### Direct Methods on Bash and BashTool
122
+
123
+ ```python
124
+ from bashkit import Bash
125
+
126
+ bash = Bash()
127
+ bash.mkdir("/data", recursive=True)
128
+ bash.write_file("/data/config.json", '{"debug": true}\n')
129
+ bash.append_file("/data/config.json", '{"trace": false}\n')
130
+
131
+ print(bash.read_file("/data/config.json"))
132
+ print(bash.exists("/data/config.json"))
133
+ print(bash.ls("/data"))
134
+ print(bash.glob("/data/*.json"))
135
+ ```
136
+
137
+ The same direct filesystem helpers are available on `BashTool()`.
138
+
139
+ ### FileSystem Accessor
140
+
141
+ ```python
142
+ from bashkit import Bash
143
+
144
+ bash = Bash()
145
+ fs = bash.fs()
146
+
147
+ fs.mkdir("/data", recursive=True)
148
+ fs.write_file("/data/blob.bin", b"\x00\x01hello")
149
+ fs.copy("/data/blob.bin", "/data/backup.bin")
150
+
151
+ assert fs.read_file("/data/blob.bin") == b"\x00\x01hello"
152
+ assert fs.exists("/data/backup.bin")
153
+ ```
154
+
155
+ ### Pre-Initialized Files
156
+
157
+ ```python
158
+ from bashkit import Bash
159
+
160
+ bash = Bash(files={
161
+ "/config/static.txt": "ready\n",
162
+ "/config/report.json": lambda: '{"ok": true}\n',
163
+ })
164
+
165
+ print(bash.execute_sync("cat /config/static.txt").stdout)
166
+ print(bash.execute_sync("cat /config/report.json").stdout)
167
+ ```
168
+
169
+ ### Real Filesystem Mounts
170
+
171
+ ```python
172
+ from bashkit import Bash
173
+
174
+ bash = Bash(mounts=[
175
+ {"host_path": "/path/to/data", "vfs_path": "/data"},
176
+ {"host_path": "/path/to/workspace", "vfs_path": "/workspace", "writable": True},
177
+ ])
178
+
179
+ print(bash.execute_sync("ls /workspace").stdout)
180
+ ```
181
+
182
+ ### Live Mounts
183
+
184
+ ```python
185
+ from bashkit import Bash, FileSystem
186
+
187
+ bash = Bash()
188
+ workspace = FileSystem.real("/path/to/workspace", writable=True)
189
+
190
+ bash.mount("/workspace", workspace)
191
+ bash.execute_sync("echo 'hello' > /workspace/demo.txt")
192
+ bash.unmount("/workspace")
193
+ ```
194
+
195
+ ## Error Handling
196
+
197
+ ```python
198
+ from bashkit import Bash, BashError
199
+
200
+ bash = Bash()
201
+
202
+ try:
203
+ bash.execute_sync_or_throw("exit 42")
204
+ except BashError as err:
205
+ print(err.exit_code) # 42
206
+ print(err.stderr)
207
+ print(str(err))
208
+ ```
209
+
210
+ Use `execute_or_throw()` and `execute_sync_or_throw()` when you want failures surfaced as exceptions instead of inspecting `exit_code` manually.
211
+
212
+ ## Cancellation
213
+
214
+ ```python
215
+ from bashkit import Bash
216
+
217
+ bash = Bash()
218
+
219
+ bash.cancel() # no-op if nothing is running
220
+ bash.reset() # reset state before reusing the instance
221
+ ```
222
+
223
+ `BashTool` exposes the same `cancel()` and `reset()` methods.
224
+
225
+ ## BashTool
226
+
227
+ `BashTool` wraps `Bash` and adds tool-contract metadata for agent frameworks:
228
+
229
+ - `name`
230
+ - `short_description`
231
+ - `version`
232
+ - `description()`
233
+ - `help()`
234
+ - `system_prompt()`
235
+ - `input_schema()`
236
+ - `output_schema()`
237
+
238
+ ```python
239
+ from bashkit import BashTool
240
+
241
+ tool = BashTool()
242
+
243
+ print(tool.description())
244
+ print(tool.input_schema())
245
+
246
+ result = tool.execute_sync("echo 'Hello from BashTool'")
247
+ print(result.stdout)
248
+ ```
249
+
250
+ ## ScriptedTool
251
+
252
+ Use `ScriptedTool` to register Python callbacks as bash-callable tools:
253
+
254
+ ```python
255
+ from bashkit import ScriptedTool
256
+
257
+
258
+ def get_user(params, stdin=None):
259
+ return '{"id": 1, "name": "Alice"}'
260
+
261
+
262
+ tool = ScriptedTool("api")
263
+ tool.add_tool(
264
+ "get_user",
265
+ "Fetch user by ID",
266
+ callback=get_user,
267
+ schema={"type": "object", "properties": {"id": {"type": "integer"}}},
268
+ )
269
+
270
+ result = tool.execute_sync("get_user --id 1 | jq -r '.name'")
271
+ print(result.stdout) # Alice
272
+ ```
273
+
274
+ ## Snapshot / Restore
275
+
276
+ ```python
277
+ from bashkit import Bash
278
+
279
+ bash = Bash(username="agent", max_commands=100)
280
+ bash.execute_sync("export BUILD_ID=42; mkdir -p /workspace && cd /workspace && echo ready > state.txt")
281
+
282
+ snapshot = bash.snapshot()
283
+
284
+ restored = Bash.from_snapshot(snapshot, username="agent", max_commands=100)
285
+ assert restored.execute_sync("echo $BUILD_ID").stdout.strip() == "42"
286
+ assert restored.execute_sync("cat /workspace/state.txt").stdout.strip() == "ready"
287
+
288
+ restored.reset()
289
+ restored.restore_snapshot(snapshot)
290
+ assert restored.execute_sync("pwd").stdout.strip() == "/workspace"
291
+ ```
292
+
293
+ `BashTool` exposes the same `snapshot()`, `restore_snapshot(...)`, and `from_snapshot(...)` APIs.
294
+
295
+ ## Framework Integrations
296
+
297
+ ### LangChain
298
+
299
+ ```python
300
+ from bashkit.langchain import create_bash_tool
301
+
302
+ tool = create_bash_tool()
303
+ ```
304
+
305
+ ### PydanticAI
306
+
307
+ ```python
308
+ from bashkit.pydantic_ai import create_bash_tool
309
+
310
+ tool = create_bash_tool()
311
+ ```
312
+
313
+ ### Deep Agents
314
+
315
+ ```python
316
+ from bashkit.deepagents import BashkitBackend, BashkitMiddleware
317
+ ```
318
+
319
+ ## API Reference
320
+
321
+ ### Bash
322
+
323
+ - `execute(commands: str) -> ExecResult`
324
+ - `execute_sync(commands: str) -> ExecResult`
325
+ - `execute_or_throw(commands: str) -> ExecResult`
326
+ - `execute_sync_or_throw(commands: str) -> ExecResult`
327
+ - `cancel()`
328
+ - `reset()`
329
+ - `snapshot() -> bytes`
330
+ - `restore_snapshot(data: bytes)`
331
+ - `from_snapshot(data: bytes, **kwargs) -> Bash`
332
+ - `mount(vfs_path: str, fs: FileSystem)`
333
+ - `unmount(vfs_path: str)`
334
+ - Direct VFS helpers: `read_file`, `write_file`, `append_file`, `mkdir`, `remove`, `exists`, `stat`, `read_dir`, `ls`, `glob`, `copy`, `rename`, `symlink`, `chmod`, `read_link`
335
+
336
+ ### BashTool
337
+
338
+ - All execution, cancellation, reset, snapshot, restore, mount, and direct VFS helpers from `Bash`
339
+ - Tool metadata: `name`, `short_description`, `version`
340
+ - `description() -> str`
341
+ - `help() -> str`
342
+ - `system_prompt() -> str`
343
+ - `input_schema() -> str`
344
+ - `output_schema() -> str`
345
+
346
+ ### ScriptedTool
347
+
348
+ - `add_tool(name, description, callback, schema=None)`
349
+ - `execute(script: str) -> ExecResult`
350
+ - `execute_sync(script: str) -> ExecResult`
351
+ - `execute_or_throw(script: str) -> ExecResult`
352
+ - `execute_sync_or_throw(script: str) -> ExecResult`
353
+ - `env(key: str, value: str)`
354
+ - `tool_count() -> int`
355
+
356
+ ### FileSystem
357
+
358
+ - `mkdir(path, recursive=False)`
359
+ - `write_file(path, content)`
360
+ - `read_file(path) -> bytes`
361
+ - `append_file(path, content)`
362
+ - `exists(path) -> bool`
363
+ - `remove(path, recursive=False)`
364
+ - `stat(path) -> dict`
365
+ - `read_dir(path) -> list`
366
+ - `rename(src, dst)`
367
+ - `copy(src, dst)`
368
+ - `symlink(target, link)`
369
+ - `chmod(path, mode)`
370
+ - `read_link(path) -> str`
371
+ - `FileSystem.real(host_path, writable=False) -> FileSystem`
372
+
373
+ ### ExecResult and BashError
374
+
375
+ - `ExecResult.stdout`
376
+ - `ExecResult.stderr`
377
+ - `ExecResult.exit_code`
378
+ - `ExecResult.error`
379
+ - `ExecResult.success`
380
+ - `ExecResult.to_dict()`
381
+ - `BashError.exit_code`
382
+ - `BashError.stderr`
383
+
384
+ ## Platform Support
385
+
386
+ - Linux: `x86_64`, `aarch64` (glibc and musl wheels)
387
+ - macOS: `x86_64`, `aarch64`
388
+ - Windows: `x86_64`
389
+ - Python: `3.9` through `3.13`
390
+
391
+ ## How It Works
392
+
393
+ Bashkit is built on the `bashkit` Rust core, which implements a sandboxed bash interpreter and virtual filesystem. The Python package exposes that engine through a native extension, so commands run in-process with persistent state and resource limits, without shelling out to the host system.
394
+
395
+ ## Part of Everruns
396
+
397
+ Bashkit is part of the [Everruns](https://github.com/everruns) ecosystem. See the [bashkit monorepo](https://github.com/everruns/bashkit) for the Rust core, the JavaScript package (`@everruns/bashkit`), and related tooling.
398
+
399
+ ## License
400
+
401
+ MIT
402
+