From 36de1bbdb658e8843f2c374457f2043890f9bdd6 Mon Sep 17 00:00:00 2001 From: nityanandmathur Date: Tue, 3 Nov 2026 16:08:34 +0530 Subject: [PATCH 1/2] Add tensorViz PyTorch visualization plugin --- .cursor-plugin/marketplace.json | 5 ++ README.md | 1 + .../tensorviz/.cursor-plugin/plugin.json | 31 +++++++ third_party/tensorviz/CHANGELOG.md | 9 ++ third_party/tensorviz/LICENSE | 21 +++++ third_party/tensorviz/PRIVACY.md | 28 ++++++ third_party/tensorviz/README.md | 63 ++++++++++++++ third_party/tensorviz/SUPPORT.md | 17 ++++ third_party/tensorviz/TERMS.md | 22 +++++ third_party/tensorviz/assets/logo.png | Bin 0 -> 19900 bytes third_party/tensorviz/docs/installation.md | 80 ++++++++++++++++++ third_party/tensorviz/mcp.json | 12 +++ third_party/tensorviz/runtime-lock.json | 9 ++ third_party/tensorviz/scripts/launch.sh | 60 +++++++++++++ .../tensorviz/skills/model-workflow/SKILL.md | 68 +++++++++++++++ 15 files changed, 426 insertions(+) create mode 100644 third_party/tensorviz/.cursor-plugin/plugin.json create mode 100644 third_party/tensorviz/CHANGELOG.md create mode 100644 third_party/tensorviz/LICENSE create mode 100644 third_party/tensorviz/PRIVACY.md create mode 100644 third_party/tensorviz/README.md create mode 100644 third_party/tensorviz/SUPPORT.md create mode 100644 third_party/tensorviz/TERMS.md create mode 100644 third_party/tensorviz/assets/logo.png create mode 100644 third_party/tensorviz/docs/installation.md create mode 100644 third_party/tensorviz/mcp.json create mode 100644 third_party/tensorviz/runtime-lock.json create mode 100755 third_party/tensorviz/scripts/launch.sh create mode 100644 third_party/tensorviz/skills/model-workflow/SKILL.md diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index d7d2a96dd..99d6336b6 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -687,6 +687,11 @@ "grokbot": "0.49.0", "sand": "0.49.0" } + }, + { + "name": "tensorviz", + "source": "third_party/tensorviz", + "description": "Explore local PyTorch model graphs and measured tensor shapes (Apple Silicon preview)." } ] } diff --git a/README.md b/README.md index d2ac28d9d..3e7c0cb5f 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `rippling` | [Rippling](third_party/rippling/) | Cursor | Integrations | Look up people, time off, and company policy in Rippling, and file time-off requests and draft hires. | | `onepay` | [OnePay](third_party/onepay/) | Cursor | Integrations | Access your OnePay accounts: balances, transactions, credit, Pay Later, investments, crypto, and rewards. | | `questrade` | [Questrade](third_party/questrade/) | Cursor | Integrations | Read your Questrade portfolio, get live market data, and discuss potential trades. | +| `tensorviz` | [tensorViz](third_party/tensorviz/) | TensorViz | Developer Tools | Explore local PyTorch model graphs and measured tensor shapes (Apple Silicon preview). | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/third_party/tensorviz/.cursor-plugin/plugin.json b/third_party/tensorviz/.cursor-plugin/plugin.json new file mode 100644 index 000000000..f9b4d4f64 --- /dev/null +++ b/third_party/tensorviz/.cursor-plugin/plugin.json @@ -0,0 +1,31 @@ +{ + "name": "tensorviz", + "displayName": "tensorViz", + "version": "0.3.60", + "description": "Explore local PyTorch model graphs and measured tensor shapes (Apple Silicon preview).", + "author": { + "name": "TensorViz", + "email": "tensorviz.app@gmail.com" + }, + "homepage": "https://tensorviz.dev", + "repository": "https://github.com/tensorviz-org/tensorviz-plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "pytorch", + "tensorviz", + "model-graph", + "tensor-shapes", + "machine-learning", + "mcp" + ], + "category": "developer-tools", + "tags": [ + "pytorch", + "visualization", + "debugging", + "mcp" + ], + "skills": "./skills/", + "mcpServers": "./mcp.json" +} diff --git a/third_party/tensorviz/CHANGELOG.md b/third_party/tensorviz/CHANGELOG.md new file mode 100644 index 000000000..4a90dd55f --- /dev/null +++ b/third_party/tensorviz/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +## 0.3.60 + +- Submit the existing public tensorViz 0.3.60 integration to the Cursor catalog. +- Include the local MCP launcher, pinned compiled-runtime lock, workflow skill, + logo, license, privacy, terms, support, and Cursor installation guide. +- Target the macOS Apple Silicon / CPython 3.12 CPU preview; marketplace approval + and Cursor client acceptance remain separate. diff --git a/third_party/tensorviz/LICENSE b/third_party/tensorviz/LICENSE new file mode 100644 index 000000000..63a494992 --- /dev/null +++ b/third_party/tensorviz/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 TensorViz contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/tensorviz/PRIVACY.md b/third_party/tensorviz/PRIVACY.md new file mode 100644 index 000000000..c2ba31b90 --- /dev/null +++ b/third_party/tensorviz/PRIVACY.md @@ -0,0 +1,28 @@ +# Privacy and data handling + +TensorViz's agent plugin runs a local MCP host and Python workers. Discovery reads +model source. Capturing executes the selected model with the selected environment +and example inputs. Approved setup can write recipes and download Python runtimes +or packages from their providers. Imported model code and dependencies can have +their own filesystem and network behavior. + +Graph evidence, source excerpts, paths and errors returned through MCP are visible +to the coding client and can enter its model-provider conversation. The client's +privacy, retention and organization policies apply. Do not provide sensitive models +or data unless those policies permit it. + +The plugin does not operate a TensorViz cloud ingestion service, and its browser +and panel builds exclude TensorViz's hosted authentication and analytics modules. +The browser viewer uses a local connection. Keep private viewer links private. +The tldraw renderer has separate license-validation behavior; trial licenses can +send license-usage information to tldraw. See +[tldraw's licensing and data collection documentation](https://tldraw.dev/community/license). + +Model recipes and captures, local session resources, runtime installations and +permission records can remain on disk. Removing the plugin does not delete model +source, recipes or Python environments. Run the installed plugin's +`scripts/launch.sh --revoke-permission` to revoke TensorViz permission, or disable +the plugin in your coding client. See [installation and removal](docs/installation.md). + +Do not post private model code, credentials, full environment dumps or private +viewer URLs in public issues. See [SUPPORT.md](SUPPORT.md) for reporting problems. diff --git a/third_party/tensorviz/README.md b/third_party/tensorviz/README.md new file mode 100644 index 000000000..8ce654183 --- /dev/null +++ b/third_party/tensorviz/README.md @@ -0,0 +1,63 @@ +# tensorViz + +Explore local PyTorch model graphs and measured tensor shapes (Apple Silicon preview). + +The plugin connects Cursor to a local tensorViz MCP host and supplies the +`model-workflow` skill. Capture a PyTorch `nn.Module`, inspect the measured input +and output shapes, and refresh the graph after a saved source edit. Use the local +browser graph when the client does not support the embedded Model graph panel. + +## Requirements + +- macOS on Apple Silicon, with CPU capture. +- CPython 3.12 with PyTorch and your model's dependencies, or supported managed + Python setup after permission is granted. +- Network access for the first runtime download and any approved dependency setup. +- Cursor with plugins enabled. Account, organization, and tool permissions apply. + +This compiled preview does not support Windows, Linux, Intel Macs, or other Python +ABIs. CUDA is unverified. VS Code, a separate Node.js installation, a tensorViz +account, and a provider API key are not required by tensorViz. + +## Install and use + +Once approved and listed, open **Customize**, find **tensorViz**, and select +**Install**. Until then, use the [local evaluation instructions](docs/installation.md). +Start a new Agent chat in your model project and ask: + +> Use tensorViz to open my PyTorch model, capture its saved example input, and +> explain the tensor shapes. Show the graph, then refresh it after my saved edit. + +Provide the model file, class, constructor arguments, and example inputs when +needed. Review tensorViz's first-use permission prompt: capture executes your +local model code, and approved setup can install Python and dependencies. +Select a compatible project environment when requested. Saved `tensorviz.toml` +recipes can be reused; model-specific packages and assets may still need setup. + +A successful capture contains measured shapes for the selected input and +execution. A source preview alone does not establish a successful capture. +Graph display and capture are separate results. + +## Runtime and data + +The readable launcher downloads the public **0.3.60** compiled runtime from GitHub +Releases, verifies the SHA-256 digest pinned in `runtime-lock.json`, and caches the +archive for later connections. It checks the archive on every connection and +extracts separate session files. A checksum mismatch stops startup. This directory +contains the integration; the runtime is downloaded separately. + +Graph evidence, source excerpts, and paths returned through MCP enter Cursor and +may enter its model-provider conversation. Recipes, captures, environments, +runtime caches, and permission records stay on the local machine until removed. +Approved Python setup contacts package providers; imported model code can use its +own services. The tldraw renderer's production trial can send license-usage +information to tldraw, excluding canvas content. See [privacy](PRIVACY.md). + +The bundled renderer trial expires **26 December 2026**. Continued renderer use +requires a renewed license and an updated runtime; existing downloads retain +their original embedded key. See [terms](TERMS.md). + +See [installation, updates, and removal](docs/installation.md), +[support](SUPPORT.md), [the public integration repository](https://github.com/tensorviz-org/tensorviz-plugins), +and [tensorviz.dev](https://tensorviz.dev). The integration is [MIT licensed](LICENSE); +runtime components retain their applicable terms and notices. diff --git a/third_party/tensorviz/SUPPORT.md b/third_party/tensorviz/SUPPORT.md new file mode 100644 index 000000000..3d0669ee0 --- /dev/null +++ b/third_party/tensorviz/SUPPORT.md @@ -0,0 +1,17 @@ +# Support and compatibility + +This compiled candidate targets macOS Apple Silicon and CPython 3.12 CPU capture. +It does not require VS Code or Node.js. Explicitly selected incompatible Python +versions produce an error; TensorViz does not silently replace that environment. +Windows, Linux, Intel Macs, CUDA and other Python ABIs remain unverified targets. + +The integration works with clients that support its local MCP transport and +plugin format. Directory publication is distinct from local installation, capture +and rendering. No official marketplace acceptance is claimed for this candidate. + +When reporting a problem, include the integration version, OS/client version, +whether it failed during download, startup or capture, and a small synthetic +model. Do not share credentials, private viewer links, model secrets or unredacted +environment dumps. Use +[the integration repository's issues](https://github.com/tensorviz-org/tensorviz-plugins/issues) +for public, non-sensitive bug reports. diff --git a/third_party/tensorviz/TERMS.md b/third_party/tensorviz/TERMS.md new file mode 100644 index 000000000..ff2ab6b26 --- /dev/null +++ b/third_party/tensorviz/TERMS.md @@ -0,0 +1,22 @@ +# Terms and third-party components + +The integration files in this repository carry the accompanying MIT license. +The core runtime is distributed separately as compiled artifacts; this repository +does not publish its source or change the licensing of existing core code. +Runtime distribution terms and third-party notices must accompany its release. + +Public runtime releases require the owner's confirmation that the tldraw license +covers the bundled renderer supplied to end users. Private build candidates are +not permission to redistribute the renderer. The integration's MIT license does not +grant a tldraw production or redistribution license. Dependencies retain their +original licenses and the binary includes their applicable notices. + +The initial preview uses a production trial of tldraw that expires on +26 December 2026. Continued renderer use after the trial requires a renewed license +and an updated TensorViz runtime. Downloaded versions retain their embedded key; +renewal does not retroactively update old installations. + +Your coding client, model provider, downloaded packages and model repositories +have their own terms. Capturing runs selected model code locally. A graph records +one selected execution or an explicitly identified source preview; it does not +guarantee model correctness or behavior for other inputs. diff --git a/third_party/tensorviz/assets/logo.png b/third_party/tensorviz/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..14de08be7f400ff095511ed5994b25d9490b5759 GIT binary patch literal 19900 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 R{ssZRE~x9O6{%VU|1Uk#)l~oh literal 0 HcmV?d00001 diff --git a/third_party/tensorviz/docs/installation.md b/third_party/tensorviz/docs/installation.md new file mode 100644 index 000000000..28663f8a1 --- /dev/null +++ b/third_party/tensorviz/docs/installation.md @@ -0,0 +1,80 @@ +# Cursor installation and maintenance + +This entry packages the public +[tensorViz 0.3.60 preview](https://github.com/tensorviz-org/tensorviz-plugins/releases/tag/v0.3.60) +for Cursor. It requires macOS Apple Silicon and CPython 3.12 CPU capture. Local +installation, package validation, runtime checks, and marketplace approval are +separate results. This submission does not claim completed Cursor client +acceptance or an approved marketplace listing. + +## Local evaluation + +1. Copy this complete `third_party/tensorviz` directory to + `~/.cursor/plugins/local/tensorviz`. The destination must directly contain + `.cursor-plugin/plugin.json`, `mcp.json`, `runtime-lock.json`, `scripts/`, + `skills/`, and `assets/`. Copy regular files rather than a symlink. +2. Restart Cursor or run **Developer: Reload Window**. +3. Open **Customize** and confirm the `model-workflow` skill and tensorViz MCP + server. Your account or organization must allow local plugin imports. A + marketplace installation of the same name takes precedence over a local copy. +4. Start a new Agent chat in your model project and use the prompt in the + [README](../README.md). Complete the permission and environment prompts. + +The MCP configuration uses `${CURSOR_PLUGIN_ROOT}/scripts/launch.sh`. Cursor +expands that variable to this plugin's installed directory. No Node.js command +or global Python executable is used to start the compiled host. + +## Updates, removal, and troubleshooting + +For marketplace installations, use Cursor's plugin management to update, disable, +or uninstall tensorViz. Start a new chat after an update; the runtime remains +pinned to this entry's version until its lock and integration are updated together. + +For a local evaluation update, close tensorViz chats, move the old complete plugin +directory outside `~/.cursor/plugins/local`, and copy the new complete directory +into place. Reload Cursor and start a new chat. Restore the old complete directory +for rollback; do not combine files from different versions. + +If download fails, check access to the URL in `runtime-lock.json` and reconnect. +The verified archive is cached under `~/Library/Caches/dev.tensorviz/runtime`. +A checksum error names the damaged archive: remove only that archive and +reconnect to download it again. Do not bypass checksum verification. + +To remove a local evaluation, close its chats, remove only +`~/.cursor/plugins/local/tensorviz`, and reload Cursor. Removal preserves model +source, recipes, Python environments, cached runtimes, and saved permission. +Before removal, run the installed plugin's `scripts/launch.sh --revoke-permission` +if you want to revoke tensorViz permission. See [privacy](../PRIVACY.md). + +## Provenance and review scope + +The launcher, runtime lock, workflow skill, logo, support, and terms were copied +from public tag `v0.3.60`, commit +`6d45a1245a7fd60bd87312418b30e5fbbd35d1cd` of +[`tensorviz-org/tensorviz-plugins`](https://github.com/tensorviz-org/tensorviz-plugins/tree/v0.3.60/cursor/plugins/tensorviz). +Their hashes were checked against that release's `PUBLICATION.json`. The MIT +license is copied from the distribution repository. The privacy document changes +only its installation link to this guide. + +The Cursor manifest uses this marketplace's supported author fields, adds display +and discovery metadata, and keeps the release version and component paths. This +entry also adds the catalog registration, README, changelog, and this guide. It +does not include the other clients' manifests or a compiled runtime archive. + +Local submission checks on 3 November 2026 passed the repository's +`node scripts/validate-plugins.mjs` validator, launcher shell syntax, catalog and +manifest consistency, documentation links, and copied-file hash checks. An +isolated macOS Apple Silicon profile launched the configured MCP command from a +path containing spaces, downloaded the runtime without GitHub credentials, and +verified its 35,330,817-byte archive against the pinned SHA-256 digest. MCP +initialization reported tensorViz 0.3.60 and discovery returned 24 tools, including +`open_graph`, `open_graph_view`, and `list_models`. No model ran and no tensorViz +permission was granted. These checks did not run the Cursor application. + +For client acceptance, verify skill/tool discovery, a small CPU model capture, +measured shapes, visible graph display, refresh after an edit, and an update with +retained setup. A manifest check or a direct MCP connection alone cannot establish +those Cursor behaviors. + +References: [Cursor plugin format and MCP paths](https://cursor.com/docs/reference/plugins), +[local plugin imports](https://cursor.com/docs/plugins#test-plugins-locally). diff --git a/third_party/tensorviz/mcp.json b/third_party/tensorviz/mcp.json new file mode 100644 index 000000000..f25140e4f --- /dev/null +++ b/third_party/tensorviz/mcp.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json", + "mcpServers": { + "tensorviz": { + "type": "stdio", + "command": "sh", + "args": [ + "${CURSOR_PLUGIN_ROOT}/scripts/launch.sh" + ] + } + } +} diff --git a/third_party/tensorviz/runtime-lock.json b/third_party/tensorviz/runtime-lock.json new file mode 100644 index 000000000..ffdc69188 --- /dev/null +++ b/third_party/tensorviz/runtime-lock.json @@ -0,0 +1,9 @@ +{ + "formatVersion": 1, + "version": "0.3.60", + "platform": "darwin-arm64", + "pythonABI": "cpython-312-darwin", + "sha256": "6efc2432f3d863a8382d7dd68c94772b591d4961925f4f028c19dac280cc9fed", + "bytes": 35330817, + "url": "https://github.com/tensorviz-org/tensorviz-plugins/releases/download/v0.3.60/tensorviz-runtime-0.3.60-darwin-arm64.tar.gz" +} diff --git a/third_party/tensorviz/scripts/launch.sh b/third_party/tensorviz/scripts/launch.sh new file mode 100755 index 000000000..208871b5a --- /dev/null +++ b/third_party/tensorviz/scripts/launch.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# Public integration only. Core code arrives as a version-pinned binary archive. +set -eu +umask 077 +fail() { echo "TensorViz: $*" >&2; exit 1; } +plugin=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd -P) +if [ "$(uname -s)-$(uname -m)" != Darwin-arm64 ]; then + fail 'This preview supports macOS Apple Silicon. No runtime was downloaded.' +fi +lock="$plugin/runtime-lock.json" +version=$(/usr/bin/plutil -extract version raw -o - "$lock") +sha=$(/usr/bin/plutil -extract sha256 raw -o - "$lock") +url=$(/usr/bin/plutil -extract url raw -o - "$lock") +bytes=$(/usr/bin/plutil -extract bytes raw -o - "$lock") +case "$sha" in *[!a-f0-9]*|'') fail 'Invalid runtime digest.';; esac +[ "${#sha}" -eq 64 ] || fail 'Invalid runtime digest.' +case "$bytes" in *[!0-9]*|'') fail 'Invalid runtime size.';; esac +case "$url" in https://*) ;; *) fail 'Runtime downloads require HTTPS.';; esac +cache="${HOME:?}/Library/Caches/dev.tensorviz/runtime" +mkdir -p "$cache" +[ ! -L "$cache" ] || fail 'The runtime cache must not be a symbolic link.' +archive="$cache/$sha.tar.gz" +download='' +session='' +child='' +cleanup() { + if [ -n "$child" ]; then kill "$child" 2>/dev/null || true; wait "$child" 2>/dev/null || true; fi + [ -z "$download" ] || rm -f -- "$download" + [ -z "$session" ] || rm -rf -- "$session" +} +trap cleanup 0 +trap 'exit 130' INT +trap 'exit 143' TERM HUP +if [ ! -f "$archive" ]; then + download=$(mktemp "$cache/.download.XXXXXX") + echo "TensorViz: downloading runtime $version for reuse by later connections." >&2 + /usr/bin/curl --fail --silent --show-error --location --proto '=https' --proto-redir '=https' \ + --connect-timeout 15 --max-time 300 --max-filesize "$bytes" --output "$download" "$url" < /dev/null & + child=$! + wait "$child" || fail 'Runtime download failed. Retry the plugin connection.' + child='' + [ "$(/usr/bin/shasum -a 256 "$download" | cut -d ' ' -f 1)" = "$sha" ] \ + || fail 'Runtime checksum mismatch. Nothing was executed.' + mv -f -- "$download" "$archive" + download='' +fi +[ ! -L "$archive" ] || fail 'The cached archive must not be a symbolic link.' +[ "$(/usr/bin/shasum -a 256 "$archive" | cut -d ' ' -f 1)" = "$sha" ] \ + || fail "Cached runtime is damaged. Remove $archive and reconnect. Nothing was executed." +# Extract anew from the verified archive, so modified unpacked caches cannot run. +session=$(mktemp -d "${TMPDIR:-/tmp}/tensorviz-native.XXXXXX") +/usr/bin/tar -xzf "$archive" -C "$session" +[ -x "$session/tensorviz-host" ] || fail 'Runtime archive has no executable host.' +"$session/tensorviz-host" "$@" <&0 & +child=$! +set +e +wait "$child" +status=$? +child='' +exit "$status" diff --git a/third_party/tensorviz/skills/model-workflow/SKILL.md b/third_party/tensorviz/skills/model-workflow/SKILL.md new file mode 100644 index 000000000..5d53dc1f3 --- /dev/null +++ b/third_party/tensorviz/skills/model-workflow/SKILL.md @@ -0,0 +1,68 @@ +--- +name: model-workflow +description: Create, understand, modify or debug local PyTorch nn.Module models with a current TensorViz graph. Use for local model architecture, forward-pass tensor flow, shape errors and activation or layer changes. Exclude unrelated Python work, conceptual questions without local code and requests to avoid graphing or execution. +--- + +# TensorViz model workflow + +Read the user's request first. Do not run anything on startup. Explicit opt-outs, +read-only instructions and the client's native execution/edit approvals take +priority. Work only on projects relevant to the user's request. + +Discover the advertised TensorViz tools and host capabilities once. Use the exact +workspace checkout, model file and class from the current task. Do not infer a +workspace from the launcher's directory or silently use another worktree. + +Use `open_graph` when advertised. It waits briefly for completion and yields early +for permission or setup. Poll the same requestId only while it remains pending; +never start duplicate captures or sleep repeatedly in the agent. Continue its returned next action until a +current capture succeeds, a model failure has evidence, the user cancels, or a +concrete blocker requires their input. Inspect repository evidence for missing +setup; ask about unresolved domain choices or assets. A source preview, connected +server or tool call is not a successful capture. Do not change inputs to hide a +model failure or retry an unchanged failed action. + +Use the environment reported by tensorViz. The tensorViz plugin remembers the +saved/project environment and offers available previously used interpreters when +there is no project choice. Start without `managedRuntime`; select an offered +interpreter when the user or project identifies it. Do not search arbitrary +directories or guess shell Python. With no available choices on a supported +platform, the host prepares a managed environment under its existing permission. +An explicit `managedRuntime: true` requests a separate environment. +The tensorViz plugin remembers the +user's plugin permission from installation or first use. Once granted, continue +inspection, setup, dependency repair and capture without asking for additional +TensorViz approvals. Honor a declined or revoked permission. Never approve a +permission prompt, invoke the permission helper, edit permission records, change +client permission settings or send an invented approval flag on the user's behalf. +If the user explicitly asks to enable TensorViz after a declined or cancelled +decision, use the stopped opening's `request_permission` recovery action. It +shows the user's confirmation and resumes the same opening after acceptance; +it does not grant permission itself. Never repeat it automatically after a decline. +If the project defines example inputs in a Python function such as `graph_inputs`, +reference that exact function with `inputs: { factory: { file, callable, kwargs } }` +in the setup draft. Read its source first; do not guess a function or manually +serialize its tensors. It must return named forward inputs or an explicit +`{args, kwargs}` binding. TensorViz executes it once in the capture worker. +Keep saved inputs +and recapture after a coherent source change, not after every file write. + +In clients supporting MCP Apps, use `open_graph_panel` when advertised to show +the native Model graph panel beside this chat. Open it once; it follows the current +capture. Check `list_models` for a connected current view before claiming display, +and use that viewId for `get_selection` and `focus_view`. Do not call the panel's +app-only transport tools. The panel opening alone does not prove rendering. + +For clients without MCP Apps, use `open_graph_view`: open the returned private +URL once in a browser and poll its handoff for the exact display receipt. Display +failure is separate from capture failure. Keep private links out of logs and +external messages. + +For plugin hosts, ordinary source edits use the coding agent's normal review +workflow. Use TensorViz source proposals only when the host advertises and supports +the complete review path. Never bypass a pending proposal. Use graph comparison +only when advertised; focusing a changed node does not show a diff. + +Finish with the graph result, the model result and any evidenced limitation. If +the installed host lacks a required capability, name it accurately rather than +claiming completion or routing to a different host. From b6012ae4806251baabdb13ca4a6a8d916cc10446 Mon Sep 17 00:00:00 2001 From: nityanandmathur Date: Tue, 3 Nov 2026 16:30:01 +0530 Subject: [PATCH 2/2] Update tensorViz to current-main release 0.3.61 --- third_party/tensorviz/.cursor-plugin/plugin.json | 2 +- third_party/tensorviz/CHANGELOG.md | 7 +++++++ third_party/tensorviz/README.md | 2 +- third_party/tensorviz/docs/installation.md | 16 +++++++++------- third_party/tensorviz/runtime-lock.json | 8 ++++---- 5 files changed, 22 insertions(+), 13 deletions(-) diff --git a/third_party/tensorviz/.cursor-plugin/plugin.json b/third_party/tensorviz/.cursor-plugin/plugin.json index f9b4d4f64..00b252f77 100644 --- a/third_party/tensorviz/.cursor-plugin/plugin.json +++ b/third_party/tensorviz/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "tensorviz", "displayName": "tensorViz", - "version": "0.3.60", + "version": "0.3.61", "description": "Explore local PyTorch model graphs and measured tensor shapes (Apple Silicon preview).", "author": { "name": "TensorViz", diff --git a/third_party/tensorviz/CHANGELOG.md b/third_party/tensorviz/CHANGELOG.md index 4a90dd55f..f4b30a943 100644 --- a/third_party/tensorviz/CHANGELOG.md +++ b/third_party/tensorviz/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 0.3.61 + +- Update the submission to the compiled runtime built from current source main + `d4e2865a3c43149907dd06840745eb037d55dffa`. +- Include the current 27-tool host, with `find_computation`, `query_computation`, + and `analyze_computation_change`, and pin its matching runtime checksum. + ## 0.3.60 - Submit the existing public tensorViz 0.3.60 integration to the Cursor catalog. diff --git a/third_party/tensorviz/README.md b/third_party/tensorviz/README.md index 8ce654183..c0c631b87 100644 --- a/third_party/tensorviz/README.md +++ b/third_party/tensorviz/README.md @@ -40,7 +40,7 @@ Graph display and capture are separate results. ## Runtime and data -The readable launcher downloads the public **0.3.60** compiled runtime from GitHub +The readable launcher downloads the public **0.3.61** compiled runtime from GitHub Releases, verifies the SHA-256 digest pinned in `runtime-lock.json`, and caches the archive for later connections. It checks the archive on every connection and extracts separate session files. A checksum mismatch stops startup. This directory diff --git a/third_party/tensorviz/docs/installation.md b/third_party/tensorviz/docs/installation.md index 28663f8a1..b06af7f58 100644 --- a/third_party/tensorviz/docs/installation.md +++ b/third_party/tensorviz/docs/installation.md @@ -1,7 +1,7 @@ # Cursor installation and maintenance This entry packages the public -[tensorViz 0.3.60 preview](https://github.com/tensorviz-org/tensorviz-plugins/releases/tag/v0.3.60) +[tensorViz 0.3.61 preview](https://github.com/tensorviz-org/tensorviz-plugins/releases/tag/v0.3.61) for Cursor. It requires macOS Apple Silicon and CPython 3.12 CPU capture. Local installation, package validation, runtime checks, and marketplace approval are separate results. This submission does not claim completed Cursor client @@ -49,9 +49,9 @@ if you want to revoke tensorViz permission. See [privacy](../PRIVACY.md). ## Provenance and review scope The launcher, runtime lock, workflow skill, logo, support, and terms were copied -from public tag `v0.3.60`, commit -`6d45a1245a7fd60bd87312418b30e5fbbd35d1cd` of -[`tensorviz-org/tensorviz-plugins`](https://github.com/tensorviz-org/tensorviz-plugins/tree/v0.3.60/cursor/plugins/tensorviz). +from public tag `v0.3.61`, commit +`d01630d9e9d6e453b1ef6f7786b7dd77b2601bed` of +[`tensorviz-org/tensorviz-plugins`](https://github.com/tensorviz-org/tensorviz-plugins/tree/v0.3.61/cursor/plugins/tensorviz). Their hashes were checked against that release's `PUBLICATION.json`. The MIT license is copied from the distribution repository. The privacy document changes only its installation link to this guide. @@ -66,9 +66,11 @@ Local submission checks on 3 November 2026 passed the repository's manifest consistency, documentation links, and copied-file hash checks. An isolated macOS Apple Silicon profile launched the configured MCP command from a path containing spaces, downloaded the runtime without GitHub credentials, and -verified its 35,330,817-byte archive against the pinned SHA-256 digest. MCP -initialization reported tensorViz 0.3.60 and discovery returned 24 tools, including -`open_graph`, `open_graph_view`, and `list_models`. No model ran and no tensorViz +verified its 35,773,473-byte archive against the pinned SHA-256 digest. MCP +initialization reported tensorViz 0.3.61 and discovery returned 27 tools, including +`open_graph`, `open_graph_view`, `find_computation`, `query_computation`, and +`analyze_computation_change`. All three computation queries returned `NO_MODEL` +for an unopened model without creating user state. No model ran and no tensorViz permission was granted. These checks did not run the Cursor application. For client acceptance, verify skill/tool discovery, a small CPU model capture, diff --git a/third_party/tensorviz/runtime-lock.json b/third_party/tensorviz/runtime-lock.json index ffdc69188..2637e54d3 100644 --- a/third_party/tensorviz/runtime-lock.json +++ b/third_party/tensorviz/runtime-lock.json @@ -1,9 +1,9 @@ { "formatVersion": 1, - "version": "0.3.60", + "version": "0.3.61", "platform": "darwin-arm64", "pythonABI": "cpython-312-darwin", - "sha256": "6efc2432f3d863a8382d7dd68c94772b591d4961925f4f028c19dac280cc9fed", - "bytes": 35330817, - "url": "https://github.com/tensorviz-org/tensorviz-plugins/releases/download/v0.3.60/tensorviz-runtime-0.3.60-darwin-arm64.tar.gz" + "sha256": "c6d4a606f45d880ed2967a16059a9130cfc46111e913d91dc808c7ac32341430", + "bytes": 35773473, + "url": "https://github.com/tensorviz-org/tensorviz-plugins/releases/download/v0.3.61/tensorviz-runtime-0.3.61-darwin-arm64.tar.gz" }