strands-shell 0.4.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.
Files changed (129) hide show
  1. strands_shell-0.6.0/.github/CODEOWNERS +1 -0
  2. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/workflows/ci.yml +12 -4
  3. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/workflows/release.yml +7 -7
  4. {strands_shell-0.4.0 → strands_shell-0.6.0}/Cargo.lock +65 -66
  5. {strands_shell-0.4.0 → strands_shell-0.6.0}/Cargo.toml +12 -5
  6. {strands_shell-0.4.0 → strands_shell-0.6.0}/PKG-INFO +1 -1
  7. {strands_shell-0.4.0 → strands_shell-0.6.0}/package.json +2 -2
  8. {strands_shell-0.4.0 → strands_shell-0.6.0}/pyproject.toml +1 -1
  9. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/alias.rs +15 -2
  10. strands_shell-0.6.0/src/builtins/builtin.rs +27 -0
  11. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/lua.rs +3 -3
  12. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/mod.rs +2 -0
  13. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/unset.rs +4 -2
  14. strands_shell-0.6.0/src/command_fallback.rs +233 -0
  15. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/grep.rs +186 -67
  16. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/head.rs +20 -1
  17. strands_shell-0.6.0/src/commands/rm.rs +108 -0
  18. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/tail.rs +2 -1
  19. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/exec.rs +388 -111
  20. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/lib.rs +2 -1
  21. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/os.rs +52 -3
  22. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/vfs_kernel.rs +173 -34
  23. strands_shell-0.6.0/tests/command_fallback.rs +905 -0
  24. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/curl_integration.rs +94 -35
  25. strands_shell-0.6.0/tests/custom_kernel.rs +569 -0
  26. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/mcp_integration.rs +38 -12
  27. strands_shell-0.6.0/tests/path_resolution_cost.rs +60 -0
  28. strands_shell-0.6.0/tests/python/test_api.py +155 -0
  29. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/shell_integration.rs +1561 -197
  30. strands_shell-0.6.0/tests/ts/api.types.ts +155 -0
  31. strands_shell-0.4.0/.github/CODEOWNERS +0 -1
  32. strands_shell-0.4.0/src/commands/rm.rs +0 -79
  33. strands_shell-0.4.0/tests/ts/api.types.ts +0 -88
  34. {strands_shell-0.4.0 → strands_shell-0.6.0}/.cargo/config.toml +0 -0
  35. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  36. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  37. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  38. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  39. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/actions/stamp-version/action.yml +0 -0
  40. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/dependabot.yml +0 -0
  41. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/scripts/group-release-notes.py +0 -0
  42. {strands_shell-0.4.0 → strands_shell-0.6.0}/.github/workflows/pr-title.yml +0 -0
  43. {strands_shell-0.4.0 → strands_shell-0.6.0}/.gitignore +0 -0
  44. {strands_shell-0.4.0 → strands_shell-0.6.0}/AGENTS.md +0 -0
  45. {strands_shell-0.4.0 → strands_shell-0.6.0}/CODE_OF_CONDUCT.md +0 -0
  46. {strands_shell-0.4.0 → strands_shell-0.6.0}/CONTRIBUTING.md +0 -0
  47. {strands_shell-0.4.0 → strands_shell-0.6.0}/LICENSE +0 -0
  48. {strands_shell-0.4.0 → strands_shell-0.6.0}/NOTICE +0 -0
  49. {strands_shell-0.4.0 → strands_shell-0.6.0}/README.md +0 -0
  50. {strands_shell-0.4.0 → strands_shell-0.6.0}/SECURITY.md +0 -0
  51. {strands_shell-0.4.0 → strands_shell-0.6.0}/build.rs +0 -0
  52. {strands_shell-0.4.0 → strands_shell-0.6.0}/index.d.ts +0 -0
  53. {strands_shell-0.4.0 → strands_shell-0.6.0}/index.js +0 -0
  54. {strands_shell-0.4.0 → strands_shell-0.6.0}/python/strands_shell/__init__.py +0 -0
  55. {strands_shell-0.4.0 → strands_shell-0.6.0}/scripts/build-wasm.sh +0 -0
  56. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/cd.rs +0 -0
  57. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/colon.rs +0 -0
  58. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/echo.rs +0 -0
  59. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/export.rs +0 -0
  60. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/find.rs +0 -0
  61. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/getopts.rs +0 -0
  62. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/hash.rs +0 -0
  63. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/local.rs +0 -0
  64. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/printf.rs +0 -0
  65. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/pwd.rs +0 -0
  66. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/read.rs +0 -0
  67. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/set.rs +0 -0
  68. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/shift.rs +0 -0
  69. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/test.rs +0 -0
  70. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/trap.rs +0 -0
  71. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/type_cmd.rs +0 -0
  72. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/umask.rs +0 -0
  73. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/wait.rs +0 -0
  74. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/builtins/xargs.rs +0 -0
  75. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/cli.rs +0 -0
  76. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/basename.rs +0 -0
  77. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/cat.rs +0 -0
  78. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/chmod.rs +0 -0
  79. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/cp.rs +0 -0
  80. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/curl.rs +0 -0
  81. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/cut.rs +0 -0
  82. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/date.rs +0 -0
  83. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/dirname.rs +0 -0
  84. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/echo.rs +0 -0
  85. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/env.rs +0 -0
  86. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/false.rs +0 -0
  87. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/jq.rs +0 -0
  88. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/ln.rs +0 -0
  89. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/ls.rs +0 -0
  90. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/mkdir.rs +0 -0
  91. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/mktemp.rs +0 -0
  92. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/mod.rs +0 -0
  93. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/mv.rs +0 -0
  94. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/pwd.rs +0 -0
  95. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/readlink.rs +0 -0
  96. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/rmdir.rs +0 -0
  97. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/sed.rs +0 -0
  98. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/sleep.rs +0 -0
  99. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/sort.rs +0 -0
  100. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/tee.rs +0 -0
  101. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/touch.rs +0 -0
  102. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/tr.rs +0 -0
  103. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/true.rs +0 -0
  104. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/uniq.rs +0 -0
  105. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/commands/wc.rs +0 -0
  106. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/io.rs +0 -0
  107. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/js.rs +0 -0
  108. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/main.rs +0 -0
  109. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/mcp.rs +0 -0
  110. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/mcp_client.rs +0 -0
  111. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/parser.rs +0 -0
  112. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/prelude.rs +0 -0
  113. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/python.rs +0 -0
  114. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/shell.rs +0 -0
  115. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/vfs.rs +0 -0
  116. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/vfs_config.rs +0 -0
  117. {strands_shell-0.4.0 → strands_shell-0.6.0}/src/wasm_main.rs +0 -0
  118. {strands_shell-0.4.0 → strands_shell-0.6.0}/strands-shell-macros/Cargo.toml +0 -0
  119. {strands_shell-0.4.0 → strands_shell-0.6.0}/strands-shell-macros/src/lib.rs +0 -0
  120. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/config.rs +0 -0
  121. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/js/test_bindings.mjs +0 -0
  122. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/js/test_builder.mjs +0 -0
  123. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/js/test_config.mjs +0 -0
  124. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/lua_integration.rs +0 -0
  125. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/python/test_bindings.py +0 -0
  126. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/python/test_builder.py +0 -0
  127. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/python/test_config.py +0 -0
  128. {strands_shell-0.4.0 → strands_shell-0.6.0}/tests/vfs_unit.rs +0 -0
  129. {strands_shell-0.4.0 → strands_shell-0.6.0}/tsconfig.json +0 -0
