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