Northeastern-Electric-Racing / Northeastern-Electric-Racing/Calypso
[SIM] - Unified calypso-sim binary with JSON-RPC streaming control plane
@bracyw is already working on this.
Since Apr 26, 2026.
- Dominant language
- Rust
- Stars
- 2
- Forks
- 2
- Avg merge
- 6d 20h
- Merged PRs (30d)
- 3
Description
Current Features
Two separate simulator binaries:
manual-sim(#292) — interactive keypress injector.simulate— autonomous heartbeat for every topic withsim_freq.
They duplicate the MQTT setup and publish path, they can't run at the same time, and there's no way for an agent to control either one.
Desired Additional Features
Replace both with a single calypso-sim binary (folder layout under src/bin/calypso-sim/) with four modes that can run together:
| Flag | Mode |
|---|---|
--auto |
Autonomous heartbeat (default when no other mode is chosen) |
--key-map FILE |
Interactive raw-mode keypress |
--script FILE |
Replay keymap keys from a text file |
--stream |
JSON-RPC 2.0 over stdio, for an agent |
A per-topic owner field (auto / stream / silenced) lets stream and keymap modes claim / release / silence topics, and the autonomous loop skips topics it doesn't own. Stream methods: publish, claim, release, silence, status, list_topics, ping.
Acceptance Criteria
-
manual-simandsimulateare deleted; replaced bysrc/bin/calypso-sim/modules. - All four modes work and can run together (
--autoruns in the background while--key-mapor--streamis active). -
TopicRegistrytracks ownership; the autonomous tick checks it before publishing. - Stream mode implements the seven methods with JSON-RPC 2.0 errors.
- Tracing goes to stderr; stdout is reserved for JSON-RPC and keymap logs.
- Startup prints a list of topics with no
sim_freq. - README documents the modes, keymap formats, and the stream protocol.
-
cargo clippy --bin calypso-simis clean.
Out of Scope
Stream subscribe for observing other programs, VCU-style request/response, Unix-socket transport, compile-time unsim list.
Builds on #292.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.