Skip to content

chore: remove abandoned wasm TypeScript-to-Python experiment#2838

Open
yonib05 wants to merge 3 commits into
strands-agents:mainfrom
yonib05:chore/remove-wasm-experiment
Open

chore: remove abandoned wasm TypeScript-to-Python experiment#2838
yonib05 wants to merge 3 commits into
strands-agents:mainfrom
yonib05:chore/remove-wasm-experiment

Conversation

@yonib05

@yonib05 yonib05 commented Jun 16, 2026

Copy link
Copy Markdown
Member

Description

We trialed compiling the TypeScript SDK to other languages via WebAssembly, and have decided not to pursue that direction. This removes the experiment from the monorepo.

Deleted wholesale:

  • strands-wasm/ — WASM component bindings
  • strands-py-wasm/ — Python host/bridge for WASM components
  • wit/ — WebAssembly Interface Types definitions (the WIT-to-bindings pipeline only ever fed this experiment; strands-ts imports nothing generated from it)
  • .github/workflows/wasm-py-check.yml and .github/workflows/python-wasm-pypi-publish-on-release.yml

Surgical edits:

  • strandly CLI (strandly/src/cli.ts): dropped the --wasm/--py layer flags, the generate (WIT codegen) and validate commands, the Python-venv helpers (py, installPyWasm), and wasm build/check/clean steps. It is now a TypeScript-focused dev CLI.
  • Root pyproject.toml: removed componentize-py and the forked wasmtime dependency plus the py-wasm integration-test extras, and dropped the ruff/pyright include paths that targeted strands-py-wasm. strands-py is self-contained via hatch and is unaffected.
  • CI (ci.yml, typescript-pr-and-push.yml, typescript-integration-test.yml): removed wasm/wit path filters and the call-py-check job.
  • Config/docs: package.json workspace, package-lock.json (regenerated to prune the wasm dependency trees), .github/dependabot.yml, .gitignore, .husky/pre-commit, root README.md, AGENTS.md, and strands-ts/AGENTS.md.

Related Issues

Type of Change

Other: removal of an abandoned experiment / repo cleanup

Testing

Verified locally with a clean install:

  • npm install — regenerates package-lock.json with the wasm dependency trees (componentize-js, jco, wasmtime, the strands-wasm workspace) fully pruned; no residual wasm references remain.
  • npm run build (strands-ts) — passes.
  • strandly CLI exercised end to end: --help shows the trimmed command set, strandly check runs the full TS type-check (src + integ) with no errors, strandly fmt works.
  • The .husky/pre-commit hook (build + test suite with coverage + lint + format check) passes.

This is otherwise a deletion-only change with no new runtime code; the strandly CLI rewrite only delegates to existing, unchanged strands-ts npm scripts.

Checklist

  • I have read the CONTRIBUTING document
  • I have reviewed and understand every line of code in this PR
  • My change is focused and reasonably small
  • I have added any necessary tests (n/a — deletion only)
  • I have updated the documentation accordingly
  • My changes generate no new warnings

Drop the strands-wasm, strands-py-wasm, and wit packages along with the
WIT-to-bindings pipeline. Strip the wasm/WIT/Python-venv layers from the
strandly CLI, leaving a TypeScript-focused dev tool, and remove the
wasm-only CI workflows, dependabot entry, and doc references.

The root pyproject.toml's ruff/pyright config and componentize-py and
wasmtime dependencies only ever served strands-py-wasm; strands-py is
self-contained via hatch, so those are trimmed too.
@github-actions github-actions Bot added size/xl chore Maintenance tasks, dependency updates, CI changes, refactoring with no user-facing impact area-community Related to community and contributor health typescript Pull requests that update typescript code strands-running labels Jun 16, 2026
@codecov

codecov Bot commented Jun 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

Copy link
Copy Markdown
Contributor

Assessment: Approve

Clean, well-scoped deletion of the abandoned WASM experiment. I verified the removal is complete — there are no dangling references to strands-wasm/, strands-py-wasm/, or wit/ anywhere in code, configs, CI, or docs, the removed workflows aren't referenced elsewhere, and the strandly CLI rewrite drops all dead imports/symbols cleanly while every npm script it now delegates to exists. No public API surface is touched, so API bar-raising review is N/A.

