Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 20.x
cache: npm
Expand All @@ -37,10 +37,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 20.x
cache: npm
Expand All @@ -56,10 +56,10 @@ jobs:
needs: [lint, unit-tests]
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 20.x
cache: npm
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: '20.x'
cache: npm
Expand All @@ -43,10 +43,10 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: '20.x'
cache: npm
Expand Down
13 changes: 12 additions & 1 deletion .vscode/mcp.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
{
"$schema": "https://json.schemastore.org/mcp-config",
"servers": {}
"servers": {
"sysml-v2-local": {
"type": "stdio",
"command": "node",
"args": [
"./node_modules/sysml-v2-lsp/dist/server/mcpServer.js"
],
"tools": [
"*"
]
}
}
}
4 changes: 2 additions & 2 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ A VS Code extension providing SysML v2.0 language support with interactive visua
│ │
v v
┌─────────────┐ ┌───────────────┐
│ Model Tree │ │ Visualization
│ Explorer │ │ Webview
│ Model Tree │ │ Visualization│
│ Explorer │ │ Webview │
└─────────────┘ └───────────────┘
```

Expand Down
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,29 @@ All notable changes to the SysML v2.0 Language Support extension will be documen
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.26.0]

### Added

- Model Explorer package context menu action: **View Model Dashboard**
- Model Dashboard now support workspaces

### Changed

- LSP updated to 0.7.0
- Improved semantic validation
- New quick fix actions
- Model Complexity Index calculation tweaks
- Model Dashboard workspace targeting UI: file/semantic mode toggle with filtered target dropdown
- Updated to OMG 2026-02 - SysML v2 Release

### Fixed

- Visualizer filter reliability across diagram data sources (including non-standard element collections)
- State transition rendering for qualified names and selected-machine transition mapping
- Webview disposal race conditions in visualizer updates/postMessage paths
- Model Dashboard auto-refresh on file changes while open

## [0.25.0]

### Added
Expand Down
37 changes: 33 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,15 @@ help:
@echo " $(GREEN)watch$(NC) - Watch and compile on changes"
@echo " $(GREEN)test$(NC) - Run unit tests (fast, no VS Code required)"
@echo " $(GREEN)test-integration$(NC) - Run full integration tests (requires VS Code)"
@echo " $(GREEN)test-integration-parallel$(NC) - Run integration tests in 2 parallel shards"
@echo " $(GREEN)test-syntax$(NC) - Test syntax and compilation (no VS Code required)"
@echo " $(GREEN)install-test-deps$(NC) - Install system dependencies for testing"
@echo " $(GREEN)lint$(NC) - Run linting"
@echo " $(GREEN)lint-fix$(NC) - Fix linting issues automatically"
@echo " $(GREEN)coverage$(NC) - Generate coverage report"
@echo " $(GREEN)package$(NC) - Create VSIX package"
@echo " $(GREEN)clean$(NC) - Clean build artifacts"
@echo " $(GREEN)clean-all$(NC) - Clean everything including node_modules"
@echo " $(GREEN)clean-all$(NC) - Clean + deterministic reinstall + refresh local file deps"
@echo " $(GREEN)dev$(NC) - Start development environment"
@echo " $(GREEN)debug$(NC) - Prepare for debugging (then press F5 in VS Code)"
@echo " $(GREEN)debug-watch$(NC) - Launch watch mode for debugging with auto-recompile"
Expand Down Expand Up @@ -83,7 +84,7 @@ test: compile
.PHONY: test-integration
test-integration: compile
@echo "$(YELLOW)Running integration tests...$(NC)"
@if npm run test; then \
@if node ./out/test/runTest.js; then \
echo "$(GREEN)Integration tests completed successfully!$(NC)"; \
else \
exit_code=$$?; \
Expand All @@ -100,6 +101,27 @@ test-integration: compile
exit $$exit_code; \
fi

# Run integration tests in two shards in parallel. This is opt-in because
# some environments may prefer deterministic single-host execution.
.PHONY: test-integration-parallel
test-integration-parallel: compile
@echo "$(YELLOW)Running integration tests in parallel (2 shards)...$(NC)"
@set +e; \
SHARD1="integration.test.js,visualizationPanel.test.js,modelExplorerIntegration.test.js,modelDashboardPanel.test.js,performance.test.js"; \
SHARD2="codeActions.test.js,codeLens.test.js,diagramButtons.test.js,editingFeatures.test.js,exportFunctionality.test.js,exportScaleLogic.test.js,featureExplorerProvider.test.js,keywordDiagnostics.test.js,lspClient.test.js,mcpServer.test.js,modelExplorerProvider.test.js,sysRunnerGame.test.js"; \
SYSML_TEST_FILES="$$SHARD1" node ./out/test/runTest.js > /tmp/sysml-test-shard1.log 2>&1 & pid1=$$!; \
SYSML_TEST_FILES="$$SHARD2" node ./out/test/runTest.js > /tmp/sysml-test-shard2.log 2>&1 & pid2=$$!; \
wait $$pid1; code1=$$?; \
wait $$pid2; code2=$$?; \
echo "$(BLUE)=== Shard 1 output ===$(NC)"; cat /tmp/sysml-test-shard1.log; \
echo "$(BLUE)=== Shard 2 output ===$(NC)"; cat /tmp/sysml-test-shard2.log; \
rm -f /tmp/sysml-test-shard1.log /tmp/sysml-test-shard2.log; \
if [ $$code1 -ne 0 ] || [ $$code2 -ne 0 ]; then \
echo "$(RED)Parallel integration tests failed (shard1=$$code1, shard2=$$code2)$(NC)"; \
exit 1; \
fi; \
echo "$(GREEN)Parallel integration tests completed successfully!$(NC)"

# Test syntax and compilation without VS Code
.PHONY: test-syntax
test-syntax: compile lint
Expand Down Expand Up @@ -209,15 +231,22 @@ clean:
rm -f tsconfig.tsbuildinfo
@echo "$(GREEN)Build artifacts cleaned!$(NC)"

# Clean everything including dependencies, then reinstall and recompile
# Clean everything including dependencies, then reinstall and recompile.
# Keeps package-lock for deterministic installs and force-refreshes local
# file: dependencies (for example local .tgz packages) to avoid stale npm cache.
.PHONY: clean-all
clean-all: clean
@echo "$(YELLOW)Cleaning all files including dependencies...$(NC)"
rm -rf $(NODE_MODULES)
rm -f package-lock.json
@echo "$(GREEN)All files cleaned!$(NC)"
@echo "$(YELLOW)Clearing npm cache to avoid stale local package artifacts...$(NC)"
npm cache clean --force
@echo "$(YELLOW)Refreshing package-lock for local file: dependencies (if any)...$(NC)"
@node -e "const cp=require('child_process');const pkg=require('./package.json');const deps={...(pkg.dependencies||{}),...(pkg.devDependencies||{})};const local=Object.entries(deps).filter(([,ref])=>typeof ref==='string'&&ref.startsWith('file:'));if(local.length===0){console.log('No local file: dependencies found.');process.exit(0);}for(const [name,ref] of local){console.log('Updating lock entry for '+name+' from '+ref);cp.execFileSync('npm',['install',name+'@'+ref,'--package-lock-only','--save-exact','--ignore-scripts','--force'],{stdio:'inherit'});}"
@echo "$(YELLOW)Reinstalling dependencies...$(NC)"
npm install
@echo "$(YELLOW)Refreshing local file: dependencies (if any)...$(NC)"
@node -e "const cp=require('child_process');const pkg=require('./package.json');const deps={...(pkg.dependencies||{}),...(pkg.devDependencies||{})};const local=Object.entries(deps).filter(([,ref])=>typeof ref==='string'&&ref.startsWith('file:'));if(local.length===0){console.log('No local file: dependencies found.');process.exit(0);}for(const [name,ref] of local){console.log('Refreshing '+name+' from '+ref);cp.execFileSync('npm',['install',name+'@'+ref,'--force'],{stdio:'inherit'});}"
@echo "$(YELLOW)Recompiling...$(NC)"
npm run compile
@echo "$(GREEN)Clean rebuild complete - ready for F5 debugging!$(NC)"
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,8 @@ Right-click a package node in the **SysML Model Explorer** → **Visualize Packa
npm install && npm run compile && npm test
```

