f3efb36435
feat: add gap analysis tools, OOT block loading, and configurable Docker image
...
Source changes spanning three features:
- Gap analysis: 12 new MCP tools (generate_code, load_flowgraph,
search_blocks, get_block_categories, flowgraph options, embedded
Python blocks, expression evaluation, block bypass, export/import)
- OOT support: load_oot_blocks tool + auto-discovery of paths like
/usr/local/share/gnuradio/grc/blocks for third-party modules
- Docker: configurable image parameter on launch_flowgraph for
running OOT-enabled containers (e.g. gnuradio-lora-runtime)
Resolves merge from feat/oot-block-paths into gap analysis work.
All 274 tests pass (204 unit + 70 integration).
2026-01-30 13:55:21 -07:00
e9ac115728
feat: add OOT (Out-of-Tree) block path loading support
...
Add load_oot_blocks MCP tool to dynamically load GNU Radio OOT modules.
Since GRC's Platform.build_library() clears all blocks on every call,
the implementation combines default block paths with OOT paths before
rebuilding. This allows loading custom blocks from:
- /usr/local/share/gnuradio/grc/blocks (locally-built)
- Custom user-specified directories
Implementation:
- PlatformMiddleware.load_oot_paths(): validates paths, combines with
defaults, rebuilds library
- PlatformProvider.load_oot_blocks(): exposes method to MCP layer
- McpPlatformProvider: registers load_oot_blocks tool
Returns useful diagnostics: added_paths, invalid_paths, and block
counts before/after reload.
2026-01-29 18:35:16 -07:00
27f651307e
fix: remove stale lru_cache from FlowGraphMiddleware.get_block
...
The lru_cache on get_block() caused three cache coherence bugs:
1. Removed blocks remained accessible — set_block_params would
modify a detached block object that no longer exists in the
flowgraph, so save_flowgraph would serialize stale state.
2. Re-created blocks with the same auto-generated name would
return the cached (removed) block instead of the new one.
3. Renamed blocks (via set_block_params id=...) left phantom
cache entries under the old name.
Fix: always look up blocks from the live flowgraph. Block lookup
is a linear scan of typically <20 blocks — no cache needed.
Raises KeyError instead of StopIteration for missing blocks.
2026-01-28 21:37:04 -07:00
c793208932
runtime: handle GRC servers without XML-RPC introspection
...
GRC's SimpleXMLRPCServer uses register_instance() which doesn't
expose system.listMethods. Wrap the connectivity check in a
try/except so a Fault is treated as "connected" while
ConnectionRefusedError still propagates.
2026-01-28 20:46:11 -07:00
75d19eb6dd
runtime: add dynamic port allocation for Docker containers
...
Prevent silent Docker bind failures by checking port availability
before container creation. Supports auto-allocation (port=0) and
patches compiled flowgraphs when the embedded XML-RPC port differs
from the requested port.
2026-01-28 14:28:59 -07:00
0afb2f5b6e
runtime: Phase 2 ControlPort/Thrift integration
...
Add ControlPort/Thrift support as an alternative transport to XML-RPC:
New middleware:
- ThriftMiddleware wrapping GNURadioControlPortClient
New MCP tools:
- connect_controlport, disconnect_controlport
- get_knobs (with regex filtering), set_knobs (atomic)
- get_knob_properties (units, min/max, description)
- get_performance_counters (throughput, timing, buffers)
- post_message (PMT injection to block ports)
Docker support:
- enable_controlport param in launch_flowgraph
- ENABLE_CONTROLPORT env in entrypoint.sh
- ControlPort config generation in ~/.gnuradio/config.conf
Models: KnobModel, KnobPropertiesModel, PerfCounterModel,
ThriftConnectionInfoModel, plus ContainerModel updates.
2026-01-28 12:05:32 -07:00
bfab802e05
coverage: add cross-process coverage collection for containerized flowgraphs
...
New MCP tools:
- collect_coverage(name) - combine parallel files, return summary
- generate_coverage_report(name, format) - HTML/XML/JSON reports
- combine_coverage(names) - aggregate across test runs
- delete_coverage(name?, older_than_days?) - cleanup
Modified:
- launch_flowgraph() now accepts enable_coverage parameter
- stop() uses 30s timeout for graceful shutdown (coverage needs atexit)
Docker:
- Dockerfile.gnuradio-coverage extends runtime with python3-coverage
- entrypoint-coverage.sh wraps execution with coverage run
- .coveragerc configured for GNU Radio source paths
Tests: 125 unit tests (21 new), 80% coverage
2026-01-27 13:50:17 -07:00
2084c41228
runtime: Phase 1 Docker + XML-RPC control
...
Add RuntimeProvider with 17 MCP tools for controlling running flowgraphs:
- Container lifecycle: launch, list, stop, remove
- Connection: connect by URL or container name
- Variable control: list, get, set via XML-RPC introspection
- Flowgraph execution: start, stop, lock, unlock
- Visual feedback: screenshot capture, container logs
Docker is optional - 10 tools work without it for external flowgraphs.
Includes:
- DockerMiddleware wrapping docker.DockerClient
- XmlRpcMiddleware wrapping xmlrpc.client.ServerProxy
- Dockerfile with Xvfb + ImageMagick + VNC for headless QT
- 29 new unit tests (71 total)
2026-01-27 09:48:44 -07:00
Yoel bassin
24c442d5c4
fix FastMCP version update that broke api
2026-01-05 20:43:16 +02:00
Yoel Bassin
425b308556
main - feat: Imlement basic MCP server
2025-04-27 22:16:58 +03:00
Yoel Bassin
f5a0629da7
main - fix: Fix using already populated GRC file and connection of hidden ports
2025-04-27 20:51:48 +03:00
Yoel Bassin
6d6e4d0fc2
main - fix: Change BlockModel key to name
2025-04-27 17:16:13 +03:00
Yoel Bassin
ac4105b210
main - feat: Create new BlockTypeModel and allow named ports
2025-04-27 16:58:50 +03:00
Yoel Bassin
42484d6c7d
main - feat: Implement gnuradio element validation and errors
2025-04-27 12:33:29 +03:00
Yoel Bassin
f8174d07a1
main - feat: Implement block params update
2025-04-27 00:18:18 +03:00
Yoel Bassin
5485413efd
main - feat: Implement block connection
2025-04-27 00:02:19 +03:00
Yoel Bassin
73bf514fc1
main - feat: Implement default block naming
2025-04-26 22:05:06 +03:00
Yoel Bassin
185e68f809
main - feat: Add pre-commit and fix all files
2025-04-26 21:52:32 +03:00
Yoel Bassin
37cb51f056
main - fiat: Implement BlockMiddleware and reorganize tests
2025-04-26 21:25:28 +03:00
Yoel Bassin
c5b4be6950
main - feat: Implement flowgraph block removal
2025-04-26 16:40:39 +03:00
Yoel Bassin
a4a3d124bd
main - feat: Implement basic flowgraph
2025-04-26 16:35:43 +03:00
Yoel Bassin
eb0d9fd6be
main - feat: Add real gnuradio data to tests
2025-04-26 16:08:09 +03:00
Yoel Bassin
377dab4ff9
main - feat: Create initial structure
2025-04-26 15:47:56 +03:00