bashkit 0.1.20__tar.gz → 0.1.21__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.
- {bashkit-0.1.20 → bashkit-0.1.21}/Cargo.lock +28 -28
- {bashkit-0.1.20 → bashkit-0.1.21}/Cargo.toml +4 -2
- {bashkit-0.1.20 → bashkit-0.1.21}/PKG-INFO +19 -6
- {bashkit-0.1.20/crates/bashkit-python → bashkit-0.1.21}/README.md +17 -5
- {bashkit-0.1.20 → bashkit-0.1.21}/bashkit/__init__.py +2 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/bashkit/_bashkit.pyi +39 -11
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/README.md +2 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/python.md +8 -2
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/threat-model.md +1 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/python_external_functions.rs +1 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/python_scripts.rs +4 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/archive.rs +137 -21
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/awk.rs +173 -112
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/date.rs +17 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/dirstack.rs +18 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/expand.rs +22 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/expr.rs +15 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/fileops.rs +80 -39
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/grep.rs +192 -35
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/jq.rs +16 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/ls.rs +89 -14
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/mod.rs +11 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/nl.rs +15 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/numfmt.rs +35 -6
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/python.rs +155 -22
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/read.rs +74 -8
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/retry.rs +14 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/rg.rs +11 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/sed.rs +168 -14
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/sortuniq.rs +28 -8
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/split.rs +32 -3
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/strings.rs +20 -8
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/timeout.rs +23 -4
- bashkit-0.1.21/crates/bashkit/src/builtins/yes.rs +86 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/zip_cmd.rs +58 -2
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/credential.rs +38 -13
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/memory.rs +44 -2
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/overlay.rs +112 -21
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/posix.rs +114 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/realfs.rs +109 -41
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/git/config.rs +63 -13
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/interpreter/glob.rs +85 -24
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/interpreter/mod.rs +1573 -486
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/lib.rs +430 -20
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/limits.rs +58 -17
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/logging_impl.rs +32 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/network/bot_auth.rs +57 -11
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/network/client.rs +218 -83
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/parser/budget.rs +18 -14
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/parser/lexer.rs +89 -8
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/parser/mod.rs +202 -194
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/scripted_tool/execute.rs +13 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/scripted_tool/mod.rs +24 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/scripted_tool/toolset.rs +48 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/snapshot.rs +15 -12
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/tool.rs +3 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/trace.rs +9 -2
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/awk_pattern_tests.rs +18 -0
- bashkit-0.1.21/crates/bashkit/tests/awk_range_pattern_tests.rs +108 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/background_exec_tests.rs +13 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/byte_range_panic_tests.rs +26 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/coproc_tests.rs +32 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/final_env_tests.rs +25 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/find_multi_path_tests.rs +26 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/git_remote_security_tests.rs +12 -2
- bashkit-0.1.21/crates/bashkit/tests/harness_example_tests.rs +136 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_274_test.rs +17 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_853_test.rs +22 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/output_truncation_tests.rs +14 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/python_integration_tests.rs +19 -4
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/python_security_tests.rs +43 -3
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/realfs_tests.rs +57 -0
- bashkit-0.1.21/crates/bashkit/tests/release_profile_tests.rs +39 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/set_e_and_or_tests.rs +32 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/snapshot_tests.rs +167 -3
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/alias.test.sh +23 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/arithmetic-base-expansion.test.sh +17 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/assoc-arrays.test.sh +13 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/bash-flags.test.sh +10 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/blackbox-edge-cases.test.sh +10 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/control-flow.test.sh +23 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/extglob.test.sh +9 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/glob-options.test.sh +10 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/read-builtin.test.sh +8 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/source.test.sh +34 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/subprocess-isolation.test.sh +19 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_tests.rs +6 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/threat_model_tests.rs +107 -4
- {bashkit-0.1.20 → bashkit-0.1.21/crates/bashkit-python}/README.md +17 -5
- bashkit-0.1.21/crates/bashkit-python/examples/jupyter_async_test.ipynb +641 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/src/lib.rs +269 -49
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/_bashkit_categories.py +14 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_ai_adapters.py +12 -0
- bashkit-0.1.21/crates/bashkit-python/tests/test_jupyter_compat.py +220 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_registered_tools.py +62 -1
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_vfs.py +1 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/pyproject.toml +1 -0
- bashkit-0.1.20/crates/bashkit/src/builtins/yes.rs +0 -44
- {bashkit-0.1.20 → bashkit-0.1.21}/bashkit/deepagents.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/bashkit/langchain.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/bashkit/py.typed +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/bashkit/pydantic_ai.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/Cargo.toml +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/benches/parallel_execution.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/compatibility.md +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/credential-injection.md +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/custom_builtins.md +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/hooks.md +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/live_mounts.md +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/logging.md +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/ssh.md +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/docs/typescript.md +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/agent_tool.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/basic.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/custom_backend.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/custom_builtins.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/custom_filesystem_impl.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/custom_fs.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/git_workflow.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/live_mounts.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/realfs_readonly.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/realfs_readwrite.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/resource_limits.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/scripted_tool.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/show_tool_output.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/ssh_supabase.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/streaming_output.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/text_files.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/text_processing.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/typescript_external_functions.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/typescript_scripts.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/examples/virtual_identity.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/alias.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/arg_parser.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/assert.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/base64.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/bc.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/caller.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/cat.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/checksum.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/clear.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/column.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/comm.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/compgen.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/csv.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/curl.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/cuttr.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/diff.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/disk.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/dotenv.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/echo.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/environ.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/envsubst.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/export.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/fc.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/flow.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/fold.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/git.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/glob_cmd.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/headtail.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/help.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/hextools.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/http.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/iconv.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/inspect.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/introspect.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/join.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/json.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/log.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/mapfile.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/mkfifo.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/navigation.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/parallel.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/paste.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/patch.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/path.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/pipeline.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/printf.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/search_common.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/semver.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/seq.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/sleep.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/source.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/ssh.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/system.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/template.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/textrev.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/tomlq.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/trap.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/tree.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/typescript.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/vars.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/verify.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/wait.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/wc.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/builtins/yaml.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/error.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/backend.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/limits.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/mod.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/mountable.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/search.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/fs/traits.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/git/client.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/git/mod.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/hooks.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/interpreter/jobs.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/interpreter/state.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/network/allowlist.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/network/mod.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/parser/ast.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/parser/span.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/parser/tokens.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/ssh/allowlist.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/ssh/client.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/ssh/config.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/ssh/handler.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/ssh/mod.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/ssh/russh_handler.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/src/tool_def.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/allexport_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/awk_fuzz_scaffold_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/awk_newline_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/awk_printf_expr_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/bash_source_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/blackbox_security_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/builtin_error_security_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/cancellation_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/cmdsub_quote_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/credential_injection_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/custom_builtins_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/custom_fs_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/dev_null_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/git_advanced_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/git_inspection_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/git_integration_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/git_security_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/history_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_1175_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_275_279_282_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_276_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_277_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_289_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_290_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_291_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_872_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_873_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/issue_875_test.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/jq_fuzz_scaffold_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/live_mount_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/logging_security_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/mkfifo_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/nested_subscript_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/network_security_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/overlay_path_validation_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/proptest_differential.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/proptest_security.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/regex_limit_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/script_execution_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/security_audit_pocs.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/security_failpoint_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/azure_discover_rank.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/azure_generate_url.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/azure_query_capacity.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/helm_validate_chart.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/jwt_test_setup.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/stitch_download_asset.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/stitch_fetch.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/stitch_verify_setup.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/superpowers_find_polluter.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_fixtures/vercel_deploy.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/skills_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/source_function_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/awk/awk.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/awk/delete-array.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/awk/dev-stderr.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/awk/eval-bugs.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/awk/filename.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/awk/getline-file.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/append_redirect.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/arith-dynamic.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/arithmetic.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/array-slicing.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/array-splat.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/arrays.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/awk-printf-width.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/background.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/bash-c-exports.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/bash-command.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/bash-source-var.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/bash-stdin-pipe.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/bc.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/blackbox-exploration.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/brace-expansion.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/brace_expansion_lookahead.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/checksum.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/chown-kill.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/cmd-suggestions.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/cmdsub_depth_unquoted.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/column.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/comm.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/command-not-found.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/command-subst.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/command.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/command_v.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/compgen-path.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/conditional-short-circuit.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/conditional.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/cuttr.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/date.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/declare.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/df.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/diff.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/dirstack.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/du.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/echo.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/empty-bodies.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/env.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/errexit.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/eval-bugs.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/exec-command.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/exec-fd-redirect.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/exec-fd-variable.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/exit-status.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/expr.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/file.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/fileops.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/find.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/functions.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/getopts.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/glob_match_cap.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/globs.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/gzip.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/headtail.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/help-flag.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/heredoc-edge.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/heredoc.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/herestring.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/hextools.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/history.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/indirect-expansion.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/less.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/ln.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/ls.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/memory_budget_desync.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/nameref-assoc.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/nameref.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/negative-tests.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/nl.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/nounset.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/numfmt.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/parse-errors.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/paste-flags.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/paste.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/path.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/pipes-redirects.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/printenv.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/printf.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/procsub.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/quote.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/recursive-cmdsub.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/regex-limit.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/replace_pattern_limit.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/script-exec.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/seq.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/set-allexport.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/shell-grammar.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/sleep.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/sortuniq.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/stat.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/string-ops.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/strings.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/subshell.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/tar.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/tar_create.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/tee.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/temp-binding.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/test-operators.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/test-tty.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/textrev.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/time.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/timeout.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/tree.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/type.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/unicode.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/unset-exported-var.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/var-op-test.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/variables.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/wait.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/watch.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/wc.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/word-split.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/bash/xargs.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/grep/eval-bugs.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/grep/grep.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/grep/rg.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/jq/jq.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/python/env_leak.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/python/python.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/sed/eval-bugs.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/sed/sed.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_cases/typescript/typescript.test.sh +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/spec_runner.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/ssh_builtin_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/ssh_supabase_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/stack_overflow_regression_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/subst_depth_limit_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/symlink_overlay_security_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/tty_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/typescript_integration_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/typescript_security_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/unicode_security_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/unset_function_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit/tests/urandom_tests.rs +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/Cargo.toml +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/examples/bash_basics.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/examples/data_pipeline.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/examples/fastapi_async_tool.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/examples/k8s_orchestrator.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/examples/langgraph_async_tool.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/examples/llm_tool.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/_security_advanced.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/_security_core.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_async_callbacks.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_basic.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_builtins.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_control_flow.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_error_handling.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_fastapi_integration.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_integration.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_langgraph_integration.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_python_security.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_scripts.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_security.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_shell_injection.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_streaming_output.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_strings_and_quoting.py +0 -0
- {bashkit-0.1.20 → bashkit-0.1.21}/crates/bashkit-python/tests/test_tool_metadata.py +0 -0
|
@@ -167,7 +167,7 @@ version = "1.1.5"
|
|
|
167
167
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
168
168
|
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
|
169
169
|
dependencies = [
|
|
170
|
-
"windows-sys 0.
|
|
170
|
+
"windows-sys 0.60.2",
|
|
171
171
|
]
|
|
172
172
|
|
|
173
173
|
[[package]]
|
|
@@ -178,7 +178,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
|
|
|
178
178
|
dependencies = [
|
|
179
179
|
"anstyle",
|
|
180
180
|
"once_cell_polyfill",
|
|
181
|
-
"windows-sys 0.
|
|
181
|
+
"windows-sys 0.60.2",
|
|
182
182
|
]
|
|
183
183
|
|
|
184
184
|
[[package]]
|
|
@@ -304,7 +304,7 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
|
|
|
304
304
|
|
|
305
305
|
[[package]]
|
|
306
306
|
name = "bashkit"
|
|
307
|
-
version = "0.1.
|
|
307
|
+
version = "0.1.21"
|
|
308
308
|
dependencies = [
|
|
309
309
|
"anyhow",
|
|
310
310
|
"async-trait",
|
|
@@ -349,7 +349,7 @@ dependencies = [
|
|
|
349
349
|
|
|
350
350
|
[[package]]
|
|
351
351
|
name = "bashkit-bench"
|
|
352
|
-
version = "0.1.
|
|
352
|
+
version = "0.1.21"
|
|
353
353
|
dependencies = [
|
|
354
354
|
"anyhow",
|
|
355
355
|
"bashkit",
|
|
@@ -363,7 +363,7 @@ dependencies = [
|
|
|
363
363
|
|
|
364
364
|
[[package]]
|
|
365
365
|
name = "bashkit-cli"
|
|
366
|
-
version = "0.1.
|
|
366
|
+
version = "0.1.21"
|
|
367
367
|
dependencies = [
|
|
368
368
|
"anyhow",
|
|
369
369
|
"bashkit",
|
|
@@ -379,7 +379,7 @@ dependencies = [
|
|
|
379
379
|
|
|
380
380
|
[[package]]
|
|
381
381
|
name = "bashkit-eval"
|
|
382
|
-
version = "0.1.
|
|
382
|
+
version = "0.1.21"
|
|
383
383
|
dependencies = [
|
|
384
384
|
"anyhow",
|
|
385
385
|
"async-trait",
|
|
@@ -395,7 +395,7 @@ dependencies = [
|
|
|
395
395
|
|
|
396
396
|
[[package]]
|
|
397
397
|
name = "bashkit-js"
|
|
398
|
-
version = "0.1.
|
|
398
|
+
version = "0.1.21"
|
|
399
399
|
dependencies = [
|
|
400
400
|
"bashkit",
|
|
401
401
|
"napi",
|
|
@@ -408,7 +408,7 @@ dependencies = [
|
|
|
408
408
|
|
|
409
409
|
[[package]]
|
|
410
410
|
name = "bashkit-python"
|
|
411
|
-
version = "0.1.
|
|
411
|
+
version = "0.1.21"
|
|
412
412
|
dependencies = [
|
|
413
413
|
"bashkit",
|
|
414
414
|
"num-bigint",
|
|
@@ -810,7 +810,7 @@ version = "3.1.1"
|
|
|
810
810
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
811
811
|
checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34"
|
|
812
812
|
dependencies = [
|
|
813
|
-
"windows-sys 0.
|
|
813
|
+
"windows-sys 0.52.0",
|
|
814
814
|
]
|
|
815
815
|
|
|
816
816
|
[[package]]
|
|
@@ -1400,7 +1400,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
1400
1400
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
1401
1401
|
dependencies = [
|
|
1402
1402
|
"libc",
|
|
1403
|
-
"windows-sys 0.
|
|
1403
|
+
"windows-sys 0.52.0",
|
|
1404
1404
|
]
|
|
1405
1405
|
|
|
1406
1406
|
[[package]]
|
|
@@ -1417,7 +1417,7 @@ checksum = "fe5e43d0f78a42ad591453aedb1d7ae631ce7ee445c7643691055a9ed8d3b01c"
|
|
|
1417
1417
|
dependencies = [
|
|
1418
1418
|
"log",
|
|
1419
1419
|
"once_cell",
|
|
1420
|
-
"rand 0.8.
|
|
1420
|
+
"rand 0.8.6",
|
|
1421
1421
|
]
|
|
1422
1422
|
|
|
1423
1423
|
[[package]]
|
|
@@ -2276,7 +2276,7 @@ dependencies = [
|
|
|
2276
2276
|
"portable-atomic",
|
|
2277
2277
|
"portable-atomic-util",
|
|
2278
2278
|
"serde_core",
|
|
2279
|
-
"windows-sys 0.
|
|
2279
|
+
"windows-sys 0.52.0",
|
|
2280
2280
|
]
|
|
2281
2281
|
|
|
2282
2282
|
[[package]]
|
|
@@ -2732,7 +2732,7 @@ dependencies = [
|
|
|
2732
2732
|
"num-integer",
|
|
2733
2733
|
"num-iter",
|
|
2734
2734
|
"num-traits",
|
|
2735
|
-
"rand 0.8.
|
|
2735
|
+
"rand 0.8.6",
|
|
2736
2736
|
"serde",
|
|
2737
2737
|
"smallvec",
|
|
2738
2738
|
]
|
|
@@ -3073,7 +3073,7 @@ dependencies = [
|
|
|
3073
3073
|
"delegate",
|
|
3074
3074
|
"futures",
|
|
3075
3075
|
"log",
|
|
3076
|
-
"rand 0.8.
|
|
3076
|
+
"rand 0.8.6",
|
|
3077
3077
|
"sha2 0.10.9",
|
|
3078
3078
|
"thiserror 1.0.69",
|
|
3079
3079
|
"tokio",
|
|
@@ -3207,7 +3207,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
3207
3207
|
checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
|
|
3208
3208
|
dependencies = [
|
|
3209
3209
|
"phf_shared 0.11.3",
|
|
3210
|
-
"rand 0.8.
|
|
3210
|
+
"rand 0.8.6",
|
|
3211
3211
|
]
|
|
3212
3212
|
|
|
3213
3213
|
[[package]]
|
|
@@ -3725,9 +3725,9 @@ dependencies = [
|
|
|
3725
3725
|
|
|
3726
3726
|
[[package]]
|
|
3727
3727
|
name = "rand"
|
|
3728
|
-
version = "0.8.
|
|
3728
|
+
version = "0.8.6"
|
|
3729
3729
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3730
|
-
checksum = "
|
|
3730
|
+
checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
|
|
3731
3731
|
dependencies = [
|
|
3732
3732
|
"libc",
|
|
3733
3733
|
"rand_chacha 0.3.1",
|
|
@@ -4043,9 +4043,9 @@ dependencies = [
|
|
|
4043
4043
|
|
|
4044
4044
|
[[package]]
|
|
4045
4045
|
name = "russh"
|
|
4046
|
-
version = "0.60.
|
|
4046
|
+
version = "0.60.1"
|
|
4047
4047
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4048
|
-
checksum = "
|
|
4048
|
+
checksum = "d937f3f4a79bffd67fc12fd437785effdfc8b94edc89ab90392f9ac9e11cc9fc"
|
|
4049
4049
|
dependencies = [
|
|
4050
4050
|
"aes 0.8.4",
|
|
4051
4051
|
"aws-lc-rs",
|
|
@@ -4177,7 +4177,7 @@ dependencies = [
|
|
|
4177
4177
|
"errno",
|
|
4178
4178
|
"libc",
|
|
4179
4179
|
"linux-raw-sys",
|
|
4180
|
-
"windows-sys 0.
|
|
4180
|
+
"windows-sys 0.52.0",
|
|
4181
4181
|
]
|
|
4182
4182
|
|
|
4183
4183
|
[[package]]
|
|
@@ -4234,7 +4234,7 @@ dependencies = [
|
|
|
4234
4234
|
"security-framework",
|
|
4235
4235
|
"security-framework-sys",
|
|
4236
4236
|
"webpki-root-certs",
|
|
4237
|
-
"windows-sys 0.
|
|
4237
|
+
"windows-sys 0.52.0",
|
|
4238
4238
|
]
|
|
4239
4239
|
|
|
4240
4240
|
[[package]]
|
|
@@ -4245,9 +4245,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
|
|
|
4245
4245
|
|
|
4246
4246
|
[[package]]
|
|
4247
4247
|
name = "rustls-webpki"
|
|
4248
|
-
version = "0.103.
|
|
4248
|
+
version = "0.103.13"
|
|
4249
4249
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4250
|
-
checksum = "
|
|
4250
|
+
checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
|
|
4251
4251
|
dependencies = [
|
|
4252
4252
|
"aws-lc-rs",
|
|
4253
4253
|
"ring",
|
|
@@ -4676,7 +4676,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
4676
4676
|
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
|
4677
4677
|
dependencies = [
|
|
4678
4678
|
"libc",
|
|
4679
|
-
"windows-sys 0.
|
|
4679
|
+
"windows-sys 0.60.2",
|
|
4680
4680
|
]
|
|
4681
4681
|
|
|
4682
4682
|
[[package]]
|
|
@@ -4870,7 +4870,7 @@ dependencies = [
|
|
|
4870
4870
|
"getrandom 0.4.2",
|
|
4871
4871
|
"once_cell",
|
|
4872
4872
|
"rustix",
|
|
4873
|
-
"windows-sys 0.
|
|
4873
|
+
"windows-sys 0.52.0",
|
|
4874
4874
|
]
|
|
4875
4875
|
|
|
4876
4876
|
[[package]]
|
|
@@ -4880,7 +4880,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
4880
4880
|
checksum = "230a1b821ccbd75b185820a1f1ff7b14d21da1e442e22c0863ea5f08771a8874"
|
|
4881
4881
|
dependencies = [
|
|
4882
4882
|
"rustix",
|
|
4883
|
-
"windows-sys 0.
|
|
4883
|
+
"windows-sys 0.60.2",
|
|
4884
4884
|
]
|
|
4885
4885
|
|
|
4886
4886
|
[[package]]
|
|
@@ -5214,7 +5214,7 @@ dependencies = [
|
|
|
5214
5214
|
"getopts",
|
|
5215
5215
|
"log",
|
|
5216
5216
|
"phf_codegen",
|
|
5217
|
-
"rand 0.8.
|
|
5217
|
+
"rand 0.8.6",
|
|
5218
5218
|
]
|
|
5219
5219
|
|
|
5220
5220
|
[[package]]
|
|
@@ -5490,7 +5490,7 @@ version = "0.1.11"
|
|
|
5490
5490
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5491
5491
|
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
|
5492
5492
|
dependencies = [
|
|
5493
|
-
"windows-sys 0.
|
|
5493
|
+
"windows-sys 0.52.0",
|
|
5494
5494
|
]
|
|
5495
5495
|
|
|
5496
5496
|
[[package]]
|
|
@@ -7,7 +7,7 @@ resolver = "2"
|
|
|
7
7
|
members = ["crates/*"]
|
|
8
8
|
|
|
9
9
|
[workspace.package]
|
|
10
|
-
version = "0.1.
|
|
10
|
+
version = "0.1.21"
|
|
11
11
|
edition = "2024"
|
|
12
12
|
license = "MIT"
|
|
13
13
|
authors = ["Everruns"]
|
|
@@ -105,5 +105,7 @@ napi-build = "2"
|
|
|
105
105
|
[profile.release]
|
|
106
106
|
lto = "thin"
|
|
107
107
|
codegen-units = 1
|
|
108
|
-
|
|
108
|
+
# Security: interpreter relies on catch_unwind around builtins.
|
|
109
|
+
# Keep release unwinding enabled so panic containment works.
|
|
110
|
+
panic = "unwind"
|
|
109
111
|
strip = "symbols"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bashkit
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.21
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -10,6 +10,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
13
14
|
Classifier: Programming Language :: Rust
|
|
14
15
|
Classifier: Topic :: Software Development :: Interpreters
|
|
15
16
|
Classifier: Topic :: Security
|
|
@@ -334,10 +335,22 @@ print(result.stdout) # widget
|
|
|
334
335
|
```
|
|
335
336
|
|
|
336
337
|
Callbacks receive a `BuiltinContext` object with raw `argv` tokens, optional
|
|
337
|
-
pipeline `stdin`, the current `cwd`, and visible `env
|
|
338
|
-
builtin stdout string
|
|
339
|
-
|
|
340
|
-
|
|
338
|
+
pipeline `stdin`, the current `cwd`, and visible `env`. They may return either
|
|
339
|
+
the builtin stdout string directly or a `BuiltinResult(stdout=..., stderr=...,
|
|
340
|
+
exit_code=...)` for explicit shell-shaped failures. Raise an exception for
|
|
341
|
+
unexpected callback failures. Async callbacks support the same return shapes.
|
|
342
|
+
`BashTool` exposes the same `custom_builtins` constructor kwarg and includes
|
|
343
|
+
registered command names in `help()` output for LLM-facing metadata.
|
|
344
|
+
|
|
345
|
+
```python
|
|
346
|
+
from bashkit import BuiltinResult
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
def view_image(ctx):
|
|
350
|
+
if not ctx.argv:
|
|
351
|
+
return BuiltinResult(stderr="view-image: missing path\n", exit_code=1)
|
|
352
|
+
return BuiltinResult(stdout="")
|
|
353
|
+
```
|
|
341
354
|
|
|
342
355
|
When you use `await bash.execute(...)` or `await bash_tool.execute(...)`,
|
|
343
356
|
async callbacks are scheduled back onto the caller's active asyncio loop, so
|
|
@@ -503,7 +516,7 @@ from bashkit.deepagents import BashkitBackend, BashkitMiddleware
|
|
|
503
516
|
- Linux: `x86_64`, `aarch64` (glibc and musl wheels)
|
|
504
517
|
- macOS: `x86_64`, `aarch64`
|
|
505
518
|
- Windows: `x86_64`
|
|
506
|
-
- Python: `3.9` through `3.
|
|
519
|
+
- Python: `3.9` through `3.14`
|
|
507
520
|
|
|
508
521
|
## How It Works
|
|
509
522
|
|
|
@@ -298,10 +298,22 @@ print(result.stdout) # widget
|
|
|
298
298
|
```
|
|
299
299
|
|
|
300
300
|
Callbacks receive a `BuiltinContext` object with raw `argv` tokens, optional
|
|
301
|
-
pipeline `stdin`, the current `cwd`, and visible `env
|
|
302
|
-
builtin stdout string
|
|
303
|
-
|
|
304
|
-
|
|
301
|
+
pipeline `stdin`, the current `cwd`, and visible `env`. They may return either
|
|
302
|
+
the builtin stdout string directly or a `BuiltinResult(stdout=..., stderr=...,
|
|
303
|
+
exit_code=...)` for explicit shell-shaped failures. Raise an exception for
|
|
304
|
+
unexpected callback failures. Async callbacks support the same return shapes.
|
|
305
|
+
`BashTool` exposes the same `custom_builtins` constructor kwarg and includes
|
|
306
|
+
registered command names in `help()` output for LLM-facing metadata.
|
|
307
|
+
|
|
308
|
+
```python
|
|
309
|
+
from bashkit import BuiltinResult
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
def view_image(ctx):
|
|
313
|
+
if not ctx.argv:
|
|
314
|
+
return BuiltinResult(stderr="view-image: missing path\n", exit_code=1)
|
|
315
|
+
return BuiltinResult(stdout="")
|
|
316
|
+
```
|
|
305
317
|
|
|
306
318
|
When you use `await bash.execute(...)` or `await bash_tool.execute(...)`,
|
|
307
319
|
async callbacks are scheduled back onto the caller's active asyncio loop, so
|
|
@@ -467,7 +479,7 @@ from bashkit.deepagents import BashkitBackend, BashkitMiddleware
|
|
|
467
479
|
- Linux: `x86_64`, `aarch64` (glibc and musl wheels)
|
|
468
480
|
- macOS: `x86_64`, `aarch64`
|
|
469
481
|
- Windows: `x86_64`
|
|
470
|
-
- Python: `3.9` through `3.
|
|
482
|
+
- Python: `3.9` through `3.14`
|
|
471
483
|
|
|
472
484
|
## How It Works
|
|
473
485
|
|
|
@@ -48,6 +48,7 @@ from bashkit._bashkit import (
|
|
|
48
48
|
BashError,
|
|
49
49
|
BashTool,
|
|
50
50
|
BuiltinContext,
|
|
51
|
+
BuiltinResult,
|
|
51
52
|
ExecResult,
|
|
52
53
|
FileSystem,
|
|
53
54
|
ScriptedTool,
|
|
@@ -61,6 +62,7 @@ __all__ = [
|
|
|
61
62
|
"Bash",
|
|
62
63
|
"BashError",
|
|
63
64
|
"BuiltinContext",
|
|
65
|
+
"BuiltinResult",
|
|
64
66
|
"BashTool",
|
|
65
67
|
"ExecResult",
|
|
66
68
|
"FileSystem",
|
|
@@ -23,7 +23,25 @@ class BuiltinContext:
|
|
|
23
23
|
env: dict[str, str]
|
|
24
24
|
cwd: str
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
class BuiltinResult:
|
|
27
|
+
"""Shell-facing result for a custom builtin callback.
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
stdout: Text written to stdout.
|
|
31
|
+
stderr: Text written to stderr.
|
|
32
|
+
exit_code: Shell exit status.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
stdout: str
|
|
36
|
+
stderr: str
|
|
37
|
+
exit_code: int
|
|
38
|
+
|
|
39
|
+
def __init__(self, stdout: str = "", stderr: str = "", exit_code: int = 0) -> None: ...
|
|
40
|
+
|
|
41
|
+
BuiltinCallback = Callable[
|
|
42
|
+
[BuiltinContext],
|
|
43
|
+
str | BuiltinResult | Awaitable[str | BuiltinResult],
|
|
44
|
+
]
|
|
27
45
|
|
|
28
46
|
class FileSystem:
|
|
29
47
|
"""Direct access to BashKit's virtual filesystem or a standalone mountable FS.
|
|
@@ -358,7 +376,7 @@ class Bash:
|
|
|
358
376
|
external_handler: ExternalHandler | None = None,
|
|
359
377
|
files: dict[str, str | Callable[[], str]] | None = None,
|
|
360
378
|
mounts: list[dict[str, Any]] | None = None,
|
|
361
|
-
custom_builtins:
|
|
379
|
+
custom_builtins: Mapping[str, BuiltinCallback] | None = None,
|
|
362
380
|
) -> None:
|
|
363
381
|
"""Create a new Bash interpreter.
|
|
364
382
|
|
|
@@ -380,9 +398,10 @@ class Bash:
|
|
|
380
398
|
custom_builtins: Constructor-time Python callbacks exposed as
|
|
381
399
|
bash builtins. Each callback receives a ``BuiltinContext``
|
|
382
400
|
with raw ``argv`` tokens and optional pipeline ``stdin``,
|
|
383
|
-
and must return a stdout string
|
|
384
|
-
run on the caller's active
|
|
385
|
-
and on a private loop
|
|
401
|
+
and must return a stdout string, a ``BuiltinResult``, or
|
|
402
|
+
await either. Async callbacks run on the caller's active
|
|
403
|
+
asyncio loop for ``await execute()`` and on a private loop
|
|
404
|
+
for ``execute_sync()``.
|
|
386
405
|
|
|
387
406
|
Example::
|
|
388
407
|
|
|
@@ -424,6 +443,10 @@ class Bash:
|
|
|
424
443
|
Not supported when ``external_handler`` is configured — use
|
|
425
444
|
``execute()`` (async) instead. ``on_output`` must be synchronous.
|
|
426
445
|
Async ``custom_builtins`` callbacks run on a private loop here.
|
|
446
|
+
When called from inside a running event loop (e.g. Jupyter / IPython),
|
|
447
|
+
callbacks are dispatched to a background thread with their own loop so
|
|
448
|
+
that asyncio's "cannot run while another loop is running" restriction
|
|
449
|
+
is not triggered.
|
|
427
450
|
|
|
428
451
|
Example::
|
|
429
452
|
|
|
@@ -552,7 +575,7 @@ class Bash:
|
|
|
552
575
|
external_handler: ExternalHandler | None = None,
|
|
553
576
|
files: dict[str, str] | None = None,
|
|
554
577
|
mounts: list[dict[str, Any]] | None = None,
|
|
555
|
-
custom_builtins:
|
|
578
|
+
custom_builtins: Mapping[str, BuiltinCallback] | None = None,
|
|
556
579
|
) -> Bash:
|
|
557
580
|
"""Create a new ``Bash`` from snapshot bytes and optional constructor kwargs."""
|
|
558
581
|
...
|
|
@@ -727,7 +750,7 @@ class BashTool:
|
|
|
727
750
|
timeout_seconds: float | None = None,
|
|
728
751
|
files: dict[str, str | Callable[[], str]] | None = None,
|
|
729
752
|
mounts: list[dict[str, Any]] | None = None,
|
|
730
|
-
custom_builtins:
|
|
753
|
+
custom_builtins: Mapping[str, BuiltinCallback] | None = None,
|
|
731
754
|
) -> None:
|
|
732
755
|
"""Create a new BashTool.
|
|
733
756
|
|
|
@@ -742,9 +765,10 @@ class BashTool:
|
|
|
742
765
|
mounts: List of real host directory mount configs.
|
|
743
766
|
custom_builtins: Constructor-time Python callbacks exposed as
|
|
744
767
|
bash builtins. Each callback receives a ``BuiltinContext``
|
|
745
|
-
and must return a stdout string
|
|
746
|
-
run on the caller's active
|
|
747
|
-
and on a private loop
|
|
768
|
+
and must return a stdout string, a ``BuiltinResult``, or
|
|
769
|
+
await either. Async callbacks run on the caller's active
|
|
770
|
+
asyncio loop for ``await execute()`` and on a private loop
|
|
771
|
+
for ``execute_sync()``.
|
|
748
772
|
|
|
749
773
|
Example::
|
|
750
774
|
|
|
@@ -778,6 +802,10 @@ class BashTool:
|
|
|
778
802
|
"""Execute bash commands synchronously (blocking).
|
|
779
803
|
|
|
780
804
|
Async ``custom_builtins`` callbacks run on a private loop here.
|
|
805
|
+
When called from inside a running event loop (e.g. Jupyter / IPython),
|
|
806
|
+
callbacks are dispatched to a background thread with their own loop so
|
|
807
|
+
that asyncio's "cannot run while another loop is running" restriction
|
|
808
|
+
is not triggered.
|
|
781
809
|
|
|
782
810
|
``on_output`` must be synchronous.
|
|
783
811
|
|
|
@@ -962,7 +990,7 @@ class BashTool:
|
|
|
962
990
|
timeout_seconds: float | None = None,
|
|
963
991
|
files: dict[str, str] | None = None,
|
|
964
992
|
mounts: list[dict[str, Any]] | None = None,
|
|
965
|
-
custom_builtins:
|
|
993
|
+
custom_builtins: Mapping[str, BuiltinCallback] | None = None,
|
|
966
994
|
) -> BashTool:
|
|
967
995
|
"""Create a new ``BashTool`` from snapshot bytes and optional constructor kwargs."""
|
|
968
996
|
...
|
|
@@ -273,7 +273,8 @@ Path('/tmp/data.txt').write_text('hello from python')
|
|
|
273
273
|
bash.exec("cat /tmp/data.txt").await?; // "hello from python"
|
|
274
274
|
```
|
|
275
275
|
|
|
276
|
-
Stdlib modules: `math`, `
|
|
276
|
+
Stdlib modules: `math`, `pathlib`, `os` (getenv/environ), `sys`, `typing`.
|
|
277
|
+
Security note: `re` is intentionally disabled due to regex backtracking DoS risk.
|
|
277
278
|
Limitations: no `open()` (use `pathlib.Path`), no network, no classes, no third-party imports.
|
|
278
279
|
See [crates/bashkit/docs/python.md](crates/bashkit/docs/python.md) for the full guide.
|
|
279
280
|
|
|
@@ -23,7 +23,10 @@ use bashkit::Bash;
|
|
|
23
23
|
|
|
24
24
|
# #[tokio::main]
|
|
25
25
|
# async fn main() -> bashkit::Result<()> {
|
|
26
|
-
let mut bash = Bash::builder()
|
|
26
|
+
let mut bash = Bash::builder()
|
|
27
|
+
.python()
|
|
28
|
+
.env("BASHKIT_ALLOW_INPROCESS_PYTHON", "1")
|
|
29
|
+
.build();
|
|
27
30
|
|
|
28
31
|
let result = bash.exec("python3 -c \"print('hello from Monty')\"").await?;
|
|
29
32
|
assert_eq!(result.stdout, "hello from Monty\n");
|
|
@@ -187,7 +190,10 @@ Monty has no network primitives and no OsCall variants for network operations.
|
|
|
187
190
|
**No classes.** Class definitions are not yet supported by Monty (planned upstream).
|
|
188
191
|
|
|
189
192
|
**No third-party imports.** Only builtin modules (`sys`, `typing`, `os`, `pathlib`,
|
|
190
|
-
`math`, `
|
|
193
|
+
`math`, `json`, `datetime`) are available. No `pip install`, no `import numpy`.
|
|
194
|
+
|
|
195
|
+
**No `re` module.** Disabled due to catastrophic backtracking DoS risk in
|
|
196
|
+
untrusted code execution.
|
|
191
197
|
|
|
192
198
|
**No `str.format()`.** Use f-strings instead: `f"value={x}"` not `"value={}".format(x)`.
|
|
193
199
|
|
|
@@ -109,6 +109,7 @@ through configurable limits.
|
|
|
109
109
|
| Unbounded builtin output (TM-DOS-058) | `seq 1 1000000` produces 1M lines | Add `max_stdout_bytes` limit | **OPEN** |
|
|
110
110
|
| Param expansion bomb (TM-DOS-059) | `${x//a/bigstring}` multiplicative amplification | `max_total_variable_bytes` + `max_stdout_bytes` | MITIGATED |
|
|
111
111
|
| Sparse array huge-index (TM-DOS-060) | `arr[999999999]=x` | HashMap storage; `max_array_entries` | MITIGATED |
|
|
112
|
+
| Snapshot restore bypasses function/parser limits (TM-DOS-061) | Crafted snapshot with oversized/deep function bodies | Re-parse restored function source under current limits; re-check function memory budget | MITIGATED |
|
|
112
113
|
|
|
113
114
|
**Configuration:**
|
|
114
115
|
```rust
|
|
@@ -32,6 +32,7 @@ async fn main() -> Result<()> {
|
|
|
32
32
|
|
|
33
33
|
let mut bash = Bash::builder()
|
|
34
34
|
.python_with_external_handler(PythonLimits::default(), vec!["add".to_string()], handler)
|
|
35
|
+
.env("BASHKIT_ALLOW_INPROCESS_PYTHON", "1")
|
|
35
36
|
.build();
|
|
36
37
|
|
|
37
38
|
let result = bash.exec("python3 -c \"print(add(20, 22))\"").await?;
|
|
@@ -13,7 +13,10 @@ use bashkit::Bash;
|
|
|
13
13
|
async fn main() -> anyhow::Result<()> {
|
|
14
14
|
println!("=== BashKit Python Integration ===\n");
|
|
15
15
|
|
|
16
|
-
let mut bash = Bash::builder()
|
|
16
|
+
let mut bash = Bash::builder()
|
|
17
|
+
.python()
|
|
18
|
+
.env("BASHKIT_ALLOW_INPROCESS_PYTHON", "1")
|
|
19
|
+
.build();
|
|
17
20
|
|
|
18
21
|
// --- 1. Inline expressions ---
|
|
19
22
|
println!("--- Inline Expressions ---");
|