VoxSplit
맥용 무료 로컬 AI 스템 분리기 및 보컬 제거기
MassTransit saga 상태 머신을 다이어그램으로 만들고, 작은 YAML 파일로 git에 보관해 C#으로 생성합니다
Diagrams for MassTransit saga state machines: build a saga as a picture, keep it in git as a small YAML file, import and generate C#.
플러그인TypeScript · HTMLGitHub @GravionLabs온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Diagrams for MassTransit saga state machines: build a saga as a picture, keep it in git as a small YAML file, import and generate C#. Web app and VS Code extension. Documentation only, nothing is executed.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Documentation and live demo · Try the editor
Diagrams for MassTransit saga state machines. Build a saga as a picture, keep it in git as a small YAML file, and read it side by side with the code.
Ariadne is a web app (Angular + Foblex f-flow) and a VS Code extension that opens the same diagrams next to the code. Diagrams are plain local files, so they diff and review like code. It is documentation only: diagrams are never executed.
A diagram is a saga state machine, the way MassTransit sagas are written:README 전문 보기 ↗Documentation and live demo · Try the editor
Diagrams for MassTransit saga state machines. Build a saga as a picture, keep it in git as a small YAML file, and read it side by side with the code.
Ariadne is a web app (Angular + Foblex f-flow) and a VS Code extension that opens the same diagrams next to the code. Diagrams are plain local files, so they diff and review like code. It is documentation only: diagrams are never executed.
A diagram is a saga state machine, the way MassTransit sagas are written:
| In the diagram | In MassTransit |
|---|---|
| Initial state (green) and final state (red, double ring) | Initial / Final |
| State (card) | State |
| Transition (arrow) | During(State, When(Event).TransitionTo(Next)) |
| Event on a transition | Event<T>: what moves the saga on |
| External event (teal, with its source) | an event published by another service, e.g. from Payment service |
| Activities on a state: Send a command, Publish an event | WhenEnter(State, b => b.Send(..).Publish(..)) |
| Decision (violet): a state with several transitions | several When(...) in one During(...) |
| Compensation on a state | the undo action for the work done to reach it |
States do things; transitions react to events. A command is sent to exactly one consumer and named in the imperative (ChargePayment), an event is published to any number of subscribers and named in the past tense (OrderAccepted). The inspector hints at this when a name doesn't follow the convention. An event is internal when some state publishes it and external otherwise; Ariadne works that out from the diagram.
Ctrl+Z, Ctrl+Shift+Z).*.saga.yaml files (Ctrl+O, Ctrl+S, Ctrl+Shift+S); older .yaml files still open. Where the browser allows it (Chrome, Edge) saving overwrites the opened file; otherwise it downloads a copy.postMessage({ type: 'ariadne:theme', kind }), kind being light, dark, high-contrast or high-contrast-light.Tab reaches the diagram once; then the arrows move between states and transitions (selecting them), Ctrl+arrow follows a transition, Home/End jump to the first or last state, Ctrl+A selects all, Esc clears, Delete removes the selection, +/-/0 zoom. Tab on reaches the "+" buttons (Enter opens the picker), the inspector and the toolbar. Screen readers hear each state and transition and a live announcement of the selection; prefers-reduced-motion turns the animated fit and centring off.You need Node.js (see .nvmrc) and pnpm (enabled with corepack enable). Ariadne uses pnpm only.
pnpm install
pnpm start # dev server on http://localhost:4200
Then open docs/examples/order.saga.yaml with Open… to see the diagram above.
No Node or pnpm on the machine? Open the repository in the dev container: Dev Containers: Reopen in Container in VS Code, or Code → Codespaces on GitHub.
Other commands:
pnpm test # unit tests (Vitest)
pnpm lint # ESLint
pnpm format:check # Prettier (pnpm format fixes)
pnpm build # production build in apps/web/dist/
The extension opens *.saga.yaml files as diagrams in VS Code, with the same editor as the web app. The file stays a
normal text document, so save, undo, git diff and "Open with Text Editor" work as always.
```saga block.Every release carries the extension as ariadne-vscode-<version>.vsix: download it from the
latest release and run
code --install-extension ariadne-vscode-<version>.vsix. See Ariadne in VS Code and the
extension's README. To try it from source: pnpm --filter ariadne-vscode dev.
docker run -p 8080:8080 ghcr.io/gravionlabs/ariadne:latest, see docs/self-hosting.md. The user guide explains the editor, the C# import and generation, the exports and the VS Code extension. To show a saga in your own web or Angular app, see the viewer and its README (demo pages included).
An AI coding agent can check, draw, import, generate and compare sagas with the ariadne command, through the
ariadne skill:
gh skill install GravionLabs/ariadne ariadneapm install GravionLabs/ariadne/skills/ariadne/plugin marketplace add GravionLabs/ariadne, then /plugin install ariadne@ariadneSee the guide.
The ariadne command (Node 22 or later) is attached to every release:
npm install -g https://github.com/GravionLabs/ariadne/releases/latest/download/ariadne-cli.tgz
ariadne lint docs/examples/*.saga.yaml # exit 1 on errors
ariadne lint --max-warnings 0 --format json order.saga.yaml
ariadne export order.saga.yaml --format svg -o order.svg # mermaid | svg | png | md
ariadne generate order.saga.yaml -o src/Orders # diagram -> C#
ariadne import src/Orders/*.cs -o docs # C# -> diagram
ariadne diff docs/order.saga.yaml src/Orders/*.cs # exit 1 when they differ
From a clone: pnpm --filter @ariadne/cli build, then node apps/cli/dist/ariadne.mjs …. See apps/cli/README.md.
lint reports the same findings as the editor's Problems list.
A diagram is one YAML file, named *.saga.yaml. Only the graph is stored, no positions, so diffs show real changes to the saga:
version: 3
direction: top-bottom
nodes:
- { id: start-1, type: start, name: Initial }
- id: state-1
type: state
name: Reserving stock
activities:
- command: ReserveStock
- { id: end-1, type: end, name: Completed }
edges:
- id: edge-1
source: start-1
target: state-1
event: OrderReceived
eventSource: Shop API
- { id: edge-2, source: state-1, target: end-1, event: StockReserved }
The full format, with every field and the migration rules, is in docs/specs/diagram-format.md. A complete example is docs/examples/order.saga.yaml.
apps/
server/ Node server (Hono) that serves the built app, for the container
cli/ the ariadne command: lint, export, generate, import, diff
vscode/ the VS Code extension (extension host; the editor runs in a webview)
viewer-demo/ a small Angular app that uses the viewer's Angular wrapper (and runs its specs)
site/ the documentation site: docs/guide as a website (VitePress; `pnpm --filter @ariadne/site dev`)
web/ the Angular editor
src/app/
model/ the diagram store with undo/redo (NgRx SignalStore)
editor/ the canvas, state cards, transition labels, inspector, auto-layout, source panel
storage/ FileStorage (open/save behind an interface) and the document service
export/ SVG, PNG, Mermaid and Markdown
packages/
core/ @ariadne/core: model, YAML format, validation, layout, catalog, walkthrough (no framework)
export/ @ariadne/export: SVG, Mermaid and Markdown exports (no browser needed)
masstransit/ @ariadne/masstransit: import saga state machines from C# (tree-sitter), generate C#, diff
editor-protocol/ @ariadne/editor-protocol: the messages between the extension and the editor in its webview
viewer/ @ariadne/viewer: the embeddable <ariadne-saga> viewer and its Angular wrapper (published to npm)
skills/
ariadne/ the agent skill (Agent Skills format; the repository is also its Claude Code plugin)
samples/
sagas/ C# sagas with the diagrams the importer must produce
docs/
adr/ architecture decision records
specs/ the diagram file format and its JSON Schema, the webview protocol
examples/ sample diagrams
The repository is a pnpm workspace (apps/*, packages/*); the root scripts run across all of it.
Decisions are recorded as ADRs: the foundations, YAML files and FileStorage, state machines with auto-layout, commands and events, app state in NgRx SignalStore, activities belong to states, the TypeScript monorepo, importing C# with tree-sitter, the source view, validation, message catalog and walkthrough, generating C# and checking it against the diagram, the server and the container, versioning and releases, the VS Code extension, the embeddable saga viewer, , , , .
Work is tracked on the project board as Epic → Feature → PBI → Task, with GitHub sub-issues.
.vsix on the release; publishing to the Marketplace and Open VSX is planned.See CONTRIBUTING.md for the setup, the scripts, the tests and how work is tracked. In short:
docs/adr/.feature/<issue>-<slug>, and commits and PRs reference the issue.MIT.