File size: 2,245 Bytes
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
// 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
  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][]
}