SysML v2 dependency analysis, notebook generation, execution, and view extraction tool
Project description
Windseeker
Windseeker is a command-line tool for SysML v2 dependency analysis, notebook generation, execution, and view extraction.
It scans .sysml files, analyzes package dependencies, generates a dependency-ordered SysML Jupyter notebook, executes that notebook using a SysML kernel, and extracts rendered views as images.
Naming note
- PyPI distribution name:
sysml-windseeker- Python import name:
windseeker- CLI command:
windseeker
AI Assisted Development
This project has used generative AI to assist in the development of the tool.
🧱 Architecture Overview
flowchart TD
A[.sysml Files] --> B[Folder Scanner]
B --> C[Package & Import Parser]
C --> D[Dependency Graph]
D --> E[Topological Ordering]
E --> F[SysML Concatenation]
E --> G[Jupyter Notebook Builder]
G --> H[Notebook Execution]
H --> I[View Rendering Cells]
I --> J[SVG / PNG / JPG Extraction]
D --> K[Graph Visualization]
✨ Features
Model Analysis
- Recursively scans
.sysmlfiles - Extracts top-level packages only
- Detects
importdependencies - Builds a directed dependency graph
- Fails fast on:
- Import cycles
- Invalid dependency ordering
Notebook Generation
- Generates a single-kernel SysML Jupyter notebook
- One code cell per top-level package
- Cells ordered by dependency order
- Nested packages remain embedded in their parent cell
- Appends additional cells for each discovered
view- Uses
%view Fully::Qualified::ViewName
- Uses
Notebook Execution
- Executes the generated notebook programmatically
- Supports:
nbclient(preferred)jupyter nbconvert --execute(fallback)
- Detects errors via:
- Jupyter
erroroutputs - SysML kernel
stderr(ERROR,Exception,Traceback)
- Jupyter
- View rendering failures are non-fatal by default
View Image Extraction
- Extracts rendered views from executed notebooks
- Supports:
- SVG (raw XML)
- PNG (transparent or solid background)
- Optional JPG
- Automatically rescales oversized SVGs to avoid Cairo rendering errors
🚀 Quick Start
1) Install Windseeker
pip install sysml-windseeker
For development:
pip install -e .
2) Ensure a SysML Jupyter Kernel Is Installed
jupyter kernelspec list
You must see a kernel such as:
sysml
3) Run Windseeker
windseeker run --folder ./tests
🧰 CLI Usage
Common Options
| Flag | Description |
|---|---|
--folder PATH |
Root directory to scan for .sysml files |
--graph / --no-graph |
Enable or disable dependency graph image generation |
--execute / --no-execute |
Execute the generated notebook |
--export-views / --no-export-views |
Extract rendered views |
--views-dir PATH |
Output directory for view images |
--sysml-out PATH |
Output .sysml file |
--notebook-out PATH |
Output notebook path |
Validation & Safety Flags
| Flag | Description |
|---|---|
--ignore-missing NAME |
Ignore unresolved imports (e.g. standard libraries) |
--strict-missing / --allow-missing |
Fail if unresolved imports are found |
--strict-views / --allow-view-errors |
Fail if %view cells error |
--execute / --no-execute |
Skip notebook execution |
View Rendering Options
| Flag | Description |
|---|---|
--write-svg / --no-write-svg |
Write SVG files |
--write-png / --no-write-png |
Write PNG files |
--write-jpg / --no-write-jpg |
Also write JPG files |
--png-transparent / --png-opaque |
Control PNG transparency |
--png-bg COLOR |
Background color for opaque PNGs |
Full CLI Reference
windseeker run --help
windseeker order --help
📜 License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sysml_windseeker-0.3.1.tar.gz.
File metadata
- Download URL: sysml_windseeker-0.3.1.tar.gz
- Upload date:
- Size: 21.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8be16c7729c8eb9d378887abe8c7887bb3f8d0005064d0c3fce9bba3164ceb6
|
|
| MD5 |
39a379506c0ad62c247741a3b8787a28
|
|
| BLAKE2b-256 |
0016f1f647bf0ae0dd2c4fca623cfaa67606aaa8456dd257b628423f98ec3fa3
|
Provenance
The following attestation bundles were made for sysml_windseeker-0.3.1.tar.gz:
Publisher:
publish.yml on Westfall-io/windseeker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sysml_windseeker-0.3.1.tar.gz -
Subject digest:
f8be16c7729c8eb9d378887abe8c7887bb3f8d0005064d0c3fce9bba3164ceb6 - Sigstore transparency entry: 869205704
- Sigstore integration time:
-
Permalink:
Westfall-io/windseeker@0cd26cfd953ce8dc7f535675c9293f26fd07cabe -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Westfall-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0cd26cfd953ce8dc7f535675c9293f26fd07cabe -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file sysml_windseeker-0.3.1-py3-none-any.whl.
File metadata
- Download URL: sysml_windseeker-0.3.1-py3-none-any.whl
- Upload date:
- Size: 21.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a19b40c4301b1dd94159db4337e4ac77e20ae2c5a930ac842f9a492ed4523a52
|
|
| MD5 |
90fa9383a406e0714ff1f7914b524600
|
|
| BLAKE2b-256 |
2bbf6db143a20518d8fd3eb23c7f9ed17e5e5d2f88b19983d55daf51ea24d580
|
Provenance
The following attestation bundles were made for sysml_windseeker-0.3.1-py3-none-any.whl:
Publisher:
publish.yml on Westfall-io/windseeker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sysml_windseeker-0.3.1-py3-none-any.whl -
Subject digest:
a19b40c4301b1dd94159db4337e4ac77e20ae2c5a930ac842f9a492ed4523a52 - Sigstore transparency entry: 869205711
- Sigstore integration time:
-
Permalink:
Westfall-io/windseeker@0cd26cfd953ce8dc7f535675c9293f26fd07cabe -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Westfall-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0cd26cfd953ce8dc7f535675c9293f26fd07cabe -
Trigger Event:
workflow_run
-
Statement type: