89 lines
4.6 KiB
JSON
89 lines
4.6 KiB
JSON
|
|
{
|
||
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||
|
|
"$id": "https://hermes.bstein.dev/contracts/hux/v1/citation.schema.json",
|
||
|
|
"title": "HUX sources, passages, citations, research notebook",
|
||
|
|
"description": "Research model (HUX-08). A source is where evidence came from; a passage is the exact excerpt; a citation ties a claim in a message to passages with an explicit support verdict; a notebook collects them per research question with assumptions and unresolved questions kept visible.",
|
||
|
|
"$defs": {
|
||
|
|
"source": {
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"required": ["schema", "id", "kind", "title", "classification", "retrieved_at"],
|
||
|
|
"properties": {
|
||
|
|
"schema": {"const": "hux.source.v1"},
|
||
|
|
"id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"kind": {"type": "string", "enum": ["web", "document", "artifact", "memory", "tool_output", "dataset"]},
|
||
|
|
"uri": {"type": "string", "maxLength": 2000},
|
||
|
|
"title": {"type": "string", "minLength": 1, "maxLength": 300},
|
||
|
|
"publisher": {"type": "string", "maxLength": 200},
|
||
|
|
"published_at": {"$ref": "common.schema.json#/$defs/timestamp"},
|
||
|
|
"retrieved_at": {"$ref": "common.schema.json#/$defs/timestamp"},
|
||
|
|
"classification": {"type": "string", "enum": ["primary", "secondary", "unknown"]},
|
||
|
|
"content_hash": {"$ref": "common.schema.json#/$defs/sha256"},
|
||
|
|
"provenance": {"$ref": "common.schema.json#/$defs/provenance"}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"passage": {
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"required": ["schema", "id", "source_id", "text", "hash"],
|
||
|
|
"properties": {
|
||
|
|
"schema": {"const": "hux.passage.v1"},
|
||
|
|
"id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"source_id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"text": {"type": "string", "minLength": 1, "maxLength": 4000},
|
||
|
|
"hash": {"$ref": "common.schema.json#/$defs/sha256"},
|
||
|
|
"locator": {
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"properties": {
|
||
|
|
"page": {"type": "integer", "minimum": 1},
|
||
|
|
"selector": {"type": "string", "maxLength": 500},
|
||
|
|
"line_start": {"type": "integer", "minimum": 1},
|
||
|
|
"line_end": {"type": "integer", "minimum": 1},
|
||
|
|
"char_start": {"type": "integer", "minimum": 0},
|
||
|
|
"char_end": {"type": "integer", "minimum": 0}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"citation": {
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"required": ["schema", "id", "message_id", "claim", "passage_ids", "support"],
|
||
|
|
"properties": {
|
||
|
|
"schema": {"const": "hux.citation.v1"},
|
||
|
|
"id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"message_id": {"type": "string", "minLength": 1, "maxLength": 120},
|
||
|
|
"claim": {"type": "string", "minLength": 1, "maxLength": 1000},
|
||
|
|
"passage_ids": {"type": "array", "minItems": 1, "maxItems": 32, "uniqueItems": true, "items": {"$ref": "common.schema.json#/$defs/id"}},
|
||
|
|
"support": {"type": "string", "enum": ["supports", "partially_supports", "contradicts", "unverified"]},
|
||
|
|
"note": {"type": "string", "maxLength": 500}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"notebook": {
|
||
|
|
"type": "object",
|
||
|
|
"additionalProperties": false,
|
||
|
|
"required": ["schema", "id", "conversation_id", "question", "status", "source_ids", "passage_ids", "citation_ids", "assumptions", "unresolved_questions", "updated_at"],
|
||
|
|
"properties": {
|
||
|
|
"schema": {"const": "hux.research_notebook.v1"},
|
||
|
|
"id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"conversation_id": {"$ref": "common.schema.json#/$defs/id"},
|
||
|
|
"question": {"type": "string", "minLength": 1, "maxLength": 1000},
|
||
|
|
"status": {"type": "string", "enum": ["open", "answered", "abandoned"]},
|
||
|
|
"source_ids": {"type": "array", "uniqueItems": true, "items": {"$ref": "common.schema.json#/$defs/id"}},
|
||
|
|
"passage_ids": {"type": "array", "uniqueItems": true, "items": {"$ref": "common.schema.json#/$defs/id"}},
|
||
|
|
"citation_ids": {"type": "array", "uniqueItems": true, "items": {"$ref": "common.schema.json#/$defs/id"}},
|
||
|
|
"assumptions": {"type": "array", "maxItems": 64, "items": {"type": "string", "minLength": 1, "maxLength": 500}},
|
||
|
|
"unresolved_questions": {"type": "array", "maxItems": 64, "items": {"type": "string", "minLength": 1, "maxLength": 500}},
|
||
|
|
"updated_at": {"$ref": "common.schema.json#/$defs/timestamp"}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"oneOf": [
|
||
|
|
{"$ref": "#/$defs/source"},
|
||
|
|
{"$ref": "#/$defs/passage"},
|
||
|
|
{"$ref": "#/$defs/citation"},
|
||
|
|
{"$ref": "#/$defs/notebook"}
|
||
|
|
]
|
||
|
|
}
|