feat(investigation): publish incremental reference graphs

Publish graph deltas using the Server-owned cumulative graph contract. Validate historical comparison chart publications and consolidate Agent documentation.
This commit is contained in:
2026-11-11 19:10:41 +08:00
parent 5ee93329a4
commit db87323b69
28 changed files with 2329 additions and 90 deletions
+230 -9
View File
@@ -530,7 +530,7 @@
"progress": {
"anyOf": [
{
"$ref": "#/components/schemas/InvestigationProgress"
"$ref": "#/components/schemas/InvestigationProgressInput"
},
{
"type": "null"
@@ -3540,6 +3540,21 @@
"InvestigationDiagram": {
"additionalProperties": false,
"properties": {
"edges": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/InvestigationGraphEdge"
},
"maxItems": 200,
"type": "array"
},
{
"type": "null"
}
],
"title": "Edges"
},
"mermaid": {
"maxLength": 20000,
"minLength": 1,
@@ -3554,6 +3569,19 @@
"title": "Node Refs",
"type": "array"
},
"source_mermaid": {
"anyOf": [
{
"maxLength": 20000,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"title": "Source Mermaid"
},
"title": {
"minLength": 1,
"title": "Title",
@@ -3578,6 +3606,19 @@
"title": "Action Refs",
"type": "array"
},
"detail": {
"anyOf": [
{
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"title": "Detail"
},
"evidence_refs": {
"items": {
"minLength": 1,
@@ -3608,14 +3649,11 @@
"anyOf": [
{
"enum": [
"pending",
"running",
"completed",
"waiting",
"waiting_human",
"reference",
"recorded",
"needs_input",
"failed",
"skipped",
"cancelled"
"not_taken"
],
"type": "string"
},
@@ -3623,7 +3661,7 @@
"type": "null"
}
],
"description": "Evidence-confirmed node state; waiting means prerequisites/external/system result, waiting_human requires manual authorization/approval/feedback. Unknown stays omitted/null; host controls colors.",
"description": "A saved process-reference annotation, not live execution state. recorded means a finding exists, not that a task or field action completed.",
"title": "Status"
}
},
@@ -3634,6 +3672,153 @@
"title": "InvestigationDiagramNodeRef",
"type": "object"
},
"InvestigationGraphEdge": {
"additionalProperties": false,
"properties": {
"label": {
"anyOf": [
{
"maxLength": 200,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"title": "Label"
},
"source": {
"pattern": "^[A-Za-z_][A-Za-z0-9_-]{0,79}$",
"title": "Source",
"type": "string"
},
"target": {
"pattern": "^[A-Za-z_][A-Za-z0-9_-]{0,79}$",
"title": "Target",
"type": "string"
}
},
"required": [
"source",
"target"
],
"title": "InvestigationGraphEdge",
"type": "object"
},
"InvestigationGraphNodeUpdate": {
"additionalProperties": false,
"properties": {
"action_refs": {
"items": {
"format": "uuid",
"type": "string"
},
"title": "Action Refs",
"type": "array"
},
"detail": {
"anyOf": [
{
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"title": "Detail"
},
"evidence_refs": {
"items": {
"minLength": 1,
"type": "string"
},
"title": "Evidence Refs",
"type": "array"
},
"label": {
"minLength": 1,
"title": "Label",
"type": "string"
},
"map_targets": {
"items": {
"$ref": "#/components/schemas/InvestigationMapTarget"
},
"maxItems": 100,
"title": "Map Targets",
"type": "array"
},
"node_id": {
"pattern": "^[A-Za-z_][A-Za-z0-9_-]{0,79}$",
"title": "Node Id",
"type": "string"
},
"status": {
"anyOf": [
{
"enum": [
"reference",
"recorded",
"needs_input",
"failed",
"not_taken"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional reference annotation: reference, recorded finding, needs_input, failed attempt, or not_taken. No live node/task binding or per-step synchronization is required.",
"title": "Status"
}
},
"required": [
"node_id",
"label"
],
"title": "InvestigationGraphNodeUpdate",
"type": "object"
},
"InvestigationGraphUpdate": {
"additionalProperties": false,
"properties": {
"edges": {
"items": {
"$ref": "#/components/schemas/InvestigationGraphEdge"
},
"maxItems": 200,
"title": "Edges",
"type": "array"
},
"nodes": {
"items": {
"$ref": "#/components/schemas/InvestigationGraphNodeUpdate"
},
"maxItems": 100,
"title": "Nodes",
"type": "array"
},
"title": {
"anyOf": [
{
"maxLength": 200,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
}
},
"title": "InvestigationGraphUpdate",
"type": "object"
},
"InvestigationMapTarget": {
"additionalProperties": false,
"properties": {
@@ -3691,6 +3876,42 @@
"title": "InvestigationProgress",
"type": "object"
},
"InvestigationProgressInput": {
"additionalProperties": false,
"properties": {
"diagram": {
"anyOf": [
{
"$ref": "#/components/schemas/InvestigationDiagram"
},
{
"type": "null"
}
]
},
"graph_update": {
"anyOf": [
{
"$ref": "#/components/schemas/InvestigationGraphUpdate"
},
{
"type": "null"
}
]
},
"summary": {
"maxLength": 20000,
"minLength": 1,
"title": "Summary",
"type": "string"
}
},
"required": [
"summary"
],
"title": "InvestigationProgressInput",
"type": "object"
},
"InvestigationProgressSnapshot": {
"additionalProperties": false,
"properties": {
+1 -1
View File
@@ -3,7 +3,7 @@
"contracts": {
"server": {
"file": "server-v1.openapi.json",
"sha256": "426b8d9170f253aa7132e9376031a7da8c04ac6f6e693948890d6f343420af1b"
"sha256": "7ed3f6485909c3ef7fac8d2083d6931765e4d197e690c3b9914b905a8aa743b2"
}
}
}