@@ -0,0 +1 @@
1
+ * @strands-agents/strands-box-maintainers
@@ -32,7 +32,7 @@ jobs:
32
32
  os: [ubuntu-latest, macos-latest, windows-latest]
33
33
  runs-on: ${{ matrix.os }}
34
34
  steps:
35
- - uses: actions/checkout@v6
35
+ - uses: actions/checkout@v7
36
36
  with:
37
37
  ref: ${{ inputs.ref }}
38
38
 
@@ -45,6 +45,14 @@ jobs:
45
45
  - name: cargo test
46
46
  run: cargo test --workspace --all-targets
47
47
 
48
+ # --all-targets skips doc tests, so run them on their own.
49
+ - name: cargo test (doc tests)
50
+ run: cargo test --workspace --doc
51
+
52
+ # The js worker unit tests sit behind the `node` feature.
53
+ - name: cargo test (node feature)
54
+ run: cargo test --lib --features node
55
+
48
56
  - name: cargo doc
49
57
  env:
50
58
  RUSTDOCFLAGS: -D warnings
@@ -62,7 +70,7 @@ jobs:
62
70
  python: ["3.10", "3.11", "3.12", "3.13", "3.14"]
63
71
  runs-on: ${{ matrix.os }}
64
72
  steps:
65
- - uses: actions/checkout@v6
73
+ - uses: actions/checkout@v7
66
74
  with:
67
75
  ref: ${{ inputs.ref }}
68
76
 
@@ -110,7 +118,7 @@ jobs:
110
118
  name: Security audit
111
119
  runs-on: ubuntu-latest
112
120
  steps:
113
- - uses: actions/checkout@v6
121
+ - uses: actions/checkout@v7
114
122
  with:
115
123
  ref: ${{ inputs.ref }}
116
124
 
