bashkit 0.10.0__tar.gz → 0.11.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.
Files changed (540) hide show
  1. {bashkit-0.10.0 → bashkit-0.11.0}/Cargo.lock +35 -35
  2. {bashkit-0.10.0 → bashkit-0.11.0}/Cargo.toml +2 -2
  3. {bashkit-0.10.0 → bashkit-0.11.0}/PKG-INFO +5 -2
  4. {bashkit-0.10.0/crates/bashkit-python → bashkit-0.11.0}/README.md +3 -1
  5. {bashkit-0.10.0 → bashkit-0.11.0}/bashkit/_bashkit.pyi +20 -0
  6. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/README.md +3 -3
  7. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/compatibility.md +2 -2
  8. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/threat-model.md +67 -0
  9. bashkit-0.11.0/crates/bashkit/examples/dump_builtins.rs +78 -0
  10. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/awk/parser.rs +12 -2
  11. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/awk/tests.rs +14 -0
  12. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/compgen.rs +61 -54
  13. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/limits.rs +2 -0
  14. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/paste.rs +44 -12
  15. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/path.rs +1 -1
  16. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/python.rs +84 -17
  17. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/rg/mod.rs +151 -11
  18. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/template.rs +2 -2
  19. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/error.rs +10 -0
  20. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/overlay.rs +45 -9
  21. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/interpreter/glob.rs +50 -22
  22. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/interpreter/mod.rs +159 -43
  23. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/lib.rs +11 -0
  24. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/limits.rs +39 -2
  25. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/parser/lexer.rs +113 -17
  26. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/parser/mod.rs +31 -0
  27. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/tool.rs +35 -0
  28. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/blackbox_security_tests.rs +183 -0
  29. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/builtin_registry_tests.rs +22 -0
  30. bashkit-0.11.0/crates/bashkit/tests/integration/compgen_tests.rs +106 -0
  31. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/coreutils_differential_tests.rs +19 -1
  32. bashkit-0.11.0/crates/bashkit/tests/integration/limitations_doc_tests.rs +135 -0
  33. bashkit-0.11.0/crates/bashkit/tests/integration/limitations_evidence_tests.rs +128 -0
  34. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/main.rs +4 -0
  35. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/python_security_tests.rs +2 -8
  36. bashkit-0.11.0/crates/bashkit/tests/integration/threat_model_doc_tests.rs +105 -0
  37. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/threat_model_tests.rs +15 -6
  38. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/paste-flags.test.sh +15 -0
  39. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/python/env_leak.test.sh +11 -3
  40. {bashkit-0.10.0 → bashkit-0.11.0/crates/bashkit-python}/README.md +3 -1
  41. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/examples/bash_basics.py +7 -0
  42. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/src/lib.rs +84 -0
  43. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/_bashkit_categories.py +35 -0
  44. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_basic.py +5 -0
  45. {bashkit-0.10.0 → bashkit-0.11.0}/pyproject.toml +1 -0
  46. {bashkit-0.10.0 → bashkit-0.11.0}/bashkit/__init__.py +0 -0
  47. {bashkit-0.10.0 → bashkit-0.11.0}/bashkit/deepagents.py +0 -0
  48. {bashkit-0.10.0 → bashkit-0.11.0}/bashkit/langchain.py +0 -0
  49. {bashkit-0.10.0 → bashkit-0.11.0}/bashkit/py.typed +0 -0
  50. {bashkit-0.10.0 → bashkit-0.11.0}/bashkit/pydantic_ai.py +0 -0
  51. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/Cargo.toml +0 -0
  52. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/file_ops.rs +0 -0
  53. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/hotpath.rs +0 -0
  54. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/parallel_execution.rs +0 -0
  55. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/results/README.md +0 -0
  56. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/results/criterion-file_ops-linux-x86_64-1779759850.md +0 -0
  57. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/results/criterion-hotpath-attrs+shopt-linux-x86_64-1779759850.md +0 -0
  58. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/results/criterion-hotpath-perf-linux-x86_64-1779744742.md +0 -0
  59. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/results/criterion-parallel-(none)-linux-x86_64-1773469129.md +0 -0
  60. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/results/criterion-sqlite-vm-linux-x86_64-1777865268.md +0 -0
  61. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/benches/sqlite.rs +0 -0
  62. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/clap-builtins.md +0 -0
  63. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/credential-injection.md +0 -0
  64. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/custom_builtins.md +0 -0
  65. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/hooks.md +0 -0
  66. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/jq.md +0 -0
  67. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/live_mounts.md +0 -0
  68. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/logging.md +0 -0
  69. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/python.md +0 -0
  70. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/sqlite.md +0 -0
  71. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/ssh.md +0 -0
  72. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/docs/typescript.md +0 -0
  73. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/agent_tool.rs +0 -0
  74. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/basic.rs +0 -0
  75. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/clap_builtin.rs +0 -0
  76. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/clap_builtin_subcommands.rs +0 -0
  77. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/custom_backend.rs +0 -0
  78. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/custom_builtins.rs +0 -0
  79. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/custom_filesystem_impl.rs +0 -0
  80. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/custom_fs.rs +0 -0
  81. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/git_workflow.rs +0 -0
  82. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/live_mounts.rs +0 -0
  83. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/python_external_functions.rs +0 -0
  84. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/python_scripts.rs +0 -0
  85. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/realfs_readonly.rs +0 -0
  86. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/realfs_readwrite.rs +0 -0
  87. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/resource_limits.rs +0 -0
  88. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/scripted_tool.rs +0 -0
  89. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/show_tool_output.rs +0 -0
  90. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/sqlite_basic.rs +0 -0
  91. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/sqlite_workflow.rs +0 -0
  92. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/ssh_supabase.rs +0 -0
  93. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/streaming_output.rs +0 -0
  94. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/text_files.rs +0 -0
  95. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/text_processing.rs +0 -0
  96. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/typescript_external_functions.rs +0 -0
  97. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/typescript_scripts.rs +0 -0
  98. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/examples/virtual_identity.rs +0 -0
  99. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/out file.txt +0 -0
  100. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/proptest-regressions/builtins/sqlite/tests.txt +0 -0
  101. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/alias.rs +0 -0
  102. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/archive.rs +0 -0
  103. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/arg_parser.rs +0 -0
  104. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/assert.rs +0 -0
  105. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/awk/interpreter.rs +0 -0
  106. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/awk/mod.rs +0 -0
  107. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/base64.rs +0 -0
  108. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/bc.rs +0 -0
  109. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/caller.rs +0 -0
  110. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/cat.rs +0 -0
  111. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/checksum.rs +0 -0
  112. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/clap_env.rs +0 -0
  113. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/clear.rs +0 -0
  114. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/column.rs +0 -0
  115. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/comm.rs +0 -0
  116. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/csv.rs +0 -0
  117. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/curl.rs +0 -0
  118. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/cuttr.rs +0 -0
  119. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/date.rs +0 -0
  120. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/diff.rs +0 -0
  121. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/dirstack.rs +0 -0
  122. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/disk.rs +0 -0
  123. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/dotenv.rs +0 -0
  124. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/echo.rs +0 -0
  125. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/environ.rs +0 -0
  126. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/envsubst.rs +0 -0
  127. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/expand.rs +0 -0
  128. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/export.rs +0 -0
  129. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/expr.rs +0 -0
  130. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/fc.rs +0 -0
  131. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/fileops.rs +0 -0
  132. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/flow.rs +0 -0
  133. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/fold.rs +0 -0
  134. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/cat_args.rs +0 -0
  135. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/extendedbigdecimal.rs +0 -0
  136. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/format/argument.rs +0 -0
  137. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/format/escape.rs +0 -0
  138. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/format/human.rs +0 -0
  139. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/format/mod.rs +0 -0
  140. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/format/num_format.rs +0 -0
  141. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/format/spec.rs +0 -0
  142. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/format_support.rs +0 -0
  143. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/ls_args.rs +0 -0
  144. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/mktemp_args.rs +0 -0
  145. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/mod.rs +0 -0
  146. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/num_parser.rs +0 -0
  147. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/od_args.rs +0 -0
  148. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/readlink_args.rs +0 -0
  149. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/realpath_args.rs +0 -0
  150. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/shuf_args.rs +0 -0
  151. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/stat_args.rs +0 -0
  152. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/tac_args.rs +0 -0
  153. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/tee_args.rs +0 -0
  154. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/generated/truncate_args.rs +0 -0
  155. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/git/client.rs +0 -0
  156. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/git/cmd.rs +0 -0
  157. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/git/config.rs +0 -0
  158. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/git/mod.rs +0 -0
  159. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/glob_cmd.rs +0 -0
  160. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/grep.rs +0 -0
  161. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/headtail.rs +0 -0
  162. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/help.rs +0 -0
  163. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/helpers.rs +0 -0
  164. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/hextools.rs +0 -0
  165. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/http.rs +0 -0
  166. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/iconv.rs +0 -0
  167. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/inspect.rs +0 -0
  168. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/introspect.rs +0 -0
  169. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/join.rs +0 -0
  170. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/jq/args.rs +0 -0
  171. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/jq/compat.rs +0 -0
  172. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/jq/convert.rs +0 -0
  173. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/jq/errors.rs +0 -0
  174. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/jq/format.rs +0 -0
  175. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/jq/mod.rs +0 -0
  176. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/jq/regex_compat.rs +0 -0
  177. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/jq/tests.rs +0 -0
  178. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/json.rs +0 -0
  179. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/log.rs +0 -0
  180. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ls/find.rs +0 -0
  181. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ls/glob.rs +0 -0
  182. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ls/list.rs +0 -0
  183. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ls/mod.rs +0 -0
  184. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ls/rmdir.rs +0 -0
  185. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ls/tests.rs +0 -0
  186. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/mapfile.rs +0 -0
  187. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/mkfifo.rs +0 -0
  188. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/mod.rs +0 -0
  189. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/navigation.rs +0 -0
  190. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/nl.rs +0 -0
  191. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/numfmt.rs +0 -0
  192. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/parallel.rs +0 -0
  193. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/patch.rs +0 -0
  194. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/pipeline.rs +0 -0
  195. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/printf.rs +0 -0
  196. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/read.rs +0 -0
  197. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/retry.rs +0 -0
  198. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/search_common.rs +0 -0
  199. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sed.rs +0 -0
  200. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/semver.rs +0 -0
  201. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/seq.rs +0 -0
  202. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/shuf.rs +0 -0
  203. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sleep.rs +0 -0
  204. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sortuniq.rs +0 -0
  205. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/source.rs +0 -0
  206. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/split.rs +0 -0
  207. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sqlite/dot_commands.rs +0 -0
  208. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sqlite/engine.rs +0 -0
  209. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sqlite/formatter.rs +0 -0
  210. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sqlite/mod.rs +0 -0
  211. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sqlite/parser.rs +0 -0
  212. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sqlite/tests.rs +0 -0
  213. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/sqlite/vfs_io.rs +0 -0
  214. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ssh/allowlist.rs +0 -0
  215. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ssh/client.rs +0 -0
  216. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ssh/cmd.rs +0 -0
  217. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ssh/config.rs +0 -0
  218. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ssh/handler.rs +0 -0
  219. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ssh/mod.rs +0 -0
  220. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/ssh/russh_handler.rs +0 -0
  221. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/strings.rs +0 -0
  222. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/system.rs +0 -0
  223. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/test.rs +0 -0
  224. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/textrev.rs +0 -0
  225. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/timeout.rs +0 -0
  226. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/tomlq.rs +0 -0
  227. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/trap.rs +0 -0
  228. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/tree.rs +0 -0
  229. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/truncate.rs +0 -0
  230. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/typescript.rs +0 -0
  231. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/vars.rs +0 -0
  232. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/verify.rs +0 -0
  233. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/wait.rs +0 -0
  234. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/wc.rs +0 -0
  235. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/yaml.rs +0 -0
  236. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/yes.rs +0 -0
  237. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/builtins/zip_cmd.rs +0 -0
  238. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/credential.rs +0 -0
  239. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/backend.rs +0 -0
  240. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/limits.rs +0 -0
  241. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/memory.rs +0 -0
  242. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/mod.rs +0 -0
  243. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/mountable.rs +0 -0
  244. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/posix.rs +0 -0
  245. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/readonly.rs +0 -0
  246. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/realfs.rs +0 -0
  247. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/search.rs +0 -0
  248. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/fs/traits.rs +0 -0
  249. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/hooks.rs +0 -0
  250. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/interop/fs.rs +0 -0
  251. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/interop/mod.rs +0 -0
  252. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/interpreter/jobs.rs +0 -0
  253. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/interpreter/state.rs +0 -0
  254. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/logging_impl.rs +0 -0
  255. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/network/allowlist.rs +0 -0
  256. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/network/bot_auth.rs +0 -0
  257. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/network/client.rs +0 -0
  258. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/network/mod.rs +0 -0
  259. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/parser/ast.rs +0 -0
  260. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/parser/budget.rs +0 -0
  261. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/parser/span.rs +0 -0
  262. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/parser/tokens.rs +0 -0
  263. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/scripted_tool/execute.rs +0 -0
  264. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/scripted_tool/extension.rs +0 -0
  265. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/scripted_tool/mod.rs +0 -0
  266. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/scripted_tool/toolset.rs +0 -0
  267. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/snapshot.rs +0 -0
  268. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/testing.rs +0 -0
  269. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/tool_def.rs +0 -0
  270. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/src/trace.rs +0 -0
  271. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/agent_skills_publication_tests.rs +0 -0
  272. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/allexport_tests.rs +0 -0
  273. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/awk_fuzz_scaffold_tests.rs +0 -0
  274. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/awk_newline_tests.rs +0 -0
  275. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/awk_pattern_tests.rs +0 -0
  276. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/awk_printf_expr_test.rs +0 -0
  277. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/awk_range_pattern_tests.rs +0 -0
  278. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/background_exec_tests.rs +0 -0
  279. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/base64_binary_tests.rs +0 -0
  280. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/bash_source_tests.rs +0 -0
  281. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/builtin_error_security_tests.rs +0 -0
  282. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/byte_range_panic_tests.rs +0 -0
  283. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/cancellation_tests.rs +0 -0
  284. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/cmdsub_quote_test.rs +0 -0
  285. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/coproc_tests.rs +0 -0
  286. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/credential_injection_tests.rs +0 -0
  287. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/custom_builtins_tests.rs +0 -0
  288. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/custom_fs_tests.rs +0 -0
  289. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/dev_null_tests.rs +0 -0
  290. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/final_env_tests.rs +0 -0
  291. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/find_multi_path_tests.rs +0 -0
  292. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/git_advanced_tests.rs +0 -0
  293. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/git_inspection_tests.rs +0 -0
  294. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/git_integration_tests.rs +0 -0
  295. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/git_remote_security_tests.rs +0 -0
  296. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/git_security_tests.rs +0 -0
  297. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/harness_example_tests.rs +0 -0
  298. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/history_tests.rs +0 -0
  299. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_1175_test.rs +0 -0
  300. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_1776_test.rs +0 -0
  301. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_1777_test.rs +0 -0
  302. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_274_test.rs +0 -0
  303. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_275_279_282_test.rs +0 -0
  304. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_276_test.rs +0 -0
  305. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_277_test.rs +0 -0
  306. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_289_test.rs +0 -0
  307. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_290_test.rs +0 -0
  308. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_291_test.rs +0 -0
  309. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_853_test.rs +0 -0
  310. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_872_test.rs +0 -0
  311. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_873_test.rs +0 -0
  312. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/issue_875_test.rs +0 -0
  313. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/jq_fuzz_scaffold_tests.rs +0 -0
  314. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/live_mount_tests.rs +0 -0
  315. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/mkfifo_tests.rs +0 -0
  316. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/nested_subscript_tests.rs +0 -0
  317. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/network_security_tests.rs +0 -0
  318. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/output_truncation_tests.rs +0 -0
  319. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/proptest_differential.rs +0 -0
  320. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/python_integration_tests.rs +0 -0
  321. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/regex_limit_tests.rs +0 -0
  322. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/release_profile_tests.rs +0 -0
  323. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/script_execution_tests.rs +0 -0
  324. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/security_audit_pocs.rs +0 -0
  325. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/set_e_and_or_tests.rs +0 -0
  326. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/shuf_resource_tests.rs +0 -0
  327. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/skills_tests.rs +0 -0
  328. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/snapshot_tests.rs +0 -0
  329. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/source_function_tests.rs +0 -0
  330. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/spec_runner.rs +0 -0
  331. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/spec_tests.rs +0 -0
  332. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/sqlite_compat_tests.rs +0 -0
  333. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/sqlite_differential_tests.rs +0 -0
  334. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/sqlite_fuzz_tests.rs +0 -0
  335. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/sqlite_integration_tests.rs +0 -0
  336. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/sqlite_security_tests.rs +0 -0
  337. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/stack_overflow_regression_tests.rs +0 -0
  338. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/subst_depth_limit_tests.rs +0 -0
  339. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/symlink_overlay_security_tests.rs +0 -0
  340. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/tty_tests.rs +0 -0
  341. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/typescript_integration_tests.rs +0 -0
  342. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/typescript_security_tests.rs +0 -0
  343. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/unicode_security_tests.rs +0 -0
  344. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/unset_function_tests.rs +0 -0
  345. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/urandom_tests.rs +0 -0
  346. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/integration/workflow_security_tests.rs +0 -0
  347. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/logging_security_tests.rs +0 -0
  348. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/proptest_security.rs +0 -0
  349. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/realfs_tests.rs +0 -0
  350. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/security_failpoint_tests.rs +0 -0
  351. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/azure_discover_rank.sh +0 -0
  352. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/azure_generate_url.sh +0 -0
  353. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/azure_query_capacity.sh +0 -0
  354. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/helm_validate_chart.sh +0 -0
  355. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/jwt_test_setup.sh +0 -0
  356. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/stitch_download_asset.sh +0 -0
  357. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/stitch_fetch.sh +0 -0
  358. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/stitch_verify_setup.sh +0 -0
  359. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/superpowers_find_polluter.sh +0 -0
  360. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/skills_fixtures/vercel_deploy.sh +0 -0
  361. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/awk/awk.test.sh +0 -0
  362. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/awk/delete-array.test.sh +0 -0
  363. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/awk/dev-stderr.test.sh +0 -0
  364. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/awk/eval-bugs.test.sh +0 -0
  365. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/awk/filename.test.sh +0 -0
  366. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/awk/getline-file.test.sh +0 -0
  367. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/alias.test.sh +0 -0
  368. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/append_redirect.test.sh +0 -0
  369. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/arith-dynamic.test.sh +0 -0
  370. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/arithmetic-base-expansion.test.sh +0 -0
  371. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/arithmetic.test.sh +0 -0
  372. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/array-slicing.test.sh +0 -0
  373. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/array-splat.test.sh +0 -0
  374. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/arrays.test.sh +0 -0
  375. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/assoc-arrays.test.sh +0 -0
  376. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/awk-printf-width.test.sh +0 -0
  377. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/background.test.sh +0 -0
  378. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/bash-c-exports.test.sh +0 -0
  379. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/bash-command.test.sh +0 -0
  380. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/bash-flags.test.sh +0 -0
  381. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/bash-source-var.test.sh +0 -0
  382. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/bash-stdin-pipe.test.sh +0 -0
  383. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/bc.test.sh +0 -0
  384. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/blackbox-edge-cases.test.sh +0 -0
  385. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/blackbox-exploration.test.sh +0 -0
  386. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/brace-expansion.test.sh +0 -0
  387. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/brace_expansion_lookahead.test.sh +0 -0
  388. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/cat.test.sh +0 -0
  389. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/checksum.test.sh +0 -0
  390. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/chown-kill.test.sh +0 -0
  391. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/cmd-suggestions.test.sh +0 -0
  392. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/cmdsub_depth_unquoted.test.sh +0 -0
  393. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/column.test.sh +0 -0
  394. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/comm.test.sh +0 -0
  395. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/command-not-found.test.sh +0 -0
  396. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/command-subst.test.sh +0 -0
  397. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/command.test.sh +0 -0
  398. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/command_v.test.sh +0 -0
  399. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/compgen-path.test.sh +0 -0
  400. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/conditional-short-circuit.test.sh +0 -0
  401. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/conditional.test.sh +0 -0
  402. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/control-flow.test.sh +0 -0
  403. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/cuttr.test.sh +0 -0
  404. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/date.test.sh +0 -0
  405. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/declare.test.sh +0 -0
  406. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/df.test.sh +0 -0
  407. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/diff.test.sh +0 -0
  408. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/dirstack.test.sh +0 -0
  409. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/du.test.sh +0 -0
  410. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/echo.test.sh +0 -0
  411. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/empty-bodies.test.sh +0 -0
  412. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/env.test.sh +0 -0
  413. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/errexit.test.sh +0 -0
  414. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/eval-bugs.test.sh +0 -0
  415. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/exec-command.test.sh +0 -0
  416. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-redirect.test.sh +0 -0
  417. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/exec-fd-variable.test.sh +0 -0
  418. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/exit-status.test.sh +0 -0
  419. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/expr.test.sh +0 -0
  420. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/extglob.test.sh +0 -0
  421. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/file.test.sh +0 -0
  422. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/fileops.test.sh +0 -0
  423. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/find.test.sh +0 -0
  424. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/functions.test.sh +0 -0
  425. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/getopts.test.sh +0 -0
  426. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/glob-options.test.sh +0 -0
  427. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/glob_match_cap.test.sh +0 -0
  428. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/globs.test.sh +0 -0
  429. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/gzip.test.sh +0 -0
  430. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/headtail.test.sh +0 -0
  431. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/help-flag.test.sh +0 -0
  432. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/heredoc-edge.test.sh +0 -0
  433. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/heredoc.test.sh +0 -0
  434. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/herestring.test.sh +0 -0
  435. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/hextools.test.sh +0 -0
  436. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/history.test.sh +0 -0
  437. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/indirect-expansion.test.sh +0 -0
  438. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/less.test.sh +0 -0
  439. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/ln.test.sh +0 -0
  440. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/ls.test.sh +0 -0
  441. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/memory_budget_desync.test.sh +0 -0
  442. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/mktemp.test.sh +0 -0
  443. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/nameref-assoc.test.sh +0 -0
  444. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/nameref.test.sh +0 -0
  445. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/negative-tests.test.sh +0 -0
  446. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/nl.test.sh +0 -0
  447. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/nounset.test.sh +0 -0
  448. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/numfmt.test.sh +0 -0
  449. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/od.test.sh +0 -0
  450. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/parse-errors.test.sh +0 -0
  451. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/paste.test.sh +0 -0
  452. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/path.test.sh +0 -0
  453. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/pipes-redirects.test.sh +0 -0
  454. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/printenv.test.sh +0 -0
  455. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/printf.test.sh +0 -0
  456. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/procsub.test.sh +0 -0
  457. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/quote.test.sh +0 -0
  458. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/read-builtin.test.sh +0 -0
  459. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/readlink.test.sh +0 -0
  460. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/recursive-cmdsub.test.sh +0 -0
  461. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/regex-limit.test.sh +0 -0
  462. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/replace_pattern_limit.test.sh +0 -0
  463. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/script-exec.test.sh +0 -0
  464. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/seq.test.sh +0 -0
  465. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/set-allexport.test.sh +0 -0
  466. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/shell-grammar.test.sh +0 -0
  467. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/shuf.test.sh +0 -0
  468. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/sleep.test.sh +0 -0
  469. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/sortuniq.test.sh +0 -0
  470. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/source.test.sh +0 -0
  471. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/stat.test.sh +0 -0
  472. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/string-ops.test.sh +0 -0
  473. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/strings.test.sh +0 -0
  474. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/subprocess-isolation.test.sh +0 -0
  475. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/subshell.test.sh +0 -0
  476. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/tar.test.sh +0 -0
  477. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/tar_create.test.sh +0 -0
  478. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/tee.test.sh +0 -0
  479. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/temp-binding.test.sh +0 -0
  480. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/test-operators.test.sh +0 -0
  481. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/test-tty.test.sh +0 -0
  482. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/textrev.test.sh +0 -0
  483. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/time.test.sh +0 -0
  484. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/timeout.test.sh +0 -0
  485. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/tree.test.sh +0 -0
  486. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/truncate.test.sh +0 -0
  487. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/type.test.sh +0 -0
  488. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/unicode.test.sh +0 -0
  489. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/unset-exported-var.test.sh +0 -0
  490. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/var-op-test.test.sh +0 -0
  491. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/variables.test.sh +0 -0
  492. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/wait.test.sh +0 -0
  493. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/watch.test.sh +0 -0
  494. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/wc.test.sh +0 -0
  495. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/word-split.test.sh +0 -0
  496. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/bash/xargs.test.sh +0 -0
  497. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/grep/eval-bugs.test.sh +0 -0
  498. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/grep/grep.test.sh +0 -0
  499. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/grep/rg.test.sh +0 -0
  500. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/jq/jq.test.sh +0 -0
  501. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/python/python.test.sh +0 -0
  502. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/sed/eval-bugs.test.sh +0 -0
  503. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/sed/sed.test.sh +0 -0
  504. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/spec_cases/typescript/typescript.test.sh +0 -0
  505. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/ssh_builtin_tests.rs +0 -0
  506. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit/tests/ssh_supabase_tests.rs +0 -0
  507. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/Cargo.toml +0 -0
  508. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/examples/custom_filesystem_interop.py +0 -0
  509. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/examples/data_pipeline.py +0 -0
  510. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/examples/fastapi_async_tool.py +0 -0
  511. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/examples/jupyter_async_test.ipynb +0 -0
  512. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/examples/k8s_orchestrator.py +0 -0
  513. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/examples/langgraph_async_tool.py +0 -0
  514. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/examples/llm_tool.py +0 -0
  515. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/_security_advanced.py +0 -0
  516. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/_security_core.py +0 -0
  517. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_ai_adapters.py +0 -0
  518. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_async_callbacks.py +0 -0
  519. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_builtins.py +0 -0
  520. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_control_flow.py +0 -0
  521. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_custom_builtin_fs.py +0 -0
  522. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_error_handling.py +0 -0
  523. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_fastapi_integration.py +0 -0
  524. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_filesystem_interop.py +0 -0
  525. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_integration.py +0 -0
  526. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_jupyter_compat.py +0 -0
  527. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_langgraph_integration.py +0 -0
  528. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_network_config.py +0 -0
  529. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_network_credentials.py +0 -0
  530. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_python_security.py +0 -0
  531. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_registered_tools.py +0 -0
  532. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_scripts.py +0 -0
  533. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_security.py +0 -0
  534. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_shell_injection.py +0 -0
  535. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_sqlite.py +0 -0
  536. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_streaming_output.py +0 -0
  537. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_strings_and_quoting.py +0 -0
  538. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_teardown_determinism.py +0 -0
  539. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_tool_metadata.py +0 -0
  540. {bashkit-0.10.0 → bashkit-0.11.0}/crates/bashkit-python/tests/test_vfs.py +0 -0
