Host-side DSL for Adaptive-AUTOSAR-style nodes that talk to Classical AUTOSAR via the Theia CAN/FR gateway. Inspired by ARText.
Project description
artheia
A host-side DSL for modeling Adaptive-AUTOSAR-style components — atomic
nodes with explicit TIPC addresses and typed ports, wired into compositions and
clusters — plus the code generators that turn an .art model into C++
scaffolds, .proto wire types, deploy manifests, and netgraphs for the
Theia runtime.
Inspired by ARText (the syntax aesthetic + the structural concepts: atomic components, ports, prototypes, compositions, connectors), but its own thing — not AUTOSAR-tool-compatible.
Install
pip install -e . # or: pip install --find-links /opt/theia/wheels artheia
Gives you the artheia CLI, the artheia-lsp language server (for the editor
integrations), and artheia-mcp (the generator surface as an MCP server).
The grammar in one breath
Three primitives, bottom to top:
| Primitive | Is a | Owns |
|---|---|---|
| node | thread | one TIPC type/instance, typed ports, a behavior class |
| composition | process (one executable) | node prototypes + in-process wiring (connect) |
| cluster | distribution bundle | compositions + inter-process wiring; the deploy unit |
Around them: message/enum (proto3-equivalent data), interface
(senderReceiver for streams, clientServer for request/reply), and import
across packages.
Example
package system.demo
// --- data ----------------------------------------------------------------
enum Mode { IDLE = 0 RUN = 1 }
message Tick { uint32 seq }
message SetMode { Mode mode }
// --- contracts -----------------------------------------------------------
interface senderReceiver TickStream { } // a stream of Tick
interface clientServer ModeCtl {
operation Set(in r:SetMode) returns Tick
}
// --- a node: one thread, one TIPC endpoint -------------------------------
node atomic Counter {
tipc type=0x80020001 instance=0
ports {
receiver ticks_in requires TickStream // inbound stream
server ctl provides ModeCtl // request/reply surface
}
}
node atomic Driver {
tipc type=0x80020002 instance=0
ports {
sender ticks_out provides TickStream
client mode_call requires ModeCtl
}
}
// --- a composition: the process, wiring prototypes together --------------
composition DemoProc {
prototype Counter counter
prototype Driver driver
connect driver.ticks_out to counter.ticks_in
connect driver.mode_call to counter.ctl
}
// --- a cluster: the deploy/package unit ----------------------------------
cluster Demo {
composition DemoProc proc
}
What you do with a model
artheia parse system/system.art # resolve + validate the tree
artheia check-addresses system/system.art # assert TIPC addresses unique
artheia gen-app --kind fc <component>.art --out apps # C++ scaffold (lib/main/impl)
artheia gen-proto <component>.art --out platform/proto
artheia gen-netgraph <component>.art --out netgraph.json
artheia gen-manifest <component>.art manifest/app.py # deploy manifest module
Run artheia --help for the full command set (~30 generators incl. DBC/FIBEX
import, config-schema migration, and the rig/manifest pipeline). The gen_server
shape follows OTP — handle_call / handle_cast / handle_info per node.
Editor support
.art files get highlighting + LSP (diagnostics, goto-definition, completion)
in VS Code and Emacs via the artheia-lsp server — see the umbrella repo's
contrib/editors/.
Layout
artheia/
grammar/*.tx textX grammar
model/ name resolution + validators
generators/ the gen-* code generators + Jinja2 templates
lsp/ the artheia-lsp language server (pygls)
adapters/ the artheia-mcp server (FastMCP)
cli.py the `artheia` CLI (Click)
License
Apache-2.0 — see LICENSE.
Project details
Release history Release notifications | RSS feed
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 artheia-0.2.0.tar.gz.
File metadata
- Download URL: artheia-0.2.0.tar.gz
- Upload date:
- Size: 299.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
093421fae2277956952c7aa6de79d7d9119b077da132add6e2ad096bb31283d9
|
|
| MD5 |
92907ac5b7dbd06d4fe4cb6f0643a1b1
|
|
| BLAKE2b-256 |
73fd43a8788835c51a51f3ff0c81a1ad610bf9f7e2b33a5520e28ec45f76e73b
|
File details
Details for the file artheia-0.2.0-py3-none-any.whl.
File metadata
- Download URL: artheia-0.2.0-py3-none-any.whl
- Upload date:
- Size: 317.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc3f57f4091f989bee6854404a4d07ef0ef28cb5727b0615d3a3772a74c2aa94
|
|
| MD5 |
3a36e9aba92d2b2121a2e75d1379e9ad
|
|
| BLAKE2b-256 |
6649b9094a1254e8a7ebbbd64bb81ffdca323cc37dcf3f7ed484e6e3ab221414
|