System console HTTP interface declarations
This source-derived index records handler signatures, explicit return values and errors. Detailed behavior guides supplement this index; delegated service results must be traced into their implementation.
GET /api/health
Source: hr_system_console/api/system_console/main.py, line 387
health()
Handler results (source expressions):
{'ok': True, 'service': 'hr-system-console', 'version': __version__, 'uptimeSec': round(time.time() - app.state.started_at, 3), 'clients': len(app.state.event_hub.clients)}
GET /api/system/summary
Source: hr_system_console/api/system_console/main.py, line 398
system_summary()
Handler results (source expressions):
{'system': {'resources': resources, 'services': services}, 'network': {'adapters': adapters, 'routes': routes}, 'audio': audio, 'usb': usb, 'jetson': app.state.refresh.get('jetson.status')}
GET /api/system/resources
Source: hr_system_console/api/system_console/main.py, line 414
system_resources()
Handler results (source expressions):
app.state.refresh.get('system.resources')
GET /api/system/services
Source: hr_system_console/api/system_console/main.py, line 418
system_services()
Handler results (source expressions):
app.state.refresh.get('system.services')
GET /api/settings/rustdesk
Source: hr_system_console/api/system_console/main.py, line 422
rustdesk_status()
Handler results (source expressions):
await run_blocking(app.state.rustdesk_service.status)
GET /api/settings/system-console/update
Source: hr_system_console/api/system_console/main.py, line 426
system_console_update()
Handler results (source expressions):
await run_blocking(app.state.console_update_service.status)
POST /api/settings/rustdesk/install
Source: hr_system_console/api/system_console/main.py, line 430
rustdesk_install(payload: RustdeskPasswordPayload)
Handler results (source expressions):
await run_task('Install and configure RustDesk', lambda: app.state.rustdesk_service.install(password))
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
POST /api/settings/rustdesk/password
Source: hr_system_console/api/system_console/main.py, line 438
rustdesk_password(payload: RustdeskPasswordPayload)
Handler results (source expressions):
await run_task('Change RustDesk password', lambda: app.state.rustdesk_service.set_password(password))
Explicit handler errors:
ValueError('RustDesk is not installed')
HTTPException(status_code=400, detail=str(error))
POST /api/settings/rustdesk/virtual-display
Source: hr_system_console/api/system_console/main.py, line 449
rustdesk_virtual_display(payload: RustdeskVirtualDisplayPayload)
Handler results (source expressions):
await run_task(f'{action} RustDesk virtual display', lambda: app.state.rustdesk_service.set_virtual_display(payload.enabled))
Explicit handler errors:
ValueError('RustDesk is not installed')
HTTPException(status_code=400, detail=str(error))
GET /api/system/services/{unit}/logs
Source: hr_system_console/api/system_console/main.py, line 463
service_logs(unit: str, lines: int=120)
Handler results (source expressions):
app.state.system_service.service_logs(unit, lines=lines)
Explicit handler errors:
HTTPException(status_code=404, detail=str(error))
GET /api/hrsdk/summary
Source: hr_system_console/api/system_console/main.py, line 470
hrsdk_summary(checkUpdates: bool=False, fetchConfigs: bool=False)
Handler results (source expressions):
result
GET /api/setup/status
Source: hr_system_console/api/system_console/main.py, line 485
setup_status()
Handler results (source expressions):
await run_blocking(app.state.setup_service.status)
GET /api/setup/preflight
Source: hr_system_console/api/system_console/main.py, line 489
setup_preflight()
Handler results (source expressions):
await run_blocking(app.state.setup_service.preflight)
GET /api/setup/logs
Source: hr_system_console/api/system_console/main.py, line 493
setup_logs()
Handler results (source expressions):
await run_blocking(app.state.setup_service.logs)
POST /api/setup/draft
Source: hr_system_console/api/system_console/main.py, line 497
setup_draft(payload: SetupPayload)
Handler results (source expressions):
await run_blocking(app.state.setup_service.save_draft, payload.values)
POST /api/setup/credentials/validate
Source: hr_system_console/api/system_console/main.py, line 501
setup_credentials_validate(payload: SetupPayload)
Handler results (source expressions):
result
Explicit handler errors:
HTTPException(status_code=400, detail=result)
GET /api/releases
Source: hr_system_console/api/system_console/main.py, line 508
releases()
Handler results (source expressions):
await run_blocking(app.state.setup_service.releases)
POST /api/setup/install
Source: hr_system_console/api/system_console/main.py, line 512
setup_install(payload: SetupPayload)
Handler results (source expressions):
await run_task('Install HRSDK', lambda: app.state.setup_service.install(payload.values), after_sdk_install)
POST /api/releases/switch
Source: hr_system_console/api/system_console/main.py, line 516
release_switch(payload: ReleasePayload)
Handler results (source expressions):
await run_task(f'Switch SDK to {payload.version}', lambda: app.state.setup_service.switch_release(payload.version, payload.configRef), lambda _result: refresh_after('system.services', 'hrsdk.summary.light', 'hrsdk.containerLocalStatus'))
GET /api/hrsdk/config
Source: hr_system_console/api/system_console/main.py, line 520
hrsdk_config()
Handler results (source expressions):
app.state.refresh.get('hrsdk.summary.light').get('config', {})
GET /api/hrsdk/runtime-secrets
Source: hr_system_console/api/system_console/main.py, line 524
hrsdk_runtime_secrets()
Handler results (source expressions):
await run_blocking(app.state.setup_service.runtime_secrets_status)
PATCH /api/hrsdk/runtime-secrets
Source: hr_system_console/api/system_console/main.py, line 528
hrsdk_runtime_secrets_update(payload: RuntimeSecretsPayload)
Handler results (source expressions):
await run_blocking(app.state.setup_service.update_runtime_secrets, payload.set, payload.clear)
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
POST /api/hrsdk/config
Source: hr_system_console/api/system_console/main.py, line 539
hrsdk_config_update(payload: HrsdkConfigPayload)
Handler results (source expressions):
result
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
GET /api/hrsdk/containers
Source: hr_system_console/api/system_console/main.py, line 548
hrsdk_containers(checkUpdates: bool=False)
Handler results (source expressions):
app.state.refresh.get('hrsdk.containerLocalStatus')
await app.state.refresh.refresh_and_wait('hrsdk.containerUpdateCheck', force=True)
POST /api/hrsdk/containers/update
Source: hr_system_console/api/system_console/main.py, line 554
hrsdk_containers_update()
Handler results (source expressions):
await run_task('Update HRSDK containers', app.state.hrsdk_service.update_containers, lambda _result: refresh_after('hrsdk.summary.light', 'hrsdk.containerLocalStatus', 'hrsdk.containerUpdateCheck'))
POST /api/hrsdk/containers/update-one
Source: hr_system_console/api/system_console/main.py, line 558
hrsdk_container_update(payload: HrsdkContainerPayload)
Handler results (source expressions):
await run_task(f'Update {payload.repository}', lambda: app.state.hrsdk_service.update_container(payload.repository), lambda _result: refresh_after('hrsdk.summary.light', 'hrsdk.containerLocalStatus', 'hrsdk.containerUpdateCheck'))
GET /api/hrsdk/configs
Source: hr_system_console/api/system_console/main.py, line 562
hrsdk_configs(fetch: bool=False)
Handler results (source expressions):
app.state.refresh.get('hrsdk.configGitStatus')
await app.state.refresh.refresh_and_wait('hrsdk.configGitFetch', force=True)
POST /api/hrsdk/configs/pull
Source: hr_system_console/api/system_console/main.py, line 568
hrsdk_configs_pull()
Handler results (source expressions):
await run_task('Pull hrsdk_configs', app.state.hrsdk_service.pull_configs, lambda _result: refresh_after('hrsdk.summary.light', 'hrsdk.configGitStatus', 'hrsdk.configGitFetch'))
GET /api/hrsdk/servos
Source: hr_system_console/api/system_console/main.py, line 572
hrsdk_servos(scan: bool=True)
Handler results (source expressions):
app.state.refresh.get(key)
GET /api/servos/ports
Source: hr_system_console/api/system_console/main.py, line 579
servo_ports()
Handler results (source expressions):
result
GET /api/servos/configuration
Source: hr_system_console/api/system_console/main.py, line 587
servo_configuration()
Handler results (source expressions):
await run_blocking(app.state.hrsdk_service.servo_configuration)
POST /api/servos/configuration
Source: hr_system_console/api/system_console/main.py, line 591
servo_configuration_select(payload: ServoConfigPayload)
Handler results (source expressions):
await run_blocking(app.state.hrsdk_service.servo_configuration, payload.robotName, payload.robotBody)
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
POST /api/servos/scan
Source: hr_system_console/api/system_console/main.py, line 598
servo_scan(payload: ServoScanPayload)
Handler results (source expressions):
await run_blocking(app.state.servo_service.scan, payload.port, payload.baud, payload.family, payload.fromId, payload.toId)
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
HTTPException(status_code=503, detail=str(error))
POST /api/servos/registers
Source: hr_system_console/api/system_console/main.py, line 607
servo_registers(payload: ServoTargetPayload)
Handler results (source expressions):
await run_blocking(app.state.servo_service.registers, payload.port, payload.baud, payload.family, payload.servoId)
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
HTTPException(status_code=503, detail=str(error))
POST /api/servos/registers/write
Source: hr_system_console/api/system_console/main.py, line 616
servo_register_write(payload: ServoWritePayload)
Handler results (source expressions):
await run_blocking(app.state.servo_service.write_register, payload.port, payload.baud, payload.family, payload.servoId, payload.address, payload.value)
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
HTTPException(status_code=503, detail=str(error))
POST /api/servos/reset-neutral
Source: hr_system_console/api/system_console/main.py, line 625
servo_reset_neutral(payload: ServoTargetPayload)
Handler results (source expressions):
await run_blocking(app.state.servo_service.reset_neutral, payload.port, payload.baud, payload.family, payload.servoId)
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
HTTPException(status_code=503, detail=str(error))
POST /api/servos/move
Source: hr_system_console/api/system_console/main.py, line 634
servo_move(payload: ServoMovePayload)
Handler results (source expressions):
await run_blocking(app.state.servo_service.move, payload.port, payload.baud, payload.family, payload.servoId, payload.position, payload.speed, configured.get('softwareMin') if configured else None, configured.get('softwareMax') if configured else None)
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
HTTPException(status_code=503, detail=str(error))
POST /api/services/{unit}/start
Source: hr_system_console/api/system_console/main.py, line 666
service_start(unit: str)
Handler results (source expressions):
await run_task(f'Start {unit}', lambda: app.state.system_service.control_service(unit, 'start'), lambda _result: refresh_after('system.services', 'hrsdk.summary.light'))
POST /api/services/{unit}/stop
Source: hr_system_console/api/system_console/main.py, line 670
service_stop(unit: str)
Handler results (source expressions):
await run_task(f'Stop {unit}', lambda: app.state.system_service.control_service(unit, 'stop'), lambda _result: refresh_after('system.services', 'hrsdk.summary.light'))
POST /api/services/{unit}/restart
Source: hr_system_console/api/system_console/main.py, line 674
service_restart(unit: str)
Handler results (source expressions):
await run_task(f'Restart {unit}', lambda: app.state.system_service.control_service(unit, 'restart'), after_restart)
GET /api/network/adapters
Source: hr_system_console/api/system_console/main.py, line 683
network_adapters()
Handler results (source expressions):
app.state.refresh.get('network.adapters')
GET /api/network/routes
Source: hr_system_console/api/system_console/main.py, line 687
network_routes()
Handler results (source expressions):
app.state.refresh.get('network.routes')
GET /api/network/internet
Source: hr_system_console/api/system_console/main.py, line 691
network_internet()
Handler results (source expressions):
result
GET /api/network/internet-sharing/status
Source: hr_system_console/api/system_console/main.py, line 701
internet_sharing_status(targetDevice: str='')
Handler results (source expressions):
app.state.refresh.get('network.internetSharing')
GET /api/network/wifi
Source: hr_system_console/api/system_console/main.py, line 707
network_wifi()
Handler results (source expressions):
app.state.refresh.get('network.wifi')
GET /api/network/ethernet
Source: hr_system_console/api/system_console/main.py, line 711
network_ethernet()
Handler results (source expressions):
await run_blocking(app.state.network_service.ethernet)
POST /api/network/ethernet/device
Source: hr_system_console/api/system_console/main.py, line 715
network_ethernet_device(payload: EthernetDevicePayload)
Handler results (source expressions):
result
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
POST /api/network/ethernet/apply
Source: hr_system_console/api/system_console/main.py, line 724
network_ethernet_apply(payload: EthernetPayload)
Handler results (source expressions):
result
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
POST /api/network/ethernet/confirm
Source: hr_system_console/api/system_console/main.py, line 733
network_ethernet_confirm(payload: EthernetTokenPayload)
Handler results (source expressions):
await run_blocking(app.state.network_service.confirm_ethernet, payload.token)
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
POST /api/network/ethernet/rollback
Source: hr_system_console/api/system_console/main.py, line 740
network_ethernet_rollback(payload: EthernetTokenPayload)
Handler results (source expressions):
await run_blocking(app.state.network_service.rollback_ethernet, payload.token)
GET /api/network/ethernet/{device}/test
Source: hr_system_console/api/system_console/main.py, line 744
network_ethernet_test(device: str)
Handler results (source expressions):
await run_blocking(app.state.network_service.test_ethernet, device)
Explicit handler errors:
HTTPException(status_code=404, detail=str(error))
POST /api/network/wifi/connect
Source: hr_system_console/api/system_console/main.py, line 751
network_wifi_connect(payload: WifiConnectPayload)
Handler results (source expressions):
await run_task(f'Connect Wi-Fi {payload.ssid}', lambda: app.state.network_service.connect_wifi(payload.ssid, payload.password or None), lambda _result: refresh_after('network.adapters', 'network.routes', 'network.defaultRoute', 'network.internetPing', 'network.internetSharing', 'network.wifi'))
POST /api/network/wifi/forget
Source: hr_system_console/api/system_console/main.py, line 755
network_wifi_forget(payload: WifiForgetPayload)
Handler results (source expressions):
await run_task(f'Forget Wi-Fi {payload.ssid}', lambda: app.state.network_service.forget_wifi(payload.ssid), lambda _result: refresh_after('network.wifi'))
POST /api/network/wifi/disconnect
Source: hr_system_console/api/system_console/main.py, line 759
network_wifi_disconnect(payload: WifiDisconnectPayload)
Handler results (source expressions):
await run_task('Disconnect Wi-Fi', lambda: app.state.network_service.disconnect_wifi(payload.device), lambda _result: refresh_after('network.adapters', 'network.routes', 'network.defaultRoute', 'network.internetPing', 'network.internetSharing', 'network.wifi'))
POST /api/network/wifi/rescan
Source: hr_system_console/api/system_console/main.py, line 763
network_wifi_rescan()
Handler results (source expressions):
app.state.refresh.get('network.wifiRescan')
POST /api/network/internet-sharing/enable
Source: hr_system_console/api/system_console/main.py, line 768
internet_sharing_enable(payload: InternetSharingPayload)
Handler results (source expressions):
await run_task('Enable internet sharing', lambda: app.state.network_service.set_internet_sharing(True, payload.targetDevice), lambda _result: refresh_after('network.adapters', 'network.routes', 'network.defaultRoute', 'network.internetSharing', 'network.internetPing'))
POST /api/network/internet-sharing/disable
Source: hr_system_console/api/system_console/main.py, line 772
internet_sharing_disable(payload: InternetSharingPayload)
Handler results (source expressions):
await run_task('Disable internet sharing', lambda: app.state.network_service.set_internet_sharing(False, payload.targetDevice), lambda _result: refresh_after('network.adapters', 'network.routes', 'network.defaultRoute', 'network.internetSharing', 'network.internetPing'))
GET /api/audio/devices
Source: hr_system_console/api/system_console/main.py, line 776
audio_devices()
Handler results (source expressions):
app.state.refresh.get('audio.devices')
GET /api/audio/levels
Source: hr_system_console/api/system_console/main.py, line 780
audio_levels()
Handler results (source expressions):
app.state.refresh.get('audio.levelSampler')
POST /api/audio/default-device
Source: hr_system_console/api/system_console/main.py, line 784
audio_default_device(payload: DefaultAudioPayload)
Handler results (source expressions):
result
POST /api/audio/output-choice
Source: hr_system_console/api/system_console/main.py, line 790
audio_output_choice(payload: AudioChoicePayload)
Handler results (source expressions):
result
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
POST /api/audio/input-choice
Source: hr_system_console/api/system_console/main.py, line 799
audio_input_choice(payload: AudioChoicePayload)
Handler results (source expressions):
result
Explicit handler errors:
HTTPException(status_code=400, detail=str(error))
POST /api/audio/volume
Source: hr_system_console/api/system_console/main.py, line 808
audio_volume(payload: VolumePayload)
Handler results (source expressions):
result
POST /api/audio/channel-map
Source: hr_system_console/api/system_console/main.py, line 814
audio_channel_map(payload: ChannelMapPayload)
Handler results (source expressions):
result
GET /api/audio/routing
Source: hr_system_console/api/system_console/main.py, line 820
audio_routing()
Handler results (source expressions):
app.state.refresh.get('audio.routing')
POST /api/audio/routing/apply
Source: hr_system_console/api/system_console/main.py, line 824
audio_routing_apply(payload: RoutingApplyPayload)
Handler results (source expressions):
await run_task('Apply audio routing', lambda: app.state.audio_service.apply_routing(payload.physicalSink, [item.dict() for item in payload.connections] if payload.connections is not None else None, payload.preset, payload.persist), lambda _result: refresh_after('audio.devices', 'audio.routing', 'audio.containerCheck', 'audio.levelSampler'))
POST /api/audio/routing/preset
Source: hr_system_console/api/system_console/main.py, line 833
audio_routing_preset(payload: RoutingPresetPayload)
Handler results (source expressions):
await run_task('Apply audio routing preset', lambda: app.state.audio_service.apply_routing_preset(payload.preset, payload.physicalSink, payload.persist), lambda _result: refresh_after('audio.devices', 'audio.routing', 'audio.containerCheck', 'audio.levelSampler'))
POST /api/audio/routing/test-tone
Source: hr_system_console/api/system_console/main.py, line 837
audio_routing_test_tone(payload: RoutingTonePayload)
Handler results (source expressions):
await run_task('Play audio routing test tone', lambda: app.state.audio_service.test_routing_tone(payload.channel, payload.sink, payload.seconds, payload.mode))
POST /api/audio/routing/reset
Source: hr_system_console/api/system_console/main.py, line 841
audio_routing_reset()
Handler results (source expressions):
await run_task('Reset audio routing', app.state.audio_service.reset_routing, lambda _result: refresh_after('audio.devices', 'audio.routing', 'audio.containerCheck', 'audio.levelSampler'))
GET /api/audio/routing/container-check
Source: hr_system_console/api/system_console/main.py, line 845
audio_routing_container_check(container: str='')
Handler results (source expressions):
app.state.refresh.get('audio.containerCheck')
GET /api/usb/tree
Source: hr_system_console/api/system_console/main.py, line 851
usb_tree()
Handler results (source expressions):
app.state.refresh.get('usb.tree')
GET /api/jetson/status
Source: hr_system_console/api/system_console/main.py, line 855
jetson_status()
Handler results (source expressions):
app.state.refresh.get('jetson.status')
POST /api/jetson/perception/restart
Source: hr_system_console/api/system_console/main.py, line 859
jetson_perception_restart()
Handler results (source expressions):
await run_async_task('Restart Jetson perception', app.state.jetson_service.restart_perception, after)
POST /api/jetson/provision
Source: hr_system_console/api/system_console/main.py, line 867
jetson_provision(payload: SetupPayload)
Handler results (source expressions):
await run_task('Provision Jetson perception', lambda: app.state.setup_service.provision_jetson(payload.values), after_jetson_provision)
POST /api/jetson/update
Source: hr_system_console/api/system_console/main.py, line 871
jetson_update()
Handler results (source expressions):
await run_async_task('Update Jetson SDK containers', app.state.jetson_service.update_sdk, lambda _result: refresh_after('jetson.status'))
GET /api/tasks/{task_id}
Source: hr_system_console/api/system_console/main.py, line 875
task(task_id: str)
Handler results (source expressions):
existing
Explicit handler errors:
HTTPException(status_code=404, detail='Task not found')
WEBSOCKET /ws
Source: hr_system_console/api/system_console/main.py, line 882
websocket_endpoint(websocket: WebSocket)
GET /
Source: hr_system_console/api/system_console/main.py, line 902
index()
Handler results (source expressions):
FileResponse(path)
Explicit handler errors:
HTTPException(status_code=404, detail='Frontend has not been built')
GET /{path:path}
Source: hr_system_console/api/system_console/main.py, line 909
spa(path: str)
Handler results (source expressions):
FileResponse(index_path)
FileResponse(requested)
Explicit handler errors:
HTTPException(status_code=404, detail='Frontend has not been built')