@@ -195,9 +195,9 @@ dependencies = [
195
195
 
196
196
  [[package]]
197
197
  name = "antithesis_sdk"
198
- version = "0.2.8"
198
+ version = "0.2.9"
199
199
  source = "registry+https://github.com/rust-lang/crates.io-index"
200
- checksum = "18dbd97a5b6c21cc9176891cf715f7f0c273caf3959897f43b9bd1231939e675"
200
+ checksum = "08410fcac93669a476c006cd6c4512ac1e2b30fd117231a5d55d8a2c76599b82"
201
201
  dependencies = [
202
202
  "libc",
203
203
  "libloading 0.8.9",
@@ -347,7 +347,7 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
347
347
 
348
348
  [[package]]
349
349
  name = "bashkit"
350
- version = "0.10.0"
350
+ version = "0.11.0"
351
351
  dependencies = [
352
352
  "anyhow",
353
353
  "async-trait",
@@ -400,7 +400,7 @@ dependencies = [
400
400
 
401
401
  [[package]]
402
402
  name = "bashkit-bench"
403
- version = "0.10.0"
403
+ version = "0.11.0"
404
404
  dependencies = [
405
405
  "anyhow",
406
406
  "bashkit",
@@ -415,7 +415,7 @@ dependencies = [
415
415
 
416
416
  [[package]]
417
417
  name = "bashkit-cli"
418
- version = "0.10.0"
418
+ version = "0.11.0"
419
419
  dependencies = [
420
420
  "anyhow",
421
421
  "bashkit",
@@ -429,7 +429,7 @@ dependencies = [
429
429
 
430
430
  [[package]]
431
431
  name = "bashkit-coreutils-port"
432
- version = "0.10.0"
432
+ version = "0.11.0"
433
433
  dependencies = [
434
434
  "anyhow",
435
435
  "prettyplease",
@@ -443,7 +443,7 @@ dependencies = [
443
443
 
444
444
  [[package]]
445
445
  name = "bashkit-eval"
446
- version = "0.10.0"
446
+ version = "0.11.0"
447
447
  dependencies = [
448
448
  "anyhow",
449
449
  "async-trait",
@@ -460,7 +460,7 @@ dependencies = [
460
460
 
461
461
  [[package]]
462
462
  name = "bashkit-js"
463
- version = "0.10.0"
463
+ version = "0.11.0"
464
464
  dependencies = [
465
465
  "bashkit",
466
466
  "napi",
@@ -472,7 +472,7 @@ dependencies = [
472
472
 
473
473
  [[package]]
474
474
  name = "bashkit-python"
475
- version = "0.10.0"
475
+ version = "0.11.0"
476
476
  dependencies = [
477
477
  "bashkit",
478
478
  "num-bigint",
@@ -676,9 +676,9 @@ dependencies = [
676
676
 
677
677
  [[package]]
678
678
  name = "cc"
679
- version = "1.2.63"
679
+ version = "1.2.64"
680
680
  source = "registry+https://github.com/rust-lang/crates.io-index"
681
- checksum = "556e016178bb5662a08681bbe0f00f8e17631781a4dfc8c45e466e4b185ec27f"
681
+ checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f"
682
682
  dependencies = [
683
683
  "find-msvc-tools",
684
684
  "jobserver",
@@ -2481,9 +2481,9 @@ dependencies = [
2481
2481
 
2482
2482
  [[package]]
2483
2483
  name = "js-sys"
2484
- version = "0.3.100"
2484
+ version = "0.3.102"
2485
2485
  source = "registry+https://github.com/rust-lang/crates.io-index"
2486
- checksum = "f2025f20d7a4fa7785846e7b63d10a76d3f1cee98ee5cb79ea59703f95e42162"
2486
+ checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31"
2487
2487
  dependencies = [
2488
2488
  "cfg-if",
2489
2489
  "futures-util",
@@ -2689,9 +2689,9 @@ checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0"
2689
2689
 
2690
2690
  [[package]]
2691
2691
  name = "memchr"
2692
- version = "2.8.1"
2692
+ version = "2.8.2"
2693
2693
  source = "registry+https://github.com/rust-lang/crates.io-index"
2694
- checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8"
2694
+ checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
2695
2695
 
2696
2696
  [[package]]
2697
2697
  name = "memoffset"
@@ -2811,9 +2811,9 @@ dependencies = [
2811
2811
 
2812
2812
  [[package]]
2813
2813
  name = "napi"
2814
- version = "3.9.1"
2814
+ version = "3.9.2"
2815
2815
  source = "registry+https://github.com/rust-lang/crates.io-index"
2816
- checksum = "ad513ff22558f1830b595ea6eb4091da48145d09a222ce157e781896f78be0b9"
2816
+ checksum = "26d3c7dd60231116a47854321c9ac8df6f13435d11aa3a59d8533a76e07a3730"
2817
2817
  dependencies = [
2818
2818
  "bitflags",
2819
2819
  "ctor",
@@ -4829,9 +4829,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
4829
4829
 
4830
4830
  [[package]]
4831
4831
  name = "smallvec"
4832
- version = "1.15.1"
4832
+ version = "1.15.2"
4833
4833
  source = "registry+https://github.com/rust-lang/crates.io-index"
4834
- checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
4834
+ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
4835
4835
  dependencies = [
4836
4836
  "serde",
4837
4837
  ]
@@ -5767,9 +5767,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
5767
5767
 
5768
5768
  [[package]]
5769
5769
  name = "wasip2"
5770
- version = "1.0.3+wasi-0.2.9"
5770
+ version = "1.0.4+wasi-0.2.12"
5771
5771
  source = "registry+https://github.com/rust-lang/crates.io-index"
5772
- checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6"
5772
+ checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
5773
5773
  dependencies = [
5774
5774
  "wit-bindgen 0.57.1",
5775
5775
  ]
@@ -5785,9 +5785,9 @@ dependencies = [
5785
5785
 
5786
5786
  [[package]]
5787
5787
  name = "wasm-bindgen"
5788
- version = "0.2.123"
5788
+ version = "0.2.125"
5789
5789
  source = "registry+https://github.com/rust-lang/crates.io-index"
5790
- checksum = "a254a4b10c19a76f09a27640e7ffbf9bc30bf67e16a3bf28aaefa4920fe81563"
5790
+ checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a"
5791
5791
  dependencies = [
5792
5792
  "cfg-if",
5793
5793
  "once_cell",
@@ -5798,9 +5798,9 @@ dependencies = [
5798
5798
 
5799
5799
  [[package]]
5800
5800
  name = "wasm-bindgen-futures"
5801
- version = "0.4.73"
5801
+ version = "0.4.75"
5802
5802
  source = "registry+https://github.com/rust-lang/crates.io-index"
5803
- checksum = "54568702fabf5d4849ce2b90fadfa64168a097eaf4b351ce9df8b687a0086aaf"
5803
+ checksum = "503b14d284f2c8dac03b819967e155ea753f573586193b2b2c95990cb5d69280"
5804
5804
  dependencies = [
5805
5805
  "js-sys",
5806
5806
  "wasm-bindgen",
@@ -5808,9 +5808,9 @@ dependencies = [
5808
5808
 
5809
5809
  [[package]]
5810
5810
  name = "wasm-bindgen-macro"
5811
- version = "0.2.123"
5811
+ version = "0.2.125"
5812
5812
  source = "registry+https://github.com/rust-lang/crates.io-index"
5813
- checksum = "24a40fc75b0ec6f3746ceb10d36f53a93dcd68a93b11b6445983945d79eba0dc"
5813
+ checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d"
5814
5814
  dependencies = [
5815
5815
  "quote",
5816
5816
  "wasm-bindgen-macro-support",
@@ -5818,9 +5818,9 @@ dependencies = [
5818
5818
 
5819
5819
  [[package]]
5820
5820
  name = "wasm-bindgen-macro-support"
5821
- version = "0.2.123"
5821
+ version = "0.2.125"
5822
5822
  source = "registry+https://github.com/rust-lang/crates.io-index"
5823
- checksum = "908f34bd9b9ce3d4caf07b72dfab63d61504d156856c6bd3cd87fa350cf3985b"
5823
+ checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd"
5824
5824
  dependencies = [
5825
5825
  "bumpalo",
5826
5826
  "proc-macro2",
@@ -5831,9 +5831,9 @@ dependencies = [
5831
5831
 
5832
5832
  [[package]]
5833
5833
  name = "wasm-bindgen-shared"
5834
- version = "0.2.123"
5834
+ version = "0.2.125"
5835
5835
  source = "registry+https://github.com/rust-lang/crates.io-index"
5836
- checksum = "7acbf7616c27b194bbb550bf77ed0c2c3e5b7fd1260a93082b95fb7f47959b92"
5836
+ checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f"
5837
5837
  dependencies = [
5838
5838
  "unicode-ident",
5839
5839
  ]
@@ -5887,9 +5887,9 @@ dependencies = [
5887
5887
 
5888
5888
  [[package]]
5889
5889
  name = "web-sys"
5890
- version = "0.3.100"
5890
+ version = "0.3.102"
5891
5891
  source = "registry+https://github.com/rust-lang/crates.io-index"
5892
- checksum = "6e0871acf327f283dc6da28a1696cdc64fb355ba9f935d052021fa77f35cce69"
5892
+ checksum = "a6430a72df5eb332242960fe84b3002a241163998241eb596d4f739b9757061d"
5893
5893
  dependencies = [
5894
5894
  "js-sys",
5895
5895
  "wasm-bindgen",
@@ -6331,9 +6331,9 @@ dependencies = [
6331
6331
 
6332
6332
  [[package]]
6333
6333
  name = "zeroize"
6334
- version = "1.8.2"
6334
+ version = "1.9.0"
6335
6335
  source = "registry+https://github.com/rust-lang/crates.io-index"
6336
- checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
6336
+ checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e"
6337
6337
 
6338
6338
  [[package]]
6339
6339
  name = "zerotrie"
@@ -7,10 +7,10 @@ resolver = "2"
7
7
  members = ["crates/*"]
8
8
 
9
9
  [workspace.package]
10
- version = "0.10.0"
10
+ version = "0.11.0"
11
11
  edition = "2024"
12
12
  license = "MIT"
13
- authors = ["Everruns"]
13
+ authors = ["Mykhailo Chalyi <mike@chaliy.name>", "Everruns"]
14
14
  repository = "https://github.com/everruns/bashkit"
15
15
  description = "Awesomely fast virtual sandbox with bash and file system"
16
16
  keywords = ["bash", "virtual", "ai", "agent", "everruns"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bashkit
3
- Version: 0.10.0
3
+ Version: 0.11.0
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -27,6 +27,7 @@ Provides-Extra: langchain
27
27
  Provides-Extra: pydantic-ai
28
28
  Summary: A sandboxed bash interpreter for AI agents
29
29
  Keywords: bash,sandbox,ai,agent,shell,interpreter
30
+ Author-email: Mykhailo Chalyi <mike@chaliy.name>
30
31
  License: MIT
31
32
  Requires-Python: >=3.9
32
33
  Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
@@ -47,7 +48,7 @@ Homepage: [bashkit.sh](https://bashkit.sh)
47
48
 
48
49
  - Sandboxed execution in-process, without containers or subprocess orchestration
49
50
  - Full bash syntax: variables, pipelines, redirects, loops, functions, and arrays
50
- - 164 built-in commands including `grep`, `sed`, `awk`, `jq`, `curl`, and `find`
51
+ - 156 built-in commands including `grep`, `sed`, `awk`, `jq`, `curl`, and `find`
51
52
  - Persistent interpreter state across calls, including variables, cwd, and VFS contents
52
53
  - Direct virtual filesystem APIs, constructor mounts, and live host mounts
53
54
  - Snapshot and restore support on `Bash` and `BashTool`
@@ -111,6 +112,8 @@ from bashkit import Bash
111
112
  bash = Bash(
112
113
  username="agent",
113
114
  hostname="sandbox",
115
+ cwd="/home/agent",
116
+ env={"LANG": "en_US.UTF-8"},
114
117
  max_commands=1000,
115
118
  max_loop_iterations=10000,
116
119
  max_memory=10 * 1024 * 1024,
@@ -10,7 +10,7 @@ Homepage: [bashkit.sh](https://bashkit.sh)
10
10
 
11
11
  - Sandboxed execution in-process, without containers or subprocess orchestration
12
12
  - Full bash syntax: variables, pipelines, redirects, loops, functions, and arrays
13
- - 164 built-in commands including `grep`, `sed`, `awk`, `jq`, `curl`, and `find`
13
+ - 156 built-in commands including `grep`, `sed`, `awk`, `jq`, `curl`, and `find`
14
14
  - Persistent interpreter state across calls, including variables, cwd, and VFS contents
15
15
  - Direct virtual filesystem APIs, constructor mounts, and live host mounts
16
16
  - Snapshot and restore support on `Bash` and `BashTool`
@@ -74,6 +74,8 @@ from bashkit import Bash
74
74
  bash = Bash(
75
75
  username="agent",
76
76
  hostname="sandbox",
77
+ cwd="/home/agent",
78
+ env={"LANG": "en_US.UTF-8"},
77
79
  max_commands=1000,
78
80
  max_loop_iterations=10000,
79
81
  max_memory=10 * 1024 * 1024,
@@ -465,6 +465,8 @@ class Bash:
465
465
  self,
466
466
  username: str | None = None,
467
467
  hostname: str | None = None,
468
+ cwd: str | None = None,
469
+ env: Mapping[str, str] | None = None,
468
470
  max_commands: int | None = None,
469
471
  max_loop_iterations: int | None = None,
470
472
  max_memory: int | None = None,
@@ -485,6 +487,10 @@ class Bash:
485
487
  Args:
486
488
  username: Custom username (default ``"user"``).
487
489
  hostname: Custom hostname (default ``"bashkit"``).
490
+ cwd: Initial working directory for the shell. Sets the starting
491
+ directory directly instead of running a leading ``cd``.
492
+ env: Initial environment variables applied before execution, so
493
+ scripts see them without an ``export`` prelude.
488
494
  max_commands: Limit total commands executed.
489
495
  max_loop_iterations: Limit iterations per loop.
490
496
  max_memory: Memory limit in bytes for the VFS.
@@ -716,6 +722,8 @@ class Bash:
716
722
  data: bytes,
717
723
  username: str | None = None,
718
724
  hostname: str | None = None,
725
+ cwd: str | None = None,
726
+ env: Mapping[str, str] | None = None,
719
727
  max_commands: int | None = None,
720
728
  max_loop_iterations: int | None = None,
721
729
  max_memory: int | None = None,
@@ -740,6 +748,8 @@ class Bash:
740
748
  key: bytes,
741
749
  username: str | None = None,
742
750
  hostname: str | None = None,
751
+ cwd: str | None = None,
752
+ env: Mapping[str, str] | None = None,
743
753
  max_commands: int | None = None,
744
754
  max_loop_iterations: int | None = None,
745
755
  max_memory: int | None = None,
@@ -922,6 +932,8 @@ class BashTool:
922
932
  self,
923
933
  username: str | None = None,
924
934
  hostname: str | None = None,
935
+ cwd: str | None = None,
936
+ env: Mapping[str, str] | None = None,
925
937
  max_commands: int | None = None,
926
938
  max_loop_iterations: int | None = None,
927
939
  max_memory: int | None = None,
@@ -938,6 +950,10 @@ class BashTool:
938
950
  Args:
939
951
  username: Custom username (default ``"user"``).
940
952
  hostname: Custom hostname (default ``"bashkit"``).
953
+ cwd: Initial working directory for the shell. Sets the starting
954
+ directory directly instead of running a leading ``cd``.
955
+ env: Initial environment variables applied before execution, so
956
+ scripts see them without an ``export`` prelude.
941
957
  max_commands: Limit total commands executed.
942
958
  max_loop_iterations: Limit iterations per loop.
943
959
  max_memory: Memory limit in bytes for the VFS.
@@ -1188,6 +1204,8 @@ class BashTool:
1188
1204
  data: bytes,
1189
1205
  username: str | None = None,
1190
1206
  hostname: str | None = None,
1207
+ cwd: str | None = None,
1208
+ env: Mapping[str, str] | None = None,
1191
1209
  max_commands: int | None = None,
1192
1210
  max_loop_iterations: int | None = None,
1193
1211
  max_memory: int | None = None,
@@ -1208,6 +1226,8 @@ class BashTool:
1208
1226
  key: bytes,
1209
1227
  username: str | None = None,
1210
1228
  hostname: str | None = None,
1229
+ cwd: str | None = None,
1230
+ env: Mapping[str, str] | None = None,
1211
1231
  max_commands: int | None = None,
1212
1232
  max_loop_iterations: int | None = None,
1213
1233
  max_memory: int | None = None,
@@ -14,7 +14,7 @@ Homepage: [bashkit.sh](https://bashkit.sh)
14
14
 
15
15
  - **Secure by default** - No process spawning, no filesystem access, no network access unless explicitly enabled. [280+ threats](specs/threat-model.md) analyzed and mitigated
16
16
  - **POSIX compliant** - Substantial IEEE 1003.1-2024 Shell Command Language compliance
17
- - **Sandboxed, in-process execution** - All 164 commands reimplemented in Rust, no `fork`/`exec`
17
+ - **Sandboxed, in-process execution** - All 156 commands reimplemented in Rust, no `fork`/`exec`
18
18
  - **Virtual filesystem** - InMemoryFs, OverlayFs, MountableFs with optional RealFs backend (`realfs` feature)
19
19
  - **Resource limits** - Command count, loop iterations, function depth, output size, filesystem size, parser fuel
20
20
  - **Network allowlist** - HTTP access denied by default, per-domain control
@@ -123,7 +123,7 @@ assert_eq!(output.result["stdout"], "hello\nworld\n");
123
123
  </a>
124
124
  </div>
125
125
 
126
- ## Built-in Commands (164)
126
+ ## Built-in Commands (156)
127
127
 
128
128
  | Category | Commands |
129
129
  |----------|----------|
@@ -540,7 +540,7 @@ Bashkit is built for running untrusted scripts from AI agents and users. Securit
540
540
 
541
541
  | Layer | Protection |
542
542
  |-------|------------|
543
- | **No process spawning** | All 164 commands are reimplemented in Rust — no `fork`, `exec`, or shell escape |
543
+ | **No process spawning** | All 156 commands are reimplemented in Rust — no `fork`, `exec`, or shell escape |
544
544
  | **Virtual filesystem** | Scripts see an in-memory FS by default; no host filesystem access unless explicitly mounted |
545
545
  | **Network allowlist** | HTTP access is denied by default; each domain must be explicitly allowed |
546
546
  | **Resource limits** | Configurable caps on commands (10K), loop iterations (100K), function depth (100), output (10MB), input (10MB) |
@@ -12,7 +12,7 @@
12
12
  ## POSIX Shell Compliance
13
13
 
14
14
  Bashkit provides substantial compliance with IEEE Std 1003.1-2024 (POSIX.1-2024)
15
- Shell Command Language. See [specs/implementation-status.md](../specs/implementation-status.md)
15
+ Shell Command Language. See [specs/limitations.md](../specs/limitations.md)
16
16
  for detailed compliance status.
17
17
 
18
18
  | POSIX Category | Status |
@@ -479,5 +479,5 @@ Identified from eval analysis — all items now implemented:
479
479
 
480
480
  ## See Also
481
481
 
482
- - [specs/implementation-status.md](../../../specs/implementation-status.md) - Detailed implementation status
482
+ - [specs/limitations.md](../../../specs/limitations.md) - Intentional gaps and partial features
483
483
  - [specs/](../../../specs/) - Design specifications
@@ -671,6 +671,68 @@ let bash = Bash::builder()
671
671
  // Commits use virtual identity, never host ~/.gitconfig
672
672
  ```
673
673
 
674
+ ### SSH Security (TM-SSH-*)
675
+
676
+ The `ssh`/`scp`/`sftp` builtins (opt-in `ssh` feature) connect to remote hosts
677
+ through a sandboxed client. Connections are default-deny: callers must allowlist
678
+ each host via `SshConfig::allow(...)`, and credentials come only from the VFS —
679
+ never the host `~/.ssh/`.
680
+
681
+ | Threat | Attack Example | Mitigation | Status |
682
+ |--------|---------------|------------|--------|
683
+ | Unauthorized host access (TM-SSH-001) | Connect to arbitrary hosts | Host allowlist (default-deny) | MITIGATED |
684
+ | Credential leakage (TM-SSH-002) | Read host `~/.ssh/` keys | Keys from VFS only | MITIGATED |
685
+ | Session exhaustion (TM-SSH-003) | Open many concurrent sessions | Max concurrent sessions limit | MITIGATED |
686
+ | OOM via large response (TM-SSH-004) | Server sends huge output | Streaming size limit | MITIGATED |
687
+ | Connection hang (TM-SSH-005) | Server never responds | Configurable timeout | MITIGATED |
688
+ | MITM via unverified host key (TM-SSH-006) | Attacker intercepts connection | Strict host key checking (default: on) | MITIGATED |
689
+ | Non-standard port access (TM-SSH-007) | Connect to services on unexpected ports | Port allowlist | MITIGATED |
690
+ | Remote command injection (TM-SSH-008) | Inject via remote path in SCP | Shell-escape remote paths | MITIGATED |
691
+
692
+ ### TypeScript / ZapCode Security (TM-TS-*)
693
+
694
+ The `typescript` feature embeds the ZapCode runtime. Scripts run under
695
+ wall-clock, memory, allocation, and stack-depth limits, and all filesystem
696
+ access is bridged through Bashkit's VFS — never the host filesystem.
697
+
698
+ | Threat | Attack Example | Mitigation | Status |
699
+ |--------|---------------|------------|--------|
700
+ | Infinite loop (TM-TS-001) | `while (true) {}` | ZapCode time limit (default 30s) | MITIGATED |
701
+ | Memory exhaustion (TM-TS-002) | Large allocation | `max_memory` (64MB) + `max_allocations` (1M) | MITIGATED |
702
+ | Stack overflow (TM-TS-003) | Deep recursion | `max_stack_depth` (512) | MITIGATED |
703
+ | Allocation bomb (TM-TS-004) | Many small objects | `max_allocations` (1M) | MITIGATED |
704
+ | Real filesystem read (TM-TS-005) | Read host files via VFS | VFS bridge reads only Bashkit VFS | MITIGATED |
705
+ | VFS write escape (TM-TS-006) | Write to host | VFS bridge writes only Bashkit VFS | MITIGATED |
706
+ | Path traversal (TM-TS-007) | `../../etc/passwd` | Paths resolved within sandbox | MITIGATED |
707
+ | Host `/tmp` escape (TM-TS-011) | Operations escape to host | All operations through Bashkit VFS | MITIGATED |
708
+ | Limit bypass (TM-TS-018) | Evade Bashkit caps via TS | Command budget still enforced | MITIGATED |
709
+
710
+ Full per-threat coverage (TM-TS-001 … TM-TS-020), including error-isolation and
711
+ exit-code propagation cases, lives in the spec and the `threat_ts_*` tests.
712
+
713
+ ### Request Signing & Snapshot Integrity (TM-CRY-*, TM-SNAP-*)
714
+
715
+ The `bot-auth` request signer (Ed25519, RFC 9421) and the snapshot
716
+ serialization API both handle key material and integrity tags.
717
+
718
+ | Threat | Attack Example | Mitigation | Status |
719
+ |--------|---------------|------------|--------|
720
+ | Private key recovery (TM-CRY-001) | Heap/core-dump inspection of the Ed25519 seed | `BotAuthConfig` zeroizes the seed in `Drop`; debug output redacts key material | MITIGATED |
721
+ | Snapshot forgery (TM-SNAP-001) | Forge a valid digest using the public `BKSNAP01` tag | Keyed HMAC API (`to_bytes_keyed`/`from_bytes_keyed`) for tamper-evident snapshots | MITIGATED |
722
+
723
+ `from_bytes` uses `SHA-256(BKSNAP01 || payload)` (the tag is a public constant,
724
+ so it detects accidental corruption, not forgery); `from_bytes_keyed` uses
725
+ `HMAC-SHA256(secret_key, payload)` with a caller-provided key for authenticity.
726
+
727
+ ### RealFs Mount Security (TM-FS-*)
728
+
729
+ The `realfs` feature can mount real host directories into the VFS. Mounts are
730
+ read-only by default and gated by an allowlist.
731
+
732
+ | Threat | Attack Example | Mitigation | Status |
733
+ |--------|---------------|------------|--------|
734
+ | Permissive RealFs mount (TM-FS-013) | `mount_real_readonly_at("/", …)` exposes the whole host | Allowlist-first: broad roots (`/`, `/etc`, `/root`, `/home`, …) and any path component matching `.ssh`, `.aws`, `.kube`, `.docker`, `.gnupg`, `.gcloud` are refused unless explicitly allowlisted | MITIGATED |
735
+
674
736
  ### Unicode Security (TM-UNI-*)
675
737
 
676
738
  Unicode input from untrusted scripts creates attack surface across the parser, builtins,
@@ -789,8 +851,13 @@ All threats use stable IDs in the format `TM-<CATEGORY>-<NUMBER>`:
789
851
  | TM-INT | Internal Error Handling |
790
852
  | TM-LOG | Logging Security |
791
853
  | TM-GIT | Git Security |
854
+ | TM-SSH | SSH Security |
792
855
  | TM-PY | Python/Monty Security |
793
856
  | TM-SQL | SQLite Security |
857
+ | TM-TS | TypeScript/ZapCode Security |
858
+ | TM-CRY | Cryptography / Request Signing |
859
+ | TM-SNAP | Snapshot Integrity |
860
+ | TM-FS | RealFs Mount Security |
794
861
  | TM-UNI | Unicode Security |
795
862
 
796
863
  Full threat analysis: [`specs/threat-model.md`][spec]
@@ -0,0 +1,78 @@
1
+ //! Dump the canonical builtin inventory as JSON.
2
+ //!
3
+ //! Source generator for `specs/status/builtins.json` (the data behind the
4
+ //! site's builtins page). Run via `just regen-builtins`, which enables every
5
+ //! builtin-affecting feature so the inventory is complete; the
6
+ //! `builtins-drift` workflow regenerates and fails on diff.
7
+ //!
8
+ //! Attribution: builder-registered opt-ins (python, typescript, sqlite) are
9
+ //! discovered by diffing `builtin_names()` against a default `Bash`;
10
+ //! cfg-registered families are tagged from the table below, which must stay
11
+ //! in sync with the `#[cfg(feature = ...)]` blocks in
12
+ //! `interpreter::with_config`.
13
+
14
+ use bashkit::Bash;
15
+ use std::collections::BTreeMap;
16
+
17
+ /// Families registered by compile feature alone (present in a default-built
18
+ /// `Bash` whenever the feature is on).
19
+ const CFG_REGISTERED: &[(&str, &[&str])] = &[
20
+ ("jq", &["jq"]),
21
+ ("git", &["git"]),
22
+ ("ssh", &["ssh", "scp", "sftp"]),
23
+ ];
24
+
25
+ fn main() {
26
+ let base = Bash::new().builtin_names();
27
+ let mut feature_of: BTreeMap<String, String> = BTreeMap::new();
28
+
29
+ for (feature, names) in CFG_REGISTERED {
30
+ for name in *names {
31
+ if base.iter().any(|n| n == name) {
32
+ feature_of.insert((*name).to_string(), (*feature).to_string());
33
+ }
34
+ }
35
+ }
36
+
37
+ let mut tag_builder_optin = |names: Vec<String>, feature: &str| {
38
+ for name in names {
39
+ if !base.contains(&name) {
40
+ feature_of.insert(name, feature.to_string());
41
+ }
42
+ }
43
+ };
44
+
45
+ #[cfg(feature = "python")]
46
+ tag_builder_optin(Bash::builder().python().build().builtin_names(), "python");
47
+ #[cfg(feature = "typescript")]
48
+ tag_builder_optin(
49
+ Bash::builder().typescript().build().builtin_names(),
50
+ "typescript",
51
+ );
52
+ #[cfg(feature = "sqlite")]
53
+ tag_builder_optin(Bash::builder().sqlite().build().builtin_names(), "sqlite");
54
+ #[cfg(not(any(feature = "python", feature = "typescript", feature = "sqlite")))]
55
+ let _ = &mut tag_builder_optin;
56
+
57
+ let mut all: Vec<String> = base;
58
+ all.extend(feature_of.keys().cloned());
59
+ all.sort();
60
+ all.dedup();
61
+
62
+ let builtins: Vec<serde_json::Value> = all
63
+ .iter()
64
+ .map(|name| {
65
+ serde_json::json!({
66
+ "name": name,
67
+ "feature": feature_of.get(name),
68
+ })
69
+ })
70
+ .collect();
71
+
72
+ let doc = serde_json::json!({
73
+ "_generated": "just regen-builtins — do not edit by hand",
74
+ "count": builtins.len(),
75
+ "builtins": builtins,
76
+ });
77
+ println!("{}", serde_json::to_string_pretty(&doc).expect("serialize"));
78
+ }
@@ -3,7 +3,10 @@
3
3
  use std::collections::HashMap;
4
4
 
5
5
  use super::{AwkAction, AwkExpr, AwkFunctionDef, AwkOutputTarget, AwkPattern, AwkProgram, AwkRule};
6
- use crate::builtins::limits::AWK_MAX_PARSER_DEPTH as MAX_AWK_PARSER_DEPTH;
6
+ use crate::builtins::limits::{
7
+ AWK_MAX_MULTI_SUBSCRIPTS as MAX_AWK_MULTI_SUBSCRIPTS,
8
+ AWK_MAX_PARSER_DEPTH as MAX_AWK_PARSER_DEPTH,
9
+ };
7
10
  use crate::builtins::search_common::build_regex;
8
11
  use crate::error::{Error, Result};
9
12
 
@@ -1484,8 +1487,15 @@ impl<'a> AwkParser<'a> {
1484
1487
  self.pos += 1; // consume '['
1485
1488
  let mut subscripts = vec![self.parse_expression()?];
1486
1489
  self.skip_whitespace();
1487
- // Handle multi-subscript: arr[e1, e2, ...] joined by SUBSEP
1490
+ // THREAT[TM-DOS-027]: SUBSEP_CONCAT still evaluates recursively, so cap
1491
+ // attacker-controlled comma lists before folding them into a left-deep AST.
1488
1492
  while self.pos < self.input.len() && self.current_char().unwrap() == ',' {
1493
+ if subscripts.len() >= MAX_AWK_MULTI_SUBSCRIPTS {
1494
+ return Err(Error::Execution(format!(
1495
+ "awk: too many array subscripts (max {})",
1496
+ MAX_AWK_MULTI_SUBSCRIPTS
1497
+ )));
1498
+ }
1489
1499
  self.pos += 1; // consume ','
1490
1500
  self.skip_whitespace();
1491
1501
  subscripts.push(self.parse_expression()?);
@@ -7,6 +7,7 @@ use crate::builtins::limits::{
7
7
  AWK_MAX_GETLINE_CACHE_BYTES as MAX_GETLINE_CACHE_BYTES,
8
8
  AWK_MAX_GETLINE_CACHED_FILES as MAX_GETLINE_CACHED_FILES,
9
9
  AWK_MAX_GETLINE_FILE_BYTES as MAX_GETLINE_FILE_BYTES,
10
+ AWK_MAX_MULTI_SUBSCRIPTS,
10
11
  AWK_MAX_OUTPUT_BYTES as MAX_OUTPUT_BYTES,
11
12
  AWK_MAX_OUTPUT_TARGETS as MAX_OUTPUT_TARGETS,
12
13
  };
@@ -593,6 +594,19 @@ async fn test_awk_multi_subscript() {
593
594
  assert_eq!(result.stdout.trim(), "1");
594
595
  }
595
596
 
597
+ #[tokio::test]
598
+ async fn test_awk_rejects_too_many_multi_subscripts() {
599
+ // Regression: unbounded multi-subscript lists built a recursive SUBSEP_CONCAT AST.
600
+ let subscripts = std::iter::repeat_n("1", AWK_MAX_MULTI_SUBSCRIPTS + 1)
601
+ .collect::<Vec<_>>()
602
+ .join(",");
603
+ let program = format!("BEGIN {{ a[{subscripts}] = 1 }}");
604
+
605
+ let err = run_awk(&[&program], Some("")).await.unwrap_err();
606
+
607
+ assert!(err.to_string().contains("too many array subscripts"));
608
+ }
609
+
596
610
  #[tokio::test]
597
611
  async fn test_awk_subsep_defined() {
598
612
  // Issue #396.3: SUBSEP should be defined as \034