generated from coulomb/repo-seed
331 lines
7.1 KiB
Python
331 lines
7.1 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import Any
|
|
|
|
|
|
def confidence_label(confidence: float) -> str:
|
|
if confidence >= 0.8:
|
|
return "high"
|
|
if confidence >= 0.5:
|
|
return "medium"
|
|
return "low"
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Repository:
|
|
id: int
|
|
name: str
|
|
url: str
|
|
description: str | None
|
|
branch: str
|
|
status: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RepositorySnapshot:
|
|
id: int
|
|
repository_id: int
|
|
commit_hash: str
|
|
branch: str
|
|
source_path: str
|
|
file_count: int
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AnalysisRun:
|
|
id: int
|
|
repository_id: int
|
|
snapshot_id: int | None
|
|
status: str
|
|
started_at: str
|
|
completed_at: str | None
|
|
error_message: str | None
|
|
scanner_version: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ReviewDecision:
|
|
id: int
|
|
repository_id: int
|
|
analysis_run_id: int | None
|
|
action: str
|
|
notes: str
|
|
created_at: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ExpectationGap:
|
|
id: int
|
|
repository_id: int
|
|
analysis_run_id: int | None
|
|
expected_type: str
|
|
expected_name: str
|
|
source: str
|
|
notes: str
|
|
status: str
|
|
created_at: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AnalysisRunDiffItem:
|
|
change_type: str
|
|
item_type: str
|
|
key: str
|
|
base: dict[str, Any] | None = None
|
|
target: dict[str, Any] | None = None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AnalysisRunDiffSection:
|
|
added: list[AnalysisRunDiffItem] = field(default_factory=list)
|
|
removed: list[AnalysisRunDiffItem] = field(default_factory=list)
|
|
changed: list[AnalysisRunDiffItem] = field(default_factory=list)
|
|
weakened: list[AnalysisRunDiffItem] = field(default_factory=list)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AnalysisRunDiff:
|
|
repository: Repository
|
|
base_run: AnalysisRun
|
|
target_run: AnalysisRun
|
|
facts: AnalysisRunDiffSection
|
|
chunks: AnalysisRunDiffSection
|
|
candidates: AnalysisRunDiffSection
|
|
approved_entries: AnalysisRunDiffSection
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ObservedFact:
|
|
id: int
|
|
repository_id: int
|
|
analysis_run_id: int
|
|
snapshot_id: int | None
|
|
kind: str
|
|
path: str
|
|
name: str
|
|
value: str
|
|
metadata: dict[str, Any]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ContentChunk:
|
|
id: int
|
|
repository_id: int
|
|
analysis_run_id: int
|
|
snapshot_id: int | None
|
|
path: str
|
|
kind: str
|
|
start_line: int
|
|
end_line: int
|
|
text: str
|
|
metadata: dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ScanSummary:
|
|
analysis_run: AnalysisRun
|
|
snapshot: RepositorySnapshot | None
|
|
facts: list[ObservedFact]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CharacteristicRebuildResult:
|
|
repository: Repository
|
|
analysis_run: AnalysisRun
|
|
dry_run: bool
|
|
confirmed: bool
|
|
cleared_approved: bool
|
|
previous_counts: dict[str, int]
|
|
previous_ids: dict[str, list[int]]
|
|
candidate_counts: dict[str, int]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class SourceReference:
|
|
fact_id: int | None
|
|
path: str
|
|
kind: str
|
|
name: str
|
|
line: int | None = None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CandidateEvidence:
|
|
id: int
|
|
type: str
|
|
reference: str
|
|
strength: str
|
|
status: str
|
|
source_refs: list[SourceReference]
|
|
target_kind: str = "capability"
|
|
target_id: int | None = None
|
|
reference_kind: str = "source"
|
|
reference_id: int | None = None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CandidateFeature:
|
|
id: int
|
|
name: str
|
|
type: str
|
|
location: str
|
|
confidence: float
|
|
status: str
|
|
source_refs: list[SourceReference]
|
|
confidence_label: str = ""
|
|
primary_class: str = ""
|
|
attributes: list[str] = field(default_factory=list)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CandidateCapability:
|
|
id: int
|
|
name: str
|
|
description: str
|
|
inputs: list[str]
|
|
outputs: list[str]
|
|
confidence: float
|
|
status: str
|
|
source_refs: list[SourceReference]
|
|
confidence_label: str = ""
|
|
primary_class: str = "capability"
|
|
attributes: list[str] = field(default_factory=list)
|
|
features: list[CandidateFeature] = field(default_factory=list)
|
|
evidence: list[CandidateEvidence] = field(default_factory=list)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CandidateAbility:
|
|
id: int
|
|
name: str
|
|
description: str
|
|
confidence: float
|
|
status: str
|
|
source_refs: list[SourceReference]
|
|
confidence_label: str = ""
|
|
primary_class: str = "ability"
|
|
attributes: list[str] = field(default_factory=list)
|
|
capabilities: list[CandidateCapability] = field(default_factory=list)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CandidateGraph:
|
|
repository: Repository
|
|
analysis_run: AnalysisRun
|
|
abilities: list[CandidateAbility]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Evidence:
|
|
id: int
|
|
type: str
|
|
reference: str
|
|
strength: str
|
|
source_refs: list[SourceReference] = field(default_factory=list)
|
|
target_kind: str = "capability"
|
|
target_id: int | None = None
|
|
reference_kind: str = "source"
|
|
reference_id: int | None = None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Scope:
|
|
id: int
|
|
name: str
|
|
description: str
|
|
confidence: float
|
|
confidence_label: str = ""
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Feature:
|
|
id: int
|
|
name: str
|
|
type: str
|
|
location: str
|
|
confidence: float
|
|
confidence_label: str = ""
|
|
source_refs: list[SourceReference] = field(default_factory=list)
|
|
primary_class: str = ""
|
|
attributes: list[str] = field(default_factory=list)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Capability:
|
|
id: int
|
|
name: str
|
|
description: str
|
|
inputs: list[str]
|
|
outputs: list[str]
|
|
confidence: float
|
|
confidence_label: str = ""
|
|
primary_class: str = "capability"
|
|
attributes: list[str] = field(default_factory=list)
|
|
features: list[Feature] = field(default_factory=list)
|
|
evidence: list[Evidence] = field(default_factory=list)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Ability:
|
|
id: int
|
|
name: str
|
|
description: str
|
|
confidence: float
|
|
confidence_label: str = ""
|
|
primary_class: str = "ability"
|
|
attributes: list[str] = field(default_factory=list)
|
|
capabilities: list[Capability] = field(default_factory=list)
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RepositoryAbilityMap:
|
|
repository: Repository
|
|
scope: Scope
|
|
abilities: list[Ability]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class SearchResult:
|
|
repository_id: int
|
|
repository_name: str
|
|
match_type: str
|
|
match_name: str
|
|
confidence: float
|
|
confidence_label: str = ""
|
|
match_description: str = ""
|
|
matched_field: str = ""
|
|
ability_id: int | None = None
|
|
ability_name: str | None = None
|
|
capability_id: int | None = None
|
|
capability_name: str | None = None
|
|
evidence_level: str | None = None
|
|
source_reference: str | None = None
|
|
text_score: float = 0.0
|
|
vector_score: float = 0.0
|
|
hybrid_score: float = 0.0
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AbilitySummary:
|
|
id: int
|
|
repository_id: int
|
|
repository_name: str
|
|
name: str
|
|
description: str
|
|
confidence: float
|
|
confidence_label: str = ""
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CapabilitySummary:
|
|
id: int
|
|
repository_id: int
|
|
repository_name: str
|
|
ability_id: int
|
|
ability_name: str
|
|
name: str
|
|
description: str
|
|
confidence: float
|
|
confidence_label: str = ""
|