bashkit 0.5.0__tar.gz → 0.6.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.5.0 → bashkit-0.6.0}/Cargo.lock +88 -9
- {bashkit-0.5.0 → bashkit-0.6.0}/Cargo.toml +13 -1
- {bashkit-0.5.0 → bashkit-0.6.0}/PKG-INFO +3 -1
- {bashkit-0.5.0/crates/bashkit-python → bashkit-0.6.0}/README.md +2 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/Cargo.toml +12 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/README.md +6 -7
- bashkit-0.6.0/crates/bashkit/src/builtins/clap_env.rs +255 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/export.rs +15 -6
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/fileops.rs +145 -52
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/generated/cat_args.rs +15 -2
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/extendedbigdecimal.rs +239 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/format/argument.rs +202 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/format/escape.rs +151 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/format/human.rs +37 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/format/mod.rs +347 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/format/num_format.rs +544 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/format/spec.rs +527 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/format_support.rs +126 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/ls_args.rs +971 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/mktemp_args.rs +161 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/generated/mod.rs +14 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/num_parser.rs +441 -0
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/od_args.rs +307 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/generated/readlink_args.rs +13 -2
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/realpath_args.rs +206 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/generated/shuf_args.rs +15 -2
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/stat_args.rs +107 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/generated/tac_args.rs +15 -2
- bashkit-0.6.0/crates/bashkit/src/builtins/generated/tee_args.rs +139 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/generated/truncate_args.rs +15 -2
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/hextools.rs +97 -48
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/inspect.rs +62 -35
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/jq/args.rs +38 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/jq/mod.rs +57 -2
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/jq/regex_compat.rs +41 -1
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/jq/tests.rs +67 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/ls.rs +264 -45
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/mod.rs +120 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/path.rs +88 -22
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/pipeline.rs +55 -28
- bashkit-0.6.0/crates/bashkit/src/builtins/printf.rs +609 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/shuf.rs +232 -44
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sqlite/dot_commands.rs +41 -16
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sqlite/engine.rs +12 -1
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sqlite/mod.rs +41 -14
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sqlite/tests.rs +75 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/ssh/cmd.rs +34 -1
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/ssh/russh_handler.rs +46 -10
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/truncate.rs +75 -8
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/credential.rs +65 -20
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/limits.rs +147 -3
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/memory.rs +26 -16
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/mountable.rs +9 -1
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/overlay.rs +2 -3
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/realfs.rs +268 -9
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/traits.rs +8 -4
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/interop/fs.rs +106 -14
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/interpreter/mod.rs +40 -6
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/lib.rs +74 -19
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/network/allowlist.rs +89 -10
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/network/client.rs +267 -36
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/network/mod.rs +1 -1
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/scripted_tool/execute.rs +6 -3
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/scripted_tool/extension.rs +41 -8
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/scripted_tool/mod.rs +110 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/scripted_tool/toolset.rs +2 -2
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/snapshot.rs +7 -2
- bashkit-0.6.0/crates/bashkit/src/testing.rs +412 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/tool_def.rs +64 -12
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/blackbox_security_tests.rs +258 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/realfs_tests.rs +153 -23
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/security_audit_pocs.rs +125 -0
- bashkit-0.6.0/crates/bashkit/tests/shuf_resource_tests.rs +30 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/snapshot_tests.rs +66 -6
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/ln.test.sh +12 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/ls.test.sh +64 -0
- bashkit-0.6.0/crates/bashkit/tests/spec_cases/bash/mktemp.test.sh +49 -0
- bashkit-0.6.0/crates/bashkit/tests/spec_cases/bash/od.test.sh +43 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/path.test.sh +2 -1
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/stat.test.sh +24 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/tee.test.sh +16 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/sqlite_integration_tests.rs +44 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/sqlite_security_tests.rs +4 -7
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/threat_model_tests.rs +76 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/unicode_security_tests.rs +63 -66
- bashkit-0.6.0/crates/bashkit/tests/workflow_security_tests.rs +85 -0
- {bashkit-0.5.0 → bashkit-0.6.0/crates/bashkit-python}/README.md +2 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/src/lib.rs +58 -10
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_network_credentials.py +21 -0
- bashkit-0.5.0/crates/bashkit/src/builtins/printf.rs +0 -766
- bashkit-0.5.0/crates/bashkit/src/testing.rs +0 -155
- {bashkit-0.5.0 → bashkit-0.6.0}/bashkit/__init__.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/bashkit/_bashkit.pyi +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/bashkit/deepagents.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/bashkit/langchain.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/bashkit/py.typed +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/bashkit/pydantic_ai.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/benches/parallel_execution.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/benches/sqlite.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/clap-builtins.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/compatibility.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/credential-injection.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/custom_builtins.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/hooks.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/jq.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/live_mounts.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/logging.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/python.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/sqlite.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/ssh.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/threat-model.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/docs/typescript.md +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/agent_tool.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/basic.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/clap_builtin.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/clap_builtin_subcommands.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/custom_backend.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/custom_builtins.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/custom_filesystem_impl.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/custom_fs.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/git_workflow.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/live_mounts.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/python_external_functions.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/python_scripts.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/realfs_readonly.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/realfs_readwrite.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/resource_limits.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/scripted_tool.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/show_tool_output.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/sqlite_basic.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/sqlite_workflow.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/ssh_supabase.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/streaming_output.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/text_files.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/text_processing.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/typescript_external_functions.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/typescript_scripts.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/examples/virtual_identity.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/proptest-regressions/builtins/sqlite/tests.txt +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/alias.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/archive.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/arg_parser.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/assert.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/awk.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/base64.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/bc.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/caller.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/cat.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/checksum.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/clear.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/column.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/comm.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/compgen.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/csv.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/curl.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/cuttr.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/date.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/diff.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/dirstack.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/disk.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/dotenv.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/echo.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/environ.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/envsubst.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/expand.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/expr.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/fc.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/flow.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/fold.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/git/client.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/git/cmd.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/git/config.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/git/mod.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/glob_cmd.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/grep.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/headtail.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/help.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/http.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/iconv.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/introspect.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/join.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/jq/compat.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/jq/convert.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/jq/errors.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/jq/format.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/json.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/log.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/mapfile.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/mkfifo.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/navigation.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/nl.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/numfmt.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/parallel.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/paste.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/patch.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/python.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/read.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/retry.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/rg.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/search_common.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sed.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/semver.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/seq.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sleep.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sortuniq.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/source.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/split.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sqlite/formatter.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sqlite/parser.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/sqlite/vfs_io.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/ssh/allowlist.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/ssh/client.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/ssh/config.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/ssh/handler.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/ssh/mod.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/strings.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/system.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/template.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/textrev.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/timeout.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/tomlq.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/trap.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/tree.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/typescript.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/vars.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/verify.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/wait.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/wc.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/yaml.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/yes.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/builtins/zip_cmd.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/error.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/backend.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/mod.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/posix.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/fs/search.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/hooks.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/interop/mod.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/interpreter/glob.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/interpreter/jobs.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/interpreter/state.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/limits.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/logging_impl.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/network/bot_auth.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/parser/ast.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/parser/budget.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/parser/lexer.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/parser/mod.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/parser/span.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/parser/tokens.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/tool.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/src/trace.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/allexport_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/awk_fuzz_scaffold_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/awk_newline_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/awk_pattern_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/awk_printf_expr_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/awk_range_pattern_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/background_exec_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/bash_source_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/builtin_error_security_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/byte_range_panic_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/cancellation_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/cmdsub_quote_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/coproc_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/coreutils_differential_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/credential_injection_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/custom_builtins_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/custom_fs_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/dev_null_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/final_env_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/find_multi_path_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/git_advanced_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/git_inspection_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/git_integration_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/git_remote_security_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/git_security_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/harness_example_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/history_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_1175_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_274_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_275_279_282_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_276_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_277_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_289_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_290_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_291_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_853_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_872_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_873_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/issue_875_test.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/jq_fuzz_scaffold_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/live_mount_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/logging_security_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/mkfifo_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/nested_subscript_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/network_security_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/output_truncation_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/overlay_path_validation_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/proptest_differential.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/proptest_security.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/python_integration_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/python_security_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/regex_limit_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/release_profile_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/script_execution_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/security_failpoint_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/set_e_and_or_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/azure_discover_rank.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/azure_generate_url.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/azure_query_capacity.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/helm_validate_chart.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/jwt_test_setup.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/stitch_download_asset.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/stitch_fetch.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/stitch_verify_setup.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/superpowers_find_polluter.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_fixtures/vercel_deploy.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/skills_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/source_function_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/awk/awk.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/awk/delete-array.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/awk/dev-stderr.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/awk/eval-bugs.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/awk/filename.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/awk/getline-file.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/alias.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/append_redirect.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/arith-dynamic.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/arithmetic-base-expansion.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/arithmetic.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/array-slicing.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/array-splat.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/arrays.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/assoc-arrays.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/awk-printf-width.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/background.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/bash-c-exports.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/bash-command.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/bash-flags.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/bash-source-var.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/bash-stdin-pipe.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/bc.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/blackbox-edge-cases.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/blackbox-exploration.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/brace-expansion.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/brace_expansion_lookahead.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/cat.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/checksum.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/chown-kill.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/cmd-suggestions.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/cmdsub_depth_unquoted.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/column.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/comm.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/command-not-found.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/command-subst.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/command.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/command_v.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/compgen-path.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/conditional-short-circuit.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/conditional.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/control-flow.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/cuttr.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/date.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/declare.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/df.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/diff.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/dirstack.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/du.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/echo.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/empty-bodies.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/env.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/errexit.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/eval-bugs.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/exec-command.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-redirect.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-variable.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/exit-status.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/expr.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/extglob.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/file.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/fileops.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/find.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/functions.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/getopts.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/glob-options.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/glob_match_cap.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/globs.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/gzip.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/headtail.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/help-flag.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/heredoc-edge.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/heredoc.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/herestring.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/hextools.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/history.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/indirect-expansion.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/less.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/memory_budget_desync.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/nameref-assoc.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/nameref.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/negative-tests.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/nl.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/nounset.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/numfmt.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/parse-errors.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/paste-flags.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/paste.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/pipes-redirects.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/printenv.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/printf.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/procsub.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/quote.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/read-builtin.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/readlink.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/recursive-cmdsub.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/regex-limit.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/replace_pattern_limit.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/script-exec.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/seq.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/set-allexport.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/shell-grammar.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/shuf.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/sleep.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/sortuniq.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/source.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/string-ops.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/strings.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/subprocess-isolation.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/subshell.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/tar.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/tar_create.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/temp-binding.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/test-operators.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/test-tty.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/textrev.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/time.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/timeout.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/tree.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/truncate.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/type.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/unicode.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/unset-exported-var.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/var-op-test.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/variables.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/wait.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/watch.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/wc.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/word-split.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/bash/xargs.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/grep/eval-bugs.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/grep/grep.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/grep/rg.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/jq/jq.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/python/env_leak.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/python/python.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/sed/eval-bugs.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/sed/sed.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_cases/typescript/typescript.test.sh +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_runner.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/spec_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/sqlite_compat_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/sqlite_differential_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/sqlite_fuzz_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/ssh_builtin_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/ssh_supabase_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/stack_overflow_regression_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/subst_depth_limit_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/symlink_overlay_security_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/tty_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/typescript_integration_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/typescript_security_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/unset_function_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit/tests/urandom_tests.rs +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/Cargo.toml +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/examples/bash_basics.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/examples/custom_filesystem_interop.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/examples/data_pipeline.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/examples/fastapi_async_tool.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/examples/jupyter_async_test.ipynb +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/examples/k8s_orchestrator.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/examples/langgraph_async_tool.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/examples/llm_tool.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/_bashkit_categories.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/_security_advanced.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/_security_core.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_ai_adapters.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_async_callbacks.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_basic.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_builtins.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_control_flow.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_error_handling.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_fastapi_integration.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_filesystem_interop.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_integration.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_jupyter_compat.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_langgraph_integration.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_network_config.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_python_security.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_registered_tools.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_scripts.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_security.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_shell_injection.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_sqlite.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_streaming_output.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_strings_and_quoting.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_tool_metadata.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/crates/bashkit-python/tests/test_vfs.py +0 -0
- {bashkit-0.5.0 → bashkit-0.6.0}/pyproject.toml +0 -0
|
@@ -345,11 +345,12 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
|
|
|
345
345
|
|
|
346
346
|
[[package]]
|
|
347
347
|
name = "bashkit"
|
|
348
|
-
version = "0.
|
|
348
|
+
version = "0.6.0"
|
|
349
349
|
dependencies = [
|
|
350
350
|
"anyhow",
|
|
351
351
|
"async-trait",
|
|
352
352
|
"base64",
|
|
353
|
+
"bigdecimal",
|
|
353
354
|
"chrono",
|
|
354
355
|
"clap",
|
|
355
356
|
"criterion",
|
|
@@ -359,6 +360,7 @@ dependencies = [
|
|
|
359
360
|
"flate2",
|
|
360
361
|
"futures-core",
|
|
361
362
|
"futures-util",
|
|
363
|
+
"getrandom 0.4.2",
|
|
362
364
|
"hmac 0.13.0",
|
|
363
365
|
"insta",
|
|
364
366
|
"jaq-core",
|
|
@@ -366,6 +368,8 @@ dependencies = [
|
|
|
366
368
|
"jaq-std",
|
|
367
369
|
"md-5",
|
|
368
370
|
"monty",
|
|
371
|
+
"num-traits",
|
|
372
|
+
"os_display",
|
|
369
373
|
"pretty_assertions",
|
|
370
374
|
"proptest",
|
|
371
375
|
"rand 0.10.1",
|
|
@@ -386,6 +390,7 @@ dependencies = [
|
|
|
386
390
|
"tower",
|
|
387
391
|
"tracing",
|
|
388
392
|
"turso_core",
|
|
393
|
+
"unit-prefix",
|
|
389
394
|
"url",
|
|
390
395
|
"zapcode-core",
|
|
391
396
|
"zeroize",
|
|
@@ -393,7 +398,7 @@ dependencies = [
|
|
|
393
398
|
|
|
394
399
|
[[package]]
|
|
395
400
|
name = "bashkit-bench"
|
|
396
|
-
version = "0.
|
|
401
|
+
version = "0.6.0"
|
|
397
402
|
dependencies = [
|
|
398
403
|
"anyhow",
|
|
399
404
|
"bashkit",
|
|
@@ -407,7 +412,7 @@ dependencies = [
|
|
|
407
412
|
|
|
408
413
|
[[package]]
|
|
409
414
|
name = "bashkit-cli"
|
|
410
|
-
version = "0.
|
|
415
|
+
version = "0.6.0"
|
|
411
416
|
dependencies = [
|
|
412
417
|
"anyhow",
|
|
413
418
|
"bashkit",
|
|
@@ -423,18 +428,21 @@ dependencies = [
|
|
|
423
428
|
|
|
424
429
|
[[package]]
|
|
425
430
|
name = "bashkit-coreutils-port"
|
|
426
|
-
version = "0.
|
|
431
|
+
version = "0.6.0"
|
|
427
432
|
dependencies = [
|
|
428
433
|
"anyhow",
|
|
429
434
|
"prettyplease",
|
|
430
435
|
"proc-macro2",
|
|
431
436
|
"quote",
|
|
437
|
+
"serde",
|
|
432
438
|
"syn",
|
|
439
|
+
"tempfile",
|
|
440
|
+
"toml",
|
|
433
441
|
]
|
|
434
442
|
|
|
435
443
|
[[package]]
|
|
436
444
|
name = "bashkit-eval"
|
|
437
|
-
version = "0.
|
|
445
|
+
version = "0.6.0"
|
|
438
446
|
dependencies = [
|
|
439
447
|
"anyhow",
|
|
440
448
|
"async-trait",
|
|
@@ -451,7 +459,7 @@ dependencies = [
|
|
|
451
459
|
|
|
452
460
|
[[package]]
|
|
453
461
|
name = "bashkit-js"
|
|
454
|
-
version = "0.
|
|
462
|
+
version = "0.6.0"
|
|
455
463
|
dependencies = [
|
|
456
464
|
"bashkit",
|
|
457
465
|
"napi",
|
|
@@ -464,7 +472,7 @@ dependencies = [
|
|
|
464
472
|
|
|
465
473
|
[[package]]
|
|
466
474
|
name = "bashkit-python"
|
|
467
|
-
version = "0.
|
|
475
|
+
version = "0.6.0"
|
|
468
476
|
dependencies = [
|
|
469
477
|
"bashkit",
|
|
470
478
|
"num-bigint",
|
|
@@ -1813,11 +1821,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
1813
1821
|
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
|
|
1814
1822
|
dependencies = [
|
|
1815
1823
|
"cfg-if",
|
|
1824
|
+
"js-sys",
|
|
1816
1825
|
"libc",
|
|
1817
1826
|
"r-efi 6.0.0",
|
|
1818
1827
|
"rand_core 0.10.1",
|
|
1819
1828
|
"wasip2",
|
|
1820
1829
|
"wasip3",
|
|
1830
|
+
"wasm-bindgen",
|
|
1821
1831
|
]
|
|
1822
1832
|
|
|
1823
1833
|
[[package]]
|
|
@@ -3045,6 +3055,15 @@ dependencies = [
|
|
|
3045
3055
|
"indexmap",
|
|
3046
3056
|
]
|
|
3047
3057
|
|
|
3058
|
+
[[package]]
|
|
3059
|
+
name = "os_display"
|
|
3060
|
+
version = "0.1.4"
|
|
3061
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3062
|
+
checksum = "ad5fd71b79026fb918650dde6d125000a233764f1c2f1659a1c71118e33ea08f"
|
|
3063
|
+
dependencies = [
|
|
3064
|
+
"unicode-width 0.2.2",
|
|
3065
|
+
]
|
|
3066
|
+
|
|
3048
3067
|
[[package]]
|
|
3049
3068
|
name = "owo-colors"
|
|
3050
3069
|
version = "3.5.0"
|
|
@@ -4781,6 +4800,15 @@ dependencies = [
|
|
|
4781
4800
|
"zmij",
|
|
4782
4801
|
]
|
|
4783
4802
|
|
|
4803
|
+
[[package]]
|
|
4804
|
+
name = "serde_spanned"
|
|
4805
|
+
version = "1.1.1"
|
|
4806
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4807
|
+
checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
|
|
4808
|
+
dependencies = [
|
|
4809
|
+
"serde_core",
|
|
4810
|
+
]
|
|
4811
|
+
|
|
4784
4812
|
[[package]]
|
|
4785
4813
|
name = "serdect"
|
|
4786
4814
|
version = "0.4.2"
|
|
@@ -5363,9 +5391,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
|
|
5363
5391
|
|
|
5364
5392
|
[[package]]
|
|
5365
5393
|
name = "tokio"
|
|
5366
|
-
version = "1.52.
|
|
5394
|
+
version = "1.52.3"
|
|
5367
5395
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5368
|
-
checksum = "
|
|
5396
|
+
checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
|
|
5369
5397
|
dependencies = [
|
|
5370
5398
|
"bytes",
|
|
5371
5399
|
"libc",
|
|
@@ -5433,6 +5461,45 @@ dependencies = [
|
|
|
5433
5461
|
"tokio",
|
|
5434
5462
|
]
|
|
5435
5463
|
|
|
5464
|
+
[[package]]
|
|
5465
|
+
name = "toml"
|
|
5466
|
+
version = "1.1.2+spec-1.1.0"
|
|
5467
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5468
|
+
checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee"
|
|
5469
|
+
dependencies = [
|
|
5470
|
+
"indexmap",
|
|
5471
|
+
"serde_core",
|
|
5472
|
+
"serde_spanned",
|
|
5473
|
+
"toml_datetime",
|
|
5474
|
+
"toml_parser",
|
|
5475
|
+
"toml_writer",
|
|
5476
|
+
"winnow",
|
|
5477
|
+
]
|
|
5478
|
+
|
|
5479
|
+
[[package]]
|
|
5480
|
+
name = "toml_datetime"
|
|
5481
|
+
version = "1.1.1+spec-1.1.0"
|
|
5482
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5483
|
+
checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
|
|
5484
|
+
dependencies = [
|
|
5485
|
+
"serde_core",
|
|
5486
|
+
]
|
|
5487
|
+
|
|
5488
|
+
[[package]]
|
|
5489
|
+
name = "toml_parser"
|
|
5490
|
+
version = "1.1.2+spec-1.1.0"
|
|
5491
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5492
|
+
checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
|
|
5493
|
+
dependencies = [
|
|
5494
|
+
"winnow",
|
|
5495
|
+
]
|
|
5496
|
+
|
|
5497
|
+
[[package]]
|
|
5498
|
+
name = "toml_writer"
|
|
5499
|
+
version = "1.1.1+spec-1.1.0"
|
|
5500
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5501
|
+
checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
|
|
5502
|
+
|
|
5436
5503
|
[[package]]
|
|
5437
5504
|
name = "tower"
|
|
5438
5505
|
version = "0.5.3"
|
|
@@ -5755,6 +5822,12 @@ dependencies = [
|
|
|
5755
5822
|
"rand 0.8.6",
|
|
5756
5823
|
]
|
|
5757
5824
|
|
|
5825
|
+
[[package]]
|
|
5826
|
+
name = "unit-prefix"
|
|
5827
|
+
version = "0.5.2"
|
|
5828
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5829
|
+
checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3"
|
|
5830
|
+
|
|
5758
5831
|
[[package]]
|
|
5759
5832
|
name = "universal-hash"
|
|
5760
5833
|
version = "0.5.1"
|
|
@@ -6237,6 +6310,12 @@ version = "0.52.6"
|
|
|
6237
6310
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
6238
6311
|
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
|
6239
6312
|
|
|
6313
|
+
[[package]]
|
|
6314
|
+
name = "winnow"
|
|
6315
|
+
version = "1.0.2"
|
|
6316
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
6317
|
+
checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0"
|
|
6318
|
+
|
|
6240
6319
|
[[package]]
|
|
6241
6320
|
name = "wit-bindgen"
|
|
6242
6321
|
version = "0.51.0"
|
|
@@ -7,7 +7,7 @@ resolver = "2"
|
|
|
7
7
|
members = ["crates/*"]
|
|
8
8
|
|
|
9
9
|
[workspace.package]
|
|
10
|
-
version = "0.
|
|
10
|
+
version = "0.6.0"
|
|
11
11
|
edition = "2024"
|
|
12
12
|
license = "MIT"
|
|
13
13
|
authors = ["Everruns"]
|
|
@@ -69,7 +69,19 @@ ed25519-dalek = { version = "2", features = ["rand_core"] }
|
|
|
69
69
|
rand = "0.10"
|
|
70
70
|
zeroize = "1"
|
|
71
71
|
|
|
72
|
+
# CSPRNG for placeholder token generation (security-grade randomness).
|
|
73
|
+
# Important decision: enable `wasm_js` so the public `wasm32-unknown-unknown`
|
|
74
|
+
# build gate stays green; bashkit targets JS-backed wasm for that triple.
|
|
75
|
+
# Used by the credential placeholder generator; getrandom is the lowest-level
|
|
76
|
+
# CSPRNG primitive and is already transitively in the dep tree via reqwest/rustls.
|
|
77
|
+
getrandom = { version = "0.4", features = ["wasm_js"] }
|
|
78
|
+
|
|
72
79
|
# CLI
|
|
80
|
+
# Intentionally NOT enabling clap's `env` feature: it makes `Arg::env(...)`
|
|
81
|
+
# read defaults from `std::env`, which would tunnel host process state into
|
|
82
|
+
# the bashkit sandbox (TM-INF-023). The coreutils-args-port codegen strips
|
|
83
|
+
# `.env(...)` chains from vendored Arg builders; dropping the feature here
|
|
84
|
+
# is defence-in-depth so any re-introduction fails to compile.
|
|
73
85
|
clap = { version = "4", features = ["derive"] }
|
|
74
86
|
|
|
75
87
|
# Testing
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bashkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -41,6 +41,8 @@ Project-URL: Repository, https://github.com/everruns/bashkit
|
|
|
41
41
|
|
|
42
42
|
Sandboxed bash interpreter for Python. Native bindings to the `bashkit` Rust core for fast, in-process execution with a virtual filesystem.
|
|
43
43
|
|
|
44
|
+
Homepage: [bashkit.sh](https://bashkit.sh)
|
|
45
|
+
|
|
44
46
|
## Features
|
|
45
47
|
|
|
46
48
|
- Sandboxed execution in-process, without containers or subprocess orchestration
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
Sandboxed bash interpreter for Python. Native bindings to the `bashkit` Rust core for fast, in-process execution with a virtual filesystem.
|
|
6
6
|
|
|
7
|
+
Homepage: [bashkit.sh](https://bashkit.sh)
|
|
8
|
+
|
|
7
9
|
## Features
|
|
8
10
|
|
|
9
11
|
- Sandboxed execution in-process, without containers or subprocess orchestration
|
|
@@ -68,6 +68,9 @@ ed25519-dalek = { workspace = true, optional = true }
|
|
|
68
68
|
rand = { workspace = true, optional = true }
|
|
69
69
|
zeroize = { workspace = true, optional = true }
|
|
70
70
|
|
|
71
|
+
# CSPRNG for credential placeholder generation
|
|
72
|
+
getrandom = { workspace = true }
|
|
73
|
+
|
|
71
74
|
# Checksums (for md5sum, sha1sum, sha256sum builtins)
|
|
72
75
|
md-5 = { workspace = true }
|
|
73
76
|
sha1 = { workspace = true }
|
|
@@ -81,6 +84,15 @@ tracing = { workspace = true, optional = true }
|
|
|
81
84
|
# argument surfaces. Always on — see specs/coreutils-args-port.md.
|
|
82
85
|
clap = { workspace = true }
|
|
83
86
|
|
|
87
|
+
# Pinned to uutils' workspace versions. Used by the vendored
|
|
88
|
+
# uucore::format module (see crates/bashkit/src/builtins/generated/format)
|
|
89
|
+
# that backs `printf`. Kept platform-clean — no rustix / errno
|
|
90
|
+
# transitive deps — so wasm32 stays buildable.
|
|
91
|
+
bigdecimal = "0.4"
|
|
92
|
+
num-traits = "0.2"
|
|
93
|
+
unit-prefix = "0.5"
|
|
94
|
+
os_display = "0.1.3"
|
|
95
|
+
|
|
84
96
|
# Embedded Python interpreter (optional)
|
|
85
97
|
monty = { git = "https://github.com/pydantic/monty", rev = "49faa4c", optional = true }
|
|
86
98
|
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
Awesomely fast virtual sandbox with bash and file system. Written in Rust.
|
|
10
10
|
|
|
11
|
+
Homepage: [bashkit.sh](https://bashkit.sh)
|
|
12
|
+
|
|
11
13
|
## Features
|
|
12
14
|
|
|
13
15
|
- **Secure by default** - No process spawning, no filesystem access, no network access unless explicitly enabled. [250+ threats](specs/threat-model.md) analyzed and mitigated
|
|
@@ -21,7 +23,6 @@ Awesomely fast virtual sandbox with bash and file system. Written in Rust.
|
|
|
21
23
|
- **LLM tool contract** - `BashTool` with discovery metadata, streaming output, and system prompts
|
|
22
24
|
- **Snapshotting** - Serialize shell state and VFS contents for checkpoint/resume workflows
|
|
23
25
|
- **Scripted tool orchestration** - Compose ToolDef+callback pairs into multi-tool bash scripts (`scripted_tool` feature)
|
|
24
|
-
- **MCP server** - Model Context Protocol endpoint via `bashkit mcp`
|
|
25
26
|
- **Async-first** - Built on tokio
|
|
26
27
|
- **Language bindings** - Python (PyO3) and JavaScript/TypeScript (NAPI-RS) for Node.js, Bun, and Deno
|
|
27
28
|
- **Experimental: Git support** - Virtual git operations on the virtual filesystem (`git` feature)
|
|
@@ -372,17 +373,15 @@ mountable.mount("/data", Arc::new(InMemoryFs::new()));
|
|
|
372
373
|
|
|
373
374
|
```bash
|
|
374
375
|
# Run a script
|
|
375
|
-
bashkit
|
|
376
|
+
bashkit script.sh
|
|
376
377
|
|
|
377
378
|
# Interactive REPL
|
|
378
|
-
bashkit
|
|
379
|
+
bashkit
|
|
379
380
|
|
|
380
|
-
# MCP server (Model Context Protocol)
|
|
381
|
-
bashkit mcp
|
|
382
381
|
|
|
383
382
|
# Mount real filesystem (read-only or read-write)
|
|
384
|
-
bashkit
|
|
385
|
-
bashkit
|
|
383
|
+
bashkit --mount-ro /data script.sh
|
|
384
|
+
bashkit --mount-rw /workspace script.sh
|
|
386
385
|
```
|
|
387
386
|
|
|
388
387
|
## Development
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
//! Virtual-env shim for clap-based ported builtins.
|
|
2
|
+
//!
|
|
3
|
+
//! uutils' `uu_app()` ships `Arg::env("FOO")` to default options like
|
|
4
|
+
//! `TIME_STYLE` / `BLOCK_SIZE` / `LS_COLORS` from the host process
|
|
5
|
+
//! environment. bashkit sandboxes scripts inside `ctx.env`, so codegen
|
|
6
|
+
//! strips `.env(...)` from the runtime Arg chain (TM-INF-024) and
|
|
7
|
+
//! instead emits a sidecar `<UTIL>_ENV_DEFAULTS: &[EnvDefault]` table
|
|
8
|
+
//! recording what was stripped.
|
|
9
|
+
//!
|
|
10
|
+
//! `apply_env_defaults` reads that table plus the caller's virtual
|
|
11
|
+
//! `ctx.env` and rewrites argv before clap sees it, emulating clap's
|
|
12
|
+
//! own "argv > env > default" precedence — but sourced from the
|
|
13
|
+
//! sandbox, never `std::env`. One bashkit-side seam, one audit point.
|
|
14
|
+
|
|
15
|
+
use std::collections::HashMap;
|
|
16
|
+
use std::ffi::OsString;
|
|
17
|
+
|
|
18
|
+
/// How an `Arg`'s value materialises on the command line. Mirrors the
|
|
19
|
+
/// shape of the clap chain we found `.env(...)` next to.
|
|
20
|
+
//
|
|
21
|
+
// `Multi` and (later) other variants are reserved for upcoming codegen
|
|
22
|
+
// emissions — current ported utils only exercise `Single`. Allow dead
|
|
23
|
+
// code so the surface stays committed without forcing a port that
|
|
24
|
+
// uses it on day one.
|
|
25
|
+
#[allow(dead_code)]
|
|
26
|
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
27
|
+
pub enum EnvKind {
|
|
28
|
+
/// `--<long> <value>`. The default for value-bearing options
|
|
29
|
+
/// (uutils' `TIME_STYLE`, `TABSIZE`, `BLOCK_SIZE`, …).
|
|
30
|
+
Single,
|
|
31
|
+
/// `--<long>` with no value. uutils sets `.action(SetTrue)` for
|
|
32
|
+
/// boolean env-defaulted toggles (none ported yet but reserved
|
|
33
|
+
/// so codegen can emit them without shim changes). Truthy iff
|
|
34
|
+
/// the env value is non-empty (matches clap's behaviour).
|
|
35
|
+
Bool,
|
|
36
|
+
/// Multi-value, comma-or-delim-separated. uutils uses
|
|
37
|
+
/// `.value_delimiter(',')` for things like
|
|
38
|
+
/// `LS_COLORS`-adjacent lists. We push `--<long>` once with the
|
|
39
|
+
/// raw value; clap re-splits it via its own delimiter setting.
|
|
40
|
+
Multi,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/// One stripped `.env(...)` annotation, harvested at codegen time.
|
|
44
|
+
///
|
|
45
|
+
/// Lives in `static`-friendly form so generated files can place these
|
|
46
|
+
/// in a `&'static [EnvDefault]` slice without any runtime allocation.
|
|
47
|
+
#[derive(Debug, Clone, Copy)]
|
|
48
|
+
pub struct EnvDefault {
|
|
49
|
+
/// `Arg::new(arg_id)` — matches `ArgMatches::ids()` post-parse.
|
|
50
|
+
/// Carried so callers / round-trip diagnostics can correlate a
|
|
51
|
+
/// default back to its clap option even though the shim itself
|
|
52
|
+
/// only needs `long`. Held intentionally; suppress the unused-field
|
|
53
|
+
/// warning until a consumer reaches for it.
|
|
54
|
+
#[allow(dead_code)]
|
|
55
|
+
pub arg_id: &'static str,
|
|
56
|
+
/// `Arg::long(long)` — the long flag we synthesise into argv.
|
|
57
|
+
pub long: &'static str,
|
|
58
|
+
/// The env-var name uutils originally pulled from `std::env`.
|
|
59
|
+
/// We read this from `ctx.env` instead.
|
|
60
|
+
pub env_var: &'static str,
|
|
61
|
+
/// Drives the argv shape we synthesise.
|
|
62
|
+
pub kind: EnvKind,
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/// Inject env-sourced defaults into argv before handing it to clap.
|
|
66
|
+
///
|
|
67
|
+
/// Precedence (matches clap's own `Arg::env`):
|
|
68
|
+
/// 1. argv (if user already passed `--<long>` or `--<long>=…`, leave it).
|
|
69
|
+
/// 2. ctx.env[env_var] (if set, synthesise `--<long> <value>`).
|
|
70
|
+
/// 3. clap's `.default_value(...)` (untouched).
|
|
71
|
+
///
|
|
72
|
+
/// `argv[0]` is the program name (clap convention); we never inspect or
|
|
73
|
+
/// modify it. Synthesised entries are appended *after* the existing
|
|
74
|
+
/// argv; clap doesn't care about positional order for flags. Positional
|
|
75
|
+
/// arguments are unaffected — none of the env-bound uutils args are
|
|
76
|
+
/// positional.
|
|
77
|
+
///
|
|
78
|
+
/// Empty env value = unset, intentionally:
|
|
79
|
+
/// - For `Single`/`Multi`, clap would reject an empty value via
|
|
80
|
+
/// `NonEmptyStringValueParser` anyway (uutils' default for these).
|
|
81
|
+
/// - For `Bool`, clap's own `Arg::env` matches "non-empty" as truthy.
|
|
82
|
+
pub fn apply_env_defaults(
|
|
83
|
+
mut argv: Vec<OsString>,
|
|
84
|
+
defaults: &[EnvDefault],
|
|
85
|
+
env: &HashMap<String, String>,
|
|
86
|
+
) -> Vec<OsString> {
|
|
87
|
+
for d in defaults {
|
|
88
|
+
if argv_has_long(&argv, d.long) {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
let Some(val) = env.get(d.env_var) else {
|
|
92
|
+
continue;
|
|
93
|
+
};
|
|
94
|
+
if val.is_empty() {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
let long_flag = format!("--{}", d.long);
|
|
98
|
+
match d.kind {
|
|
99
|
+
EnvKind::Bool => argv.push(OsString::from(long_flag)),
|
|
100
|
+
EnvKind::Single | EnvKind::Multi => {
|
|
101
|
+
argv.push(OsString::from(long_flag));
|
|
102
|
+
argv.push(OsString::from(val));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
argv
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/// Returns `true` iff argv already specifies `--<long>` (with or
|
|
110
|
+
/// without an attached `=value`). Matches clap's own
|
|
111
|
+
/// "is-this-flag-already-set" check shape, modulo short flags — uutils
|
|
112
|
+
/// only env-defaults options that have a `.long(...)`, so we only check
|
|
113
|
+
/// the long form. Skips index 0 (program name).
|
|
114
|
+
fn argv_has_long(argv: &[OsString], long: &str) -> bool {
|
|
115
|
+
let exact = format!("--{long}");
|
|
116
|
+
let prefix = format!("--{long}=");
|
|
117
|
+
argv.iter().skip(1).any(|a| {
|
|
118
|
+
let Some(s) = a.to_str() else {
|
|
119
|
+
return false;
|
|
120
|
+
};
|
|
121
|
+
s == exact || s.starts_with(&prefix)
|
|
122
|
+
})
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
#[cfg(test)]
|
|
126
|
+
mod tests {
|
|
127
|
+
use super::*;
|
|
128
|
+
|
|
129
|
+
fn argv(parts: &[&str]) -> Vec<OsString> {
|
|
130
|
+
parts.iter().map(OsString::from).collect()
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
fn env(pairs: &[(&str, &str)]) -> HashMap<String, String> {
|
|
134
|
+
pairs
|
|
135
|
+
.iter()
|
|
136
|
+
.map(|(k, v)| ((*k).to_string(), (*v).to_string()))
|
|
137
|
+
.collect()
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const TIME_STYLE: EnvDefault = EnvDefault {
|
|
141
|
+
arg_id: "time-style",
|
|
142
|
+
long: "time-style",
|
|
143
|
+
env_var: "TIME_STYLE",
|
|
144
|
+
kind: EnvKind::Single,
|
|
145
|
+
};
|
|
146
|
+
const TABSIZE: EnvDefault = EnvDefault {
|
|
147
|
+
arg_id: "tab-size",
|
|
148
|
+
long: "tabsize",
|
|
149
|
+
env_var: "TABSIZE",
|
|
150
|
+
kind: EnvKind::Single,
|
|
151
|
+
};
|
|
152
|
+
const COLOR_TOGGLE: EnvDefault = EnvDefault {
|
|
153
|
+
arg_id: "color",
|
|
154
|
+
long: "color",
|
|
155
|
+
env_var: "CLICOLOR",
|
|
156
|
+
kind: EnvKind::Bool,
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
#[test]
|
|
160
|
+
fn single_value_env_synthesised_when_argv_silent() {
|
|
161
|
+
let out = apply_env_defaults(
|
|
162
|
+
argv(&["ls"]),
|
|
163
|
+
&[TIME_STYLE],
|
|
164
|
+
&env(&[("TIME_STYLE", "long-iso")]),
|
|
165
|
+
);
|
|
166
|
+
assert_eq!(out, argv(&["ls", "--time-style", "long-iso"]));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
#[test]
|
|
170
|
+
fn argv_long_overrides_env_default() {
|
|
171
|
+
let out = apply_env_defaults(
|
|
172
|
+
argv(&["ls", "--time-style", "iso"]),
|
|
173
|
+
&[TIME_STYLE],
|
|
174
|
+
&env(&[("TIME_STYLE", "long-iso")]),
|
|
175
|
+
);
|
|
176
|
+
// ctx.env value not appended; original argv preserved verbatim.
|
|
177
|
+
assert_eq!(out, argv(&["ls", "--time-style", "iso"]));
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
#[test]
|
|
181
|
+
fn argv_long_equals_form_overrides_env_default() {
|
|
182
|
+
let out = apply_env_defaults(
|
|
183
|
+
argv(&["ls", "--time-style=iso"]),
|
|
184
|
+
&[TIME_STYLE],
|
|
185
|
+
&env(&[("TIME_STYLE", "long-iso")]),
|
|
186
|
+
);
|
|
187
|
+
assert_eq!(out, argv(&["ls", "--time-style=iso"]));
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
#[test]
|
|
191
|
+
fn missing_env_var_leaves_argv_alone() {
|
|
192
|
+
let out = apply_env_defaults(argv(&["ls"]), &[TIME_STYLE], &env(&[]));
|
|
193
|
+
assert_eq!(out, argv(&["ls"]));
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
#[test]
|
|
197
|
+
fn empty_env_value_is_treated_as_unset() {
|
|
198
|
+
// Matches clap::Arg::env behaviour: empty == not set for value
|
|
199
|
+
// options (NonEmptyStringValueParser would reject anyway).
|
|
200
|
+
let out = apply_env_defaults(argv(&["ls"]), &[TIME_STYLE], &env(&[("TIME_STYLE", "")]));
|
|
201
|
+
assert_eq!(out, argv(&["ls"]));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
#[test]
|
|
205
|
+
fn bool_kind_appends_flag_only() {
|
|
206
|
+
let out = apply_env_defaults(argv(&["ls"]), &[COLOR_TOGGLE], &env(&[("CLICOLOR", "1")]));
|
|
207
|
+
assert_eq!(out, argv(&["ls", "--color"]));
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
#[test]
|
|
211
|
+
fn multiple_defaults_processed_independently() {
|
|
212
|
+
let out = apply_env_defaults(
|
|
213
|
+
argv(&["ls"]),
|
|
214
|
+
&[TIME_STYLE, TABSIZE],
|
|
215
|
+
&env(&[("TIME_STYLE", "iso"), ("TABSIZE", "4")]),
|
|
216
|
+
);
|
|
217
|
+
assert_eq!(out, argv(&["ls", "--time-style", "iso", "--tabsize", "4"]));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
#[test]
|
|
221
|
+
fn does_not_read_std_env() {
|
|
222
|
+
// Sanity: a var present on the host process but absent from
|
|
223
|
+
// ctx.env must NOT leak through. Belt-and-braces against
|
|
224
|
+
// future regressions of TM-INF-024; the fn signature already
|
|
225
|
+
// forbids std::env access (no &std::env::Vars argument).
|
|
226
|
+
// SAFETY: `std::env::set_var` is unsafe in 2024 edition; this
|
|
227
|
+
// test reads its own var only, doesn't race with anything.
|
|
228
|
+
unsafe { std::env::set_var("TIME_STYLE_HOST_LEAK_PROBE", "leaked") };
|
|
229
|
+
let out = apply_env_defaults(
|
|
230
|
+
argv(&["ls"]),
|
|
231
|
+
&[EnvDefault {
|
|
232
|
+
arg_id: "probe",
|
|
233
|
+
long: "probe",
|
|
234
|
+
env_var: "TIME_STYLE_HOST_LEAK_PROBE",
|
|
235
|
+
kind: EnvKind::Single,
|
|
236
|
+
}],
|
|
237
|
+
&env(&[]), // empty virtual env
|
|
238
|
+
);
|
|
239
|
+
unsafe { std::env::remove_var("TIME_STYLE_HOST_LEAK_PROBE") };
|
|
240
|
+
assert_eq!(out, argv(&["ls"]));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
#[test]
|
|
244
|
+
fn argv_program_name_is_never_matched_as_flag() {
|
|
245
|
+
// If someone passes argv[0] = "--time-style" by mistake, we
|
|
246
|
+
// must still inject the env default — argv[0] is the program
|
|
247
|
+
// name slot per clap convention.
|
|
248
|
+
let out = apply_env_defaults(
|
|
249
|
+
argv(&["--time-style"]),
|
|
250
|
+
&[TIME_STYLE],
|
|
251
|
+
&env(&[("TIME_STYLE", "iso")]),
|
|
252
|
+
);
|
|
253
|
+
assert_eq!(out, argv(&["--time-style", "--time-style", "iso"]));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
@@ -27,6 +27,9 @@ impl Builtin for Export {
|
|
|
27
27
|
return Ok(ExecResult::ok(output));
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
let mut stderr = String::new();
|
|
31
|
+
let mut exit_code = 0;
|
|
32
|
+
|
|
30
33
|
for arg in ctx.args {
|
|
31
34
|
// Handle NAME=VALUE format
|
|
32
35
|
if let Some(eq_pos) = arg.find('=') {
|
|
@@ -34,17 +37,19 @@ impl Builtin for Export {
|
|
|
34
37
|
let value = &arg[eq_pos + 1..];
|
|
35
38
|
// Validate variable name
|
|
36
39
|
if !is_valid_var_name(name) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
));
|
|
40
|
+
stderr.push_str(&format!("export: `{arg}': not a valid identifier\n"));
|
|
41
|
+
exit_code = 1;
|
|
42
|
+
continue;
|
|
41
43
|
}
|
|
42
44
|
// THREAT[TM-INJ-015]: Block internal variable prefix injection via export
|
|
43
45
|
if is_internal_variable(name) {
|
|
44
46
|
continue;
|
|
45
47
|
}
|
|
46
|
-
// THREAT[TM-INJ-021]: Refuse to overwrite readonly variables
|
|
48
|
+
// THREAT[TM-INJ-021]: Refuse to overwrite readonly variables and
|
|
49
|
+
// surface the error so callers cannot mistake a silent skip for success.
|
|
47
50
|
if ctx.variables.contains_key(&format!("_READONLY_{}", name)) {
|
|
51
|
+
stderr.push_str(&format!("bash: export: {name}: readonly variable\n"));
|
|
52
|
+
exit_code = 1;
|
|
48
53
|
continue;
|
|
49
54
|
}
|
|
50
55
|
ctx.variables.insert(name.to_string(), value.to_string());
|
|
@@ -54,6 +59,10 @@ impl Builtin for Export {
|
|
|
54
59
|
}
|
|
55
60
|
}
|
|
56
61
|
|
|
57
|
-
Ok(ExecResult
|
|
62
|
+
Ok(ExecResult {
|
|
63
|
+
stderr,
|
|
64
|
+
exit_code,
|
|
65
|
+
..Default::default()
|
|
66
|
+
})
|
|
58
67
|
}
|
|
59
68
|
}
|