16 KiB
Capability Registry 与审计 Agent 协议开发规格
适用范围:
- Codex 多机协作系统
- 开放式测试硬件能力接入
- 软件审计、硬件审计、多模态审计、总审计 Agent
目标:
- 定义摄像头、麦克风、扬声器、串口、继电器、拇指机器人等能力如何注册、租约、抢占
- 定义审计 Agent 如何声明需要哪些能力、如何领取任务、如何返回结果
- 为后续数据库表结构、API、消息总线和前端 UI 提供统一协议基础
1. 总体设计原则
- 任何真实硬件都不能被 Agent 直接“拿桌面控制权”式使用,必须经过标准化能力层。
- 所有可调用外设都先注册为
Capability,再由租约系统分配使用权。 - 一个能力可以是独占的,也可以是共享只读的,必须在注册时声明。
- 抢占必须有优先级、原因、宽限期、证据和审计日志。
- 审计 Agent 与普通开发线程一样,都只能通过协议调用能力,不能绕过能力层。
- 视频、音频、大体积流优先在边缘节点做预处理,只上传关键证据和必要片段。
2. Capability Registry 设计
2.1 组件划分
Capability Provider运行在具体设备附近,负责暴露本机或本测试台的能力。Capability Registry运行在云端,保存所有能力的元数据、状态、租约和历史。Lease Manager负责发放、续租、释放和过期清理。Preemption Manager负责抢占判定、优先级比较、宽限期通知和安全降级。Capability Gateway对外提供统一 API,屏蔽底层设备差异。Evidence Collector负责把截图、视频片段、串口日志、音频片段等证据统一归档。
2.2 核心实体
2.2.1 CapabilityProvider
表示能力提供方,通常是一台 Mac、Windows、Linux 测试台,或一个挂载了外设的专用盒子。
字段:
provider_idnode_idhostnameplatformgateway_versiononline_statuslast_heartbeat_atnetwork_zoneowner_typeowner_display_nameauth_modelabels
2.2.2 Capability
表示一个可调用能力实例。
字段:
capability_idprovider_idnode_idcapability_typedisplay_namestatushealth_statuslease_mode值:exclusiveshared_readshared_stream
preemptibledefault_prioritysafety_lockedtagslocation_labelmetadata_jsonconstraints_jsonsupported_actionsevidence_modescreated_atupdated_at
2.2.3 CapabilityLease
表示一个能力租约。
字段:
lease_idcapability_idholder_type值:worker_threadaudit_agenthuman_operatorsystem
holder_ref例如:mac-01:thread-abcaudit:hardware-auditor-01
project_idpurposeprioritystatus值:requestedgrantedactiverenew_pendingpreempt_requestedgrace_periodreleasedexpiredrevokedfailed
requested_atgranted_atexpires_atgrace_untilpreempt_reasonevidence_required
2.2.4 CapabilitySession
表示实际执行过程。
字段:
session_idlease_idactionstarted_atended_atstatusinput_summaryresult_summaryartifact_refserror_message
2.2.5 CapabilityArtifact
表示证据或产物。
字段:
artifact_idsession_idartifact_type值:imagevideo_clipaudio_clipserial_logsensor_dumpocr_textdetection_jsontranscript
storage_uricontent_typecaptured_atduration_mschecksummetadata_json
3. 能力类型定义
3.1 Camera
用途:
- 观察设备动作
- 录制关键帧和短视频
- OCR、目标检测、界面识别
关键元数据:
device_pathresolution_optionsmax_fpssupports_snapshotsupports_clip_recordingsupports_audiosupports_ptzfield_of_view
支持动作:
snapshotrecord_clipstart_streamstop_streamset_ptz
3.2 Microphone
关键元数据:
sample_rate_optionschannelsnoise_profilesupports_vad
支持动作:
record_audiostart_audio_streamstop_audio_stream
3.3 Speaker
关键元数据:
output_device_idsupported_formatsmax_volume
支持动作:
play_ttsplay_audio_fileset_volumestop_playback
3.4 SerialPort
关键元数据:
port_namebaud_ratesparity_modessupports_binary
支持动作:
openreadwriteexpect_patterncapture_log
3.5 ThumbRobot
关键元数据:
robot_modelaxis_countsupported_targets例如:touchscreenphysical_buttonkeyboard
movement_precision_mmsupports_long_presssupports_drag
支持动作:
tapdouble_taplong_pressdragtype_keyspress_hardware_button
3.6 Relay
支持动作:
switch_onswitch_offpulse
3.7 ProgrammablePowerSupply
支持动作:
power_onpower_offset_voltageset_current_limitmeasure_output
3.8 ScreenCapture
支持动作:
screenshotrecord_screen_clipocr
4. 注册协议
4.1 Provider 注册
POST /api/v1/capability-providers/register
请求示例:
{
"provider_id": "provider-winlab-01",
"node_id": "win-gpu-02",
"hostname": "win-gpu-02.local",
"platform": "windows",
"gateway_version": "0.1.0",
"network_zone": "lan",
"labels": ["lab", "gpu", "hardware-test"]
}
返回:
{
"provider_id": "provider-winlab-01",
"accepted": true,
"heartbeat_interval_seconds": 10
}
4.2 Capability 批量注册
POST /api/v1/capabilities/register
请求示例:
{
"provider_id": "provider-winlab-01",
"capabilities": [
{
"capability_id": "cam-front-01",
"capability_type": "camera",
"display_name": "前置观察摄像头",
"lease_mode": "exclusive",
"preemptible": true,
"supported_actions": ["snapshot", "record_clip", "start_stream", "stop_stream"],
"evidence_modes": ["image", "video_clip", "ocr_text"],
"metadata_json": {
"resolution_options": ["1920x1080"],
"max_fps": 30
}
},
{
"capability_id": "thumb-robot-01",
"capability_type": "thumb_robot",
"display_name": "拇指机器人 1 号",
"lease_mode": "exclusive",
"preemptible": false,
"supported_actions": ["tap", "long_press", "drag"]
}
]
}
4.3 Heartbeat 与状态更新
POST /api/v1/capabilities/heartbeat
用途:
- 更新 provider 在线状态
- 更新能力健康状态
- 上报正在执行的租约
- 上报本地错误或故障
5. 租约设计
5.1 申请租约
POST /api/v1/capability-leases/request
请求字段:
capability_id或capability_selectorholder_typeholder_refproject_idpurposepriorityrequested_duration_secondsevidence_requiredpreempt_if_needed
请求示例:
{
"capability_id": "cam-front-01",
"holder_type": "audit_agent",
"holder_ref": "audit:multimodal-auditor-01",
"project_id": "proj_device_assistant",
"purpose": "验证设备 LED 与屏幕切换是否符合交互脚本",
"priority": 75,
"requested_duration_seconds": 120,
"evidence_required": true,
"preempt_if_needed": true
}
5.2 续租
POST /api/v1/capability-leases/{lease_id}/renew
5.3 释放
POST /api/v1/capability-leases/{lease_id}/release
5.4 过期清理
Lease Manager 负责:
- 定时回收过期租约
- 清理失联 provider 持有的会话
- 把证据未上传完成的 session 标记为
incomplete_evidence
6. 抢占设计
6.1 优先级建议
100:安全/紧急停机90:人工操作员80:总审计 Agent75:硬件审计 Agent70:多模态审计 Agent65:软件审计 Agent50:普通 worker 线程20:后台采样/非关键任务
6.2 抢占条件
只有以下条件全部满足时允许抢占:
- 目标能力
preemptible=true - 当前租约不是
safety_locked - 新租约优先级高于当前租约
- 抢占原因在白名单中
- 当前 holder 不处于“不可中断动作”窗口
6.3 抢占流程
- 新请求进入 Lease Manager
- Preemption Manager 评估是否允许抢占
- 向当前持有者发送
preempt_requested - 进入
grace_period - 到期后自动释放或强制收回
- 新租约转为
granted - 全过程写事件和审计日志
6.4 不可中断动作
以下动作默认不可中断:
- 机器人正在按压或拖拽
- 可编程电源处于切换瞬间
- 固件烧录
- 继电器脉冲动作未完成
7. Capability 事件流
GET /api/v1/capability-events/stream
事件类型:
provider_registeredcapability_registeredcapability_health_changedlease_requestedlease_grantedlease_renewedlease_release_requestedlease_releasedlease_expiredlease_preempt_requestedlease_preemptedsession_startedsession_completedsession_failedartifact_uploaded
8. 审计 Agent 任务协议
8.1 通用任务请求格式
所有审计任务统一使用 AuditTaskRequest。
字段:
protocol_versionaudit_request_idproject_idproject_nametask_idsource_thread_reftrigger值:milestonemerge_candidatefailure_escalationscheduled_checkhuman_request
audit_type值:softwarehardwaremultimodalchief
priorityobjectivesystem_context_summaryacceptance_criteriarisk_focusevidence_refsartifact_refscapability_requirementstime_budget_secondsresponse_modecreated_atmetadata_json
请求示例:
{
"protocol_version": "1.0",
"audit_request_id": "auditreq_001",
"project_id": "proj_device_assistant",
"task_id": "task_led_validation",
"source_thread_ref": "mac-01:thread-ui-22",
"trigger": "milestone",
"audit_type": "multimodal",
"priority": 70,
"objective": "验证设备被唤醒后,屏幕、LED、语音播报与交互脚本是否一致",
"system_context_summary": "设备端已刷入固件 v0.9.2,等待做端到端唤醒测试",
"acceptance_criteria": [
"LED 在 2 秒内变蓝",
"屏幕切换到 listening 状态",
"扬声器播报欢迎语",
"摄像头观测到机械动作完成"
],
"evidence_refs": [],
"artifact_refs": [],
"capability_requirements": [
{ "capability_type": "camera", "mode": "exclusive" },
{ "capability_type": "speaker", "mode": "exclusive" },
{ "capability_type": "microphone", "mode": "exclusive" },
{ "capability_type": "thumb_robot", "mode": "exclusive" }
],
"time_budget_seconds": 300,
"response_mode": "structured_json"
}
8.2 通用任务响应格式
所有审计任务统一使用 AuditTaskResult。
字段:
audit_request_idaudit_typestatus值:completedfailedneeds_retryneeds_human_review
decision值:passfailwarninginconclusive
confidencesummaryfindingsrequired_actionsused_capabilitiesartifact_refstimelineduration_mscompleted_at
9. 软件审计 Agent 协议
9.1 输入
在通用格式上追加:
repo_refbase_commithead_commitchanged_filesdiff_refsbuild_resultstest_resultscoverage_summaryruntime_logsapi_contract_refsrelease_notes_draft
9.2 输出
regression_risk_levelcoverage_gap_summaryrelease_blockerscontract_breaking_changeslog_anomaliesrecommended_owner
9.3 findings 格式
每条 finding 至少包含:
finding_idseverity值:criticalhighmediumlow
titledescriptionevidence_ref_idssuggested_fix
10. 硬件审计 Agent 协议
10.1 输入
在通用格式上追加:
device_topologyfirmware_versionhardware_revisionserial_log_refssensor_snapshotspower_stateota_resultexpected_state_machinehardware_test_stepsrequired_capabilities
10.2 输出
device_state_assessmentfirmware_mismatchsensor_anomaliesserial_log_findingshardware_blockersrecovery_actions
10.3 典型结论
- 固件版本正确但状态机卡死
- 串口日志与预期不一致
- 传感器波动超阈值
- OTA 成功但设备未进入预期模式
11. 多模态审计 Agent 协议
11.1 输入
在通用格式上追加:
frame_refsvideo_clip_refsaudio_clip_refsscreen_capture_refsocr_text_refsdetector_output_refsinteraction_scriptexpected_visual_statesexpected_audio_statesexpected_actuator_states
11.2 输出
observed_timelinevisual_mismatchesaudio_mismatchesinteraction_failuresperceptual_verdictneeds_human_review_reason
11.3 典型场景
- 摄像头看设备灯光变化是否正确
- 通过视频确认机械动作是否完成
- 通过音频片段判断 TTS 是否播报了正确内容
- 通过屏幕截图和 OCR 判断 UI 状态是否正确切换
12. 总审计 Agent 协议
12.1 输入
总审计 Agent 不直接看全部原始数据,优先读取:
software_audit_resulthardware_audit_resultmultimodal_audit_resultrules_audit_summaryhuman_notes
12.2 输出
final_decision值:approvedrejectedneeds_human_reviewpartial_pass
overall_risk_levelblocking_reasonsrecommended_next_stephandoff_target
13. 能力需求声明格式
用于审计 Agent 和 worker 线程声明需要哪些外设。
字段:
capability_typemode值:exclusiveshared_read
min_duration_secondspreferred_node_tagsfallback_allowedpreempt_if_neededpurpose
示例:
[
{
"capability_type": "camera",
"mode": "exclusive",
"min_duration_seconds": 90,
"preferred_node_tags": ["lab", "device-station-a"],
"fallback_allowed": true,
"preempt_if_needed": true,
"purpose": "记录设备启动后 30 秒内的状态变化"
}
]
14. 最小数据库表建议
建议至少有这些表:
capability_providerscapabilitiescapability_health_snapshotscapability_leasescapability_sessionscapability_artifactsaudit_requestsaudit_resultsaudit_findingsthread_registryinter_thread_messages
15. MVP 实现建议
V1
- 先做
camera、serial_port、thumb_robot - 先支持:
- 注册
- 独占租约
- 基础抢占
- session 留痕
- artifact 归档
- 先做:
- 软件审计 Agent
- 硬件审计 Agent
- 多模态审计 Agent
- 总审计 Agent
V2
- 增加
microphone、speaker、screen_capture - 增加共享只读租约
- 增加跨设备联合测试流程
V3
- 增加策略化预调度
- 增加能力热迁移
- 增加自动抢占编排和更细粒度安全策略
16. 一句话总结
Capability Registry 解决“哪些硬件能被谁调用”的问题,
Lease / Preemption 解决“什么时候谁能占用硬件”的问题,
Audit Agent Protocol 解决“审计任务如何标准化下发和回收”的问题。
这三者合在一起,才能让你的审计 Agent 真正做到可扩展、可监管、可复盘地接管真实世界的测试硬件。