feat(ai): 新增 P2-408 中低風險白名單
Some checks failed
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / tests (push) Successful in 1m33s
CD Pipeline / build-and-deploy (push) Successful in 5m2s
CD Pipeline / post-deploy-checks (push) Successful in 1m32s
Ansible / Reboot Recovery Contract / validate (push) Has been cancelled
Some checks failed
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / tests (push) Successful in 1m33s
CD Pipeline / build-and-deploy (push) Successful in 5m2s
CD Pipeline / post-deploy-checks (push) Successful in 1m32s
Ansible / Reboot Recovery Contract / validate (push) Has been cancelled
This commit is contained in:
@@ -349,6 +349,11 @@ export const apiClient = {
|
||||
return handleResponse<AiAgentReportNoWriteAnalysisRuntimeSnapshot>(res)
|
||||
},
|
||||
|
||||
async getAiAgentLowMediumRiskWhitelist() {
|
||||
const res = await fetch(`${API_BASE_URL}/agents/agent-low-medium-risk-whitelist`)
|
||||
return handleResponse<AiAgentLowMediumRiskWhitelistSnapshot>(res)
|
||||
},
|
||||
|
||||
async getHostRunawayAiopsLoopReadiness() {
|
||||
const res = await fetch(`${API_BASE_URL}/agents/agent-host-runaway-aiops-loop-readiness`)
|
||||
return handleResponse<HostRunawayAiopsLoopReadinessSnapshot>(res)
|
||||
@@ -3349,6 +3354,206 @@ export interface AiAgentReportNoWriteAnalysisRuntimeSnapshot {
|
||||
}>
|
||||
}
|
||||
|
||||
export interface AiAgentLowMediumRiskWhitelistSnapshot {
|
||||
schema_version: 'ai_agent_low_medium_risk_whitelist_v1'
|
||||
generated_at: string
|
||||
program_status: {
|
||||
overall_completion_percent: number
|
||||
current_priority: 'P0' | 'P1' | 'P2' | 'P3'
|
||||
current_task_id: 'P2-408'
|
||||
next_task_id: 'P2-409'
|
||||
read_only_mode: true
|
||||
runtime_authority: 'low_medium_risk_whitelist_no_live_execution_committed_snapshot'
|
||||
status_note: string
|
||||
}
|
||||
source_refs: string[]
|
||||
source_readbacks: Array<{
|
||||
readback_id: string
|
||||
source_schema_version: string
|
||||
source_ref: string
|
||||
endpoint: string
|
||||
owner_agent: 'openclaw' | 'hermes' | 'nemotron' | 'sre'
|
||||
status: string
|
||||
key_readback: string
|
||||
next_action: string
|
||||
}>
|
||||
whitelist_truth: {
|
||||
p2_407_no_write_analysis_loaded: true
|
||||
operation_permission_model_loaded: true
|
||||
candidate_dry_run_evidence_loaded: true
|
||||
report_policy_review_loaded: true
|
||||
dependency_drift_loaded: true
|
||||
low_risk_candidates_ready: true
|
||||
medium_risk_candidates_ready: true
|
||||
dry_run_verifier_required: true
|
||||
rollback_proof_required: true
|
||||
audit_reason_required: true
|
||||
high_risk_redirect_ready: true
|
||||
auto_worker_enabled: false
|
||||
low_risk_live_execution_enabled: false
|
||||
medium_risk_live_execution_enabled: false
|
||||
gateway_queue_write_enabled: false
|
||||
telegram_send_enabled: false
|
||||
bot_api_call_enabled: false
|
||||
receipt_production_write_enabled: false
|
||||
production_write_enabled: false
|
||||
secret_read_enabled: false
|
||||
paid_api_call_enabled: false
|
||||
host_write_enabled: false
|
||||
kubectl_action_enabled: false
|
||||
destructive_operation_enabled: false
|
||||
openclaw_replacement_allowed: false
|
||||
auto_worker_run_count_24h: number
|
||||
low_risk_execution_count_24h: number
|
||||
medium_risk_execution_count_24h: number
|
||||
gateway_queue_write_count_24h: number
|
||||
telegram_send_count_24h: number
|
||||
bot_api_call_count_24h: number
|
||||
receipt_production_write_count_24h: number
|
||||
production_write_count_24h: number
|
||||
secret_read_count_24h: number
|
||||
paid_api_call_count_24h: number
|
||||
host_write_count_24h: number
|
||||
kubectl_action_count_24h: number
|
||||
destructive_operation_count_24h: number
|
||||
truth_note: string
|
||||
}
|
||||
whitelist_candidates: Array<{
|
||||
candidate_id: string
|
||||
display_name: string
|
||||
risk_tier: 'low' | 'medium'
|
||||
owner_agent: 'openclaw' | 'hermes' | 'nemotron' | 'sre'
|
||||
whitelist_status: 'candidate_only_no_live_execution' | 'dry_run_ready_no_live_execution' | 'owner_review_required_no_live_execution'
|
||||
allowed_no_write_outputs: string[]
|
||||
required_evidence: string[]
|
||||
dry_run_verifier_id: string
|
||||
rollback_proof_id: string
|
||||
audit_reason_template_id: string
|
||||
owner_approval_required_for_live_execution: true
|
||||
live_execution_allowed: false
|
||||
production_write_allowed: false
|
||||
side_effect_count: number
|
||||
blocked_runtime_actions: string[]
|
||||
next_gate: string
|
||||
}>
|
||||
dry_run_verifiers: Array<{
|
||||
verifier_id: string
|
||||
display_name: string
|
||||
owner_agent: 'openclaw' | 'hermes' | 'nemotron' | 'sre'
|
||||
verifier_status: 'ready' | 'owner_review_required'
|
||||
required_inputs: string[]
|
||||
pass_condition: string
|
||||
live_readback_allowed: false
|
||||
production_write_allowed: false
|
||||
}>
|
||||
rollback_proofs: Array<{
|
||||
rollback_proof_id: string
|
||||
display_name: string
|
||||
owner_agent: 'openclaw' | 'hermes' | 'nemotron' | 'sre'
|
||||
rollback_scope: string
|
||||
proof_status: 'noop_ready' | 'draft_ready' | 'owner_review_required'
|
||||
rollback_command_allowed: false
|
||||
required_before_live_execution: true
|
||||
}>
|
||||
audit_reason_templates: Array<{
|
||||
template_id: string
|
||||
display_name: string
|
||||
risk_tier: 'low' | 'medium'
|
||||
required_fields: string[]
|
||||
example_reason: string
|
||||
sensitive_payload_allowed: false
|
||||
}>
|
||||
high_risk_redirects: Array<{
|
||||
redirect_id: string
|
||||
display_name: string
|
||||
risk_tier: 'high' | 'critical'
|
||||
owner_agent: 'openclaw' | 'hermes' | 'nemotron' | 'sre'
|
||||
redirect_to: 'P2-409 Owner Review Queue'
|
||||
blocked_runtime_actions: string[]
|
||||
reason: string
|
||||
}>
|
||||
owner_review_gates: Array<{
|
||||
gate_id: string
|
||||
display_name: string
|
||||
owner_agent: 'openclaw' | 'hermes' | 'nemotron' | 'sre'
|
||||
status: 'owner_review_required' | 'blocked_by_runtime_gate' | 'draft_ready'
|
||||
required_fields: string[]
|
||||
acceptance_checks: string[]
|
||||
blocked_runtime_actions: string[]
|
||||
}>
|
||||
activation_boundaries: {
|
||||
read_only_whitelist_allowed: true
|
||||
dry_run_verifier_preview_allowed: true
|
||||
rollback_proof_preview_allowed: true
|
||||
audit_reason_template_allowed: true
|
||||
auto_worker_enabled: false
|
||||
low_risk_live_execution_enabled: false
|
||||
medium_risk_live_execution_enabled: false
|
||||
gateway_queue_write_enabled: false
|
||||
telegram_send_enabled: false
|
||||
bot_api_call_enabled: false
|
||||
receipt_production_write_enabled: false
|
||||
production_write_enabled: false
|
||||
secret_read_enabled: false
|
||||
paid_api_call_enabled: false
|
||||
host_write_enabled: false
|
||||
kubectl_action_enabled: false
|
||||
destructive_operation_enabled: false
|
||||
openclaw_replacement_allowed: false
|
||||
}
|
||||
telegram_policy: {
|
||||
canonical_room: 'AwoooI SRE 戰情室'
|
||||
canonical_room_env: 'SRE_GROUP_CHAT_ID'
|
||||
gateway_queue_write_allowed: false
|
||||
direct_bot_api_allowed: false
|
||||
telegram_send_allowed: false
|
||||
receipt_write_allowed: false
|
||||
policy_note: string
|
||||
}
|
||||
display_redaction_contract: {
|
||||
redaction_required: true
|
||||
unsafe_payload_display_allowed: false
|
||||
private_reasoning_display_allowed: false
|
||||
secret_value_display_allowed: false
|
||||
work_window_transcript_display_allowed: false
|
||||
allowed_display_fields: string[]
|
||||
blocked_display_fields: string[]
|
||||
}
|
||||
rollups: {
|
||||
source_readback_count: number
|
||||
whitelist_candidate_count: number
|
||||
low_risk_candidate_count: number
|
||||
medium_risk_candidate_count: number
|
||||
candidate_only_count: number
|
||||
dry_run_verifier_count: number
|
||||
rollback_proof_count: number
|
||||
audit_reason_template_count: number
|
||||
high_risk_redirect_count: number
|
||||
owner_review_gate_count: number
|
||||
live_execution_approval_required_count: number
|
||||
blocked_runtime_action_count: number
|
||||
auto_worker_run_count: number
|
||||
low_risk_execution_count: number
|
||||
medium_risk_execution_count: number
|
||||
gateway_queue_write_count: number
|
||||
telegram_send_count: number
|
||||
bot_api_call_count: number
|
||||
receipt_production_write_count: number
|
||||
production_write_count: number
|
||||
secret_read_count: number
|
||||
paid_api_call_count: number
|
||||
host_write_count: number
|
||||
kubectl_action_count: number
|
||||
destructive_operation_count: number
|
||||
}
|
||||
next_actions: Array<{
|
||||
task_id: string
|
||||
priority: 'P0' | 'P1' | 'P2' | 'P3'
|
||||
summary: string
|
||||
gate: string
|
||||
}>
|
||||
}
|
||||
|
||||
export interface AiAgentReportAutomationReviewSnapshot {
|
||||
schema_version: 'ai_agent_report_automation_review_v1'
|
||||
generated_at: string
|
||||
|
||||
Reference in New Issue
Block a user