Note for when packaged as a VSIX, the extension registers its MCP server from the extension install path at activation time. A workspace `.vscode/mcp.json` is only a local development override (for example, to pin Copilot chat to a specific local server build).

## License

MIT
48 changes: 48 additions & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Roadmap

This is a hobby project built for the SysML community and maintained in my spare time.

I welcome feature requests, suggestions, and bug reports. I review all feedback and will address items as time allows.

## Project Goals

- Provide practical, reliable SysML authoring support in VS Code.
- Improve modeling workflows with useful diagnostics, navigation, and visualizations.
- Keep the project approachable for contributors and users.

## Maintenance Model

- This project is maintained on a best-effort basis.
- Response and fix timelines are not guaranteed.
- Issues that affect stability, correctness, or data safety are prioritized.

## Community Feedback

Please open an issue for:

- Bug reports
- Feature requests
- UX suggestions
- Documentation improvements

Helpful issue reports include:

- Steps to reproduce
- Expected vs actual behavior
- Sample SysML snippet or file
- Environment details (OS, VS Code version, extension version)

## Near-Term Focus

- Improve reliability and test coverage
- Continue refining model visualization and dashboard capabilities
- Reduce false positives in diagnostics
- Improve performance for larger models

## Long-Term Direction

- Grow community-driven improvements through feedback and contributions

## Thank You

Thanks for using the extension and helping improve it through feedback and testing.
Loading