@@ -153,7 +161,7 @@ jobs:
153
161
  node: ["20", "22", "24"]
154
162
  runs-on: ${{ matrix.os }}
155
163
  steps:
156
- - uses: actions/checkout@v6
164
+ - uses: actions/checkout@v7
157
165
  with:
158
166
  ref: ${{ inputs.ref }}
159
167
 
@@ -58,7 +58,7 @@ jobs:
58
58
  prev_tag: ${{ steps.scan.outputs.prev_tag }}
59
59
  new_tag: ${{ steps.scan.outputs.new_tag }}
60
60
  steps:
61
- - uses: actions/checkout@v6
61
+ - uses: actions/checkout@v7
62
62
  with:
63
63
  fetch-depth: 0
64
64
  fetch-tags: true
@@ -178,7 +178,7 @@ jobs:
178
178
  target: x86_64-pc-windows-msvc
179
179
  runs-on: ${{ matrix.os }}
180
180
  steps:
181
- - uses: actions/checkout@v6
181
+ - uses: actions/checkout@v7
182
182
  with:
183
183
  ref: ${{ needs.scan-commits.outputs.release_sha }}
184
184
 
@@ -213,7 +213,7 @@ jobs:
213
213
  name: Python sdist
214
214
  runs-on: ubuntu-latest
215
215
  steps:
216
- - uses: actions/checkout@v6
216
+ - uses: actions/checkout@v7
217
217
  with:
218
218
  ref: ${{ needs.scan-commits.outputs.release_sha }}
219
219
 
@@ -382,7 +382,7 @@ jobs:
382
382
  target: x86_64-pc-windows-msvc
383
383
  runs-on: ${{ matrix.os }}
384
384
  steps:
385
- - uses: actions/checkout@v6
385
+ - uses: actions/checkout@v7
386
386
  with:
387
387
  ref: ${{ needs.scan-commits.outputs.release_sha }}
388
388
 
@@ -448,7 +448,7 @@ jobs:
448
448
  needs: [scan-commits, node-builds]
449
449
  runs-on: ubuntu-latest
450
450
  steps:
451
- - uses: actions/checkout@v6
451
+ - uses: actions/checkout@v7
452
452
  with:
453
453
  ref: ${{ needs.scan-commits.outputs.release_sha }}
454
454
  persist-credentials: false
@@ -572,7 +572,7 @@ jobs:
572
572
  permissions:
573
573
  contents: read
574
574
  steps:
575
- - uses: actions/checkout@v6
575
+ - uses: actions/checkout@v7
576
576
  with:
577
577
  ref: ${{ needs.scan-commits.outputs.release_sha }}
578
578
  fetch-depth: 0
@@ -661,7 +661,7 @@ jobs:
661
661
  permissions:
662
662
  contents: write
663
663
  steps:
664
- - uses: actions/checkout@v6
664
+ - uses: actions/checkout@v7
665
665
  with:
666
666
  ref: ${{ needs.scan-commits.outputs.release_sha }}
667
667
  # This job creates the tag, so keep the GITHUB_TOKEN in git config
@@ -78,7 +78,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667"
78
78
  dependencies = [
79
79
  "proc-macro2",
80
80
  "quote",
81
- "syn 3.0.2",
81
+ "syn 3.0.9",
82
82
  ]
83
83
 
84
84
  [[package]]
