File size: 2,456 Bytes
414dc55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80cd1f2
 
 
 
 
 
 
414dc55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// TS mirror of the server's PUBLIC wire contract (src/case_zero/api/public_view.py).

export interface Victim {
  name: string
  role: string
  age: number
  sprite: string
  bio: string
}

export interface SuggestedQuestion {
  id: string
  q: string
}

export interface Suspect {
  id: string
  name: string
  role: string
  age: number
  sprite: string
  gender: string
  tag: string
  baselineSuspicion: number
  motive: string
  alibi: string
  quote: string
  greet: string
  suggestedQuestions: SuggestedQuestion[]
}

export interface ThreadMessage {
  from: 'me' | 'them'
  who: string
  t: string
  m: string
}

export interface Evidence {
  id: string
  name: string
  type: string
  icon: string
  time: string
  found: string
  summary: string
  thread?: ThreadMessage[]
  detail?: string
  transcript?: string
  dur?: string
  rows?: string[][]
}

export interface TimelineBeat {
  time: string
  label: string
  locked: boolean
  ev?: string | null
  conflict: boolean
}

export interface FlashbackAccount {
  who: string
  scene: string
  lines: string[]
  flags: number[]
}

export interface Flashback {
  title: string
  a: FlashbackAccount
  b: FlashbackAccount
}

export interface Motive {
  id: string
  text: string
}

export interface StoryBeat {
  scene: string
  kicker: string
  title: string
  text: string
}

export interface PublicCase {
  id: string
  city: string
  district: string
  title: string
  tagline: string
  weather: string
  victim: Victim
  scene: string
  tod: string
  found: string
  cause: string
  // Case-kind display labels (optional on old stored cases; default to homicide wording).
  kind?: string
  kindLabel?: string
  division?: string
  victimStatus?: string
  todLabel?: string
  verdict?: string
  facts: [string, string][]
  bootLines: string[]
  storyBeats: StoryBeat[]
  suspects: Suspect[]
  evidence: Evidence[]
  timeline: TimelineBeat[]
  flashback: Flashback
  motives: Motive[]
}

// --- interrogation / verdict wire shapes ---
export interface InterrogateResult {
  reply: string
  suspicionDelta: number
  suspicion: number
  flags: { rattled?: boolean; contradictionExposed?: boolean; cornered?: boolean }
}

export interface VerdictResult {
  correct: boolean
  verdict: { stamp: string; killerId: string; killerName: string; truth: string }
  score: { points: number; max: number; killerCorrect: boolean; motiveCorrect: boolean; evidenceHits: number }
  stats: [string, string][]
}