Task 008 implement boundary questions loop

This commit is contained in:
2026-05-21 19:46:26 +03:00
parent 8aa92ea728
commit b7e2fa34b2
27 changed files with 1883 additions and 24 deletions
+450
View File
@@ -425,6 +425,13 @@
"title": "Assets",
"type": "array"
},
"boundary_questions": {
"items": {
"$ref": "#/components/schemas/BoundaryQuestionSummary"
},
"title": "Boundary Questions",
"type": "array"
},
"claims": {
"items": {
"$ref": "#/components/schemas/ClaimSummary"
@@ -746,6 +753,134 @@
"title": "AssetType",
"type": "string"
},
"BoundaryQuestionListResponse": {
"additionalProperties": false,
"properties": {
"job": {
"anyOf": [
{
"$ref": "#/components/schemas/AgentJobSummary"
},
{
"type": "null"
}
],
"default": null
},
"questions": {
"items": {
"$ref": "#/components/schemas/BoundaryQuestionSummary"
},
"title": "Questions",
"type": "array"
}
},
"required": [
"questions"
],
"title": "BoundaryQuestionListResponse",
"type": "object"
},
"BoundaryQuestionResponse": {
"additionalProperties": false,
"properties": {
"question": {
"$ref": "#/components/schemas/BoundaryQuestionSummary"
}
},
"required": [
"question"
],
"title": "BoundaryQuestionResponse",
"type": "object"
},
"BoundaryQuestionSummary": {
"additionalProperties": false,
"properties": {
"answer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Answer"
},
"article_id": {
"format": "uuid",
"title": "Article Id",
"type": "string"
},
"category": {
"minLength": 1,
"title": "Category",
"type": "string"
},
"created_at": {
"format": "date-time",
"title": "Created At",
"type": "string"
},
"id": {
"format": "uuid",
"title": "Id",
"type": "string"
},
"is_required": {
"default": true,
"title": "Is Required",
"type": "boolean"
},
"question": {
"minLength": 1,
"title": "Question",
"type": "string"
},
"sort_order": {
"minimum": 1,
"title": "Sort Order",
"type": "integer"
},
"updated_at": {
"format": "date-time",
"title": "Updated At",
"type": "string"
}
},
"required": [
"id",
"article_id",
"sort_order",
"category",
"question",
"created_at",
"updated_at"
],
"title": "BoundaryQuestionSummary",
"type": "object"
},
"BoundaryQuestionUpdateRequest": {
"additionalProperties": false,
"properties": {
"answer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Answer"
}
},
"title": "BoundaryQuestionUpdateRequest",
"type": "object"
},
"ClaimRiskLevel": {
"enum": [
"low",
@@ -2677,6 +2812,321 @@
]
}
},
"/api/articles/{article_id}/boundary-questions": {
"get": {
"operationId": "get_boundary_questions_api_articles__article_id__boundary_questions_get",
"parameters": [
{
"in": "path",
"name": "article_id",
"required": true,
"schema": {
"format": "uuid",
"title": "Article Id",
"type": "string"
}
},
{
"in": "header",
"name": "X-Demo-User-Email",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "X-Demo-User-Email"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BoundaryQuestionListResponse"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"summary": "Get Boundary Questions",
"tags": [
"boundary-questions"
]
}
},
"/api/articles/{article_id}/boundary-questions/generate": {
"post": {
"operationId": "post_generate_boundary_questions_api_articles__article_id__boundary_questions_generate_post",
"parameters": [
{
"in": "path",
"name": "article_id",
"required": true,
"schema": {
"format": "uuid",
"title": "Article Id",
"type": "string"
}
},
{
"in": "header",
"name": "X-Demo-User-Email",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "X-Demo-User-Email"
}
}
],
"responses": {
"201": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BoundaryQuestionListResponse"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"summary": "Post Generate Boundary Questions",
"tags": [
"boundary-questions"
]
}
},
"/api/articles/{article_id}/boundary-questions/submit": {
"post": {
"operationId": "post_submit_boundary_questions_api_articles__article_id__boundary_questions_submit_post",
"parameters": [
{
"in": "path",
"name": "article_id",
"required": true,
"schema": {
"format": "uuid",
"title": "Article Id",
"type": "string"
}
},
{
"in": "header",
"name": "X-Demo-User-Email",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "X-Demo-User-Email"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ArticleCreateResponse"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"summary": "Post Submit Boundary Questions",
"tags": [
"boundary-questions"
]
}
},
"/api/articles/{article_id}/boundary-questions/{question_id}": {
"patch": {
"operationId": "patch_boundary_question_api_articles__article_id__boundary_questions__question_id__patch",
"parameters": [
{
"in": "path",
"name": "article_id",
"required": true,
"schema": {
"format": "uuid",
"title": "Article Id",
"type": "string"
}
},
{
"in": "path",
"name": "question_id",
"required": true,
"schema": {
"format": "uuid",
"title": "Question Id",
"type": "string"
}
},
{
"in": "header",
"name": "X-Demo-User-Email",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "X-Demo-User-Email"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BoundaryQuestionUpdateRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BoundaryQuestionResponse"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"summary": "Patch Boundary Question",
"tags": [
"boundary-questions"
]
}
},
"/api/articles/{article_id}/plans/generate": {
"post": {
"operationId": "post_generate_plan_api_articles__article_id__plans_generate_post",
"parameters": [
{
"in": "path",
"name": "article_id",
"required": true,
"schema": {
"format": "uuid",
"title": "Article Id",
"type": "string"
}
},
{
"in": "header",
"name": "X-Demo-User-Email",
"required": false,
"schema": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "X-Demo-User-Email"
}
}
],
"responses": {
"202": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AgentJobListResponse"
}
}
},
"description": "Successful Response"
},
"422": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
"description": "Validation Error"
}
},
"summary": "Post Generate Plan",
"tags": [
"boundary-questions"
]
}
},
"/api/articles/{article_id}/plans/{plan_id}/approve": {
"post": {
"operationId": "approve_plan_api_articles__article_id__plans__plan_id__approve_post",
+26
View File
@@ -68,6 +68,7 @@ export type ArticleDetailResponse = {
agent_jobs?: AgentJobSummary[];
article: ArticleSummary;
assets?: AssetSummary[];
boundary_questions?: BoundaryQuestionSummary[];
claims?: ClaimSummary[];
draft?: DraftSummary | null;
evidence?: EvidenceSummary[];
@@ -116,6 +117,31 @@ export type AssetSummary = {
export type AssetType = "hero_image" | "diagram" | "table" | "inline_image";
export type BoundaryQuestionListResponse = {
job?: AgentJobSummary | null;
questions: BoundaryQuestionSummary[];
};
export type BoundaryQuestionResponse = {
question: BoundaryQuestionSummary;
};
export type BoundaryQuestionSummary = {
answer?: string | null;
article_id: string;
category: string;
created_at: string;
id: string;
is_required?: boolean;
question: string;
sort_order: number;
updated_at: string;
};
export type BoundaryQuestionUpdateRequest = {
answer?: string | null;
};
export type ClaimRiskLevel = "low" | "medium" | "high";
export type ClaimSummary = {