bashkit 0.1.10__tar.gz → 0.1.11__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 (326) hide show
  1. {bashkit-0.1.10 → bashkit-0.1.11}/Cargo.lock +17 -17
  2. {bashkit-0.1.10 → bashkit-0.1.11}/Cargo.toml +4 -2
  3. {bashkit-0.1.10 → bashkit-0.1.11}/PKG-INFO +3 -3
  4. {bashkit-0.1.10/crates/bashkit-python → bashkit-0.1.11}/README.md +2 -2
  5. {bashkit-0.1.10 → bashkit-0.1.11}/bashkit/_bashkit.pyi +27 -2
  6. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/Cargo.toml +4 -0
  7. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/README.md +6 -1
  8. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/docs/compatibility.md +4 -2
  9. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/docs/threat-model.md +29 -3
  10. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/custom_filesystem_impl.rs +6 -1
  11. bashkit-0.1.11/crates/bashkit/src/builtins/alias.rs +109 -0
  12. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/archive.rs +22 -1
  13. bashkit-0.1.11/crates/bashkit/src/builtins/arg_parser.rs +346 -0
  14. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/assert.rs +0 -1
  15. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/awk.rs +2 -1
  16. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/bc.rs +0 -1
  17. bashkit-0.1.11/crates/bashkit/src/builtins/caller.rs +54 -0
  18. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/checksum.rs +1 -1
  19. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/clear.rs +1 -0
  20. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/column.rs +13 -21
  21. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/comm.rs +1 -1
  22. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/compgen.rs +1 -1
  23. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/csv.rs +2 -1
  24. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/curl.rs +4 -1
  25. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/cuttr.rs +2 -1
  26. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/date.rs +2 -1
  27. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/diff.rs +1 -1
  28. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/dirstack.rs +0 -1
  29. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/disk.rs +0 -1
  30. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/dotenv.rs +6 -2
  31. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/echo.rs +4 -4
  32. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/environ.rs +178 -29
  33. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/envsubst.rs +1 -0
  34. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/expand.rs +2 -1
  35. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/export.rs +8 -13
  36. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/expr.rs +0 -1
  37. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/fc.rs +0 -1
  38. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/fileops.rs +16 -10
  39. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/flow.rs +0 -1
  40. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/fold.rs +1 -1
  41. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/git.rs +29 -24
  42. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/glob_cmd.rs +2 -1
  43. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/grep.rs +22 -80
  44. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/headtail.rs +67 -42
  45. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/help.rs +0 -1
  46. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/hextools.rs +165 -115
  47. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/http.rs +29 -36
  48. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/iconv.rs +1 -1
  49. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/inspect.rs +20 -1
  50. bashkit-0.1.11/crates/bashkit/src/builtins/introspect.rs +174 -0
  51. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/join.rs +17 -32
  52. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/jq.rs +11 -1
  53. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/json.rs +1 -1
  54. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/log.rs +0 -1
  55. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/ls.rs +506 -107
  56. bashkit-0.1.11/crates/bashkit/src/builtins/mapfile.rs +74 -0
  57. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/mkfifo.rs +1 -2
  58. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/mod.rs +89 -1
  59. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/nl.rs +13 -60
  60. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/parallel.rs +23 -27
  61. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/paste.rs +10 -16
  62. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/patch.rs +31 -21
  63. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/path.rs +6 -4
  64. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/pipeline.rs +225 -112
  65. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/printf.rs +96 -15
  66. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/python.rs +0 -1
  67. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/read.rs +29 -13
  68. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/retry.rs +29 -52
  69. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/rg.rs +15 -61
  70. bashkit-0.1.11/crates/bashkit/src/builtins/search_common.rs +109 -0
  71. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/sed.rs +1 -1
  72. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/semver.rs +1 -1
  73. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/seq.rs +4 -4
  74. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/sleep.rs +1 -1
  75. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/sortuniq.rs +2 -1
  76. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/split.rs +1 -1
  77. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/strings.rs +25 -31
  78. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/system.rs +1 -1
  79. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/template.rs +48 -29
  80. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/test.rs +0 -1
  81. bashkit-0.1.11/crates/bashkit/src/builtins/timeout.rs +345 -0
  82. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/tomlq.rs +2 -1
  83. bashkit-0.1.11/crates/bashkit/src/builtins/trap.rs +76 -0
  84. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/tree.rs +30 -39
  85. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/vars.rs +26 -32
  86. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/verify.rs +1 -1
  87. bashkit-0.1.11/crates/bashkit/src/builtins/wait.rs +68 -0
  88. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/wc.rs +1 -1
  89. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/yaml.rs +40 -10
  90. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/zip_cmd.rs +18 -18
  91. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/error.rs +15 -12
  92. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/fs/backend.rs +0 -1
  93. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/fs/limits.rs +41 -2
  94. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/fs/memory.rs +4 -2
  95. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/fs/mod.rs +25 -10
  96. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/fs/mountable.rs +4 -2
  97. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/fs/overlay.rs +67 -2
  98. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/fs/posix.rs +4 -1
  99. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/fs/realfs.rs +0 -1
  100. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/fs/traits.rs +70 -42
  101. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/git/client.rs +7 -3
  102. bashkit-0.1.11/crates/bashkit/src/interpreter/glob.rs +760 -0
  103. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/interpreter/jobs.rs +0 -1
  104. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/interpreter/mod.rs +2450 -3412
  105. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/interpreter/state.rs +51 -7
  106. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/lib.rs +145 -46
  107. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/limits.rs +369 -1
  108. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/network/allowlist.rs +0 -1
  109. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/network/client.rs +0 -1
  110. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/parser/ast.rs +2 -1
  111. bashkit-0.1.11/crates/bashkit/src/parser/budget.rs +453 -0
  112. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/parser/lexer.rs +38 -2
  113. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/parser/mod.rs +506 -234
  114. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/parser/tokens.rs +15 -0
  115. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/scripted_tool/execute.rs +3 -0
  116. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/tool.rs +21 -4
  117. bashkit-0.1.11/crates/bashkit/src/trace.rs +412 -0
  118. bashkit-0.1.11/crates/bashkit/tests/blackbox_security_tests.rs +1393 -0
  119. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/custom_fs_tests.rs +5 -1
  120. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/dev_null_tests.rs +8 -2
  121. bashkit-0.1.11/crates/bashkit/tests/final_env_tests.rs +82 -0
  122. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/git_inspection_tests.rs +15 -0
  123. bashkit-0.1.11/crates/bashkit/tests/output_truncation_tests.rs +133 -0
  124. bashkit-0.1.11/crates/bashkit/tests/overlay_path_validation_tests.rs +132 -0
  125. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/proptest_differential.rs +1 -1
  126. bashkit-0.1.11/crates/bashkit/tests/python_security_tests.rs +1332 -0
  127. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/script_execution_tests.rs +2 -2
  128. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/security_audit_pocs.rs +10 -6
  129. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/security_failpoint_tests.rs +2 -0
  130. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/snapshot_tests.rs +55 -0
  131. bashkit-0.1.11/crates/bashkit/tests/spec_cases/bash/blackbox-edge-cases.test.sh +688 -0
  132. bashkit-0.1.11/crates/bashkit/tests/spec_cases/bash/blackbox-exploration.test.sh +1486 -0
  133. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/threat_model_tests.rs +1634 -7
  134. bashkit-0.1.11/crates/bashkit/tests/unset_function_tests.rs +48 -0
  135. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit-python/Cargo.toml +5 -2
  136. {bashkit-0.1.10 → bashkit-0.1.11/crates/bashkit-python}/README.md +2 -2
  137. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit-python/examples/bash_basics.py +11 -3
  138. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit-python/examples/k8s_orchestrator.py +9 -3
  139. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit-python/src/lib.rs +381 -13
  140. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit-python/tests/test_bashkit.py +321 -0
  141. bashkit-0.1.11/crates/bashkit-python/tests/test_integration.py +490 -0
  142. bashkit-0.1.11/crates/bashkit-python/tests/test_python_security.py +489 -0
  143. bashkit-0.1.11/crates/bashkit-python/tests/test_security.py +283 -0
  144. bashkit-0.1.11/crates/bashkit-python/tests/test_security_advanced.py +1126 -0
  145. bashkit-0.1.10/crates/bashkit/src/builtins/timeout.rs +0 -256
  146. bashkit-0.1.10/crates/bashkit/src/builtins/wait.rs +0 -88
  147. {bashkit-0.1.10 → bashkit-0.1.11}/bashkit/__init__.py +0 -0
  148. {bashkit-0.1.10 → bashkit-0.1.11}/bashkit/deepagents.py +0 -0
  149. {bashkit-0.1.10 → bashkit-0.1.11}/bashkit/langchain.py +0 -0
  150. {bashkit-0.1.10 → bashkit-0.1.11}/bashkit/py.typed +0 -0
  151. {bashkit-0.1.10 → bashkit-0.1.11}/bashkit/pydantic_ai.py +0 -0
  152. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/benches/parallel_execution.rs +0 -0
  153. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/docs/custom_builtins.md +0 -0
  154. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/docs/logging.md +0 -0
  155. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/docs/python.md +0 -0
  156. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/agent_tool.rs +0 -0
  157. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/basic.rs +0 -0
  158. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/custom_backend.rs +0 -0
  159. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/custom_builtins.rs +0 -0
  160. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/custom_fs.rs +0 -0
  161. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/git_workflow.rs +0 -0
  162. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/python_external_functions.rs +0 -0
  163. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/python_scripts.rs +0 -0
  164. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/realfs_readonly.rs +0 -0
  165. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/realfs_readwrite.rs +0 -0
  166. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/resource_limits.rs +0 -0
  167. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/scripted_tool.rs +0 -0
  168. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/show_tool_output.rs +0 -0
  169. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/streaming_output.rs +0 -0
  170. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/text_files.rs +0 -0
  171. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/text_processing.rs +0 -0
  172. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/examples/virtual_identity.rs +0 -0
  173. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/base64.rs +0 -0
  174. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/cat.rs +0 -0
  175. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/navigation.rs +0 -0
  176. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/source.rs +0 -0
  177. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/textrev.rs +0 -0
  178. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/builtins/yes.rs +0 -0
  179. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/git/config.rs +0 -0
  180. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/git/mod.rs +0 -0
  181. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/logging_impl.rs +0 -0
  182. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/network/mod.rs +0 -0
  183. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/parser/span.rs +0 -0
  184. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/scripted_tool/mod.rs +0 -0
  185. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/src/scripted_tool/toolset.rs +0 -0
  186. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/background_exec_tests.rs +0 -0
  187. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/builtin_error_security_tests.rs +0 -0
  188. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/cancellation_tests.rs +0 -0
  189. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/coproc_tests.rs +0 -0
  190. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/custom_builtins_tests.rs +0 -0
  191. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/git_advanced_tests.rs +0 -0
  192. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/git_integration_tests.rs +0 -0
  193. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/git_remote_security_tests.rs +0 -0
  194. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/git_security_tests.rs +0 -0
  195. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/history_tests.rs +0 -0
  196. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/issue_274_test.rs +0 -0
  197. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/issue_275_279_282_test.rs +0 -0
  198. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/issue_276_test.rs +0 -0
  199. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/issue_277_test.rs +0 -0
  200. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/issue_289_test.rs +0 -0
  201. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/issue_290_test.rs +0 -0
  202. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/issue_291_test.rs +0 -0
  203. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/logging_security_tests.rs +0 -0
  204. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/mkfifo_tests.rs +0 -0
  205. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/nested_subscript_tests.rs +0 -0
  206. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/network_security_tests.rs +0 -0
  207. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/proptest_security.rs +0 -0
  208. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/python_integration_tests.rs +0 -0
  209. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/realfs_tests.rs +0 -0
  210. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/azure_discover_rank.sh +0 -0
  211. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/azure_generate_url.sh +0 -0
  212. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/azure_query_capacity.sh +0 -0
  213. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/helm_validate_chart.sh +0 -0
  214. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/jwt_test_setup.sh +0 -0
  215. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/stitch_download_asset.sh +0 -0
  216. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/stitch_fetch.sh +0 -0
  217. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/stitch_verify_setup.sh +0 -0
  218. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/superpowers_find_polluter.sh +0 -0
  219. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_fixtures/vercel_deploy.sh +0 -0
  220. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/skills_tests.rs +0 -0
  221. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/source_function_tests.rs +0 -0
  222. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/awk/awk.test.sh +0 -0
  223. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/awk/eval-bugs.test.sh +0 -0
  224. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/alias.test.sh +0 -0
  225. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/arith-dynamic.test.sh +0 -0
  226. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/arithmetic.test.sh +0 -0
  227. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/array-slicing.test.sh +0 -0
  228. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/arrays.test.sh +0 -0
  229. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/assoc-arrays.test.sh +0 -0
  230. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/background.test.sh +0 -0
  231. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/bash-command.test.sh +0 -0
  232. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/bash-flags.test.sh +0 -0
  233. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/bc.test.sh +0 -0
  234. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/brace-expansion.test.sh +0 -0
  235. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/checksum.test.sh +0 -0
  236. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/chown-kill.test.sh +0 -0
  237. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/cmd-suggestions.test.sh +0 -0
  238. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/column.test.sh +0 -0
  239. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/comm.test.sh +0 -0
  240. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/command-not-found.test.sh +0 -0
  241. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/command-subst.test.sh +0 -0
  242. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/command.test.sh +0 -0
  243. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/conditional.test.sh +0 -0
  244. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/control-flow.test.sh +0 -0
  245. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/cuttr.test.sh +0 -0
  246. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/date.test.sh +0 -0
  247. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/declare.test.sh +0 -0
  248. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/df.test.sh +0 -0
  249. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/diff.test.sh +0 -0
  250. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/dirstack.test.sh +0 -0
  251. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/du.test.sh +0 -0
  252. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/echo.test.sh +0 -0
  253. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/empty-bodies.test.sh +0 -0
  254. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/env.test.sh +0 -0
  255. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/errexit.test.sh +0 -0
  256. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/eval-bugs.test.sh +0 -0
  257. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/exit-status.test.sh +0 -0
  258. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/expr.test.sh +0 -0
  259. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/extglob.test.sh +0 -0
  260. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/file.test.sh +0 -0
  261. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/fileops.test.sh +0 -0
  262. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/find.test.sh +0 -0
  263. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/functions.test.sh +0 -0
  264. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/getopts.test.sh +0 -0
  265. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/glob-options.test.sh +0 -0
  266. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/globs.test.sh +0 -0
  267. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/gzip.test.sh +0 -0
  268. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/headtail.test.sh +0 -0
  269. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/heredoc-edge.test.sh +0 -0
  270. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/heredoc.test.sh +0 -0
  271. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/herestring.test.sh +0 -0
  272. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/hextools.test.sh +0 -0
  273. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/history.test.sh +0 -0
  274. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/less.test.sh +0 -0
  275. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/ln.test.sh +0 -0
  276. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/nameref.test.sh +0 -0
  277. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/negative-tests.test.sh +0 -0
  278. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/nl.test.sh +0 -0
  279. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/nounset.test.sh +0 -0
  280. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/parse-errors.test.sh +0 -0
  281. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/paste.test.sh +0 -0
  282. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/path.test.sh +0 -0
  283. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/pipes-redirects.test.sh +0 -0
  284. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/printenv.test.sh +0 -0
  285. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/printf.test.sh +0 -0
  286. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/procsub.test.sh +0 -0
  287. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/quote.test.sh +0 -0
  288. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/read-builtin.test.sh +0 -0
  289. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/script-exec.test.sh +0 -0
  290. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/seq.test.sh +0 -0
  291. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/shell-grammar.test.sh +0 -0
  292. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/sleep.test.sh +0 -0
  293. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/sortuniq.test.sh +0 -0
  294. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/source.test.sh +0 -0
  295. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/stat.test.sh +0 -0
  296. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/string-ops.test.sh +0 -0
  297. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/strings.test.sh +0 -0
  298. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/subshell.test.sh +0 -0
  299. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/tar.test.sh +0 -0
  300. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/tee.test.sh +0 -0
  301. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/temp-binding.test.sh +0 -0
  302. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/test-operators.test.sh +0 -0
  303. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/textrev.test.sh +0 -0
  304. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/time.test.sh +0 -0
  305. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/timeout.test.sh +0 -0
  306. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/type.test.sh +0 -0
  307. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/unicode.test.sh +0 -0
  308. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/var-op-test.test.sh +0 -0
  309. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/variables.test.sh +0 -0
  310. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/wait.test.sh +0 -0
  311. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/watch.test.sh +0 -0
  312. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/wc.test.sh +0 -0
  313. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/word-split.test.sh +0 -0
  314. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/bash/xargs.test.sh +0 -0
  315. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/grep/eval-bugs.test.sh +0 -0
  316. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/grep/grep.test.sh +0 -0
  317. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/jq/jq.test.sh +0 -0
  318. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/python/python.test.sh +0 -0
  319. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/sed/eval-bugs.test.sh +0 -0
  320. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_cases/sed/sed.test.sh +0 -0
  321. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_runner.rs +0 -0
  322. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/spec_tests.rs +0 -0
  323. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit/tests/unicode_security_tests.rs +0 -0
  324. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit-python/tests/test_frameworks.py +0 -0
  325. {bashkit-0.1.10 → bashkit-0.1.11}/crates/bashkit-python/tests/test_shell_injection.py +0 -0
  326. {bashkit-0.1.10 → bashkit-0.1.11}/pyproject.toml +0 -0
