fix(web): expose autonomous runtime readback marker [skip ci]
This commit is contained in:
@@ -847,6 +847,50 @@ function GateMatrixRow({
|
||||
)
|
||||
}
|
||||
|
||||
function AutonomousRuntimeControlReadbackGrid({
|
||||
control,
|
||||
t,
|
||||
}: {
|
||||
control: AiAgentAutonomousRuntimeControlSnapshot
|
||||
t: ReturnType<typeof useTranslations>
|
||||
}) {
|
||||
const rollups = control.rollups
|
||||
|
||||
return (
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, minmax(0, 1fr))', gap: 10 }} className="automation-inventory-current-autonomy-readback-grid">
|
||||
<GateMatrixRow
|
||||
label={t('globalControl.currentAutonomy.readback.marker')}
|
||||
value={control.program_status.deploy_readback_marker}
|
||||
detail={t('globalControl.currentAutonomy.readback.markerDetail', {
|
||||
task: control.program_status.current_task_id,
|
||||
status: control.program_status.status,
|
||||
})}
|
||||
tone="ok"
|
||||
/>
|
||||
<GateMatrixRow
|
||||
label={t('globalControl.currentAutonomy.readback.executor')}
|
||||
value={String(rollups.live_ansible_apply_executed_count ?? 0)}
|
||||
detail={t('globalControl.currentAutonomy.readback.executorDetail', {
|
||||
verifier: rollups.live_post_apply_verifier_count ?? 0,
|
||||
km: rollups.live_km_writeback_count ?? 0,
|
||||
telegram: rollups.live_telegram_receipt_count ?? 0,
|
||||
})}
|
||||
tone={(rollups.live_ansible_apply_executed_count ?? 0) > 0 ? 'ok' : 'warn'}
|
||||
/>
|
||||
<GateMatrixRow
|
||||
label={t('globalControl.currentAutonomy.readback.loop')}
|
||||
value={String(rollups.live_executor_latest_flow_closed_count ?? 0)}
|
||||
detail={t('globalControl.currentAutonomy.readback.loopDetail', {
|
||||
mcp: rollups.mcp_sensor_count ?? 0,
|
||||
rag: rollups.rag_context_query_count ?? 0,
|
||||
playbook: rollups.playbook_decision_class_count ?? 0,
|
||||
})}
|
||||
tone={(rollups.live_executor_latest_flow_closed_count ?? 0) > 0 ? 'ok' : 'warn'}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function AutonomousRuntimeControlPriorityPanel({
|
||||
control,
|
||||
t,
|
||||
@@ -895,6 +939,8 @@ function AutonomousRuntimeControlPriorityPanel({
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<AutonomousRuntimeControlReadbackGrid control={control} t={t} />
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-global-control-kpi-grid">
|
||||
<MetricCard label={t('globalControl.currentAutonomy.metrics.completion')} value={`${control.program_status.implementation_completion_percent}%`} tone="ok" icon={<Gauge size={16} />} />
|
||||
<MetricCard label={t('globalControl.currentAutonomy.metrics.riskTiers')} value={`${control.rollups.automated_risk_tier_count}/3`} tone={control.rollups.automated_risk_tier_count === 3 ? 'ok' : 'warn'} icon={<ShieldCheck size={16} />} />
|
||||
@@ -1085,6 +1131,12 @@ export function AutomationInventoryTab() {
|
||||
.catch(() => undefined)
|
||||
}
|
||||
|
||||
const fetchAutonomousRuntimeControlReadback = () => {
|
||||
apiClient.getAiAgentAutonomousRuntimeControl()
|
||||
.then(value => setAutonomousRuntimeControl(sanitizePublicSnapshot(value)))
|
||||
.catch(() => undefined)
|
||||
}
|
||||
|
||||
const fetchSnapshot = () => {
|
||||
setLoading(true)
|
||||
const requests = [
|
||||
@@ -1272,7 +1324,7 @@ export function AutomationInventoryTab() {
|
||||
] = results
|
||||
|
||||
setSnapshot(settledPublicValue(inventoryResult))
|
||||
setAutonomousRuntimeControl(settledPublicValue(autonomousRuntimeControlResult))
|
||||
setAutonomousRuntimeControl(previous => settledPublicValue(autonomousRuntimeControlResult) ?? previous)
|
||||
setBacklog(settledPublicValue(backlogResult))
|
||||
setBackupTargets(settledPublicValue(targetResult))
|
||||
setBackupReadiness(settledPublicValue(readinessResult))
|
||||
@@ -1458,6 +1510,7 @@ export function AutomationInventoryTab() {
|
||||
|
||||
useEffect(() => {
|
||||
fetchReportTruthQuickView()
|
||||
fetchAutonomousRuntimeControlReadback()
|
||||
fetchSnapshot()
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [])
|
||||
@@ -6500,6 +6553,8 @@ export function AutomationInventoryTab() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<AutonomousRuntimeControlReadbackGrid control={autonomousRuntimeControl} t={t} />
|
||||
|
||||
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(128px, 1fr))', gap: 10 }} className="automation-inventory-global-control-kpi-grid">
|
||||
<MetricCard label={t('globalControl.currentAutonomy.metrics.completion')} value={`${autonomousRuntimeControl.program_status.implementation_completion_percent}%`} tone="ok" icon={<Gauge size={16} />} />
|
||||
<MetricCard label={t('globalControl.currentAutonomy.metrics.riskTiers')} value={`${autonomousRuntimeControl.rollups.automated_risk_tier_count}/3`} tone={autonomousRuntimeControl.rollups.automated_risk_tier_count === 3 ? 'ok' : 'warn'} icon={<ShieldCheck size={16} />} />
|
||||
@@ -20063,6 +20118,7 @@ export function AutomationInventoryTab() {
|
||||
.automation-inventory-visual-grid,
|
||||
.automation-inventory-stage-grid,
|
||||
.automation-inventory-visual-factor-grid,
|
||||
.automation-inventory-current-autonomy-readback-grid,
|
||||
.automation-inventory-global-control-kpi-grid,
|
||||
.automation-inventory-global-control-grid,
|
||||
.automation-inventory-global-control-pipeline-grid,
|
||||
|
||||
@@ -2189,6 +2189,15 @@ export interface AiAgentAutonomousRuntimeControlSnapshot {
|
||||
controlled_executor_operation_receipt_count: number
|
||||
runtime_write_receipt_type_count: number
|
||||
legacy_policy_overridden_count: number
|
||||
live_ansible_apply_executed_count?: number
|
||||
live_executor_latest_flow_closed_count?: number
|
||||
live_km_writeback_count?: number
|
||||
live_post_apply_verifier_count?: number
|
||||
live_telegram_receipt_count?: number
|
||||
mcp_sensor_count?: number
|
||||
rag_context_query_count?: number
|
||||
playbook_decision_class_count?: number
|
||||
deploy_control_classifier_example_count?: number
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user