feat: add governed knowledge lifecycle

This commit is contained in:
hailin
2026-07-27 19:01:19 +08:00
parent 1a49ce4eae
commit 07c9ea1cc4
32 changed files with 5893 additions and 178 deletions

View File

@@ -1,4 +1,6 @@
from datetime import datetime
from typing import Any
from uuid import UUID
from ninja import Schema
@@ -29,12 +31,24 @@ class KnowledgeDocumentIn(Schema):
class KnowledgeDocumentOut(Schema):
id: int
public_id: UUID
knowledge_base_id: int
file_name: str
file_type: str
extension: str
mime_type: str
file_size: int
sha256: str
scan_status: str
scan_result: dict[str, Any]
parse_status: str
parse_error: str
processing_attempts: int
task_id: str
has_original: bool
indexed_at: datetime | None
created_at: datetime
updated_at: datetime
class KnowledgeItemIn(Schema):
@@ -42,6 +56,9 @@ class KnowledgeItemIn(Schema):
title: str
problem: str
applicable_scope: str = ""
category_code: str = ""
related_system: str = ""
environment_scope: str = ""
error_code: str = ""
root_cause: str = ""
troubleshooting_steps: str = ""
@@ -56,6 +73,9 @@ class KnowledgeItemOut(Schema):
title: str
problem: str
applicable_scope: str
category_code: str
related_system: str
environment_scope: str
error_code: str
root_cause: str
troubleshooting_steps: str
@@ -81,3 +101,95 @@ class KnowledgeSearchResultOut(Schema):
content: str
score: float
metadata: dict
class TroubleshootingPlanIn(Schema):
knowledge_base_id: int
title: str
problem_pattern: str
applicable_scope: str = ""
category_code: str = ""
related_system: str = ""
environment_scope: str = ""
decision_rules: str = ""
troubleshooting_steps: str
risk_note: str = ""
source_ticket_id: int | None = None
class TroubleshootingPlanOut(Schema):
id: int
knowledge_base_id: int
title: str
problem_pattern: str
applicable_scope: str
category_code: str
related_system: str
environment_scope: str
decision_rules: str
troubleshooting_steps: str
risk_note: str
status: str
source_ticket_id: int | None
created_at: datetime
updated_at: datetime
class AssetVersionUpdateIn(Schema):
content: dict[str, Any]
change_summary: str | None = None
class AssetRevisionIn(Schema):
change_summary: str = ""
class AssetReviewIn(Schema):
comment: str = ""
class AssetRollbackIn(Schema):
source_version: int
change_summary: str = ""
class GovernedAssetVersionOut(Schema):
id: int
version: int
status: str
content: dict[str, Any]
change_summary: str
source_version: int | None
created_by_id: int | None
submitted_by_id: int | None
reviewed_by_id: int | None
review_comment: str
created_at: datetime
updated_at: datetime
submitted_at: datetime | None
reviewed_at: datetime | None
published_at: datetime | None
offline_at: datetime | None
class GovernedAssetOut(Schema):
public_id: UUID
asset_type: str
object_id: int
current_published_version: int | None
versions: list[GovernedAssetVersionOut]
created_at: datetime
updated_at: datetime
class AssetVersionComparisonOut(Schema):
left_version: int
right_version: int
changes: list[dict[str, Any]]
class AssetImpactOut(Schema):
ticket_reference_count: int
ticket_adoption_count: int
support_analysis_count: int
agent_run_ids: list[str]