@@ -190,9 +190,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
190
190
 
191
191
  [[package]]
192
192
  name = "aws-lc-rs"
193
- version = "1.16.1"
193
+ version = "1.16.2"
194
194
  source = "registry+https://github.com/rust-lang/crates.io-index"
195
- checksum = "94bffc006df10ac2a68c83692d734a465f8ee6c5b384d8545a636f81d858f4bf"
195
+ checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc"
196
196
  dependencies = [
197
197
  "aws-lc-sys",
198
198
  "zeroize",
@@ -200,9 +200,9 @@ dependencies = [
200
200
 
201
201
  [[package]]
202
202
  name = "aws-lc-sys"
203
- version = "0.38.0"
203
+ version = "0.39.0"
204
204
  source = "registry+https://github.com/rust-lang/crates.io-index"
205
- checksum = "4321e568ed89bb5a7d291a7f37997c2c0df89809d7b6d12062c81ddb54aa782e"
205
+ checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a"
206
206
  dependencies = [
207
207
  "cc",
208
208
  "cmake",
@@ -218,7 +218,7 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
218
218
 
219
219
  [[package]]
220
220
  name = "bashkit"
221
- version = "0.1.10"
221
+ version = "0.1.11"
222
222
  dependencies = [
223
223
  "anyhow",
224
224
  "async-trait",
@@ -256,7 +256,7 @@ dependencies = [
256
256
 
257
257
  [[package]]
258
258
  name = "bashkit-bench"
259
- version = "0.1.10"
259
+ version = "0.1.11"
260
260
  dependencies = [
261
261
  "anyhow",
262
262
  "bashkit",
@@ -272,7 +272,7 @@ dependencies = [
272
272
 
273
273
  [[package]]
274
274
  name = "bashkit-cli"
275
- version = "0.1.10"
275
+ version = "0.1.11"
276
276
  dependencies = [
277
277
  "anyhow",
278
278
  "bashkit",
@@ -285,7 +285,7 @@ dependencies = [
285
285
 
286
286
  [[package]]
287
287
  name = "bashkit-eval"
288
- version = "0.1.10"
288
+ version = "0.1.11"
289
289
  dependencies = [
290
290
  "anyhow",
291
291
  "async-trait",
@@ -301,7 +301,7 @@ dependencies = [
301
301
 
302
302
  [[package]]
303
303
  name = "bashkit-js"
304
- version = "0.1.10"
304
+ version = "0.1.11"
305
305
  dependencies = [
306
306
  "bashkit",
307
307
  "napi",
@@ -314,9 +314,10 @@ dependencies = [
314
314
 
315
315
  [[package]]
316
316
  name = "bashkit-python"
317
- version = "0.1.10"
317
+ version = "0.1.11"
318
318
  dependencies = [
319
319
  "bashkit",
320
+ "num-bigint",
320
321
  "pyo3",
321
322
  "pyo3-async-runtimes",
322
323
  "serde_json",
@@ -1492,9 +1493,9 @@ dependencies = [
1492
1493
 
1493
1494
  [[package]]
1494
1495
  name = "itoa"
1495
- version = "1.0.17"
1496
+ version = "1.0.18"
1496
1497
  source = "registry+https://github.com/rust-lang/crates.io-index"
1497
- checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
1498
+ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
1498
1499
 
1499
1500
  [[package]]
1500
1501
  name = "jaq-core"
@@ -3261,7 +3262,6 @@ dependencies = [
3261
3262
  "bytes",
3262
3263
  "libc",
3263
3264
  "mio",
3264
- "parking_lot",
3265
3265
  "pin-project-lite",
3266
3266
  "signal-hook-registry",
3267
3267
  "socket2",
@@ -4165,18 +4165,18 @@ dependencies = [
4165
4165
 
4166
4166
  [[package]]
4167
4167
  name = "zerocopy"
4168
- version = "0.8.42"
4168
+ version = "0.8.47"
4169
4169
  source = "registry+https://github.com/rust-lang/crates.io-index"
4170
- checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3"
4170
+ checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87"
4171
4171
  dependencies = [
4172
4172
  "zerocopy-derive",
4173
4173
  ]
4174
4174
 
4175
4175
  [[package]]
4176
4176
  name = "zerocopy-derive"
4177
- version = "0.8.42"
4177
+ version = "0.8.47"
4178
4178
  source = "registry+https://github.com/rust-lang/crates.io-index"
4179
- checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f"
4179
+ checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89"
4180
4180
  dependencies = [
4181
4181
  "proc-macro2",
4182
4182
  "quote",
@@ -7,7 +7,7 @@ resolver = "2"
7
7
  members = ["crates/*"]
8
8
 
9
9
  [workspace.package]
10
- version = "0.1.10"
10
+ version = "0.1.11"
11
11
  edition = "2024"
12
12
  license = "MIT"
13
13
  authors = ["Everruns"]
@@ -18,7 +18,9 @@ categories = ["command-line-utilities", "parser-implementations"]
18
18
 
19
19
  [workspace.dependencies]
20
20
  # Async runtime
21
- tokio = { version = "1", features = ["full"] }
21
+ # Base features are WASM-compatible; crates needing more (rt-multi-thread, fs, net, process)
22
+ # add them in their own Cargo.toml or via [target.'cfg(...)'.dependencies].
23
+ tokio = { version = "1", features = ["sync", "macros", "io-util", "rt", "time"] }
22
24
  async-trait = "0.1"
23
25
  futures = "0.3"
24
26
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bashkit
3
- Version: 0.1.10
3
+ Version: 0.1.11
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -47,7 +47,7 @@ print(result.stdout) # Hello, World!
47
47
  ## Features
48
48
 
49
49
  - **Sandboxed execution** — all commands run in-process with a virtual filesystem, no containers needed
50
- - **100+ built-in commands** — echo, cat, grep, sed, awk, jq, curl, find, and more
50
+ - **150 built-in commands** — echo, cat, grep, sed, awk, jq, curl, find, and more
51
51
  - **Full bash syntax** — variables, pipelines, redirects, loops, functions, arrays
52
52
  - **Resource limits** — protect against infinite loops and runaway scripts
53
53
  - **Framework integrations** — LangChain, PydanticAI, and Deep Agents
@@ -179,7 +179,7 @@ print(result.stdout) # Alice
179
179
  ## Features
180
180
 
181
181
  - **Sandboxed, in-process execution**: All commands run in isolation with a virtual filesystem
182
- - **100+ built-in commands**: echo, cat, grep, sed, awk, jq, curl, find, and more
182
+ - **150 built-in commands**: echo, cat, grep, sed, awk, jq, curl, find, and more
183
183
  - **Full bash syntax**: Variables, pipelines, redirects, loops, functions, arrays
184
184
  - **Resource limits**: Protect against infinite loops and runaway scripts
185
185
 
@@ -15,7 +15,7 @@ print(result.stdout) # Hello, World!
15
15
  ## Features
16
16
 
17
17
  - **Sandboxed execution** — all commands run in-process with a virtual filesystem, no containers needed
18
- - **100+ built-in commands** — echo, cat, grep, sed, awk, jq, curl, find, and more
18
+ - **150 built-in commands** — echo, cat, grep, sed, awk, jq, curl, find, and more
19
19
  - **Full bash syntax** — variables, pipelines, redirects, loops, functions, arrays
20
20
  - **Resource limits** — protect against infinite loops and runaway scripts
21
21
  - **Framework integrations** — LangChain, PydanticAI, and Deep Agents
@@ -147,7 +147,7 @@ print(result.stdout) # Alice
147
147
  ## Features
148
148
 
149
149
  - **Sandboxed, in-process execution**: All commands run in isolation with a virtual filesystem
150
- - **100+ built-in commands**: echo, cat, grep, sed, awk, jq, curl, find, and more
150
+ - **150 built-in commands**: echo, cat, grep, sed, awk, jq, curl, find, and more
151
151
  - **Full bash syntax**: Variables, pipelines, redirects, loops, functions, arrays
152
152
  - **Resource limits**: Protect against infinite loops and runaway scripts
153
153
 
@@ -1,6 +1,16 @@
1
1
  """Type stubs for bashkit native module."""
2
2
 
3
- from typing import Any, Callable
3
+ from collections.abc import Callable
4
+ from typing import Any, Protocol
5
+
6
+ class ExternalHandler(Protocol):
7
+ """Protocol for the external function handler passed to Bash.
8
+
9
+ Called when Monty Python code invokes a registered external function.
10
+ Must be an async callable with this exact signature.
11
+ """
12
+
13
+ async def __call__(self, fn_name: str, args: list[Any], kwargs: dict[str, Any]) -> Any: ...
4
14
 
5
15
  class Bash:
6
16
  """Core bash interpreter with virtual filesystem.
@@ -8,11 +18,21 @@ class Bash:
8
18
  State persists between calls — files created in one execute() are
9
19
  available in subsequent calls.
10
20
 
11
- Example:
21
+ Example (basic):
12
22
  >>> bash = Bash()
13
23
  >>> result = await bash.execute("echo 'Hello!'")
14
24
  >>> print(result.stdout)
15
25
  Hello!
26
+
27
+ Example (Python execution with external function handler):
28
+ >>> async def handler(fn_name: str, args: list, kwargs: dict) -> Any:
29
+ ... return await tool_executor.call(fn_name, kwargs)
30
+ >>> bash = Bash(
31
+ ... python=True,
32
+ ... external_functions=["api_request"],
33
+ ... external_handler=handler,
34
+ ... )
35
+ >>> result = await bash.execute("python3 -c 'print(api_request(url=\"/data\"))'")
16
36
  """
17
37
 
18
38
  def __init__(
@@ -21,9 +41,13 @@ class Bash:
21
41
  hostname: str | None = None,
22
42
  max_commands: int | None = None,
23
43
  max_loop_iterations: int | None = None,
44
+ python: bool = False,
45
+ external_functions: list[str] | None = None,
46
+ external_handler: ExternalHandler | None = None,
24
47
  ) -> None: ...
25
48
  async def execute(self, commands: str) -> ExecResult: ...
26
49
  def execute_sync(self, commands: str) -> ExecResult: ...
50
+ def cancel(self) -> None: ...
27
51
  def reset(self) -> None: ...
28
52
 
29
53
  class ExecResult:
@@ -64,6 +88,7 @@ class BashTool:
64
88
  ) -> None: ...
65
89
  async def execute(self, commands: str) -> ExecResult: ...
66
90
  def execute_sync(self, commands: str) -> ExecResult: ...
91
+ def cancel(self) -> None: ...
67
92
  def description(self) -> str: ...
68
93
  def help(self) -> str: ...
69
94
  def system_prompt(self) -> str: ...
@@ -134,3 +134,7 @@ required-features = ["realfs"]
134
134
  [[example]]
135
135
  name = "realfs_readwrite"
136
136
  required-features = ["realfs"]
137
+
138
+ # Additional tokio features needed only on native (not WASM)
139
+ [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
140
+ tokio = { version = "1", features = ["rt-multi-thread", "fs"] }
@@ -98,7 +98,7 @@ assert_eq!(output.result["stdout"], "hello\nworld\n");
98
98
  </a>
99
99
  </div>
100
100
 
101
- ## Built-in Commands (100+)
101
+ ## Built-in Commands (150)
102
102
 
103
103
  | Category | Commands |
104
104
  |----------|----------|
@@ -309,6 +309,11 @@ print(result.stdout)
309
309
 
310
310
  Bashkit is designed as a virtual interpreter with sandboxed execution for untrusted scripts. See the [security policy](SECURITY.md) for reporting vulnerabilities and the [threat model](specs/006-threat-model.md) for detailed analysis of 60+ identified threats.
311
311
 
312
+ ## Other Virtual Bash Implementations
313
+
314
+ - **[just-bash](https://github.com/vercel-labs/just-bash)** (TypeScript, Apache-2.0) — Virtual bash interpreter for AI agents by Vercel Labs. Custom recursive descent parser, 75+ reimplemented commands (including full awk/sed/jq), in-memory VFS, defense-in-depth sandboxing, AST transform plugins. Runs in Node.js and browser.
315
+ - **[gbash](https://github.com/ewhauser/gbash)** (Go, Apache-2.0) — Deterministic, sandbox-only bash runtime for AI agents. Delegates parsing to `mvdan/sh`. Registry-backed commands, policy enforcement, structured tracing, JSON-RPC server mode.
316
+
312
317
  ## Acknowledgments
313
318
 
314
319
  Bashkit is an independent implementation that draws design inspiration from several open source projects:
@@ -32,7 +32,7 @@ for sandbox security reasons. See the compliance spec for details.
32
32
  | Category | Count |
33
33
  |----------|-------|
34
34
  | Core & Navigation | 12 |
35
- | Flow Control & Variables | 21 |
35
+ | Flow Control & Variables | 23 |
36
36
  | Shell | 7 |
37
37
  | Text Processing | 20 |
38
38
  | File Operations & Inspection | 17 |
@@ -40,7 +40,7 @@ for sandbox security reasons. See the compliance spec for details.
40
40
  | Utilities & System | 20 |
41
41
  | Network | 2 |
42
42
  | Experimental | 3 |
43
- | **Total** | **148** |
43
+ | **Total** | **150** |
44
44
 
45
45
  ---
46
46
 
@@ -147,6 +147,8 @@ for sandbox security reasons. See the compliance spec for details.
147
147
  | `let` | `EXPR...` | Evaluate arithmetic |
148
148
  | `getopts` | `OPTSTRING NAME` | Parse positional parameters |
149
149
  | `caller` | `[FRAME]` | Display call stack frame |
150
+ | `mapfile` | `-n`, `-O`, `-s`, `-t`, `-d` | Read lines into array |
151
+ | `readarray` | `-n`, `-O`, `-s`, `-t`, `-d` | Alias for mapfile |
150
152
  | `shopt` | `-s`, `-u`, `-q` | Shell options |
151
153
  | `seq` | `[FIRST [INCR]] LAST` | Print number sequence |
152
154
  | `tac` | (none) | Reverse file lines |
@@ -49,7 +49,7 @@ through configurable limits.
49
49
  | Long filenames (TM-DOS-013) | 10KB filename | `max_filename_length` (255) + `max_path_length` (4096) | MITIGATED |
50
50
  | Many dir entries (TM-DOS-014) | 1M files in one dir | `max_file_count` | MITIGATED |
51
51
  | Unicode path attacks (TM-DOS-015) | RTL override in filename | `validate_path()` rejects control/bidi chars | MITIGATED |
52
- | TOCTOU append (TM-DOS-034) | Concurrent appends bypass limits | Single write lock | **OPEN** |
52
+ | TOCTOU append (TM-DOS-034) | Concurrent appends bypass limits | Single write lock | **FIXED** |
53
53
  | OverlayFs upper-only check (TM-DOS-035) | `check_write_limits()` ignores lower layer | Combined limit accounting | **OPEN** |
54
54
  | OverlayFs double-count (TM-DOS-036) | `compute_usage()` counts overwritten files | Subtract overrides | **OPEN** |
55
55
  | OverlayFs chmod CoW bypass (TM-DOS-037) | chmod writes to unlimited upper | Route through `check_write_limits()` | **OPEN** |
@@ -104,6 +104,9 @@ through configurable limits.
104
104
  | Template output explosion (TM-DOS-053) | `{{#each}}` on large array | Bounded by `max_file_size` | MITIGATED |
105
105
  | glob ExtGlob blowup (TM-DOS-054) | `glob --files "+(a\|aa)"` | Same as TM-DOS-031 | **OPEN** |
106
106
  | split file count (TM-DOS-055) | `split -l 1 bigfile` | FS `max_file_count` limit | MITIGATED |
107
+ | source self-recursion (TM-DOS-056) | Script that sources itself | Track source depth | **OPEN** |
108
+ | sleep bypasses timeout (TM-DOS-057) | `sleep N` ignores `ExecutionLimits::timeout` | Implement tokio timeout wrapper | **OPEN** |
109
+ | Unbounded builtin output (TM-DOS-058) | `seq 1 1000000` produces 1M lines | Add `max_stdout_bytes` limit | **OPEN** |
107
110
 
108
111
  **Configuration:**
109
112
  ```rust
@@ -146,7 +149,7 @@ Scripts may attempt to break out of the sandbox to access the host system.
146
149
  | Mount escape (TM-ESC-004) | Mount real paths | MountableFs controlled by caller | MITIGATED |
147
150
  | VFS limit bypass (TM-ESC-012) | `add_file()` skips limits | Restrict API visibility | **OPEN** |
148
151
  | OverlayFs upper() exposed (TM-ESC-013) | `upper()` returns unlimited FS | Restrict visibility | **OPEN** |
149
- | Custom builtins lost (TM-ESC-014) | `std::mem::take` empties builtins | Clone/Arc builtins | **OPEN** |
152
+ | Custom builtins lost (TM-ESC-014) | `std::mem::take` empties builtins | Arc-cloned builtins | **FIXED** |
150
153
 
151
154
  **Process Escape:**
152
155
 
@@ -379,6 +382,9 @@ exfiltration by encoding secrets in subdomains (`curl https://$SECRET.example.co
379
382
  | Missing array prefix (TM-INJ-016) | `_ARRAY_READ_` not in guard | Add prefix to `is_internal_variable()` | **OPEN** |
380
383
  | Unzip path traversal (TM-INJ-017) | `unzip` with `../` entry names | Validate paths within extract base | **OPEN** |
381
384
  | Dotenv internal injection (TM-INJ-018) | `.env` with `_NAMEREF_x=target` | Add `is_internal_variable()` check | **OPEN** |
385
+ | unset removes readonly (TM-INJ-019) | `readonly X=v; unset X` | Check readonly attribute in unset | **OPEN** |
386
+ | declare overwrites readonly (TM-INJ-020) | `readonly X=v; declare X=new` | Check readonly attribute in declare | **OPEN** |
387
+ | export overwrites readonly (TM-INJ-021) | `readonly X=v; export X=new` | Check readonly attribute in export | **OPEN** |
382
388
 
383
389
  **Variable Expansion:**
384
390
 
@@ -398,7 +404,26 @@ echo $user_input
398
404
  | Shared filesystem (TM-ISO-001) | Access other tenant files | Separate Bash instances | MITIGATED |
399
405
  | Shared memory (TM-ISO-002) | Read other tenant data | Rust memory safety | MITIGATED |
400
406
  | Resource starvation (TM-ISO-003) | One tenant exhausts limits | Per-instance limits | MITIGATED |
401
- | Cross-tenant jq env (TM-ISO-004) | `std::env::set_var()` in jq | Same fix as TM-INF-013 | **OPEN** |
407
+ | Cross-tenant jq env (TM-ISO-004) | `std::env::set_var()` in jq | Custom jaq context variable | **FIXED** |
408
+ | Cumulative counter bypass (TM-ISO-005) | Repeated `exec()` resets counters | Session-level counters | **OPEN** |
409
+ | Memory budget exhaustion (TM-ISO-006) | Unbounded variable/array growth | Per-instance MemoryLimits | **OPEN** |
410
+ | Alias leakage (TM-ISO-007) | Aliases from session A visible in B | Per-instance alias HashMap | MITIGATED |
411
+ | Trap handler leakage (TM-ISO-008) | Trap from session A fires in B | Per-instance trap HashMap | MITIGATED |
412
+ | Shell option leakage (TM-ISO-009) | `set -e` in session A affects B | Per-instance SHOPT_* variables | MITIGATED |
413
+ | Exported env var leakage (TM-ISO-010) | `export` in session A visible in B | Per-instance env HashMap | MITIGATED |
414
+ | Array leakage (TM-ISO-011) | Arrays cross sessions | Per-instance array HashMaps | MITIGATED |
415
+ | Working directory leakage (TM-ISO-012) | `cd` in session A changes B's cwd | Per-instance `cwd` | MITIGATED |
416
+ | Exit code leakage (TM-ISO-013) | `$?` from session A visible in B | Per-instance `last_exit_code` | MITIGATED |
417
+ | Concurrent variable leakage (TM-ISO-014) | Race condition leaks vars | Per-instance state, no shared mutables | MITIGATED |
418
+ | Concurrent FS leakage (TM-ISO-015) | Race condition leaks files | Separate `Arc<FileSystem>` per instance | MITIGATED |
419
+ | Snapshot/restore side effects (TM-ISO-016) | `restore_shell_state()` affects others | Snapshot is per-instance | MITIGATED |
420
+ | Adversarial variable probing (TM-ISO-017) | Enumerate common secret var names | Default-empty env, no host env inheritance | MITIGATED |
421
+ | /proc /sys probing (TM-ISO-018) | Read `/proc/self/environ` | VFS has no real /proc or /etc | MITIGATED |
422
+ | jq cross-session env (TM-ISO-019) | `jq 'env.X'` sees other vars | jaq reads from injected global | MITIGATED |
423
+ | Subshell mutation leakage (TM-ISO-020) | Subshell vars leak to parent | Snapshot/restore + per-instance state | MITIGATED |
424
+ | EXIT trap cross-exec leak (TM-ISO-021) | EXIT trap fires in next `exec()` | Reset traps in `reset_for_execution()` | **OPEN** |
425
+ | `$?` cross-exec leak (TM-ISO-022) | Exit code from previous `exec()` visible | Reset `last_exit_code` | **OPEN** |
426
+ | `set -e` cross-exec leak (TM-ISO-023) | Shell options persist across `exec()` | Reset shell options | **OPEN** |
402
427
 
403
428
  Each [`Bash`] instance is fully isolated. For multi-tenant environments, create
404
429
  separate instances per tenant:
@@ -434,6 +459,7 @@ All unexpected errors are caught and converted to safe, human-readable messages.
434
459
  | Path leak in errors (TM-INT-004) | Error shows real FS paths | Virtual paths only | MITIGATED |
435
460
  | Memory addr in errors (TM-INT-005) | Debug output shows addresses | Display impl hides addresses | MITIGATED |
436
461
  | Stack trace exposure (TM-INT-006) | Panic unwinds show call stack | `catch_unwind` prevents propagation | MITIGATED |
462
+ | /dev/urandom empty with head -c (TM-INT-007) | `head -c 16 /dev/urandom` returns empty | Fix virtual device pipe handling | **OPEN** |
437
463
 
438
464
  **Panic Recovery:**
439
465
 
@@ -6,7 +6,9 @@
6
6
  //!
7
7
  //! Run with: cargo run --example custom_filesystem_impl
8
8
 
9
- use bashkit::{Bash, DirEntry, Error, FileSystem, FileType, Metadata, Result, async_trait};
9
+ use bashkit::{
10
+ Bash, DirEntry, Error, FileSystem, FileSystemExt, FileType, Metadata, Result, async_trait,
11
+ };
10
12
  use std::collections::HashMap;
11
13
  use std::path::{Path, PathBuf};
12
14
  use std::sync::{Arc, RwLock};
@@ -101,6 +103,9 @@ impl SessionFileSystemAdapter {
101
103
  }
102
104
 
103
105
  // The async_trait macro is re-exported from bashkit for convenience
106
+ #[async_trait]
107
+ impl FileSystemExt for SessionFileSystemAdapter {}
108
+
104
109
  #[async_trait]
105
110
  impl FileSystem for SessionFileSystemAdapter {
106
111
  async fn read_file(&self, path: &Path) -> Result<Vec<u8>> {
@@ -0,0 +1,109 @@
1
+ //! Alias management builtins: alias, unalias
2
+ //!
3
+ //! Directly mutate aliases via [`ShellRef`](super::ShellRef).
4
+
5
+ use async_trait::async_trait;
6
+
7
+ use super::{Builtin, Context};
8
+ use crate::error::Result;
9
+ use crate::interpreter::ExecResult;
10
+
11
+ /// `alias` builtin — define or display aliases.
12
+ ///
13
+ /// Usage:
14
+ /// - `alias` — list all aliases
15
+ /// - `alias name` — show a specific alias
16
+ /// - `alias name=value` — define an alias
17
+ pub struct Alias;
18
+
19
+ #[async_trait]
20
+ impl Builtin for Alias {
21
+ async fn execute(&self, mut ctx: Context<'_>) -> Result<ExecResult> {
22
+ let Some(shell) = ctx.shell.as_mut() else {
23
+ return Ok(ExecResult::ok(String::new()));
24
+ };
25
+
26
+ if ctx.args.is_empty() {
27
+ // List all aliases
28
+ let mut sorted: Vec<_> = shell.aliases.iter().collect();
29
+ sorted.sort_by_key(|(k, _)| (*k).clone());
30
+ let mut output = String::new();
31
+ for (name, value) in sorted {
32
+ output.push_str(&format!("alias {}='{}'\n", name, value));
33
+ }
34
+ return Ok(ExecResult::ok(output));
35
+ }
36
+
37
+ let mut output = String::new();
38
+ let mut exit_code = 0;
39
+ let mut stderr = String::new();
40
+
41
+ for arg in ctx.args {
42
+ if let Some(eq_pos) = arg.find('=') {
43
+ // alias name=value — set directly
44
+ let name = &arg[..eq_pos];
45
+ let value = &arg[eq_pos + 1..];
46
+ shell.aliases.insert(name.to_string(), value.to_string());
47
+ } else {
48
+ // alias name — show the alias
49
+ if let Some(value) = shell.aliases.get(arg.as_str()) {
50
+ output.push_str(&format!("alias {}='{}'\n", arg, value));
51
+ } else {
52
+ stderr.push_str(&format!("bash: alias: {}: not found\n", arg));
53
+ exit_code = 1;
54
+ }
55
+ }
56
+ }
57
+
58
+ Ok(ExecResult {
59
+ stdout: output,
60
+ stderr,
61
+ exit_code,
62
+ ..Default::default()
63
+ })
64
+ }
65
+ }
66
+
67
+ /// `unalias` builtin — remove alias definitions.
68
+ ///
69
+ /// Usage:
70
+ /// - `unalias name` — remove alias
71
+ /// - `unalias -a` — remove all aliases
72
+ pub struct Unalias;
73
+
74
+ #[async_trait]
75
+ impl Builtin for Unalias {
76
+ async fn execute(&self, mut ctx: Context<'_>) -> Result<ExecResult> {
77
+ let Some(shell) = ctx.shell.as_mut() else {
78
+ return Ok(ExecResult::err(
79
+ "bash: unalias: usage: unalias [-a] name [name ...]\n".to_string(),
80
+ 2,
81
+ ));
82
+ };
83
+
84
+ if ctx.args.is_empty() {
85
+ return Ok(ExecResult::err(
86
+ "bash: unalias: usage: unalias [-a] name [name ...]\n".to_string(),
87
+ 2,
88
+ ));
89
+ }
90
+
91
+ let mut exit_code = 0;
92
+ let mut stderr = String::new();
93
+
94
+ for arg in ctx.args {
95
+ if arg == "-a" {
96
+ shell.aliases.clear();
97
+ } else if shell.aliases.remove(arg.as_str()).is_none() {
98
+ stderr.push_str(&format!("bash: unalias: {}: not found\n", arg));
99
+ exit_code = 1;
100
+ }
101
+ }
102
+
103
+ Ok(ExecResult {
104
+ stderr,
105
+ exit_code,
106
+ ..Default::default()
107
+ })
108
+ }
109
+ }