bashkit 0.7.2__tar.gz → 0.8.0__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.7.2 → bashkit-0.8.0}/Cargo.lock +30 -22
- {bashkit-0.7.2 → bashkit-0.8.0}/Cargo.toml +1 -1
- {bashkit-0.7.2 → bashkit-0.8.0}/PKG-INFO +1 -1
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/Cargo.toml +1 -1
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/README.md +4 -4
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/hooks.md +2 -2
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/python.md +19 -15
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/threat-model.md +2 -2
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/python.rs +121 -10
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/rg/mod.rs +59 -24
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/interpreter/mod.rs +130 -2
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/tool.rs +2 -2
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/python_integration_tests.rs +113 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/python_security_tests.rs +2 -2
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/threat_model_tests.rs +39 -2
- {bashkit-0.7.2 → bashkit-0.8.0}/README.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/bashkit/__init__.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/bashkit/_bashkit.pyi +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/bashkit/deepagents.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/bashkit/langchain.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/bashkit/py.typed +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/bashkit/pydantic_ai.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/file_ops.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/hotpath.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/parallel_execution.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/results/README.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/results/criterion-file_ops-linux-x86_64-1779759850.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/results/criterion-hotpath-attrs+shopt-linux-x86_64-1779759850.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/results/criterion-hotpath-perf-linux-x86_64-1779744742.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/results/criterion-parallel-(none)-linux-x86_64-1773469129.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/results/criterion-sqlite-vm-linux-x86_64-1777865268.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/benches/sqlite.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/clap-builtins.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/compatibility.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/credential-injection.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/custom_builtins.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/jq.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/live_mounts.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/logging.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/sqlite.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/ssh.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/docs/typescript.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/agent_tool.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/basic.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/clap_builtin.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/clap_builtin_subcommands.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/custom_backend.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/custom_builtins.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/custom_filesystem_impl.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/custom_fs.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/git_workflow.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/live_mounts.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/python_external_functions.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/python_scripts.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/realfs_readonly.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/realfs_readwrite.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/resource_limits.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/scripted_tool.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/show_tool_output.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/sqlite_basic.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/sqlite_workflow.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/ssh_supabase.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/streaming_output.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/text_files.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/text_processing.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/typescript_external_functions.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/typescript_scripts.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/examples/virtual_identity.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/out file.txt +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/proptest-regressions/builtins/sqlite/tests.txt +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/alias.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/archive.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/arg_parser.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/assert.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/awk/interpreter.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/awk/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/awk/parser.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/awk/tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/base64.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/bc.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/caller.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/cat.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/checksum.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/clap_env.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/clear.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/column.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/comm.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/compgen.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/csv.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/curl.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/cuttr.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/date.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/diff.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/dirstack.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/disk.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/dotenv.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/echo.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/environ.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/envsubst.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/expand.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/export.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/expr.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/fc.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/fileops.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/flow.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/fold.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/cat_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/extendedbigdecimal.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/format/argument.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/format/escape.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/format/human.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/format/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/format/num_format.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/format/spec.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/format_support.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/ls_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/mktemp_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/num_parser.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/od_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/readlink_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/realpath_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/shuf_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/stat_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/tac_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/tee_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/generated/truncate_args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/git/client.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/git/cmd.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/git/config.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/git/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/glob_cmd.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/grep.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/headtail.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/help.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/helpers.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/hextools.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/http.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/iconv.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/inspect.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/introspect.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/join.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/jq/args.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/jq/compat.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/jq/convert.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/jq/errors.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/jq/format.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/jq/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/jq/regex_compat.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/jq/tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/json.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/limits.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/log.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ls/find.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ls/glob.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ls/list.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ls/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ls/rmdir.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ls/tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/mapfile.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/mkfifo.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/navigation.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/nl.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/numfmt.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/parallel.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/paste.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/patch.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/path.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/pipeline.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/printf.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/read.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/retry.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/search_common.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sed.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/semver.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/seq.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/shuf.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sleep.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sortuniq.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/source.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/split.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sqlite/dot_commands.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sqlite/engine.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sqlite/formatter.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sqlite/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sqlite/parser.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sqlite/tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/sqlite/vfs_io.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ssh/allowlist.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ssh/client.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ssh/cmd.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ssh/config.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ssh/handler.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ssh/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/ssh/russh_handler.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/strings.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/system.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/template.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/textrev.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/timeout.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/tomlq.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/trap.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/tree.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/truncate.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/typescript.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/vars.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/verify.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/wait.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/wc.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/yaml.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/yes.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/builtins/zip_cmd.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/credential.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/error.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/backend.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/limits.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/memory.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/mountable.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/overlay.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/posix.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/readonly.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/realfs.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/search.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/fs/traits.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/hooks.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/interop/fs.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/interop/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/interpreter/glob.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/interpreter/jobs.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/interpreter/state.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/lib.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/limits.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/logging_impl.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/network/allowlist.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/network/bot_auth.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/network/client.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/network/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/parser/ast.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/parser/budget.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/parser/lexer.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/parser/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/parser/span.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/parser/tokens.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/scripted_tool/execute.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/scripted_tool/extension.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/scripted_tool/mod.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/scripted_tool/toolset.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/snapshot.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/testing.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/tool_def.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/src/trace.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/agent_skills_publication_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/allexport_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/awk_fuzz_scaffold_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/awk_newline_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/awk_pattern_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/awk_printf_expr_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/awk_range_pattern_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/background_exec_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/bash_source_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/blackbox_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/builtin_error_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/builtin_registry_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/byte_range_panic_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/cancellation_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/cmdsub_quote_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/coproc_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/coreutils_differential_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/credential_injection_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/custom_builtins_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/custom_fs_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/dev_null_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/final_env_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/find_multi_path_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/git_advanced_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/git_inspection_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/git_integration_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/git_remote_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/git_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/harness_example_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/history_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_1175_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_1776_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_1777_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_274_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_275_279_282_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_276_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_277_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_289_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_290_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_291_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_853_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_872_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_873_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/issue_875_test.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/jq_fuzz_scaffold_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/live_mount_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/main.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/mkfifo_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/nested_subscript_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/network_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/output_truncation_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/proptest_differential.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/regex_limit_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/release_profile_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/script_execution_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/security_audit_pocs.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/set_e_and_or_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/shuf_resource_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/skills_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/snapshot_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/source_function_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/spec_runner.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/spec_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/sqlite_compat_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/sqlite_differential_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/sqlite_fuzz_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/sqlite_integration_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/sqlite_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/stack_overflow_regression_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/subst_depth_limit_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/symlink_overlay_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/tty_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/typescript_integration_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/typescript_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/unicode_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/unset_function_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/urandom_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/integration/workflow_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/logging_security_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/proptest_security.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/realfs_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/security_failpoint_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/azure_discover_rank.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/azure_generate_url.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/azure_query_capacity.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/helm_validate_chart.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/jwt_test_setup.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/stitch_download_asset.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/stitch_fetch.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/stitch_verify_setup.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/superpowers_find_polluter.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/skills_fixtures/vercel_deploy.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/awk/awk.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/awk/delete-array.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/awk/dev-stderr.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/awk/eval-bugs.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/awk/filename.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/awk/getline-file.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/alias.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/append_redirect.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/arith-dynamic.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/arithmetic-base-expansion.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/arithmetic.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/array-slicing.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/array-splat.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/arrays.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/assoc-arrays.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/awk-printf-width.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/background.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/bash-c-exports.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/bash-command.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/bash-flags.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/bash-source-var.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/bash-stdin-pipe.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/bc.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/blackbox-edge-cases.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/blackbox-exploration.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/brace-expansion.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/brace_expansion_lookahead.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/cat.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/checksum.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/chown-kill.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/cmd-suggestions.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/cmdsub_depth_unquoted.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/column.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/comm.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/command-not-found.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/command-subst.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/command.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/command_v.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/compgen-path.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/conditional-short-circuit.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/conditional.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/control-flow.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/cuttr.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/date.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/declare.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/df.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/diff.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/dirstack.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/du.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/echo.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/empty-bodies.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/env.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/errexit.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/eval-bugs.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/exec-command.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-redirect.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-variable.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/exit-status.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/expr.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/extglob.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/file.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/fileops.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/find.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/functions.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/getopts.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/glob-options.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/glob_match_cap.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/globs.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/gzip.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/headtail.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/help-flag.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/heredoc-edge.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/heredoc.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/herestring.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/hextools.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/history.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/indirect-expansion.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/less.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/ln.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/ls.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/memory_budget_desync.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/mktemp.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/nameref-assoc.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/nameref.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/negative-tests.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/nl.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/nounset.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/numfmt.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/od.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/parse-errors.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/paste-flags.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/paste.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/path.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/pipes-redirects.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/printenv.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/printf.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/procsub.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/quote.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/read-builtin.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/readlink.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/recursive-cmdsub.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/regex-limit.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/replace_pattern_limit.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/script-exec.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/seq.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/set-allexport.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/shell-grammar.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/shuf.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/sleep.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/sortuniq.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/source.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/stat.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/string-ops.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/strings.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/subprocess-isolation.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/subshell.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/tar.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/tar_create.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/tee.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/temp-binding.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/test-operators.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/test-tty.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/textrev.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/time.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/timeout.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/tree.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/truncate.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/type.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/unicode.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/unset-exported-var.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/var-op-test.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/variables.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/wait.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/watch.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/wc.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/word-split.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/bash/xargs.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/grep/eval-bugs.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/grep/grep.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/grep/rg.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/jq/jq.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/python/env_leak.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/python/python.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/sed/eval-bugs.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/sed/sed.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/spec_cases/typescript/typescript.test.sh +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/ssh_builtin_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit/tests/ssh_supabase_tests.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/Cargo.toml +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/README.md +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/examples/bash_basics.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/examples/custom_filesystem_interop.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/examples/data_pipeline.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/examples/fastapi_async_tool.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/examples/jupyter_async_test.ipynb +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/examples/k8s_orchestrator.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/examples/langgraph_async_tool.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/examples/llm_tool.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/src/lib.rs +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/_bashkit_categories.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/_security_advanced.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/_security_core.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_ai_adapters.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_async_callbacks.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_basic.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_builtins.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_control_flow.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_error_handling.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_fastapi_integration.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_filesystem_interop.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_integration.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_jupyter_compat.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_langgraph_integration.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_network_config.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_network_credentials.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_python_security.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_registered_tools.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_scripts.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_security.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_shell_injection.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_sqlite.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_streaming_output.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_strings_and_quoting.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_tool_metadata.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/crates/bashkit-python/tests/test_vfs.py +0 -0
- {bashkit-0.7.2 → bashkit-0.8.0}/pyproject.toml +0 -0
|
@@ -345,7 +345,7 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
|
|
|
345
345
|
|
|
346
346
|
[[package]]
|
|
347
347
|
name = "bashkit"
|
|
348
|
-
version = "0.
|
|
348
|
+
version = "0.8.0"
|
|
349
349
|
dependencies = [
|
|
350
350
|
"anyhow",
|
|
351
351
|
"async-trait",
|
|
@@ -398,7 +398,7 @@ dependencies = [
|
|
|
398
398
|
|
|
399
399
|
[[package]]
|
|
400
400
|
name = "bashkit-bench"
|
|
401
|
-
version = "0.
|
|
401
|
+
version = "0.8.0"
|
|
402
402
|
dependencies = [
|
|
403
403
|
"anyhow",
|
|
404
404
|
"bashkit",
|
|
@@ -412,7 +412,7 @@ dependencies = [
|
|
|
412
412
|
|
|
413
413
|
[[package]]
|
|
414
414
|
name = "bashkit-cli"
|
|
415
|
-
version = "0.
|
|
415
|
+
version = "0.8.0"
|
|
416
416
|
dependencies = [
|
|
417
417
|
"anyhow",
|
|
418
418
|
"bashkit",
|
|
@@ -426,7 +426,7 @@ dependencies = [
|
|
|
426
426
|
|
|
427
427
|
[[package]]
|
|
428
428
|
name = "bashkit-coreutils-port"
|
|
429
|
-
version = "0.
|
|
429
|
+
version = "0.8.0"
|
|
430
430
|
dependencies = [
|
|
431
431
|
"anyhow",
|
|
432
432
|
"prettyplease",
|
|
@@ -440,7 +440,7 @@ dependencies = [
|
|
|
440
440
|
|
|
441
441
|
[[package]]
|
|
442
442
|
name = "bashkit-eval"
|
|
443
|
-
version = "0.
|
|
443
|
+
version = "0.8.0"
|
|
444
444
|
dependencies = [
|
|
445
445
|
"anyhow",
|
|
446
446
|
"async-trait",
|
|
@@ -457,7 +457,7 @@ dependencies = [
|
|
|
457
457
|
|
|
458
458
|
[[package]]
|
|
459
459
|
name = "bashkit-js"
|
|
460
|
-
version = "0.
|
|
460
|
+
version = "0.8.0"
|
|
461
461
|
dependencies = [
|
|
462
462
|
"bashkit",
|
|
463
463
|
"napi",
|
|
@@ -469,7 +469,7 @@ dependencies = [
|
|
|
469
469
|
|
|
470
470
|
[[package]]
|
|
471
471
|
name = "bashkit-python"
|
|
472
|
-
version = "0.
|
|
472
|
+
version = "0.8.0"
|
|
473
473
|
dependencies = [
|
|
474
474
|
"bashkit",
|
|
475
475
|
"num-bigint",
|
|
@@ -1745,9 +1745,9 @@ dependencies = [
|
|
|
1745
1745
|
|
|
1746
1746
|
[[package]]
|
|
1747
1747
|
name = "get-size-derive2"
|
|
1748
|
-
version = "0.
|
|
1748
|
+
version = "0.9.0"
|
|
1749
1749
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1750
|
-
checksum = "
|
|
1750
|
+
checksum = "c9f8ab1b98a1284961d722ce994d9a0f3018ab1917618d4113824a72b9f71bc9"
|
|
1751
1751
|
dependencies = [
|
|
1752
1752
|
"attribute-derive",
|
|
1753
1753
|
"quote",
|
|
@@ -1756,15 +1756,16 @@ dependencies = [
|
|
|
1756
1756
|
|
|
1757
1757
|
[[package]]
|
|
1758
1758
|
name = "get-size2"
|
|
1759
|
-
version = "0.
|
|
1759
|
+
version = "0.9.0"
|
|
1760
1760
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1761
|
-
checksum = "
|
|
1761
|
+
checksum = "b0cd0777a1057362cab35a779e0d79dacecb8d73e2c733eaafeb7ea917b08f03"
|
|
1762
1762
|
dependencies = [
|
|
1763
1763
|
"compact_str",
|
|
1764
1764
|
"get-size-derive2",
|
|
1765
|
-
"hashbrown 0.
|
|
1765
|
+
"hashbrown 0.17.1",
|
|
1766
1766
|
"ordermap",
|
|
1767
1767
|
"smallvec",
|
|
1768
|
+
"thin-vec",
|
|
1768
1769
|
]
|
|
1769
1770
|
|
|
1770
1771
|
[[package]]
|
|
@@ -2442,9 +2443,9 @@ dependencies = [
|
|
|
2442
2443
|
|
|
2443
2444
|
[[package]]
|
|
2444
2445
|
name = "jiter"
|
|
2445
|
-
version = "0.
|
|
2446
|
+
version = "0.15.0"
|
|
2446
2447
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2447
|
-
checksum = "
|
|
2448
|
+
checksum = "7866f284df68dbc242796251ed9768bde2b58ebc4d7d32cc07cc7fd993e3ed6c"
|
|
2448
2449
|
dependencies = [
|
|
2449
2450
|
"ahash",
|
|
2450
2451
|
"bitvec",
|
|
@@ -2811,10 +2812,9 @@ dependencies = [
|
|
|
2811
2812
|
[[package]]
|
|
2812
2813
|
name = "monty"
|
|
2813
2814
|
version = "0.0.17"
|
|
2814
|
-
source = "git+https://github.com/pydantic/monty?rev=
|
|
2815
|
+
source = "git+https://github.com/pydantic/monty?rev=9b5f478#9b5f478288e8c1c0198ec4af60049738f93652c1"
|
|
2815
2816
|
dependencies = [
|
|
2816
2817
|
"ahash",
|
|
2817
|
-
"bytemuck",
|
|
2818
2818
|
"chrono",
|
|
2819
2819
|
"fancy-regex 0.17.0",
|
|
2820
2820
|
"hashbrown 0.16.1",
|
|
@@ -4200,7 +4200,7 @@ dependencies = [
|
|
|
4200
4200
|
[[package]]
|
|
4201
4201
|
name = "ruff_python_ast"
|
|
4202
4202
|
version = "0.0.0"
|
|
4203
|
-
source = "git+https://github.com/
|
|
4203
|
+
source = "git+https://github.com/samuelcolvin/ruff.git?rev=6aaa91ac2b269df1414954ccd5134f0e6f5c6d30#6aaa91ac2b269df1414954ccd5134f0e6f5c6d30"
|
|
4204
4204
|
dependencies = [
|
|
4205
4205
|
"aho-corasick",
|
|
4206
4206
|
"bitflags",
|
|
@@ -4212,13 +4212,14 @@ dependencies = [
|
|
|
4212
4212
|
"ruff_source_file",
|
|
4213
4213
|
"ruff_text_size",
|
|
4214
4214
|
"rustc-hash",
|
|
4215
|
+
"thin-vec",
|
|
4215
4216
|
"thiserror 2.0.18",
|
|
4216
4217
|
]
|
|
4217
4218
|
|
|
4218
4219
|
[[package]]
|
|
4219
4220
|
name = "ruff_python_parser"
|
|
4220
4221
|
version = "0.0.0"
|
|
4221
|
-
source = "git+https://github.com/
|
|
4222
|
+
source = "git+https://github.com/samuelcolvin/ruff.git?rev=6aaa91ac2b269df1414954ccd5134f0e6f5c6d30#6aaa91ac2b269df1414954ccd5134f0e6f5c6d30"
|
|
4222
4223
|
dependencies = [
|
|
4223
4224
|
"bitflags",
|
|
4224
4225
|
"bstr",
|
|
@@ -4230,6 +4231,7 @@ dependencies = [
|
|
|
4230
4231
|
"ruff_text_size",
|
|
4231
4232
|
"rustc-hash",
|
|
4232
4233
|
"static_assertions",
|
|
4234
|
+
"thin-vec",
|
|
4233
4235
|
"unicode-ident",
|
|
4234
4236
|
"unicode-normalization",
|
|
4235
4237
|
"unicode_names2",
|
|
@@ -4238,7 +4240,7 @@ dependencies = [
|
|
|
4238
4240
|
[[package]]
|
|
4239
4241
|
name = "ruff_python_stdlib"
|
|
4240
4242
|
version = "0.0.0"
|
|
4241
|
-
source = "git+https://github.com/
|
|
4243
|
+
source = "git+https://github.com/samuelcolvin/ruff.git?rev=6aaa91ac2b269df1414954ccd5134f0e6f5c6d30#6aaa91ac2b269df1414954ccd5134f0e6f5c6d30"
|
|
4242
4244
|
dependencies = [
|
|
4243
4245
|
"bitflags",
|
|
4244
4246
|
"unicode-ident",
|
|
@@ -4247,7 +4249,7 @@ dependencies = [
|
|
|
4247
4249
|
[[package]]
|
|
4248
4250
|
name = "ruff_python_trivia"
|
|
4249
4251
|
version = "0.0.0"
|
|
4250
|
-
source = "git+https://github.com/
|
|
4252
|
+
source = "git+https://github.com/samuelcolvin/ruff.git?rev=6aaa91ac2b269df1414954ccd5134f0e6f5c6d30#6aaa91ac2b269df1414954ccd5134f0e6f5c6d30"
|
|
4251
4253
|
dependencies = [
|
|
4252
4254
|
"itertools 0.14.0",
|
|
4253
4255
|
"ruff_source_file",
|
|
@@ -4258,7 +4260,7 @@ dependencies = [
|
|
|
4258
4260
|
[[package]]
|
|
4259
4261
|
name = "ruff_source_file"
|
|
4260
4262
|
version = "0.0.0"
|
|
4261
|
-
source = "git+https://github.com/
|
|
4263
|
+
source = "git+https://github.com/samuelcolvin/ruff.git?rev=6aaa91ac2b269df1414954ccd5134f0e6f5c6d30#6aaa91ac2b269df1414954ccd5134f0e6f5c6d30"
|
|
4262
4264
|
dependencies = [
|
|
4263
4265
|
"memchr",
|
|
4264
4266
|
"ruff_text_size",
|
|
@@ -4267,7 +4269,7 @@ dependencies = [
|
|
|
4267
4269
|
[[package]]
|
|
4268
4270
|
name = "ruff_text_size"
|
|
4269
4271
|
version = "0.0.0"
|
|
4270
|
-
source = "git+https://github.com/
|
|
4272
|
+
source = "git+https://github.com/samuelcolvin/ruff.git?rev=6aaa91ac2b269df1414954ccd5134f0e6f5c6d30#6aaa91ac2b269df1414954ccd5134f0e6f5c6d30"
|
|
4271
4273
|
dependencies = [
|
|
4272
4274
|
"get-size2",
|
|
4273
4275
|
]
|
|
@@ -5226,6 +5228,12 @@ dependencies = [
|
|
|
5226
5228
|
"unicode-width 0.2.2",
|
|
5227
5229
|
]
|
|
5228
5230
|
|
|
5231
|
+
[[package]]
|
|
5232
|
+
name = "thin-vec"
|
|
5233
|
+
version = "0.2.18"
|
|
5234
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5235
|
+
checksum = "b0f7e269b48f0a7dd0146680fa24b50cc67fc0373f086a5b2f99bd084639b482"
|
|
5236
|
+
|
|
5229
5237
|
[[package]]
|
|
5230
5238
|
name = "thiserror"
|
|
5231
5239
|
version = "1.0.69"
|
|
@@ -98,7 +98,7 @@ unit-prefix = "0.5"
|
|
|
98
98
|
os_display = "0.1.3"
|
|
99
99
|
|
|
100
100
|
# Embedded Python interpreter (optional)
|
|
101
|
-
monty = { git = "https://github.com/pydantic/monty", rev = "
|
|
101
|
+
monty = { git = "https://github.com/pydantic/monty", rev = "9b5f478", optional = true }
|
|
102
102
|
|
|
103
103
|
# Embedded TypeScript interpreter (optional)
|
|
104
104
|
zapcode-core = { version = "1.5", optional = true }
|
|
@@ -341,17 +341,17 @@ bash.exec("python3 -c \"print(2 ** 10)\"").await?;
|
|
|
341
341
|
// Script files from VFS
|
|
342
342
|
bash.exec("python3 /tmp/script.py").await?;
|
|
343
343
|
|
|
344
|
-
// VFS bridging: pathlib.Path
|
|
344
|
+
// VFS bridging: open() and pathlib.Path work with the virtual filesystem
|
|
345
345
|
bash.exec(r#"python3 -c "
|
|
346
|
-
|
|
347
|
-
|
|
346
|
+
with open('/tmp/data.txt', 'w') as f:
|
|
347
|
+
f.write('hello from python')
|
|
348
348
|
""#).await?;
|
|
349
349
|
bash.exec("cat /tmp/data.txt").await?; // "hello from python"
|
|
350
350
|
```
|
|
351
351
|
|
|
352
352
|
Stdlib modules: `math`, `pathlib`, `os` (getenv/environ), `sys`, `typing`.
|
|
353
353
|
Security note: `re` is intentionally disabled due to regex backtracking DoS risk.
|
|
354
|
-
Limitations:
|
|
354
|
+
Limitations: file I/O is VFS-scoped, no network, no classes, no third-party imports.
|
|
355
355
|
See [crates/bashkit/docs/python.md](crates/bashkit/docs/python.md) for the full guide.
|
|
356
356
|
|
|
357
357
|
## Experimental: TypeScript Support
|
|
@@ -243,7 +243,7 @@ boundary stays in bashkit — hooks cannot bypass the allowlist.
|
|
|
243
243
|
|
|
244
244
|
### `before_http` — Filter or Modify Requests
|
|
245
245
|
|
|
246
|
-
```rust
|
|
246
|
+
```rust,ignore
|
|
247
247
|
use bashkit::{Bash, NetworkAllowlist, hooks::{HookAction, HttpRequestEvent}};
|
|
248
248
|
|
|
249
249
|
# fn main() {
|
|
@@ -266,7 +266,7 @@ let bash = Bash::builder()
|
|
|
266
266
|
|
|
267
267
|
### `after_http` — Observe Responses
|
|
268
268
|
|
|
269
|
-
```rust
|
|
269
|
+
```rust,ignore
|
|
270
270
|
use bashkit::{Bash, NetworkAllowlist, hooks::{HookAction, HttpResponseEvent}};
|
|
271
271
|
use std::sync::{Arc, Mutex};
|
|
272
272
|
|
|
@@ -73,16 +73,15 @@ echo "print('piped')" | python3
|
|
|
73
73
|
|
|
74
74
|
## Virtual Filesystem (VFS) Bridging
|
|
75
75
|
|
|
76
|
-
Python `pathlib.Path` operations are bridged to Bashkit's virtual
|
|
77
|
-
Files created by bash are readable from Python and vice versa.
|
|
76
|
+
Python `open()` and `pathlib.Path` operations are bridged to Bashkit's virtual
|
|
77
|
+
filesystem. Files created by bash are readable from Python and vice versa.
|
|
78
78
|
|
|
79
79
|
### Bash → Python
|
|
80
80
|
|
|
81
81
|
```bash
|
|
82
82
|
echo "important data" > /tmp/shared.txt
|
|
83
83
|
python3 -c "
|
|
84
|
-
|
|
85
|
-
content = Path('/tmp/shared.txt').read_text()
|
|
84
|
+
content = open('/tmp/shared.txt').read()
|
|
86
85
|
print(f'Got: {content.strip()}')
|
|
87
86
|
"
|
|
88
87
|
```
|
|
@@ -91,16 +90,20 @@ print(f'Got: {content.strip()}')
|
|
|
91
90
|
|
|
92
91
|
```bash
|
|
93
92
|
python3 -c "
|
|
94
|
-
|
|
95
|
-
_ =
|
|
93
|
+
with open('/tmp/result.txt', 'w') as f:
|
|
94
|
+
_ = f.write('computed by python\n')
|
|
96
95
|
"
|
|
97
96
|
cat /tmp/result.txt
|
|
98
97
|
```
|
|
99
98
|
|
|
100
|
-
### Supported
|
|
99
|
+
### Supported File Operations
|
|
101
100
|
|
|
102
101
|
| Operation | Example |
|
|
103
102
|
|-----------|---------|
|
|
103
|
+
| Open/read | `open('f.txt').read()` |
|
|
104
|
+
| Open/write | `open('f.txt', 'w').write('data')` |
|
|
105
|
+
| Open/append | `open('f.txt', 'a').write('more')` |
|
|
106
|
+
| Path open | `Path('f.txt').open('r')` |
|
|
104
107
|
| Read text | `Path('f.txt').read_text()` |
|
|
105
108
|
| Read bytes | `Path('f.txt').read_bytes()` |
|
|
106
109
|
| Write text | `Path('f.txt').write_text('data')` |
|
|
@@ -117,7 +120,7 @@ cat /tmp/result.txt
|
|
|
117
120
|
### Architecture
|
|
118
121
|
|
|
119
122
|
```text
|
|
120
|
-
Python code → Monty VM → OsCall(ReadText, path) → Bashkit VFS → resume
|
|
123
|
+
Python code → Monty VM → OsCall(Open/ReadText, path) → Bashkit VFS → resume
|
|
121
124
|
```
|
|
122
125
|
|
|
123
126
|
Monty pauses at filesystem operations, Bashkit bridges them to the VFS, then
|
|
@@ -169,19 +172,20 @@ let help = tool.help(); // Includes a Markdown Notes section with Python hints
|
|
|
169
172
|
```
|
|
170
173
|
|
|
171
174
|
The builtin's `llm_hint()` is automatically included in the tool's documentation,
|
|
172
|
-
so LLMs know
|
|
175
|
+
so LLMs know file I/O is VFS-scoped and HTTP requests/classes are unavailable.
|
|
173
176
|
|
|
174
177
|
## Limitations
|
|
175
178
|
|
|
176
|
-
**
|
|
179
|
+
**VFS-only file I/O.** `open()` and `pathlib.Path` read/write Bashkit's virtual
|
|
180
|
+
filesystem, not the host filesystem:
|
|
177
181
|
|
|
178
182
|
```python
|
|
179
|
-
# Won't work:
|
|
180
|
-
# f = open('data.txt')
|
|
181
|
-
|
|
182
|
-
# Use instead:
|
|
183
183
|
from pathlib import Path
|
|
184
|
-
|
|
184
|
+
|
|
185
|
+
with open('/tmp/data.txt', 'w') as f:
|
|
186
|
+
f.write('hello')
|
|
187
|
+
|
|
188
|
+
content = Path('/tmp/data.txt').read_text()
|
|
185
189
|
```
|
|
186
190
|
|
|
187
191
|
**No HTTP/network.** No `socket`, `urllib`, `requests`, or `http.client` modules.
|
|
@@ -554,7 +554,7 @@ attacks:
|
|
|
554
554
|
### Python / Monty Security (TM-PY-*)
|
|
555
555
|
|
|
556
556
|
The `python`/`python3` builtins embed the Monty Python interpreter with VFS bridging.
|
|
557
|
-
Python `pathlib.Path` operations are bridged to Bashkit's virtual filesystem.
|
|
557
|
+
Python `pathlib.Path` and `open()` operations are bridged to Bashkit's virtual filesystem.
|
|
558
558
|
|
|
559
559
|
| Threat | Attack Example | Mitigation | Status |
|
|
560
560
|
|--------|---------------|------------|--------|
|
|
@@ -562,7 +562,7 @@ Python `pathlib.Path` operations are bridged to Bashkit's virtual filesystem.
|
|
|
562
562
|
| Memory exhaustion (TM-PY-002) | Large allocation | Monty max_memory (64MB) + max_allocations (1M) | MITIGATED |
|
|
563
563
|
| Stack overflow (TM-PY-003) | Deep recursion | Monty max_recursion (200) | MITIGATED |
|
|
564
564
|
| Shell escape (TM-PY-004) | `os.system()` | Monty has no os.system/subprocess | MITIGATED |
|
|
565
|
-
| Real FS access (TM-PY-005) | `open()` |
|
|
565
|
+
| Real FS access (TM-PY-005) | `open()` | VFS bridge opens only Bashkit VFS files | MITIGATED |
|
|
566
566
|
| Error info leak (TM-PY-006) | Errors go to stdout | Errors go to stderr, not stdout | MITIGATED |
|
|
567
567
|
| Real FS read (TM-PY-015) | `Path.read_text()` | VFS bridge reads only from Bashkit VFS | MITIGATED |
|
|
568
568
|
| Real FS write (TM-PY-016) | `Path.write_text()` | VFS bridge writes only to Bashkit VFS | MITIGATED |
|
|
@@ -9,17 +9,21 @@
|
|
|
9
9
|
//! # Overview
|
|
10
10
|
//!
|
|
11
11
|
//! Virtual Python execution with resource limits and VFS access.
|
|
12
|
-
//! Python `pathlib.Path` operations are bridged to
|
|
13
|
-
//! via Monty's OsCall pause/resume mechanism.
|
|
12
|
+
//! Python `pathlib.Path` operations and `open()` file handles are bridged to
|
|
13
|
+
//! Bashkit's virtual filesystem via Monty's OsCall pause/resume mechanism.
|
|
14
|
+
//! No real filesystem or network access.
|
|
15
|
+
//!
|
|
16
|
+
//! Decision: `open()` performs only VFS open-time effects and returns Monty's
|
|
17
|
+
//! virtual file handle. Bashkit never holds host/native Python file handles.
|
|
14
18
|
//!
|
|
15
19
|
//! Supports: `python -c "code"`, `python script.py`, stdin piping.
|
|
16
20
|
|
|
17
21
|
use async_trait::async_trait;
|
|
18
22
|
use chrono::{Datelike, Timelike};
|
|
19
23
|
use monty::{
|
|
20
|
-
ExcType, ExtFunctionResult, LimitedTracker, MontyDate, MontyDateTime, MontyException,
|
|
21
|
-
MontyObject, MontyRun, NameLookupResult, OsFunction, PrintWriter,
|
|
22
|
-
dir_stat, file_stat, symlink_stat,
|
|
24
|
+
ExcType, ExtFunctionResult, FileMode, LimitedTracker, MontyDate, MontyDateTime, MontyException,
|
|
25
|
+
MontyFileHandle, MontyObject, MontyRun, NameLookupResult, OsFunction, PrintWriter,
|
|
26
|
+
ResourceLimits, RunProgress, dir_stat, file_stat, symlink_stat,
|
|
23
27
|
};
|
|
24
28
|
use std::collections::HashMap;
|
|
25
29
|
use std::future::Future;
|
|
@@ -181,8 +185,9 @@ impl std::fmt::Debug for PythonExternalFns {
|
|
|
181
185
|
/// The python/python3 builtin command.
|
|
182
186
|
///
|
|
183
187
|
/// Executes Python code using the embedded Monty interpreter (pydantic/monty).
|
|
184
|
-
/// Python `pathlib.Path` operations are bridged to Bashkit's VFS
|
|
185
|
-
/// created by bash (`cat > file`) are readable from Python, and vice
|
|
188
|
+
/// Python `pathlib.Path` and `open()` operations are bridged to Bashkit's VFS
|
|
189
|
+
/// — files created by bash (`cat > file`) are readable from Python, and vice
|
|
190
|
+
/// versa.
|
|
186
191
|
///
|
|
187
192
|
/// # Usage
|
|
188
193
|
///
|
|
@@ -192,7 +197,7 @@ impl std::fmt::Debug for PythonExternalFns {
|
|
|
192
197
|
/// echo "print('hello')" | python3
|
|
193
198
|
/// python3 -c "2 + 2" # expression result printed
|
|
194
199
|
/// python3 --version
|
|
195
|
-
/// python3 -c "
|
|
200
|
+
/// python3 -c "print(open('/tmp/f.txt').read())"
|
|
196
201
|
/// ```
|
|
197
202
|
pub struct Python {
|
|
198
203
|
/// Resource limits for the Monty interpreter.
|
|
@@ -306,7 +311,7 @@ impl Builtin for Python {
|
|
|
306
311
|
Some(
|
|
307
312
|
"python/python3: Embedded Python (Monty). \
|
|
308
313
|
Stdlib: math, pathlib, os.getenv, sys, typing. \
|
|
309
|
-
File I/O via pathlib.Path
|
|
314
|
+
File I/O via pathlib.Path and open() against the VFS. \
|
|
310
315
|
No HTTP/network. No classes. No third-party imports.",
|
|
311
316
|
)
|
|
312
317
|
}
|
|
@@ -631,6 +636,20 @@ async fn handle_os_call(
|
|
|
631
636
|
};
|
|
632
637
|
|
|
633
638
|
match function {
|
|
639
|
+
OsFunction::Open => {
|
|
640
|
+
let mode = match parse_open_mode(args) {
|
|
641
|
+
Ok(mode) => mode,
|
|
642
|
+
Err(err) => return err,
|
|
643
|
+
};
|
|
644
|
+
match open_vfs_file(&path, mode, fs).await {
|
|
645
|
+
Ok(()) => ExtFunctionResult::Return(MontyObject::FileHandle(MontyFileHandle {
|
|
646
|
+
path: path.to_string_lossy().to_string(),
|
|
647
|
+
mode,
|
|
648
|
+
position: 0,
|
|
649
|
+
})),
|
|
650
|
+
Err(e) => map_vfs_error(e, &path),
|
|
651
|
+
}
|
|
652
|
+
}
|
|
634
653
|
OsFunction::Exists => {
|
|
635
654
|
let exists = fs.exists(&path).await.unwrap_or(false);
|
|
636
655
|
ExtFunctionResult::Return(MontyObject::Bool(exists))
|
|
@@ -674,7 +693,10 @@ async fn handle_os_call(
|
|
|
674
693
|
));
|
|
675
694
|
}
|
|
676
695
|
};
|
|
677
|
-
let len =
|
|
696
|
+
let len = match args.get(1) {
|
|
697
|
+
Some(MontyObject::String(s)) => s.chars().count(),
|
|
698
|
+
_ => 0,
|
|
699
|
+
};
|
|
678
700
|
match fs.write_file(&path, &content).await {
|
|
679
701
|
Ok(()) => ExtFunctionResult::Return(MontyObject::Int(len as i64)),
|
|
680
702
|
Err(e) => map_vfs_error(e, &path),
|
|
@@ -696,6 +718,41 @@ async fn handle_os_call(
|
|
|
696
718
|
Err(e) => map_vfs_error(e, &path),
|
|
697
719
|
}
|
|
698
720
|
}
|
|
721
|
+
OsFunction::AppendText => {
|
|
722
|
+
let content = match args.get(1) {
|
|
723
|
+
Some(MontyObject::String(s)) => s.as_bytes().to_vec(),
|
|
724
|
+
_ => {
|
|
725
|
+
return ExtFunctionResult::Error(MontyException::new(
|
|
726
|
+
ExcType::TypeError,
|
|
727
|
+
Some("append_text() requires a string argument".into()),
|
|
728
|
+
));
|
|
729
|
+
}
|
|
730
|
+
};
|
|
731
|
+
let len = match args.get(1) {
|
|
732
|
+
Some(MontyObject::String(s)) => s.chars().count(),
|
|
733
|
+
_ => 0,
|
|
734
|
+
};
|
|
735
|
+
match append_vfs_file(&path, &content, fs).await {
|
|
736
|
+
Ok(()) => ExtFunctionResult::Return(MontyObject::Int(len as i64)),
|
|
737
|
+
Err(e) => map_vfs_error(e, &path),
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
OsFunction::AppendBytes => {
|
|
741
|
+
let content = match args.get(1) {
|
|
742
|
+
Some(MontyObject::Bytes(b)) => b.clone(),
|
|
743
|
+
_ => {
|
|
744
|
+
return ExtFunctionResult::Error(MontyException::new(
|
|
745
|
+
ExcType::TypeError,
|
|
746
|
+
Some("append_bytes() requires a bytes argument".into()),
|
|
747
|
+
));
|
|
748
|
+
}
|
|
749
|
+
};
|
|
750
|
+
let len = content.len();
|
|
751
|
+
match append_vfs_file(&path, &content, fs).await {
|
|
752
|
+
Ok(()) => ExtFunctionResult::Return(MontyObject::Int(len as i64)),
|
|
753
|
+
Err(e) => map_vfs_error(e, &path),
|
|
754
|
+
}
|
|
755
|
+
}
|
|
699
756
|
OsFunction::Mkdir => {
|
|
700
757
|
let parents = get_bool_kwarg(kwargs, "parents").unwrap_or(false);
|
|
701
758
|
let exist_ok = get_bool_kwarg(kwargs, "exist_ok").unwrap_or(false);
|
|
@@ -783,10 +840,64 @@ async fn handle_os_call(
|
|
|
783
840
|
fn extract_path(args: &[MontyObject], cwd: &Path) -> Option<PathBuf> {
|
|
784
841
|
match args.first()? {
|
|
785
842
|
MontyObject::Path(s) | MontyObject::String(s) => Some(resolve_python_path(s, cwd)),
|
|
843
|
+
MontyObject::FileHandle(handle) => Some(resolve_python_path(&handle.path, cwd)),
|
|
786
844
|
_ => None,
|
|
787
845
|
}
|
|
788
846
|
}
|
|
789
847
|
|
|
848
|
+
fn parse_open_mode(args: &[MontyObject]) -> std::result::Result<FileMode, ExtFunctionResult> {
|
|
849
|
+
let Some(MontyObject::String(mode)) = args.get(1) else {
|
|
850
|
+
return Err(ExtFunctionResult::Error(MontyException::new(
|
|
851
|
+
ExcType::TypeError,
|
|
852
|
+
Some("open() missing mode argument".into()),
|
|
853
|
+
)));
|
|
854
|
+
};
|
|
855
|
+
|
|
856
|
+
mode.parse::<FileMode>().map_err(|msg| {
|
|
857
|
+
ExtFunctionResult::Error(MontyException::new(
|
|
858
|
+
ExcType::ValueError,
|
|
859
|
+
Some(msg.into_owned()),
|
|
860
|
+
))
|
|
861
|
+
})
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
async fn open_vfs_file(path: &Path, mode: FileMode, fs: &Arc<dyn FileSystem>) -> Result<()> {
|
|
865
|
+
match mode {
|
|
866
|
+
FileMode::Read(_) | FileMode::ReadUpdate(_) => {
|
|
867
|
+
let meta = fs.stat(path).await?;
|
|
868
|
+
if meta.file_type.is_dir() {
|
|
869
|
+
return Err(std::io::Error::other("is a directory").into());
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
FileMode::Write(_) | FileMode::WriteUpdate(_) => {
|
|
873
|
+
fs.write_file(path, b"").await?;
|
|
874
|
+
}
|
|
875
|
+
FileMode::Append(_) | FileMode::AppendUpdate(_) => {
|
|
876
|
+
if fs.exists(path).await.unwrap_or(false) {
|
|
877
|
+
let meta = fs.stat(path).await?;
|
|
878
|
+
if meta.file_type.is_dir() {
|
|
879
|
+
return Err(std::io::Error::other("is a directory").into());
|
|
880
|
+
}
|
|
881
|
+
} else {
|
|
882
|
+
fs.write_file(path, b"").await?;
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
Ok(())
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
async fn append_vfs_file(path: &Path, content: &[u8], fs: &Arc<dyn FileSystem>) -> Result<()> {
|
|
890
|
+
let mut existing = match fs.read_file(path).await {
|
|
891
|
+
Ok(bytes) => bytes,
|
|
892
|
+
Err(e) if e.to_string().contains("not found") || e.to_string().contains("No such file") => {
|
|
893
|
+
Vec::new()
|
|
894
|
+
}
|
|
895
|
+
Err(e) => return Err(e),
|
|
896
|
+
};
|
|
897
|
+
existing.extend_from_slice(content);
|
|
898
|
+
fs.write_file(path, &existing).await
|
|
899
|
+
}
|
|
900
|
+
|
|
790
901
|
/// Resolve a Python path string against cwd if relative.
|
|
791
902
|
fn resolve_python_path(path_str: &str, cwd: &Path) -> PathBuf {
|
|
792
903
|
let p = Path::new(path_str);
|