Background
Device profiles contain connection settings (baudrate, parity, etc.) and known SCPI commands. Currently, the LLM must manually look up a profile, extract settings, and pass them to serial_query — a multi-step process that wastes context and is error-prone.
Current State
get_device_profile (handlers.go:479-503) returns profile with Connection struct
serial_query (handlers.go:417-477) requires all connection params explicitly
Connection struct (devices.go:27-33) has serial-only fields: baudrate, databits, parity, stopbits, timeout_ms
- No
transport field in Connection — assumes serial
- No link between profile lookup and query execution
- LLM workflow:
get_device_profile("XDM1241") → extract baudrate, parity, etc. → serial_query(port, cmd, baudrate=115200, ...) — 2 tool calls + manual parameter copying
Problem
- 2 tool calls required where 1 should suffice
- LLM must parse JSON, extract fields, and re-pass them — error-prone
- Connection settings in profile are informational only, not actionable
- No transport type in profile — can't auto-select serial vs TCP
- Extra tool call wastes LLM context tokens
Proposed Changes
- Add optional
device parameter to scpi_query (or serial_query):
- When provided, auto-lookup device profile from registry
- Apply profile's connection settings as defaults (baudrate, parity, etc.)
- Explicitly provided params override profile defaults
- Add
transport field to Connection struct in device profiles:
- Values:
"serial", "tcp", "usbtmc"
- Default:
"serial" for backward compatibility
- Add optional
address field to Connection for TCP devices (host:port)
- Update device profile JSON schema to include transport info
- Single-call workflow:
scpi_query(device="XDM1241", port="/dev/ttyUSB0", command="*IDN?")
- Profile provides baudrate, parity, etc. automatically
- LLM only needs to specify port (physical mapping) and command
Acceptance Criteria
Affected Files
internal/devices/devices.go — add Transport field to Connection
internal/devices/profiles/*.json — add transport to profiles
internal/tools/tools.go — add device param to query tool
internal/tools/handlers.go — profile lookup + merge logic
internal/tools/handlers_test.go — tests for integrated flow
Background
Device profiles contain connection settings (baudrate, parity, etc.) and known SCPI commands. Currently, the LLM must manually look up a profile, extract settings, and pass them to
serial_query— a multi-step process that wastes context and is error-prone.Current State
get_device_profile(handlers.go:479-503) returns profile withConnectionstructserial_query(handlers.go:417-477) requires all connection params explicitlyConnectionstruct (devices.go:27-33) has serial-only fields: baudrate, databits, parity, stopbits, timeout_mstransportfield inConnection— assumes serialget_device_profile("XDM1241")→ extract baudrate, parity, etc. →serial_query(port, cmd, baudrate=115200, ...)— 2 tool calls + manual parameter copyingProblem
Proposed Changes
deviceparameter toscpi_query(orserial_query):transportfield toConnectionstruct in device profiles:"serial","tcp","usbtmc""serial"for backward compatibilityaddressfield toConnectionfor TCP devices (host:port)scpi_query(device="XDM1241", port="/dev/ttyUSB0", command="*IDN?")Acceptance Criteria
scpi_queryaccepts optionaldeviceparam for auto profile lookupdeviceis specifiedConnectionstruct supportstransportfieldAffected Files
internal/devices/devices.go— addTransportfield toConnectioninternal/devices/profiles/*.json— add transport to profilesinternal/tools/tools.go— adddeviceparam to query toolinternal/tools/handlers.go— profile lookup + merge logicinternal/tools/handlers_test.go— tests for integrated flow