Extension Center
Find extensions by tag or choose Official releases. Review the source and install an approved version.
Explore extensions
1 extensions
vis-lang-python
Officialblockether · v1.14.0
Python tools for Vis: ruff formatting and lint, pytest runs and a managed project REPL.
blockether/vis-lang-python
OfficialPython tools for Vis: ruff formatting and lint, pytest runs and a managed project REPL.
Install
Only approved releases are listed. Each version keeps its reviewed commit.
Approved releases (31)
- 1.14.0Oct 24, 202627232020fa0fRelease notes
- 1.13.1Oct 22, 2026f2d327243af3Release notes
- 1.13.0Oct 19, 202676099faf2d09Release notes
- 1.12.0Oct 19, 20264a40242dd443Release notes
- 1.11.4Oct 16, 20260802eb932145Release notes
- 1.11.3Oct 15, 20268eef5afa844dRelease notes
- 1.11.1Oct 14, 2026f63d158abe77Release notes
- 1.11.0Oct 14, 202651d86bc9cbb9Release notes
- 1.10.1Oct 8, 2026fc73a9b8132aRelease notes
- 1.10.0Oct 8, 20267ad1b08931c0Release notes
- 1.9.2Oct 7, 202653ce83babad0Release notes
- 1.9.1Oct 5, 2026cd3385181d5aRelease notes
- 1.9.0Oct 5, 20264bdfb244513eRelease notes
- 1.8.0Oct 4, 20266c6f1a9e75fbRelease notes
- 1.7.0Oct 4, 2026424d9460f8b7Release notes
- 1.6.2Oct 2, 20267cd26c6e4deaRelease notes
- 1.6.1Oct 2, 202649cbd974f5beRelease notes
- 1.6.0Oct 2, 20260447572d42b8Release notes
- 1.5.1Sep 28, 2026c210114004ecRelease notes
- 1.5.0Sep 28, 202655449478fbf4Release notes
- 1.4.2Sep 28, 20266b49fe680293Release notes
- 1.4.1Sep 27, 202686e266f135beRelease notes
- 1.4.0Sep 27, 2026c6283df8e6acRelease notes
- 1.3.2Sep 23, 202652143565bac1Release notes
- 1.3.1Sep 22, 20261ed633724748Release notes
- 1.3.0Sep 21, 202606c3f986796cRelease notes
- 1.2.0Sep 21, 2026594c4bc70b86Release notes
- 1.1.0Sep 20, 2026c4f270e682d3Release notes
- 1.0.2Sep 20, 202659385378f49bRelease notes
- 1.0.1Sep 20, 202602496b899e94Release notes
- 1.0.0Sep 20, 20266c5eeee1d71bRelease notes
This command selects version 1.14.0 at its approved commit. It never follows a moving tag or branch.
Project: run from your project directory to install in .vis/extensions. This command does not add an extensions entry to vis.yml. Add --save to also record the installation. Save an installation in configuration to share the setup.
Review the source first. --trust allows extension code and build backends to run with your permissions.
vis-agent extension install \
'blockether/vis-lang-python' \
--version '1.14.0' \
--project \
--trustThen start Vis or use /reload. Dependencies are prepared automatically.
Already installed? Check, update or roll back
vis-agent extension versions 'blockether/vis-lang-python'
vis-agent extension update 'blockether/vis-lang-python' --trust
vis-agent extension rollback 'blockether/vis-lang-python' --trustUse the identifier shown above, not the Python package name. Add --project for a project installation. Update selects the latest approved stable version; rollback restores the previous pinned source. Choose a specific version and read the lifecycle contract.
Project details
- Version
- 1.14.0
- Extension
- blockether/vis-lang-python
- Project folder
- Repository root
- License
- Apache-2.0
- GitHub stars
- 0
- Downloads
- 1208
- Updated
- Oct 24, 2026
- GitHub owner
- Blockether
- Reviewed commit
- 27232020fa0f
- Metadata checked
- Oct 24, 2026
Dependencies
Python >=3.12
- vis-agent>=0.2.53
- vis-lang-interface @ git+https://github.com/Blockether/vis-lang-interface@v2.11.3
- ruff>=0.14
README
vis-lang-python
Python tools for Vis: ruff formatting and lint, pytest runs and a REPL that keeps its globals between calls.
Vis knows nothing about Python. This extension does, and it runs the tools your project already uses — its ruff, its pytest, its interpreter — so what you see here matches what your CI sees.
Install
vis-agent extension install 'blockether/vis-lang-python' --global --trust
Tools
py.format_code(["src"], is_written=True) # ruff format
py.lint_code(["src"]) # ruff check, with rule codes
py.run_tests(["tests"], keyword="repl") # pytest, counted from its JUnit report
py.run_tests(["tests"], max_failures=1) # stop at the first failure
py.repl_start(cwd="~/app") # the project's own interpreter
py.repl_eval("model = load()", cwd="~/app") # globals live between calls
py.repl_stop(cwd="~/app")
Which interpreter runs your tests and REPL is decided per project, first match winning: uv
(uv.lock or [tool.uv]), Poetry (poetry.lock), a local .venv, then python3. Ruff is taken
from the project's virtualenv, then PATH, then the copy installed with this extension.
If the project's vis.yml sets python: {environment: shared}, tests and the REPL run with
vis-agent python --shared instead. They then import Vis shared packages and never use .venv.
Install the project's dependencies there with vis-agent python --shared uv sync. When a broken
.venv stops pytest or the REPL, the error names both fixes.
The REPL stays alive when the Vis sandbox restarts, for example after /reload. The next call
reaches the same interpreter, with its globals. Only py.repl_stop and the end of the session stop it.
When Vis confines a session, its jail reads only the system directories, the workspace and granted
paths. vis-agent, uv, Poetry or ruff under your home directory, for example in ~/.local/bin,
are outside them. The extension declares each of these programs on PATH, and the file that it
links to, as a read-only grant. It declares the uv, Poetry and pip caches as read-write grants, so a
confined run reuses your downloads. Vis checks the grants and gives them only to the extension's own
processes, not to the agent.
Keep files parseable
Edit hooks repair structural mistakes and validate syntax locally in Python.
They use ast.parse and compile the syntax tree without executing it.
They do not start a project interpreter, write bytecode files or change REPL globals.
Project lint and tests still use your project's tools and interpreter.
- Before a patch writes, the guard tries to repair invalid source within the changed lines. The host writes the validated result once and reports the corrections. If repair fails, a patch that breaks a parseable file writes nothing.
- Vis repairs a Python block itself before the block executes. This extension does not change blocks. Before each block, the guard records the state of the Python files for the check after the block.
- After a Python block, the guard can repair changed
.pyand.pyifiles. These repairs happen after the original writes. The block is not transactional. Repairs include notes and diffs insession["python_syntax_repairs"]. Unresolved errors remain insession["python_syntax_errors"]until the files parse again. - Before
repl_evalruns code, the project's interpreter compiles all of it. If the code does not parse, none of it runs, and the guard's repair is tried on the code. When the interpreter accepts the repaired code, it runs, and the result lists each correction inrepairs. If no safe repair exists, the error gives the line, the column and the parser's message.
The shared syntax guard selects matching files and prevents a repair from overwriting a detected concurrent change. Repairs require a Vis host with support for repair decisions. If the parser is unavailable, the guard allows the operation and logs the failure. It never accepts a repair without successful validation.
Requirements
Vis 0.2.53 or later, for toolchain grants. pytest in the project you test. Everything else is
installed with the extension.
Development
vis-agent python -m pytest tests -q
Results follow the contract in
vis-lang-interface.
The repair port and its regression corpus come from clj-parinferish under the MIT License.
See NOTICE for the required license notice.
Community feedback
Votes and display names are not verified identities. One vote per network address; shared networks share a vote. Select your current choice again to clear it.
Loading feedback…