Review notes
  • Lockfile: The only real follow-up — package-lock.json still carries ~54 orphaned @bytecodealliance/* / componentize-js entries from the removed workspace. You already flagged this; a clean npm install regen before merge keeps main consistent.
  • CLI clean(): Minor, pre-existing — npm run clean --workspaces warns (caught) because strandly has no clean script. Optional --if-present cleanup.
  • pyproject.toml / docs / CI: All edits are consistent with the deletions; ruff/pyright include paths and dependabot/workspace entries correctly removed.

Nicely surgical cleanup — the line-by-line CLI trim is easy to follow.

Comment thread strandly/src/cli.ts
run(`npx prettier ${opts?.check ? '--check' : '--write'} 'strands-ts/**/*.ts' --ignore-path .gitignore`)
}

function clean(): void {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue: clean() calls npm run clean --workspaces, but strandly has no clean script (only strands-ts does). npm run --workspaces without --if-present exits non-zero when a workspace is missing the script — though the surrounding try/catch downgrades it to a warning, so it's non-fatal. This is pre-existing behavior (unchanged by this PR aside from dropping the rm -rf .venv strands-py-wasm/target line), so not blocking.

Suggestion: Optional follow-up — add --if-present to make the intent explicit and silence the spurious warning.

Prune the wasm dependency trees (componentize-js, jco, wasmtime, the
strands-wasm workspace) that npm resolves out now that the packages are
gone, and recompute dev flags.
strandly has no clean script, so 'npm run clean --workspaces' errored
and was swallowed by a try/catch. --if-present skips workspaces without
the script, dropping the warn-and-continue wrapper.
@github-actions

Copy link
Copy Markdown
Contributor

Re-reviewed after fbbb4ce (chore: regenerate package-lock.json after wasm removal)

The regenerated lockfile fully resolves the consistency concern from my earlier review:

  • The commit touches only package-lock.json (−2064/+126).
  • All orphaned @bytecodealliance/*, componentize-js, and @chaynabors/* entries from the removed strands-wasm workspace are gone.
  • The only remaining wasm-named package is @tybys/wasm-util, which is a legitimate transitive dependency of @napi-rs/wasm-runtime (unrelated to the experiment) — correctly retained.
  • Verified internal consistency: every direct dependency resolves (root 2/2, strandly 3/3, strands-ts 46/46, zero missing), workspace entries are now just strandly + strands-ts, and there are no strands-wasm/strands-py-wasm remnants.

Assessment: Approve. The only blocking item from my first pass is addressed. The remaining clean() --if-present note stays an optional, non-blocking follow-up. Thanks for the quick turnaround!

@yonib05

yonib05 commented Jun 17, 2026

Copy link
Copy Markdown
Member Author

Thanks for the review. Both follow-ups are addressed:

  • Lockfile: regenerated with a clean npm install in fbbb4ce — the orphaned @bytecodealliance/* / componentize-js entries from the removed workspace are pruned, no wasm references remain.
  • CLI clean(): switched to npm run clean --workspaces --if-present in 503b260, which skips strandly (no clean script) cleanly and drops the warn-and-continue wrapper.

@github-actions

Copy link
Copy Markdown
Contributor

Re-reviewed after 503b260 (chore(strandly): use --if-present for workspace clean)

The clean() follow-up is resolved exactly as suggested:

  • clean() now runs npm run clean --workspaces --if-present and the warn-and-continue try/catch wrapper is removed.
  • Verified the behavior: strands-ts has a clean script (rm -rf node_modules dist) so it still executes, while strandly has no clean script and --if-present now skips it cleanly without a non-zero exit.
  • Dropping the wrapper is the right call — it only existed to swallow the spurious missing-script warning. With that gone, clean() now surfaces genuine failures through the shared run() helper (which prints the failed command and exits with its status), consistent with every other CLI command.

Assessment: Approve. Both follow-ups from my reviews (lockfile regeneration + clean()) are now fully addressed, and the change remains a clean, well-scoped deletion. 🚢

@yonib05

yonib05 commented Jun 17, 2026

Copy link
Copy Markdown
Member Author

A note on the red checks — all of them are unrelated to the changes in this PR:

  • check-access-and-checkout (Python integration tests): failed on a transient ConnectionResetError: [Errno 104] Connection reset by peer / RuntimeError: Event loop is closed in a cedar-authorization integ test. This PR removes no Python SDK code. I've re-triggered the run.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-community Related to community and contributor health chore Maintenance tasks, dependency updates, CI changes, refactoring with no user-facing impact size/xl typescript Pull requests that update typescript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant