Skip to content

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')