modelscript/modelscript
GitHub: modelscript/modelscript
一个基于 Node.js/TypeScript 的全栈 Web 原生 Modelica 编译、仿真、优化与可视化框架,支持浏览器和命令行双模式运行。
Stars: 4 | Forks: 0
بسم الله الرحمن الرحيم
奉至仁至慈的真主之名
# ModelScript
ModelScript 是一个综合性的 Modelica 编译、仿真、优化和可视化框架。它提供了一个强大的引擎,用于解析 Modelica 代码、执行语义分析、展平模型、仿真动态系统、求解最优控制问题以及渲染交互式图表——所有这些都可以在浏览器或命令行中完成。
## 单体仓库结构
本项目是一个由 **Lerna**、**Nx** 和 **npm workspaces** 管理的单体仓库 (monorepo)。
| 包 | 描述 |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| [`@modelscript/core`](./packages/core/) | 编译器引擎 — 解析、语义分析、展平、仿真、代码检查 |
| [`@modelscript/cli`](./packages/cli/) | `msc` 命令行接口 — 展平、仿真、优化、代码检查、渲染等 |
| [`@modelscript/api`](./packages/api/) | REST API 服务器 — 仿真、发布、GraphQL、SPARQL 和 RDF |
| [`@modelscript/morsel`](./packages/morsel/) | 可视化 Modelica 编辑器 — 代码编辑、图表查看器、仿真和绘图 |
| [`@modelscript/web`](./packages/web/) | 用于浏览和探索 Modelica 库的 Web 前端 |
| [`@modelscript/ide`](./packages/ide/) | VS Code Web IDE — 基于浏览器的 Modelica 开发环境 |
| [`@modelscript/lsp`](./packages/lsp/) | Language Server Protocol — 补全、悬停提示、诊断、格式化、颜色 |
| [`@modelscript/vscode`](./packages/vscode/) | VS Code 扩展 — 语法高亮、LSP 客户端、图表视图 |
| [`@modelscript/tree-sitter-modelica`](./packages/tree-sitter-modelica/) | Modelica 的 Tree-sitter 语法(原生 + WASM) |
## 核心功能
- **精确解析** — 定制的 Tree-sitter 语法,用于高效、增量的解析
- **语义分析** — 针对复杂 Modelica 层次结构的完整作用域和名称解析
- **展平** — 将层次模型转换为扁平的微分代数方程 (DAE)
- **仿真** — 带有 Pantelides 指标约简和 BLT 排序的 ODE/DAE 求解器
- **优化** — 使用直接配平法的最优控制问题求解器
- **图表渲染** — 交互式 SVG 图表和基于 X6 的可视化布局,支持自动布局
- **语言服务器** — 补全、悬停提示、诊断、格式化和颜色提供器
- **代码检查** — 涵盖语法、类型、语义和方程的 15+ 条检查规则
- **Modelica 脚本** — 用于评估 Modelica 表达式和算法的解释器
- **i18n 支持** — 从 Modelica 模型中提取可翻译的字符串
## 入门指南
### 前置条件
- **Node.js** ≥ 22(参见 `.nvmrc`)
- **emsdk**(构建 Tree-sitter WASM 解析器所需):
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
### 安装
```
git clone https://github.com/modelscript/modelscript.git
cd modelscript
npm install
```
### 构建
构建所有包(通过 Nx 按依赖顺序进行):
```
npm run build
```
### 运行(开发)
同时启动所有服务:
```
npm run dev
```
这将启动:
| 服务 | URL | 描述 |
| --------------------- | --------------------- | -------------------------------------------- |
| Morsel (编辑器) | http://localhost:3002 | 带有图表和仿真的可视化编辑器 |
| Web (库浏览器) | http://localhost:3001 | 浏览和探索 Modelica 库 |
| API | http://localhost:3000 | 用于仿真、发布、查询的 REST API |
| IDE (VS Code Web) | http://localhost:3003 | 带有 Modelica 支持的基于浏览器的 VS Code |
#### AI 聊天(可选)
IDE 包含一个由 WebLLM (Qwen3-0.6B) 驱动的浏览器本地 AI 助手。要启用它,请下载模型权重(约 350 MB,一次性):
```
npm run download-model --workspace=@modelscript/ide
```
下载完成后,重启 `npm run dev` 并在 IDE 侧边栏中打开 **ModelScript AI** 面板。
### CLI 使用
构建完成后,CLI 将以 `msc` 的形式可用:
```
# 将模型展平为 DAE
npx msc flatten Modelica.Electrical.Analog.Examples.CauerLowPassAnalog path/to/MSL
# 模拟模型(默认输出 CSV)
npx msc simulate BouncingBall model.mo --stop-time 5
# 使用 JSON 输出进行模拟
npx msc simulate BouncingBall model.mo --format json
# 求解最优控制问题
npx msc optimize MyModel model.mo \
--objective "u^2" --controls "u" --control-bounds "u:-1:1" --stop-time 10
# 对 Modelica 文件进行 Lint
npx msc lint model.mo
# 将图表渲染为 SVG(输出至 stdout)
npx msc render MyModel model.mo > diagram.svg
```
### 测试
跨所有包运行测试套件:
```
npm test
```
### 代码检查
```
npm run lint
```
### 格式化
```
npm run format
```
### Docker
每次推送到 `main` 分支时,预构建的镜像都会发布到 GitHub Container Registry。
运行最新的镜像而无需构建:
```
docker compose pull # Pull latest images from ghcr.io/modelscript/*
docker compose up -d # Start containers
docker compose down # Stop containers
docker compose logs -f # Tail logs
```
改为从源代码构建:
```
npm run docker:build # Build images locally
npm run docker:up # Start containers
```
| 服务 | 端口 | URL |
| ------- | ---- | --------------------- |
| API | 3000 | http://localhost:3000 |
| Morsel | 3002 | http://localhost:3002 |
| Web | 3001 | http://localhost:3001 |
| IDE | 3003 | http://localhost:3003 |
## 许可证
ModelScript 根据 **AGPL-3.0-or-later** 获得许可。有关详细信息,请参见 [COPYING](./COPYING)。标签:CLI, GraphQL, Lerna, MITM代理, Modelica, Mutation, npm workspaces, Nx, OPA替代, RDF, REST API, Terrascan, VS Code, WiFi技术, 代码编辑器, 代码静态检查, 动态系统建模, 可视化, 图表渲染, 工程仿真, 开源框架, 微服务架构, 持续集成, 最优控制, 模型展平, 浏览器仿真, 策略执行, 系统仿真, 编译器, 自动化攻击, 语法解析, 请求拦截