@@ -214,9 +214,9 @@ dependencies = [
214
214
 
215
215
  [[package]]
216
216
  name = "clap"
217
- version = "4.6.6"
217
+ version = "4.6.7"
218
218
  source = "registry+https://github.com/rust-lang/crates.io-index"
219
- checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca"
219
+ checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946"
220
220
  dependencies = [
221
221
  "clap_builder",
222
222
  "clap_derive",
@@ -224,9 +224,9 @@ dependencies = [
224
224
 
225
225
  [[package]]
226
226
  name = "clap_builder"
227
- version = "4.6.6"
227
+ version = "4.6.7"
228
228
  source = "registry+https://github.com/rust-lang/crates.io-index"
229
- checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889"
229
+ checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d"
230
230
  dependencies = [
231
231
  "anstream",
232
232
  "anstyle",
@@ -236,14 +236,14 @@ dependencies = [
236
236
 
237
237
  [[package]]
238
238
  name = "clap_derive"
239
- version = "4.6.4"
239
+ version = "4.6.7"
240
240
  source = "registry+https://github.com/rust-lang/crates.io-index"
241
- checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061"
241
+ checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0"
242
242
  dependencies = [
243
243
  "heck",
244
244
  "proc-macro2",
245
245
  "quote",
246
- "syn 3.0.2",
246
+ "syn 3.0.9",
247
247
  ]
248
248
 
249
249
  [[package]]
@@ -746,9 +746,9 @@ dependencies = [
746
746
 
747
747
  [[package]]
748
748
  name = "inventory"
749
- version = "0.3.24"
749
+ version = "0.3.25"
750
750
  source = "registry+https://github.com/rust-lang/crates.io-index"
751
- checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b"
751
+ checksum = "6928282826c822ad91bf1c9a1cb90a30ba1c26770749929b4656cd6be829cd7c"
752
752
  dependencies = [
753
753
  "rustversion",
754
754
  ]
@@ -880,9 +880,9 @@ checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
880
880
 
881
881
  [[package]]
882
882
  name = "lua-src"
883
- version = "551.0.1"
883
+ version = "551.0.2"
884
884
  source = "registry+https://github.com/rust-lang/crates.io-index"
885
- checksum = "087097f9936a7d819bda525b32d6e96f9c54f3d35ff23ff72fc0c1697d2127db"
885
+ checksum = "d400ffef0e3d4d29287092bdc5a276d0bf468b2c69709d5bab0d469312d9f947"
886
886
  dependencies = [
887
887
  "cc",
888
888
  ]
@@ -928,9 +928,9 @@ dependencies = [
928
928
 
929
929
  [[package]]
930
930
  name = "mlua"
931
- version = "0.12.1"
931
+ version = "0.12.2"
932
932
  source = "registry+https://github.com/rust-lang/crates.io-index"
933
- checksum = "d96e5d00f19d8c46c71ceaced99593b90c31c57aa1fe2cb3e93a8b1698eedba9"
933
+ checksum = "7a7ae6b65bf54b7fdd4cf5b6f44f60862350ebf3fe3779b3a9cc005e7fa14f81"
934
934
  dependencies = [
935
935
  "bstr",
936
936
  "either",
@@ -944,9 +944,9 @@ dependencies = [
944
944
 
945
945
  [[package]]
946
946
  name = "mlua-sys"
947
- version = "0.12.0"
947
+ version = "0.13.0"
948
948
  source = "registry+https://github.com/rust-lang/crates.io-index"
949
- checksum = "b806d7ade031f5d6607eae3e283fb034cb795a76247dd0d1ba753c8c42debccf"
949
+ checksum = "1631cda17bd6486410ab751d91f5fd4484f441589278cdad879eb3afc721a285"
950
950
  dependencies = [
951
951
  "cc",
952
952
  "cfg-if",
@@ -958,9 +958,9 @@ dependencies = [
958
958
 
959
959
  [[package]]
960
960
  name = "napi"
961
- version = "3.12.2"
961
+ version = "3.15.0"
962
962
  source = "registry+https://github.com/rust-lang/crates.io-index"
963
- checksum = "58c5f4d5375213fdb7be2655e152386e82f026f9a5ba36a75556e11359aafe09"
963
+ checksum = "6a746ad50efbfb632ade1de4025519a477decbbd798cea1a6ac41d7c44f80083"
964
964
  dependencies = [
965
965
  "bitflags",
966
966
  "ctor",
@@ -975,42 +975,42 @@ dependencies = [
975
975
 
976
976
  [[package]]
977
977
  name = "napi-build"
978
- version = "2.4.1"
978
+ version = "2.6.0"
979
979
  source = "registry+https://github.com/rust-lang/crates.io-index"
980
- checksum = "60fdf9b392c50e7c4170fa633bd909490ed7835cea4c046776d1a4dd8d2ae0ab"
980
+ checksum = "b899b545d3aa6dca985939059f258c5488d34e4ecf39c274e20009748f4b846d"
981
981
 
982
982
  [[package]]
983
983
  name = "napi-derive"
984
- version = "3.6.9"
984
+ version = "3.6.13"
985
985
  source = "registry+https://github.com/rust-lang/crates.io-index"
986
- checksum = "6b1d232c24dc6754979b27efdf2047a5849efc7c92c1245de87e6bedbb9f5c3c"
986
+ checksum = "3ff48271a0f61abb83f3e2d1989fa71169143db95f6f948c3a8903961f2855dc"
987
987
  dependencies = [
988
988
  "convert_case",
989
989
  "ctor",
990
990
  "napi-derive-backend",
991
991
  "proc-macro2",
992
992
  "quote",
993
- "syn 2.0.119",
993
+ "syn 3.0.9",
994
994
  ]
995
995
 
996
996
  [[package]]
997
997
  name = "napi-derive-backend"
998
- version = "6.1.4"
998
+ version = "6.1.6"
999
999
  source = "registry+https://github.com/rust-lang/crates.io-index"
1000
- checksum = "fd6856fe1686867da90ed0dc292d7c0c87a695eb7c578b913360f33619ee01e3"
1000
+ checksum = "f2639052c5aff9956a21d7b6202fc61d5e89c5f19c72d289b7a0641ea94e8159"
1001
1001
  dependencies = [
1002
1002
  "convert_case",
1003
1003
  "proc-macro2",
1004
1004
  "quote",
1005
1005
  "semver",
1006
- "syn 2.0.119",
1006
+ "syn 3.0.9",
1007
1007
  ]
1008
1008
 
1009
1009
  [[package]]
1010
1010
  name = "napi-sys"
1011
- version = "3.3.0"
1011
+ version = "3.4.1"
1012
1012
  source = "registry+https://github.com/rust-lang/crates.io-index"
1013
- checksum = "85fbf1fa9f1babfe396d74bbbf52b3643770243e8f5b0b46715d4caf7f0dfc9a"
1013
+ checksum = "d153beb7d5c973f4b9395be8a83054a28968b61188f1dd1a2cc2321af22daea2"
1014
1014
  dependencies = [
1015
1015
  "libloading",
1016
1016
  ]
@@ -1139,9 +1139,9 @@ dependencies = [
1139
1139
 
1140
1140
  [[package]]
1141
1141
  name = "pyo3"
1142
- version = "0.29.2"
1142
+ version = "0.30.1"
1143
1143
  source = "registry+https://github.com/rust-lang/crates.io-index"
1144
- checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
1144
+ checksum = "229ca13b8a15bb0d1487b81ab975bfcd97513416499a8312011b6036e42e0de4"
1145
1145
  dependencies = [
1146
1146
  "libc",
1147
1147
  "once_cell",
@@ -1153,18 +1153,18 @@ dependencies = [
1153
1153
 
1154
1154
  [[package]]
1155
1155
  name = "pyo3-build-config"
1156
- version = "0.29.2"
1156
+ version = "0.30.1"
1157
1157
  source = "registry+https://github.com/rust-lang/crates.io-index"
1158
- checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
1158
+ checksum = "70130e2b6dd1ee589a8788026a429561ca5c40fa7a2fa7914c2282eddae24700"
1159
1159
  dependencies = [
1160
1160
  "target-lexicon",
1161
1161
  ]
1162
1162
 
1163
1163
  [[package]]
1164
1164
  name = "pyo3-ffi"
1165
- version = "0.29.2"
1165
+ version = "0.30.1"
1166
1166
  source = "registry+https://github.com/rust-lang/crates.io-index"
1167
- checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
1167
+ checksum = "5e7ff73c555c286d212d4ce7e5fbda845a973c4f61bd5f160f5f2c3c2a04d1c4"
1168
1168
  dependencies = [
1169
1169
  "libc",
1170
1170
  "pyo3-build-config",
@@ -1172,26 +1172,26 @@ dependencies = [
1172
1172
 
1173
1173
  [[package]]
1174
1174
  name = "pyo3-macros"
1175
- version = "0.29.2"
1175
+ version = "0.30.1"
1176
1176
  source = "registry+https://github.com/rust-lang/crates.io-index"
1177
- checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
1177
+ checksum = "c46d2e5862c7bb8207e3b639f713dda3c499933444784154c11d013c5a691b60"
1178
1178
  dependencies = [
1179
1179
  "proc-macro2",
1180
1180
  "pyo3-macros-backend",
1181
1181
  "quote",
1182
- "syn 2.0.119",
1182
+ "syn 3.0.9",
1183
1183
  ]
1184
1184
 
1185
1185
  [[package]]
1186
1186
  name = "pyo3-macros-backend"
1187
- version = "0.29.2"
1187
+ version = "0.30.1"
1188
1188
  source = "registry+https://github.com/rust-lang/crates.io-index"
1189
- checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
1189
+ checksum = "38b89f066f2ae72a2aef52d1537ca2fcd104440ebfadee06e97aa90738a25b9b"
1190
1190
  dependencies = [
1191
1191
  "heck",
1192
1192
  "proc-macro2",
1193
1193
  "quote",
1194
- "syn 2.0.119",
1194
+ "syn 3.0.9",
1195
1195
  ]
1196
1196
 
1197
1197
  [[package]]
@@ -1407,9 +1407,9 @@ checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
1407
1407
 
1408
1408
  [[package]]
1409
1409
  name = "rustls"
1410
- version = "0.23.40"
1410
+ version = "0.23.46"
1411
1411
  source = "registry+https://github.com/rust-lang/crates.io-index"
1412
- checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b"
1412
+ checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf"
1413
1413
  dependencies = [
1414
1414
  "once_cell",
1415
1415
  "ring",
@@ -1431,9 +1431,9 @@ dependencies = [
1431
1431
 
1432
1432
  [[package]]
1433
1433
  name = "rustls-webpki"
1434
- version = "0.103.13"
1434
+ version = "0.103.15"
1435
1435
  source = "registry+https://github.com/rust-lang/crates.io-index"
1436
- checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
1436
+ checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2"
1437
1437
  dependencies = [
1438
1438
  "ring",
1439
1439
  "rustls-pki-types",
@@ -1448,12 +1448,11 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
1448
1448
 
1449
1449
  [[package]]
1450
1450
  name = "rustyline"
1451
- version = "18.0.0"
1451
+ version = "19.0.0"
1452
1452
  source = "registry+https://github.com/rust-lang/crates.io-index"
1453
- checksum = "4a990b25f351b25139ddc7f21ee3f6f56f86d6846b74ac8fad3a719a287cd4a0"
1453
+ checksum = "56e1d6bd81c2d5feafd2419138df9183c45a10a492c4e873b8b0acb8eb2b549e"
1454
1454
  dependencies = [
1455
1455
  "bitflags",
1456
- "cfg-if",
1457
1456
  "clipboard-win",
1458
1457
  "home",
1459
1458
  "libc",
@@ -1512,14 +1511,14 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
1512
1511
  dependencies = [
1513
1512
  "proc-macro2",
1514
1513
  "quote",
1515
- "syn 3.0.2",
1514
+ "syn 3.0.9",
1516
1515
  ]
1517
1516
 
1518
1517
  [[package]]
1519
1518
  name = "serde_json"
1520
- version = "1.0.151"
1519
+ version = "1.0.154"
1521
1520
  source = "registry+https://github.com/rust-lang/crates.io-index"
1522
- checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
1521
+ checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6"
1523
1522
  dependencies = [
1524
1523
  "itoa",
1525
1524
  "memchr",
@@ -1541,9 +1540,9 @@ dependencies = [
1541
1540
 
1542
1541
  [[package]]
1543
1542
  name = "serde_spanned"
1544
- version = "1.1.1"
1543
+ version = "1.1.2"
1545
1544
  source = "registry+https://github.com/rust-lang/crates.io-index"
1546
- checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
1545
+ checksum = "4e7523beb55eece201a2356bee0bbca0d1ab466c14c07703b2e0ee6d42cb0c2c"
1547
1546
  dependencies = [
1548
1547
  "serde_core",
1549
1548
  ]
@@ -1606,7 +1605,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
1606
1605
 
1607
1606
  [[package]]
1608
1607
  name = "strands-shell"
1609
- version = "0.4.0"
1608
+ version = "0.6.0"
1610
1609
  dependencies = [
1611
1610
  "async-trait",
1612
1611
  "axum",
@@ -1640,7 +1639,7 @@ version = "0.1.0"
1640
1639
  dependencies = [
1641
1640
  "proc-macro2",
1642
1641
  "quote",
1643
- "syn 3.0.2",
1642
+ "syn 3.0.9",
1644
1643
  ]
1645
1644
 
1646
1645
  [[package]]
@@ -1668,9 +1667,9 @@ dependencies = [
1668
1667
 
1669
1668
  [[package]]
1670
1669
  name = "syn"
1671
- version = "3.0.2"
1670
+ version = "3.0.9"
1672
1671
  source = "registry+https://github.com/rust-lang/crates.io-index"
1673
- checksum = "a207d6d6a2b7fc470b80443726053f18a2481b7e1eee970597051596567987a3"
1672
+ checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b"
1674
1673
  dependencies = [
1675
1674
  "proc-macro2",
1676
1675
  "quote",
@@ -1750,9 +1749,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
1750
1749
 
1751
1750
  [[package]]
1752
1751
  name = "tokio"
1753
- version = "1.53.1"
1752
+ version = "1.54.1"
1754
1753
  source = "registry+https://github.com/rust-lang/crates.io-index"
1755
- checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed"
1754
+ checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3"
1756
1755
  dependencies = [
1757
1756
  "bytes",
1758
1757
  "libc",
@@ -1787,9 +1786,9 @@ dependencies = [
1787
1786
 
1788
1787
  [[package]]
1789
1788
  name = "toml"
1790
- version = "1.1.2+spec-1.1.0"
1789
+ version = "1.1.8+spec-1.1.0"
1791
1790
  source = "registry+https://github.com/rust-lang/crates.io-index"
1792
- checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee"
1791
+ checksum = "20489e00e4d8741d6be680764cc12e270655e375a20d1011e844a9c3379e678d"
1793
1792
  dependencies = [
1794
1793
  "indexmap",
1795
1794
  "serde_core",
@@ -1802,27 +1801,27 @@ dependencies = [
1802
1801
 
1803
1802
  [[package]]
1804
1803
  name = "toml_datetime"
1805
- version = "1.1.1+spec-1.1.0"
1804
+ version = "1.1.2+spec-1.1.0"
1806
1805
  source = "registry+https://github.com/rust-lang/crates.io-index"
1807
- checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7"
1806
+ checksum = "2b86d767906c6c42421dcba507eb9d203e779497710a47782a224bb871653053"
1808
1807
  dependencies = [
1809
1808
  "serde_core",
1810
1809
  ]
1811
1810
 
1812
1811
  [[package]]
1813
1812
  name = "toml_parser"
1814
- version = "1.1.2+spec-1.1.0"
1813
+ version = "1.1.5+spec-1.1.0"
1815
1814
  source = "registry+https://github.com/rust-lang/crates.io-index"
1816
- checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
1815
+ checksum = "baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c"
1817
1816
  dependencies = [
1818
1817
  "winnow",
1819
1818
  ]
1820
1819
 
1821
1820
  [[package]]
1822
1821
  name = "toml_writer"
1823
- version = "1.1.1+spec-1.1.0"
1822
+ version = "1.1.3+spec-1.1.0"
1824
1823
  source = "registry+https://github.com/rust-lang/crates.io-index"
1825
- checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db"
1824
+ checksum = "06bdbd8cfc056b8d2e2e85f29b56a3bdbecb527cef81eb39e3e7b98af4652770"
1826
1825
 
1827
1826
  [[package]]
1828
1827
  name = "tower"
@@ -2,7 +2,7 @@
2
2
  name = "strands-shell"
3
3
  # Placeholder — the real version comes from the release git tag, stamped at
4
4
  # build time by .github/actions/stamp-version. Do not bump this by hand.
5
- version = "0.4.0"
5
+ version = "0.6.0"
6
6
  edition = "2024"
7
7
  description = "A virtual shell sandbox for AI agents"
8
8
  license = "Apache-2.0"
@@ -17,6 +17,7 @@ crate-type = ["cdylib", "rlib"]
17
17
  [[bin]]
18
18
  name = "strands-shell"
19
19
  path = "src/main.rs"
20
+ required-features = ["cli"]
20
21
 
21
22
  [[bin]]
22
23
  name = "strands-shell-wasm"
@@ -24,7 +25,9 @@ path = "src/wasm_main.rs"
24
25
  required-features = ["wasm"]
25
26
 
26
27
  [features]
27
- python = ["pyo3"]
28
+ default = ["cli"]
29
+ cli = ["dep:clap", "dep:rustyline"]
30
+ python = ["pyo3", "cli"]
28
31
  node = ["napi", "napi-derive", "napi-build"]
29
32
  wasm = []
30
33
 
@@ -32,7 +35,7 @@ wasm = []
32
35
  [dependencies]
33
36
  async-trait = "0.1"
34
37
  bytes = "1"
35
- clap = { version = "4", features = ["derive"] }
38
+ clap = { version = "4", features = ["derive"], optional = true }
36
39
  lexopt = "0.3"
37
40
  strands-shell-macros = { path = "strands-shell-macros", version = "0.1.0" }
38
41
  regex = "1"
@@ -49,9 +52,9 @@ jaq-json = { version = "1", features = ["serde_json"] }
49
52
  inventory = "0.3"
50
53
  napi = { version = "3", features = ["napi9", "tokio_rt"], optional = true }
51
54
  napi-derive = { version = "3", optional = true }
52
- pyo3 = { version = "0.29", features = ["extension-module"], optional = true }
55
+ pyo3 = { version = "0.30", features = ["extension-module"], optional = true }
53
56
  reqwest = { version = "0.12", features = ["rustls-tls"], default-features = false }
54
- rustyline = "18"
57
+ rustyline = { version = "19", optional = true }
55
58
  tokio = { version = "1", features = ["rt", "macros", "sync", "io-util", "io-std", "fs", "time", "process"] }
56
59
 
57
60
  # ----- WASM dependencies -----
@@ -70,6 +73,10 @@ members = ["strands-shell-macros"]
70
73
  [dev-dependencies]
71
74
  axum = "0.8"
72
75
 
76
+ [[test]]
77
+ name = "mcp_integration"
78
+ required-features = ["cli"]
79
+
73
80
  # napi-build stays on 2.x — the build-script helper is versioned
74
81
  # independently of the napi/napi-derive runtime crates and has no 3.x release
75
82
  # (latest is 2.3.2, which is what pairs with napi 3.x).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: strands-shell
3
- Version: 0.4.0
3
+ Version: 0.6.0
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strands-agents/shell",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Strands Shell — a virtual shell sandbox for AI agents (Node.js bindings)",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -40,6 +40,6 @@
40
40
  },
41
41
  "devDependencies": {
42
42
  "@napi-rs/cli": "^3.7.2",
43
- "typescript": "^6.0.3"
43
+ "typescript": "^7.0.2"
44
44
  }
45
45
  }
@@ -6,7 +6,7 @@ build-backend = "maturin"
6
6
  name = "strands-shell"
7
7
  # Placeholder — the real version comes from the release git tag, stamped at
8
8
  # build time by .github/actions/stamp-version. Do not bump this by hand.
9
- version = "0.4.0"
9
+ version = "0.6.0"
10
10
  description = "A virtual shell for AI agents"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.10"
@@ -43,12 +43,25 @@ pub fn builtin_unalias<'a>(
43
43
  args: &'a [String],
44
44
  ) -> Pin<Box<dyn Future<Output = CommandResult> + 'a>> {
45
45
  Box::pin(async move {
46
- if args.first().map(|s| s.as_str()) == Some("-a") {
46
+ let mut names = args;
47
+ let mut all = false;
48
+ while let Some(first) = names.first() {
49
+ match first.as_str() {
50
+ "-a" => all = true,
51
+ "--" => {
52
+ names = &names[1..];
53
+ break;
54
+ }
55
+ _ => break,
56
+ }
57
+ names = &names[1..];
58
+ }
59
+ if all {
47
60
  proc.clear_aliases();
48
61
  return Ok(0);
49
62
  }
50
63
  let mut ret = 0;
51
- for arg in args {
64
+ for arg in names {
52
65
  if !proc.unset_alias(arg) {
53
66
  proc.err_msg(&format!("strands-shell: unalias: {}: not found", arg));
54
67
  ret = 1;
@@ -0,0 +1,27 @@
1
+ use std::future::Future;
2
+ use std::pin::Pin;
3
+
4
+ use crate::commands::CommandResult;
5
+ use crate::os::{Kernel, Process};
6
+
7
+ /// Run the named builtin, bypassing any shell function of the same name.
8
+ pub fn builtin_builtin<'a>(
9
+ os: &'a dyn Kernel,
10
+ proc: &'a mut Process,
11
+ args: &'a [String],
12
+ ) -> Pin<Box<dyn Future<Output = CommandResult> + 'a>> {
13
+ Box::pin(async move {
14
+ let Some(name) = args.first() else {
15
+ return Ok(0);
16
+ };
17
+ match super::lookup(name) {
18
+ Some(f) => f(os, proc, &args[1..]).await,
19
+ None => {
20
+ proc.err_msg(&format!(
21
+ "strands-shell: builtin: {name}: not a shell builtin"
22
+ ));
23
+ Ok(1)
24
+ }
25
+ }
26
+ })
27
+ }
@@ -328,7 +328,7 @@ pub async fn repl_loop(
328
328
  0
329
329
  }
330
330
 
331
- #[cfg(not(target_arch = "wasm32"))]
331
+ #[cfg(all(not(target_arch = "wasm32"), feature = "cli"))]
332
332
  async fn run_repl(_os: &dyn Kernel, proc: &mut Process) -> CommandResult {
333
333
  let stdout_buf: Rc<RefCell<Vec<u8>>> = Rc::new(RefCell::new(Vec::new()));
334
334
  let stderr_buf: Rc<RefCell<Vec<u8>>> = Rc::new(RefCell::new(Vec::new()));
@@ -361,14 +361,14 @@ async fn run_repl(_os: &dyn Kernel, proc: &mut Process) -> CommandResult {
361
361
  Ok(code)
362
362
  }
363
363
 
364
- #[cfg(target_arch = "wasm32")]
364
+ #[cfg(any(target_arch = "wasm32", not(feature = "cli")))]
365
365
  async fn run_repl(_os: &dyn Kernel, proc: &mut Process) -> CommandResult {
366
366
  let stdout_buf: Rc<RefCell<Vec<u8>>> = Rc::new(RefCell::new(Vec::new()));
367
367
  let stderr_buf: Rc<RefCell<Vec<u8>>> = Rc::new(RefCell::new(Vec::new()));
368
368
 
369
369
  let lua = setup_lua_vm(proc, &[], "", &stdout_buf, &stderr_buf)?;
370
370
 
371
- // Simple line-based REPL without rustyline (no terminal features on WASM)
371
+ // Simple line-based REPL without rustyline (WASM, or a build without the `cli` feature)
372
372
  let mut read_line = |prompt: &str| -> Option<String> {
373
373
  use std::io::Write;
374
374
  let _ = std::io::stdout().write_all(prompt.as_bytes());