Releases: deeleeramone/PyWry
pywry 2.0.2
pywry 2.0.2
Installation
pip install pywry==2.0.2Supported Platforms
| Platform | Architecture | Wheel |
|---|---|---|
| Linux | x86_64 | ✅ |
| Linux | aarch64 | ✅ |
| macOS | x86_64 (Intel) | ✅ |
| macOS | arm64 (Apple Silicon) | ✅ |
| Windows | AMD64 | ✅ |
| Windows | ARM64 | ✅ |
Python Versions
- Python 3.10, 3.11, 3.12, 3.13, 3.14
SBOM
- CycloneDX SBOM is included in this release as
sbom.cdx.json.
This is a draft release. Wheels are published to PyPI separately.
What's Changed
- build(deps): update pydantic requirement from >=2.13.3 to >=2.13.4 in /pywry/docs by @dependabot[bot] in #47
- build(deps): update pydantic-settings requirement from >=2.14.0 to >=2.14.1 in /pywry/docs by @dependabot[bot] in #48
- build(deps): bump pydantic from 2.13.3 to 2.13.4 in /pywry by @dependabot[bot] in #49
- build(deps-dev): bump agent-client-protocol from 0.9.0 to 0.10.0 in /pywry by @dependabot[bot] in #50
- build(deps): bump pydantic-settings from 2.14.0 to 2.14.1 in /pywry by @dependabot[bot] in #51
- build(deps-dev): bump openai from 2.33.0 to 2.36.0 in /pywry by @dependabot[bot] in #52
- build(deps-dev): bump cryptography from 47.0.0 to 48.0.0 in /pywry by @dependabot[bot] in #53
- build(deps): bump urllib3 from 2.6.3 to 2.7.0 in /pywry in the uv group across 1 directory by @dependabot[bot] in #54
- Bugfix/chat handler by @deeleeramone in #55
Full Changelog: pywry-2.0.1...pywry-2.0.2
pywry plugin v0.1.1
Chat widget reliability. Fixed a regression where the desktop chat
panel rendered empty (no welcome message, dead buttons) after a
set_content IPC swap. Root cause: chat-handlers.js contained a
literal '</head>' string inside its iframe meta-tag injection
helper. When inlined into the host document's <head>, the desktop
subprocess's regex-based head-script extractor terminated early on
the stray tag, dropping the chat-handlers <script> and leaving
window.initChatHandlers undefined at re-init time. The literals are
now split ('<' + 'head>' / '</' + 'head>') so any naive HTML
extractor sees a balanced document.
Demo refresh. pywry_demo_deepagent_nvidia.py model catalog
trimmed to a small curated set of currently-served NVIDIA NIM
tool-capable models; stale ids that 404 at inference removed. The
dropdown now only shows entries the live ChatNVIDIA. get_available_models() lookup confirms.
pywry 2.0.1
pywry 2.0.1
Installation
pip install pywry==2.0.1Supported Platforms
| Platform | Architecture | Wheel |
|---|---|---|
| Linux | x86_64 | ✅ |
| Linux | aarch64 | ✅ |
| macOS | x86_64 (Intel) | ✅ |
| macOS | arm64 (Apple Silicon) | ✅ |
| Windows | AMD64 | ✅ |
| Windows | ARM64 | ✅ |
Python Versions
- Python 3.10, 3.11, 3.12, 3.13, 3.14
SBOM
- CycloneDX SBOM is included in this release as
sbom.cdx.json.
This is a draft release. Wheels are published to PyPI separately.
What's Changed
- build(deps): update mkdocs-literate-nav requirement from >=0.6.0 to >=0.6.3 in /pywry/docs by @dependabot[bot] in #22
- build(deps): update griffe requirement from >=1.0.0 to >=2.0.2 in /pywry/docs by @dependabot[bot] in #21
- build(deps): update mkdocs-section-index requirement from >=0.3.0 to >=0.3.12 in /pywry/docs by @dependabot[bot] in #20
- build(deps): update mkdocstrings requirement from >=0.26.0 to >=1.0.4 in /pywry/docs by @dependabot[bot] in #18
- build(deps): update mkdocs-gen-files requirement from >=0.5.0 to >=0.6.1 in /pywry/docs by @dependabot[bot] in #19
- chore(sync): merge main into develop by @github-actions[bot] in #24
- build(deps): update mkdocs-material requirement from >=9.5.0 to >=9.7.6 in /pywry/docs by @dependabot[bot] in #29
- build(deps): update pydantic-settings requirement from >=2.0 to >=2.14.0 in /pywry/docs by @dependabot[bot] in #28
- build(deps): update mkdocs-autorefs requirement from >=1.0.0 to >=1.4.4 in /pywry/docs by @dependabot[bot] in #27
- build(deps): update mkdocs requirement from >=1.5.0 to >=1.6.1 in /pywry/docs by @dependabot[bot] in #26
- build(deps): update pydantic requirement from >=2.0 to >=2.13.3 in /pywry/docs by @dependabot[bot] in #25
- fix(docs): scope custom nav CSS to desktop so mobile drawer renders by @deeleeramone in #32
- chore(sync): merge main into develop by @github-actions[bot] in #33
- chore(sync): merge main into develop by @github-actions[bot] in #34
- chore: migrate from pylint+mypy to ruff+ty by @deeleeramone in #35
- [BugFix] Fix Notebook Detection Chain by @deeleeramone in #40
- build(deps-dev): bump anywidget from 0.10.0 to 0.11.0 in /pywry by @dependabot[bot] in #37
- build(deps-dev): bump openai from 2.32.0 to 2.33.0 in /pywry by @dependabot[bot] in #38
- build(deps-dev): bump authlib from 1.7.0 to 1.7.1 in /pywry by @dependabot[bot] in #39
- chore(sync): merge main into develop by @github-actions[bot] in #42
New Contributors
- @dependabot[bot] made their first contribution in #22
Full Changelog: claude-pywry-v0.1.0...pywry-2.0.1
claude-pywry-v0.1.0
MCP server. .mcp.json launches pywry mcp --transport stdio and
surfaces the full PyWry MCP tool set — 66 tools covering widget
creation, manipulation, chat, TradingView charts, and the autonomous
builder. Source of truth is pywry.mcp.tools.
Key additions driven by this release:
get_widget_app(widget_id)— re-snapshot a widget as a full
AppArtifactwith a bumped revision.- Widget-creating tools (
create_widget,show_plotly,
show_dataframe,show_tvchart,create_chat_widget)
auto-return anAppArtifactalongside their JSON response in
headless mode: self-contained HTML carried as an MCP
EmbeddedResourcewithmimeType: text/htmland
uri: pywry-app://<widget_id>/<revision>.
AppArtifact type. New Pydantic artifact model in
pywry.chat.artifacts — carries self-contained HTML plus
widget_id / revision, rendered as a sandboxed iframe with a live
WebSocket bridge back to Python. Older revisions of the same widget in
chat history freeze at their last known state: their reconnect is
rejected server-side with close code 4002 Older revision superseded.
Host-theme bridge. ws-bridge.js responds to host theme state via
three channels, in priority order:
pywry-hostpostMessage from an outer page (used by the
AppArtifact iframe bridge in PyWry's chat widget and by mcp-ui
clients that emit their own theme signals).matchMedia('(prefers-color-scheme: dark)')change events.- A 500 ms poll of
matchMedia(...).matches— required because
Chromium-in-Electron (Claude Preview, Claude Desktop) updates the
query's.matchesvalue but doesn't fire thechangeevent.
An initial-sync pass runs one animation frame after load so Plotly
charts pick up the correct template even when the figure was rendered
without an explicit template. Fixes __pywry_user_template__
pollution that previously kept charts stuck on plotly_white.
Orientation skill. skills/pywry-orientation/SKILL.md teaches
Claude when to reach for PyWry (dashboards, Plotly charts, AG Grid
tables, TradingView charts, chat UIs, native desktop windows) and how
to navigate the 17 domain skills served by the get_skills MCP tool.
Slash commands.
/pywry:doctor— runs the install health check: Python version,
import pywry,import pywry.mcp,fastmcp, native PyTauri
binary, a headless MCP handshake smoke test, and a reminder to
verify/mcp pywryin Claude Code./pywry:scaffold [name] [--kind widget|chat|tvchart|dashboard]—
scaffolds a new runnable PyWry app./pywry:examples [name]— lists or runs a bundled example
headlessly.
Subagent. agents/pywry-builder.md is a specialised subagent with
a restricted tool surface for multi-step widget construction — builds
the widget via MCP tools, exports runnable Python, and keeps the main
thread's context clean during long interactions.
Hook. hooks/hooks.json registers a PostToolUse hook for
Write / Edit that runs ruff format on the changed .py file.
Short-circuits to a no-op when ruff is not on PATH.
Packaging.
- The plugin lives at
claude/plugins/pywry/in the PyWry repo, listed
fromclaude/.claude-plugin/marketplace.json. - Install via
/plugin marketplace add deeleeramone/PyWry --path claude/.claude-plugin/marketplace.jsonthen/plugin install pywry@pywry. pip install 'pywry[dev]'(orpywry[all]) also ships the full
plugin tree inside the wheel atpywry/_claude_plugin/— the bundle
includes bothplugin.jsonand a single-pluginmarketplace.json
so the installed location is a valid marketplace root as-is.- New
pywry plugin-pathCLI subcommand prints the bundled plugin
location for use with/plugin marketplace add $(pywry plugin-path);
--marketplaceprints themarketplace.jsonpath,--checkexits
non-zero with a clear error when the bundle is missing. .mcp.jsonlaunches thepywryconsole script (installed by pip)
rather thanpython -m pywry.mcp, sidestepping the Microsoft Store
pythonshim on Windows hosts where barepythonisn't aliased to
a real interpreter.
Testing. 12 dedicated tests in pywry/tests/test_mcp_app_artifact.py
cover the artifact model, revision bump, attach helper, handler
behaviour, and the _format_tool_result serialiser that emits the
EmbeddedResource. The 203-test MCP suite passes.
Documentation. Top-level README, MkDocs MCP reference,
plugin install page,
skills reference, and chat component docs all describe the plugin,
AppArtifact, and revision-freeze semantics.
pywry 2.0.0
pywry 2.0.0
Installation
pip install pywry==2.0.0Supported Platforms
| Platform | Architecture | Wheel |
|---|---|---|
| Linux | x86_64 | ✅ |
| Linux | aarch64 | ✅ |
| macOS | x86_64 (Intel) | ✅ |
| macOS | arm64 (Apple Silicon) | ✅ |
| Windows | AMD64 | ✅ |
| Windows | ARM64 | ✅ |
Python Versions
- Python 3.10, 3.11, 3.12, 3.13, 3.14