feat(agent): improve investigation contracts and runtime readiness
Generic Container CI/CD / test-build-publish (push) Successful in 1m53s
Agent CI/CD / build-test-publish-and-deploy (push) Successful in 1m53s

This commit is contained in:
2026-11-07 19:43:57 +08:00
parent c7b750b099
commit b8f7edb3ee
29 changed files with 1465 additions and 119 deletions
+374 -2
View File
@@ -4683,6 +4683,13 @@
"title": "Execution Request Id",
"type": "string"
},
"handling_context": {
"additionalProperties": {
"$ref": "#/components/schemas/JsonValue"
},
"title": "Handling Context",
"type": "object"
},
"latest_plan": {
"anyOf": [
{
@@ -5653,6 +5660,13 @@
"title": "Execution Request Id",
"type": "string"
},
"handling_context": {
"additionalProperties": {
"$ref": "#/components/schemas/JsonValue"
},
"title": "Handling Context",
"type": "object"
},
"latest_run": {
"anyOf": [
{
@@ -7382,9 +7396,70 @@
"title": "ScadaLatestReadingsResponse",
"type": "object"
},
"ScadaMonitoringIncident": {
"additionalProperties": false,
"properties": {
"action": {
"enum": [
"raised",
"ongoing",
"resolved"
],
"title": "Action",
"type": "string"
},
"incident_id": {
"format": "uuid",
"title": "Incident Id",
"type": "string"
},
"last_observed_at": {
"format": "date-time",
"title": "Last Observed At",
"type": "string"
},
"recovery_count": {
"maximum": 2.0,
"minimum": 0.0,
"title": "Recovery Count",
"type": "integer"
},
"started_at": {
"format": "date-time",
"title": "Started At",
"type": "string"
},
"status": {
"enum": [
"active",
"resolved"
],
"title": "Status",
"type": "string"
}
},
"required": [
"incident_id",
"status",
"action",
"started_at",
"last_observed_at",
"recovery_count"
],
"title": "ScadaMonitoringIncident",
"type": "object"
},
"ScadaMonitoringResult": {
"additionalProperties": false,
"properties": {
"anomaly_signals": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Anomaly Signals",
"type": "array"
},
"batch_sequence": {
"minimum": 1.0,
"title": "Batch Sequence",
@@ -7401,6 +7476,16 @@
"title": "Detail",
"type": "string"
},
"incident": {
"anyOf": [
{
"$ref": "#/components/schemas/ScadaMonitoringIncident"
},
{
"type": "null"
}
]
},
"knowledge_cutoff": {
"format": "date-time",
"title": "Knowledge Cutoff",
@@ -7465,6 +7550,18 @@
}
],
"title": "Task Id"
},
"weighted": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Weighted"
}
},
"required": [
@@ -7487,6 +7584,22 @@
"additionalProperties": false,
"description": "Project-owned device roles used by the manual SCADA monitoring demo.",
"properties": {
"alert_threshold": {
"default": 0.8,
"exclusiveMinimum": 0.0,
"maximum": 1.0,
"title": "Alert Threshold",
"type": "number"
},
"decision_policy": {
"default": "weighted",
"enum": [
"all_signals",
"weighted"
],
"title": "Decision Policy",
"type": "string"
},
"outlet_flow_device_ids": {
"items": {
"type": "string"
@@ -7504,17 +7617,48 @@
"type": "array"
},
"rule_version": {
"default": "burst-monitor-v1",
"default": "burst-monitor-v2",
"maxLength": 80,
"minLength": 1,
"pattern": "^[a-zA-Z0-9_.-]+$",
"title": "Rule Version",
"type": "string"
},
"weights": {
"$ref": "#/components/schemas/ScadaMonitoringWeights"
}
},
"title": "ScadaMonitoringSettings",
"type": "object"
},
"ScadaMonitoringWeights": {
"additionalProperties": false,
"properties": {
"burst_detection": {
"default": 0.5,
"maximum": 1.0,
"minimum": 0.0,
"title": "Burst Detection",
"type": "number"
},
"outlet_flow": {
"default": 0.1,
"maximum": 1.0,
"minimum": 0.0,
"title": "Outlet Flow",
"type": "number"
},
"pressure": {
"default": 0.4,
"maximum": 1.0,
"minimum": 0.0,
"title": "Pressure",
"type": "number"
}
},
"title": "ScadaMonitoringWeights",
"type": "object"
},
"ScadaQualityRange": {
"additionalProperties": false,
"properties": {
@@ -7700,6 +7844,16 @@
}
]
},
"monitoring_config": {
"anyOf": [
{
"$ref": "#/components/schemas/ScadaMonitoringSettings"
},
{
"type": "null"
}
]
},
"monitoring_interval_seconds": {
"anyOf": [
{
@@ -7738,12 +7892,25 @@
"action": {
"enum": [
"step",
"monitor",
"stop",
"retry"
],
"title": "Action",
"type": "string"
},
"at_time": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "At Time"
},
"expected_revision": {
"minimum": 1.0,
"title": "Expected Revision",
@@ -8074,6 +8241,28 @@
"title": "Latest",
"type": "array"
},
"monitoring_calibration": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Monitoring Calibration"
},
"monitoring_config": {
"anyOf": [
{
"$ref": "#/components/schemas/ScadaMonitoringSettings"
},
{
"type": "null"
}
]
},
"monitoring_count": {
"default": 0,
"title": "Monitoring Count",
@@ -10041,6 +10230,18 @@
"title": "Title",
"type": "string"
},
"x_axis_name": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
],
"title": "X Axis Name"
},
"x_data": {
"items": {
"maxLength": 128,
@@ -10050,6 +10251,18 @@
"minItems": 1,
"title": "X Data",
"type": "array"
},
"y_axis_name": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
],
"title": "Y Axis Name"
}
},
"required": [
@@ -10066,7 +10279,14 @@
"properties": {
"data": {
"items": {
"type": "number"
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"maxItems": 100,
"minItems": 1,
@@ -10077,6 +10297,47 @@
"maxLength": 128,
"title": "Name",
"type": "string"
},
"sample_times": {
"anyOf": [
{
"items": {
"anyOf": [
{
"maxLength": 64,
"pattern": "^(?:[1-9][0-9]{3}|0[1-9][0-9]{2}|00[1-9][0-9]|000[1-9])-[0-9]{2}-[0-9]{2}T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\\.[0-9]+)?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])$",
"type": "string"
},
{
"type": "null"
}
]
},
"maxItems": 100,
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"title": "Sample Times"
},
"type": {
"anyOf": [
{
"enum": [
"line",
"bar",
"scatter"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Type"
}
},
"required": [
@@ -28495,6 +28756,117 @@
]
}
},
"/api/v1/operational-tasks/recovery/reconcile": {
"post": {
"operationId": "post_operational_tasks_recovery_reconcile",
"parameters": [
{
"in": "header",
"name": "X-Project-Id",
"required": true,
"schema": {
"title": "X-Project-Id",
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RecoverExpiredLeasesCommand"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"additionalProperties": {
"type": "integer"
},
"title": "Response Post Operational Tasks Recovery Reconcile",
"type": "object"
}
}
},
"description": "Successful Response"
},
"401": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
},
"description": "Authentication required"
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
},
"description": "Insufficient permission"
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
},
"description": "Resource not found"
},
"409": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
},
"description": "Resource conflict"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
},
"description": "Validation error"
},
"503": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
},
"description": "Dependency unavailable"
}
},
"security": [
{
"OAuth2PasswordBearer": []
}
],
"summary": "Reconcile Task Recoveries",
"tags": [
"Operational Tasks"
]
}
},
"/api/v1/operational-tasks/schedules": {
"get": {
"operationId": "get_operational_tasks_schedules",