@qontinui/shared-types 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/TaskRunFindingActionType.d-B4VmmbB6.d.cts +62 -0
- package/dist/TaskRunFindingActionType.d-B4VmmbB6.d.ts +62 -0
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/task-run.d.cts +3 -62
- package/dist/task-run.d.ts +3 -62
- package/dist/tauri-events.cjs +19 -0
- package/dist/tauri-events.cjs.map +1 -0
- package/dist/tauri-events.d.cts +1160 -0
- package/dist/tauri-events.d.ts +1160 -0
- package/dist/tauri-events.js +1 -0
- package/dist/tauri-events.js.map +1 -0
- package/dist/ui-bridge-ir.d.cts +59 -1
- package/dist/ui-bridge-ir.d.ts +59 -1
- package/package.json +7 -2
- package/src/generated/AppEvent.d.ts +587 -586
- package/src/generated/CanvasPanel.d.ts +35 -0
- package/src/generated/DevSeedFindingPayload.d.ts +30 -0
- package/src/generated/FlowEvent.d.ts +86 -66
- package/src/generated/RecommendationReviewDecisionPayload.d.ts +24 -0
- package/src/generated/RunnerConnectedConnection.d.ts +34 -0
- package/src/generated/RunnerFinding.d.ts +48 -0
- package/src/generated/RunnerFindingCodeContext.d.ts +20 -0
- package/src/generated/RunnerFindingUserInput.d.ts +19 -0
- package/src/generated/RunnerRelayMessage.d.ts +75 -0
- package/src/generated/RunnerStatusEvent.d.ts +67 -0
- package/src/generated/index.ts +430 -421
- package/src/tauri-events/_api.ts +76 -0
- package/src/tauri-events/index.ts +1 -0
- package/src/ui-bridge-ir/document.ts +62 -0
- package/src/ui-bridge-ir/ir.schema.json +25 -0
- package/src/ui-bridge-ir/__tests__/legacy-roster.test.ts +0 -182
|
@@ -0,0 +1,1160 @@
|
|
|
1
|
+
import { T as TaskRunFindingActionType, a as TaskRunFindingCategory, b as TaskRunFindingSeverity, c as TaskRunFindingStatus } from './TaskRunFindingActionType.d-B4VmmbB6.cjs';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
/**
|
|
5
|
+
* This file was automatically generated.
|
|
6
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
7
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A canvas panel rendered in the dashboard widget.
|
|
12
|
+
*
|
|
13
|
+
* Wire-format mirror of the runner's `StoredPanel` struct
|
|
14
|
+
* (`qontinui-runner/src-tauri/src/mcp/canvas.rs`). The runner emits this
|
|
15
|
+
* inside [`AppEvent::CanvasUpdate`] via the `canvas-update` Tauri channel.
|
|
16
|
+
* Field names are snake_case to match the existing TS interface in
|
|
17
|
+
* `qontinui-schemas/ts/src/canvas/index.ts`.
|
|
18
|
+
*
|
|
19
|
+
* `data` stays `serde_json::Value` because each `component` type has a
|
|
20
|
+
* different inner shape (Markdown, CodeDiff, Table, …); the per-component
|
|
21
|
+
* data schemas live in the TS module above and are intentionally not
|
|
22
|
+
* modeled as a Rust discriminated union (would balloon the schema for
|
|
23
|
+
* little gain on the Rust side).
|
|
24
|
+
*/
|
|
25
|
+
interface CanvasPanel {
|
|
26
|
+
component: string;
|
|
27
|
+
created_at: string;
|
|
28
|
+
data: unknown;
|
|
29
|
+
group?: string | null;
|
|
30
|
+
panel_id: string;
|
|
31
|
+
priority: number;
|
|
32
|
+
size: string;
|
|
33
|
+
task_run_id: string;
|
|
34
|
+
title: string;
|
|
35
|
+
updated_at: string;
|
|
36
|
+
[k: string]: unknown;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* eslint-disable */
|
|
40
|
+
/**
|
|
41
|
+
* This file was automatically generated.
|
|
42
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
43
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Events emitted during flow execution for UI updates.
|
|
48
|
+
*
|
|
49
|
+
* Internally tagged with `"type"` and snake_case variant names.
|
|
50
|
+
*/
|
|
51
|
+
type FlowEvent =
|
|
52
|
+
| {
|
|
53
|
+
flow_id: string;
|
|
54
|
+
flow_name: string;
|
|
55
|
+
instance_id: string;
|
|
56
|
+
type: "flow_started";
|
|
57
|
+
[k: string]: unknown;
|
|
58
|
+
}
|
|
59
|
+
| {
|
|
60
|
+
instance_id: string;
|
|
61
|
+
step_id: string;
|
|
62
|
+
step_name: string;
|
|
63
|
+
step_type: string;
|
|
64
|
+
type: "step_started";
|
|
65
|
+
[k: string]: unknown;
|
|
66
|
+
}
|
|
67
|
+
| {
|
|
68
|
+
duration_ms: number;
|
|
69
|
+
error?: string | null;
|
|
70
|
+
instance_id: string;
|
|
71
|
+
outputs: {
|
|
72
|
+
[k: string]: unknown;
|
|
73
|
+
};
|
|
74
|
+
step_id: string;
|
|
75
|
+
success: boolean;
|
|
76
|
+
type: "step_completed";
|
|
77
|
+
[k: string]: unknown;
|
|
78
|
+
}
|
|
79
|
+
| {
|
|
80
|
+
duration_ms: number;
|
|
81
|
+
error?: string | null;
|
|
82
|
+
flow_id: string;
|
|
83
|
+
instance_id: string;
|
|
84
|
+
success: boolean;
|
|
85
|
+
total_steps: number;
|
|
86
|
+
type: "flow_completed";
|
|
87
|
+
[k: string]: unknown;
|
|
88
|
+
}
|
|
89
|
+
| {
|
|
90
|
+
instance_id: string;
|
|
91
|
+
options: string[];
|
|
92
|
+
prompt: string;
|
|
93
|
+
step_id: string;
|
|
94
|
+
type: "waiting_for_input";
|
|
95
|
+
[k: string]: unknown;
|
|
96
|
+
}
|
|
97
|
+
| {
|
|
98
|
+
completed: number;
|
|
99
|
+
instance_id: string;
|
|
100
|
+
step_id: string;
|
|
101
|
+
total: number;
|
|
102
|
+
type: "parallel_progress";
|
|
103
|
+
[k: string]: unknown;
|
|
104
|
+
}
|
|
105
|
+
| {
|
|
106
|
+
flow_id: string;
|
|
107
|
+
instance_id: string;
|
|
108
|
+
/**
|
|
109
|
+
* Step the flow was paused at (`null` if no current step).
|
|
110
|
+
*/
|
|
111
|
+
step_id?: string | null;
|
|
112
|
+
type: "flow_paused";
|
|
113
|
+
[k: string]: unknown;
|
|
114
|
+
}
|
|
115
|
+
| {
|
|
116
|
+
flow_id: string;
|
|
117
|
+
instance_id: string;
|
|
118
|
+
/**
|
|
119
|
+
* Step execution will resume from (`null` if no current step).
|
|
120
|
+
*/
|
|
121
|
+
step_id?: string | null;
|
|
122
|
+
type: "flow_resumed";
|
|
123
|
+
[k: string]: unknown;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
/* eslint-disable */
|
|
127
|
+
/**
|
|
128
|
+
* This file was automatically generated.
|
|
129
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
130
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Unified application events for frontend communication.
|
|
137
|
+
*
|
|
138
|
+
* Adjacently tagged: each variant serializes as
|
|
139
|
+
* `{"event_type": "<VariantName>", "data": {..}}`.
|
|
140
|
+
* The React frontend dispatches on `event_type` and reads `data`.
|
|
141
|
+
*/
|
|
142
|
+
type AppEvent =
|
|
143
|
+
| {
|
|
144
|
+
data: {
|
|
145
|
+
data: unknown;
|
|
146
|
+
event: string;
|
|
147
|
+
sequence: number;
|
|
148
|
+
timestamp: number;
|
|
149
|
+
[k: string]: unknown;
|
|
150
|
+
};
|
|
151
|
+
event_type: "ExecutorEvent";
|
|
152
|
+
[k: string]: unknown;
|
|
153
|
+
}
|
|
154
|
+
| {
|
|
155
|
+
data: {
|
|
156
|
+
event_type: string;
|
|
157
|
+
node: unknown;
|
|
158
|
+
path: string[];
|
|
159
|
+
sequence: number;
|
|
160
|
+
timestamp: number;
|
|
161
|
+
[k: string]: unknown;
|
|
162
|
+
};
|
|
163
|
+
event_type: "ExecutorTreeEvent";
|
|
164
|
+
[k: string]: unknown;
|
|
165
|
+
}
|
|
166
|
+
| {
|
|
167
|
+
data: {
|
|
168
|
+
details?: string | null;
|
|
169
|
+
message: string;
|
|
170
|
+
[k: string]: unknown;
|
|
171
|
+
};
|
|
172
|
+
event_type: "ExecutorError";
|
|
173
|
+
[k: string]: unknown;
|
|
174
|
+
}
|
|
175
|
+
| {
|
|
176
|
+
data: {
|
|
177
|
+
data?: unknown;
|
|
178
|
+
error?: string | null;
|
|
179
|
+
id: string;
|
|
180
|
+
success: boolean;
|
|
181
|
+
[k: string]: unknown;
|
|
182
|
+
};
|
|
183
|
+
event_type: "ExecutorResponse";
|
|
184
|
+
[k: string]: unknown;
|
|
185
|
+
}
|
|
186
|
+
| {
|
|
187
|
+
data: {
|
|
188
|
+
data: unknown;
|
|
189
|
+
[k: string]: unknown;
|
|
190
|
+
};
|
|
191
|
+
event_type: "ImageRecognition";
|
|
192
|
+
[k: string]: unknown;
|
|
193
|
+
}
|
|
194
|
+
| {
|
|
195
|
+
data: {
|
|
196
|
+
data: unknown;
|
|
197
|
+
event: string;
|
|
198
|
+
sequence: number;
|
|
199
|
+
timestamp: number;
|
|
200
|
+
[k: string]: unknown;
|
|
201
|
+
};
|
|
202
|
+
event_type: "ExtractionEvent";
|
|
203
|
+
[k: string]: unknown;
|
|
204
|
+
}
|
|
205
|
+
| {
|
|
206
|
+
data: {
|
|
207
|
+
details?: string | null;
|
|
208
|
+
message: string;
|
|
209
|
+
[k: string]: unknown;
|
|
210
|
+
};
|
|
211
|
+
event_type: "ExtractionError";
|
|
212
|
+
[k: string]: unknown;
|
|
213
|
+
}
|
|
214
|
+
| {
|
|
215
|
+
data: {
|
|
216
|
+
data?: unknown;
|
|
217
|
+
error?: string | null;
|
|
218
|
+
id: string;
|
|
219
|
+
success: boolean;
|
|
220
|
+
[k: string]: unknown;
|
|
221
|
+
};
|
|
222
|
+
event_type: "ExtractionResponse";
|
|
223
|
+
[k: string]: unknown;
|
|
224
|
+
}
|
|
225
|
+
| {
|
|
226
|
+
data: {
|
|
227
|
+
elements_processed?: number | null;
|
|
228
|
+
error?: string | null;
|
|
229
|
+
message: string;
|
|
230
|
+
percent?: number | null;
|
|
231
|
+
project_id: string;
|
|
232
|
+
status: string;
|
|
233
|
+
total_elements?: number | null;
|
|
234
|
+
[k: string]: unknown;
|
|
235
|
+
};
|
|
236
|
+
event_type: "RagProgress";
|
|
237
|
+
[k: string]: unknown;
|
|
238
|
+
}
|
|
239
|
+
| {
|
|
240
|
+
data: {
|
|
241
|
+
failed: number;
|
|
242
|
+
project_id: string;
|
|
243
|
+
success: boolean;
|
|
244
|
+
successful: number;
|
|
245
|
+
total_processed: number;
|
|
246
|
+
web_sync_error?: string | null;
|
|
247
|
+
web_sync_success: boolean;
|
|
248
|
+
[k: string]: unknown;
|
|
249
|
+
};
|
|
250
|
+
event_type: "RagCompletion";
|
|
251
|
+
[k: string]: unknown;
|
|
252
|
+
}
|
|
253
|
+
| {
|
|
254
|
+
data: FlowEvent;
|
|
255
|
+
event_type: "FlowEvent";
|
|
256
|
+
[k: string]: unknown;
|
|
257
|
+
}
|
|
258
|
+
| {
|
|
259
|
+
data: {
|
|
260
|
+
content: string;
|
|
261
|
+
content_type?: string | null;
|
|
262
|
+
session_id: string;
|
|
263
|
+
[k: string]: unknown;
|
|
264
|
+
};
|
|
265
|
+
event_type: "AiOutput";
|
|
266
|
+
[k: string]: unknown;
|
|
267
|
+
}
|
|
268
|
+
| {
|
|
269
|
+
data: {
|
|
270
|
+
finding: unknown;
|
|
271
|
+
[k: string]: unknown;
|
|
272
|
+
};
|
|
273
|
+
event_type: "FindingDetected";
|
|
274
|
+
[k: string]: unknown;
|
|
275
|
+
}
|
|
276
|
+
| {
|
|
277
|
+
data: {
|
|
278
|
+
finding: unknown;
|
|
279
|
+
[k: string]: unknown;
|
|
280
|
+
};
|
|
281
|
+
event_type: "FindingResolved";
|
|
282
|
+
[k: string]: unknown;
|
|
283
|
+
}
|
|
284
|
+
| {
|
|
285
|
+
data: {
|
|
286
|
+
data: unknown;
|
|
287
|
+
[k: string]: unknown;
|
|
288
|
+
};
|
|
289
|
+
event_type: "TestNavigation";
|
|
290
|
+
[k: string]: unknown;
|
|
291
|
+
}
|
|
292
|
+
| {
|
|
293
|
+
data: {
|
|
294
|
+
data: unknown;
|
|
295
|
+
[k: string]: unknown;
|
|
296
|
+
};
|
|
297
|
+
event_type: "UiBridgeRequest";
|
|
298
|
+
[k: string]: unknown;
|
|
299
|
+
}
|
|
300
|
+
| {
|
|
301
|
+
data: {
|
|
302
|
+
/**
|
|
303
|
+
* Current iteration number.
|
|
304
|
+
*/
|
|
305
|
+
iteration: number;
|
|
306
|
+
/**
|
|
307
|
+
* Current phase (setup, verification, agentic, completion).
|
|
308
|
+
*/
|
|
309
|
+
phase: string;
|
|
310
|
+
/**
|
|
311
|
+
* Optional additional state data.
|
|
312
|
+
*/
|
|
313
|
+
state_data?: {
|
|
314
|
+
[k: string]: unknown;
|
|
315
|
+
};
|
|
316
|
+
/**
|
|
317
|
+
* Task run ID.
|
|
318
|
+
*/
|
|
319
|
+
task_run_id: string;
|
|
320
|
+
/**
|
|
321
|
+
* Current workflow stage name.
|
|
322
|
+
*/
|
|
323
|
+
workflow_stage: string;
|
|
324
|
+
[k: string]: unknown;
|
|
325
|
+
};
|
|
326
|
+
event_type: "OrchestratorStateChange";
|
|
327
|
+
[k: string]: unknown;
|
|
328
|
+
}
|
|
329
|
+
| {
|
|
330
|
+
data: {
|
|
331
|
+
/**
|
|
332
|
+
* Optional details about the step.
|
|
333
|
+
*/
|
|
334
|
+
details?: {
|
|
335
|
+
[k: string]: unknown;
|
|
336
|
+
};
|
|
337
|
+
/**
|
|
338
|
+
* Status: "started", "running", "completed", "failed", "skipped".
|
|
339
|
+
*/
|
|
340
|
+
status: string;
|
|
341
|
+
/**
|
|
342
|
+
* Step index (0-based).
|
|
343
|
+
*/
|
|
344
|
+
step_index: number;
|
|
345
|
+
/**
|
|
346
|
+
* Step name/description.
|
|
347
|
+
*/
|
|
348
|
+
step_name: string;
|
|
349
|
+
/**
|
|
350
|
+
* Task run ID.
|
|
351
|
+
*/
|
|
352
|
+
task_run_id: string;
|
|
353
|
+
/**
|
|
354
|
+
* Timestamp in milliseconds.
|
|
355
|
+
*/
|
|
356
|
+
timestamp: number;
|
|
357
|
+
[k: string]: unknown;
|
|
358
|
+
};
|
|
359
|
+
event_type: "StepProgress";
|
|
360
|
+
[k: string]: unknown;
|
|
361
|
+
}
|
|
362
|
+
| {
|
|
363
|
+
data: {
|
|
364
|
+
/**
|
|
365
|
+
* Optional additional details.
|
|
366
|
+
*/
|
|
367
|
+
details?: {
|
|
368
|
+
[k: string]: unknown;
|
|
369
|
+
};
|
|
370
|
+
/**
|
|
371
|
+
* Current iteration (if applicable).
|
|
372
|
+
*/
|
|
373
|
+
iteration?: number | null;
|
|
374
|
+
/**
|
|
375
|
+
* Status: "running", "completed", "failed", "stopped", "paused".
|
|
376
|
+
*/
|
|
377
|
+
status: string;
|
|
378
|
+
/**
|
|
379
|
+
* Task run ID.
|
|
380
|
+
*/
|
|
381
|
+
task_run_id: string;
|
|
382
|
+
/**
|
|
383
|
+
* Timestamp in milliseconds.
|
|
384
|
+
*/
|
|
385
|
+
timestamp: number;
|
|
386
|
+
[k: string]: unknown;
|
|
387
|
+
};
|
|
388
|
+
event_type: "TaskRunUpdate";
|
|
389
|
+
[k: string]: unknown;
|
|
390
|
+
}
|
|
391
|
+
| {
|
|
392
|
+
data: {
|
|
393
|
+
/**
|
|
394
|
+
* Approval request ID.
|
|
395
|
+
*/
|
|
396
|
+
approval_id: string;
|
|
397
|
+
/**
|
|
398
|
+
* Current iteration.
|
|
399
|
+
*/
|
|
400
|
+
iteration: number;
|
|
401
|
+
/**
|
|
402
|
+
* Prompt shown to the reviewer.
|
|
403
|
+
*/
|
|
404
|
+
prompt: string;
|
|
405
|
+
/**
|
|
406
|
+
* Task run ID.
|
|
407
|
+
*/
|
|
408
|
+
task_run_id: string;
|
|
409
|
+
[k: string]: unknown;
|
|
410
|
+
};
|
|
411
|
+
event_type: "ApprovalRequired";
|
|
412
|
+
[k: string]: unknown;
|
|
413
|
+
}
|
|
414
|
+
| {
|
|
415
|
+
data: {
|
|
416
|
+
/**
|
|
417
|
+
* Action taken.
|
|
418
|
+
*/
|
|
419
|
+
action: string;
|
|
420
|
+
/**
|
|
421
|
+
* Approval request ID.
|
|
422
|
+
*/
|
|
423
|
+
approval_id: string;
|
|
424
|
+
/**
|
|
425
|
+
* Whether approved.
|
|
426
|
+
*/
|
|
427
|
+
approved: boolean;
|
|
428
|
+
/**
|
|
429
|
+
* Task run ID.
|
|
430
|
+
*/
|
|
431
|
+
task_run_id: string;
|
|
432
|
+
[k: string]: unknown;
|
|
433
|
+
};
|
|
434
|
+
event_type: "ApprovalResolved";
|
|
435
|
+
[k: string]: unknown;
|
|
436
|
+
}
|
|
437
|
+
| {
|
|
438
|
+
data: {
|
|
439
|
+
/**
|
|
440
|
+
* Confidence score (0.0-1.0).
|
|
441
|
+
*/
|
|
442
|
+
confidence: number;
|
|
443
|
+
/**
|
|
444
|
+
* Iteration when the question was raised.
|
|
445
|
+
*/
|
|
446
|
+
iteration: number;
|
|
447
|
+
/**
|
|
448
|
+
* The question text.
|
|
449
|
+
*/
|
|
450
|
+
question: string;
|
|
451
|
+
/**
|
|
452
|
+
* Deferred question ID.
|
|
453
|
+
*/
|
|
454
|
+
question_id: string;
|
|
455
|
+
/**
|
|
456
|
+
* Risk level.
|
|
457
|
+
*/
|
|
458
|
+
risk_level: string;
|
|
459
|
+
/**
|
|
460
|
+
* Task run ID.
|
|
461
|
+
*/
|
|
462
|
+
task_run_id: string;
|
|
463
|
+
[k: string]: unknown;
|
|
464
|
+
};
|
|
465
|
+
event_type: "DeferredQuestionCreated";
|
|
466
|
+
[k: string]: unknown;
|
|
467
|
+
}
|
|
468
|
+
| {
|
|
469
|
+
data: {
|
|
470
|
+
/**
|
|
471
|
+
* Deferred question ID.
|
|
472
|
+
*/
|
|
473
|
+
question_id: string;
|
|
474
|
+
/**
|
|
475
|
+
* Whether rework was triggered.
|
|
476
|
+
*/
|
|
477
|
+
rework_triggered: boolean;
|
|
478
|
+
/**
|
|
479
|
+
* Review status: "approved" or "rejected".
|
|
480
|
+
*/
|
|
481
|
+
status: string;
|
|
482
|
+
/**
|
|
483
|
+
* Task run ID.
|
|
484
|
+
*/
|
|
485
|
+
task_run_id: string;
|
|
486
|
+
[k: string]: unknown;
|
|
487
|
+
};
|
|
488
|
+
event_type: "DeferredQuestionReviewed";
|
|
489
|
+
[k: string]: unknown;
|
|
490
|
+
}
|
|
491
|
+
| {
|
|
492
|
+
data: {
|
|
493
|
+
action: string;
|
|
494
|
+
panel?: CanvasPanel | null;
|
|
495
|
+
panel_id: string;
|
|
496
|
+
task_run_id?: string | null;
|
|
497
|
+
[k: string]: unknown;
|
|
498
|
+
};
|
|
499
|
+
event_type: "CanvasUpdate";
|
|
500
|
+
[k: string]: unknown;
|
|
501
|
+
}
|
|
502
|
+
| {
|
|
503
|
+
data: {
|
|
504
|
+
/**
|
|
505
|
+
* Total accumulated output length so far.
|
|
506
|
+
*/
|
|
507
|
+
accumulated_length: number;
|
|
508
|
+
/**
|
|
509
|
+
* The text chunk received from the AI.
|
|
510
|
+
*/
|
|
511
|
+
chunk: string;
|
|
512
|
+
/**
|
|
513
|
+
* Task run ID this output belongs to.
|
|
514
|
+
*/
|
|
515
|
+
task_run_id: string;
|
|
516
|
+
[k: string]: unknown;
|
|
517
|
+
};
|
|
518
|
+
event_type: "AiOutputChunk";
|
|
519
|
+
[k: string]: unknown;
|
|
520
|
+
}
|
|
521
|
+
| {
|
|
522
|
+
data: {
|
|
523
|
+
/**
|
|
524
|
+
* Number of verification steps that failed.
|
|
525
|
+
*/
|
|
526
|
+
failed_step_count: number;
|
|
527
|
+
/**
|
|
528
|
+
* True if failed_step_count has not decreased in 3 consecutive iterations.
|
|
529
|
+
*/
|
|
530
|
+
is_stalled: boolean;
|
|
531
|
+
/**
|
|
532
|
+
* Current iteration number (1-indexed).
|
|
533
|
+
*/
|
|
534
|
+
iteration: number;
|
|
535
|
+
/**
|
|
536
|
+
* Failures not present in the previous iteration.
|
|
537
|
+
*/
|
|
538
|
+
new_failures: number;
|
|
539
|
+
/**
|
|
540
|
+
* Number of verification steps that passed.
|
|
541
|
+
*/
|
|
542
|
+
passed_step_count: number;
|
|
543
|
+
/**
|
|
544
|
+
* Failures that were also present in the previous iteration.
|
|
545
|
+
*/
|
|
546
|
+
repeated_failures: number;
|
|
547
|
+
/**
|
|
548
|
+
* Number of verification steps that were skipped.
|
|
549
|
+
*/
|
|
550
|
+
skipped_step_count: number;
|
|
551
|
+
/**
|
|
552
|
+
* Task run ID.
|
|
553
|
+
*/
|
|
554
|
+
task_run_id: string;
|
|
555
|
+
[k: string]: unknown;
|
|
556
|
+
};
|
|
557
|
+
event_type: "IterationMetrics";
|
|
558
|
+
[k: string]: unknown;
|
|
559
|
+
}
|
|
560
|
+
| {
|
|
561
|
+
data: {
|
|
562
|
+
/**
|
|
563
|
+
* Number of failures with blame attributions.
|
|
564
|
+
*/
|
|
565
|
+
attributed_failures: number;
|
|
566
|
+
/**
|
|
567
|
+
* Full blame report as JSON.
|
|
568
|
+
*/
|
|
569
|
+
blame_json: string;
|
|
570
|
+
/**
|
|
571
|
+
* Current iteration number.
|
|
572
|
+
*/
|
|
573
|
+
iteration: number;
|
|
574
|
+
/**
|
|
575
|
+
* Number of files exhibiting oscillation.
|
|
576
|
+
*/
|
|
577
|
+
oscillating_files: number;
|
|
578
|
+
/**
|
|
579
|
+
* Number of files exhibiting revert patterns.
|
|
580
|
+
*/
|
|
581
|
+
revert_patterns: number;
|
|
582
|
+
/**
|
|
583
|
+
* Task run ID.
|
|
584
|
+
*/
|
|
585
|
+
task_run_id: string;
|
|
586
|
+
[k: string]: unknown;
|
|
587
|
+
};
|
|
588
|
+
event_type: "BlameAttribution";
|
|
589
|
+
[k: string]: unknown;
|
|
590
|
+
}
|
|
591
|
+
| {
|
|
592
|
+
data: {
|
|
593
|
+
/**
|
|
594
|
+
* Whether any blocking violations exist.
|
|
595
|
+
*/
|
|
596
|
+
has_blocking: boolean;
|
|
597
|
+
/**
|
|
598
|
+
* Current iteration number (1-indexed).
|
|
599
|
+
*/
|
|
600
|
+
iteration: number;
|
|
601
|
+
/**
|
|
602
|
+
* Serialized constraint results.
|
|
603
|
+
*/
|
|
604
|
+
results: {
|
|
605
|
+
[k: string]: unknown;
|
|
606
|
+
};
|
|
607
|
+
/**
|
|
608
|
+
* Human-readable summary of results.
|
|
609
|
+
*/
|
|
610
|
+
summary: string;
|
|
611
|
+
/**
|
|
612
|
+
* Task run ID.
|
|
613
|
+
*/
|
|
614
|
+
task_run_id: string;
|
|
615
|
+
[k: string]: unknown;
|
|
616
|
+
};
|
|
617
|
+
event_type: "ConstraintResults";
|
|
618
|
+
[k: string]: unknown;
|
|
619
|
+
}
|
|
620
|
+
| {
|
|
621
|
+
data: {
|
|
622
|
+
/**
|
|
623
|
+
* Position in the queue (0-indexed).
|
|
624
|
+
*/
|
|
625
|
+
queue_position: number;
|
|
626
|
+
/**
|
|
627
|
+
* Task run ID for the queued workflow.
|
|
628
|
+
*/
|
|
629
|
+
task_run_id: string;
|
|
630
|
+
/**
|
|
631
|
+
* Human-readable workflow name.
|
|
632
|
+
*/
|
|
633
|
+
workflow_name: string;
|
|
634
|
+
[k: string]: unknown;
|
|
635
|
+
};
|
|
636
|
+
event_type: "WorkflowQueued";
|
|
637
|
+
[k: string]: unknown;
|
|
638
|
+
}
|
|
639
|
+
| {
|
|
640
|
+
data: {
|
|
641
|
+
/**
|
|
642
|
+
* Task run ID for the dequeued workflow.
|
|
643
|
+
*/
|
|
644
|
+
task_run_id: string;
|
|
645
|
+
/**
|
|
646
|
+
* Time spent waiting in the queue, in milliseconds.
|
|
647
|
+
*/
|
|
648
|
+
wait_time_ms: number;
|
|
649
|
+
/**
|
|
650
|
+
* Human-readable workflow name.
|
|
651
|
+
*/
|
|
652
|
+
workflow_name: string;
|
|
653
|
+
[k: string]: unknown;
|
|
654
|
+
};
|
|
655
|
+
event_type: "WorkflowDequeued";
|
|
656
|
+
[k: string]: unknown;
|
|
657
|
+
}
|
|
658
|
+
| {
|
|
659
|
+
data: {
|
|
660
|
+
cache_creation_tokens: number;
|
|
661
|
+
cache_hit_rate: number;
|
|
662
|
+
cache_read_tokens: number;
|
|
663
|
+
cost_usd: number;
|
|
664
|
+
cumulative_cost_usd: number;
|
|
665
|
+
input_tokens: number;
|
|
666
|
+
iteration?: number | null;
|
|
667
|
+
output_tokens: number;
|
|
668
|
+
phase: string;
|
|
669
|
+
task_run_id: string;
|
|
670
|
+
timestamp: number;
|
|
671
|
+
[k: string]: unknown;
|
|
672
|
+
};
|
|
673
|
+
event_type: "CostUpdate";
|
|
674
|
+
[k: string]: unknown;
|
|
675
|
+
}
|
|
676
|
+
| {
|
|
677
|
+
data: {
|
|
678
|
+
budget_limit_usd: number;
|
|
679
|
+
message: string;
|
|
680
|
+
remaining_fraction: number;
|
|
681
|
+
task_run_id: string;
|
|
682
|
+
timestamp: number;
|
|
683
|
+
total_cost_usd: number;
|
|
684
|
+
[k: string]: unknown;
|
|
685
|
+
};
|
|
686
|
+
event_type: "BudgetWarning";
|
|
687
|
+
[k: string]: unknown;
|
|
688
|
+
}
|
|
689
|
+
| {
|
|
690
|
+
data: {
|
|
691
|
+
cost_usd: number;
|
|
692
|
+
mean_cost_usd: number;
|
|
693
|
+
message: string;
|
|
694
|
+
std_dev: number;
|
|
695
|
+
task_run_id: string;
|
|
696
|
+
timestamp: number;
|
|
697
|
+
z_score: number;
|
|
698
|
+
[k: string]: unknown;
|
|
699
|
+
};
|
|
700
|
+
event_type: "CostAnomaly";
|
|
701
|
+
[k: string]: unknown;
|
|
702
|
+
}
|
|
703
|
+
| {
|
|
704
|
+
data: {
|
|
705
|
+
context?: string | null;
|
|
706
|
+
message: string;
|
|
707
|
+
[k: string]: unknown;
|
|
708
|
+
};
|
|
709
|
+
event_type: "Error";
|
|
710
|
+
[k: string]: unknown;
|
|
711
|
+
};
|
|
712
|
+
|
|
713
|
+
/* eslint-disable */
|
|
714
|
+
/**
|
|
715
|
+
* This file was automatically generated.
|
|
716
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
717
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
718
|
+
*/
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* Information about a terminal session, returned to the frontend.
|
|
722
|
+
*
|
|
723
|
+
* Returned from the `terminal_create` and `terminal_list` Tauri commands
|
|
724
|
+
* and emitted as the payload of the `terminal-created` event. Derived
|
|
725
|
+
* fresh from the live `TerminalSession` each time — never persisted.
|
|
726
|
+
*/
|
|
727
|
+
interface TerminalInfo {
|
|
728
|
+
/**
|
|
729
|
+
* Current terminal width in columns.
|
|
730
|
+
*/
|
|
731
|
+
cols: number;
|
|
732
|
+
/**
|
|
733
|
+
* Unix timestamp in milliseconds when the session was created.
|
|
734
|
+
*
|
|
735
|
+
* Used as the sort key for `TerminalManager::list` so the UI shows
|
|
736
|
+
* terminals in creation order.
|
|
737
|
+
*/
|
|
738
|
+
createdAt: number;
|
|
739
|
+
/**
|
|
740
|
+
* Process exit code, once the shell has exited.
|
|
741
|
+
*/
|
|
742
|
+
exitCode?: number | null;
|
|
743
|
+
/**
|
|
744
|
+
* Unique session identifier (UUID v4 minted by the runner).
|
|
745
|
+
*/
|
|
746
|
+
id: string;
|
|
747
|
+
/**
|
|
748
|
+
* Whether the shell process is still running.
|
|
749
|
+
*/
|
|
750
|
+
isAlive: boolean;
|
|
751
|
+
/**
|
|
752
|
+
* Which terminal page this session belongs to (for multi-page support).
|
|
753
|
+
*
|
|
754
|
+
* Older wire forms without this field hydrate to `"default"` via
|
|
755
|
+
* [`default_page_id`].
|
|
756
|
+
*/
|
|
757
|
+
pageId: string;
|
|
758
|
+
/**
|
|
759
|
+
* OS process ID of the spawned shell, if still known.
|
|
760
|
+
*/
|
|
761
|
+
pid?: number | null;
|
|
762
|
+
/**
|
|
763
|
+
* Current terminal height in rows.
|
|
764
|
+
*/
|
|
765
|
+
rows: number;
|
|
766
|
+
/**
|
|
767
|
+
* Human-readable title shown in the UI tab (e.g., "Terminal 1").
|
|
768
|
+
*/
|
|
769
|
+
title: string;
|
|
770
|
+
/**
|
|
771
|
+
* Monotonic counter of all bytes ever produced by this PTY.
|
|
772
|
+
*
|
|
773
|
+
* Read by the frontend to detect missed output after a reconnect; the
|
|
774
|
+
* scrollback buffer's `start_offset` is derived from this counter.
|
|
775
|
+
*/
|
|
776
|
+
totalBytesProduced: number;
|
|
777
|
+
/**
|
|
778
|
+
* Absolute working directory the shell was started in.
|
|
779
|
+
*/
|
|
780
|
+
workingDir: string;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
/* eslint-disable */
|
|
784
|
+
/**
|
|
785
|
+
* This file was automatically generated.
|
|
786
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
787
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
788
|
+
*/
|
|
789
|
+
|
|
790
|
+
/**
|
|
791
|
+
* Event payload emitted when a terminal produces output.
|
|
792
|
+
*
|
|
793
|
+
* Delivered over the Tauri `terminal-output` channel and re-broadcast on
|
|
794
|
+
* the WebSocket relay for remote/mobile consumers. The `data` payload is
|
|
795
|
+
* base64-encoded raw bytes because xterm.js needs raw bytes (PTY output
|
|
796
|
+
* can contain partial UTF-8 sequences that would corrupt a `String`
|
|
797
|
+
* field).
|
|
798
|
+
*/
|
|
799
|
+
interface TerminalOutputEvent {
|
|
800
|
+
/**
|
|
801
|
+
* Base64-encoded bytes produced by the PTY.
|
|
802
|
+
*
|
|
803
|
+
* Raw bytes are required (not UTF-8 text) because PTY output can
|
|
804
|
+
* contain partial UTF-8 sequences that span read boundaries.
|
|
805
|
+
*/
|
|
806
|
+
data: string;
|
|
807
|
+
/**
|
|
808
|
+
* ID of the terminal session producing this output.
|
|
809
|
+
*/
|
|
810
|
+
terminalId: string;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
/* eslint-disable */
|
|
814
|
+
/**
|
|
815
|
+
* This file was automatically generated.
|
|
816
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
817
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
818
|
+
*/
|
|
819
|
+
|
|
820
|
+
/**
|
|
821
|
+
* Event payload emitted when a terminal process exits.
|
|
822
|
+
*
|
|
823
|
+
* Delivered over the Tauri `terminal-exit` channel and re-broadcast on the
|
|
824
|
+
* WebSocket relay. After this event fires the corresponding
|
|
825
|
+
* [`TerminalInfo::is_alive`] will be `false` and [`TerminalInfo::exit_code`]
|
|
826
|
+
* will carry the same value surfaced here.
|
|
827
|
+
*/
|
|
828
|
+
interface TerminalExitEvent {
|
|
829
|
+
/**
|
|
830
|
+
* Exit code reported by the OS, or `None` if the status could not be
|
|
831
|
+
* captured (e.g., the wait call itself errored).
|
|
832
|
+
*/
|
|
833
|
+
exitCode?: number | null;
|
|
834
|
+
/**
|
|
835
|
+
* ID of the terminal session that exited.
|
|
836
|
+
*/
|
|
837
|
+
terminalId: string;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
/* eslint-disable */
|
|
841
|
+
/**
|
|
842
|
+
* This file was automatically generated.
|
|
843
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
844
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
845
|
+
*/
|
|
846
|
+
|
|
847
|
+
/**
|
|
848
|
+
* Code context for a finding (runner-local wire shape).
|
|
849
|
+
*
|
|
850
|
+
* Renamed in the schema registry to `RunnerFindingCodeContext` to
|
|
851
|
+
* disambiguate from `qontinui_types::findings::FindingCodeContext`.
|
|
852
|
+
*/
|
|
853
|
+
interface RunnerFindingCodeContext {
|
|
854
|
+
column?: number | null;
|
|
855
|
+
file?: string | null;
|
|
856
|
+
line?: number | null;
|
|
857
|
+
snippet?: string | null;
|
|
858
|
+
[k: string]: unknown;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
/* eslint-disable */
|
|
862
|
+
/**
|
|
863
|
+
* This file was automatically generated.
|
|
864
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
865
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
866
|
+
*/
|
|
867
|
+
|
|
868
|
+
/**
|
|
869
|
+
* User input request for a finding (runner-local wire shape).
|
|
870
|
+
*
|
|
871
|
+
* Renamed in the schema registry to `RunnerFindingUserInput` to
|
|
872
|
+
* disambiguate from `qontinui_types::findings::FindingUserInput`.
|
|
873
|
+
*/
|
|
874
|
+
interface RunnerFindingUserInput {
|
|
875
|
+
input_type: string;
|
|
876
|
+
options?: string[] | null;
|
|
877
|
+
question: string;
|
|
878
|
+
[k: string]: unknown;
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
/* eslint-disable */
|
|
882
|
+
/**
|
|
883
|
+
* This file was automatically generated.
|
|
884
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
885
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
886
|
+
*/
|
|
887
|
+
|
|
888
|
+
|
|
889
|
+
|
|
890
|
+
/**
|
|
891
|
+
* A finding detected by AI analysis (runner-local wire shape).
|
|
892
|
+
*
|
|
893
|
+
* Wire format: serialized via `#[serde(rename_all = "camelCase")]` so all
|
|
894
|
+
* snake_case Rust field names ship as camelCase on the Tauri event channels
|
|
895
|
+
* `finding_detected` and `finding_resolved`. The frontend listener in
|
|
896
|
+
* `services/TauriFindingsListener.ts` MUST read these fields by their
|
|
897
|
+
* camelCase names — reading snake_case silently evaluates to `undefined`.
|
|
898
|
+
*
|
|
899
|
+
* Renamed in the schema registry to `RunnerFinding` to disambiguate from
|
|
900
|
+
* `qontinui_types::verification::Finding`, which has a different shape
|
|
901
|
+
* (`confidence`, `findingType`, `evidence` vs this struct's flat fields).
|
|
902
|
+
*/
|
|
903
|
+
interface RunnerFinding {
|
|
904
|
+
actionType: TaskRunFindingActionType;
|
|
905
|
+
categoryId: TaskRunFindingCategory;
|
|
906
|
+
codeContext?: RunnerFindingCodeContext | null;
|
|
907
|
+
description: string;
|
|
908
|
+
detectedAt: string;
|
|
909
|
+
id: string;
|
|
910
|
+
resolution?: string | null;
|
|
911
|
+
resolvedAt?: string | null;
|
|
912
|
+
resolvedInSession?: number | null;
|
|
913
|
+
sessionNum: number;
|
|
914
|
+
severity: TaskRunFindingSeverity;
|
|
915
|
+
signatureHash: string;
|
|
916
|
+
status: TaskRunFindingStatus;
|
|
917
|
+
taskRunId: string;
|
|
918
|
+
title: string;
|
|
919
|
+
updatedAt: string;
|
|
920
|
+
userInput?: RunnerFindingUserInput | null;
|
|
921
|
+
userResponse?: string | null;
|
|
922
|
+
[k: string]: unknown;
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
/* eslint-disable */
|
|
926
|
+
/**
|
|
927
|
+
* This file was automatically generated.
|
|
928
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
929
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
930
|
+
*/
|
|
931
|
+
|
|
932
|
+
/**
|
|
933
|
+
* Discriminated union of every WS envelope `mcp/backend_relay.rs::handle_outbound`
|
|
934
|
+
* ships to the backend after rewrapping a Tauri-side `AppEvent`.
|
|
935
|
+
*
|
|
936
|
+
* Internally tagged on `"type"` with snake_case variant names because that's
|
|
937
|
+
* what the prior `serde_json::json!` literals emitted on the wire.
|
|
938
|
+
*
|
|
939
|
+
* Wire keys are snake_case (NOT camelCase) — verified against the literal
|
|
940
|
+
* strings in `handle_outbound` lines ~605-638. Consumers that expect
|
|
941
|
+
* camelCase (e.g. some web hooks) are wrong; the relay never emitted
|
|
942
|
+
* camelCase here.
|
|
943
|
+
*/
|
|
944
|
+
type RunnerRelayMessage =
|
|
945
|
+
| {
|
|
946
|
+
data: {
|
|
947
|
+
[k: string]: unknown;
|
|
948
|
+
};
|
|
949
|
+
type: "phase_completed";
|
|
950
|
+
[k: string]: unknown;
|
|
951
|
+
}
|
|
952
|
+
| {
|
|
953
|
+
data: {
|
|
954
|
+
[k: string]: unknown;
|
|
955
|
+
};
|
|
956
|
+
type: "ui_error";
|
|
957
|
+
[k: string]: unknown;
|
|
958
|
+
}
|
|
959
|
+
| {
|
|
960
|
+
data: {
|
|
961
|
+
[k: string]: unknown;
|
|
962
|
+
};
|
|
963
|
+
type: "recent_crash";
|
|
964
|
+
[k: string]: unknown;
|
|
965
|
+
}
|
|
966
|
+
| {
|
|
967
|
+
data: {
|
|
968
|
+
[k: string]: unknown;
|
|
969
|
+
};
|
|
970
|
+
type: "chat_response";
|
|
971
|
+
[k: string]: unknown;
|
|
972
|
+
}
|
|
973
|
+
| {
|
|
974
|
+
data: {
|
|
975
|
+
[k: string]: unknown;
|
|
976
|
+
};
|
|
977
|
+
type: "chat_session_state";
|
|
978
|
+
[k: string]: unknown;
|
|
979
|
+
}
|
|
980
|
+
| {
|
|
981
|
+
data: {
|
|
982
|
+
[k: string]: unknown;
|
|
983
|
+
};
|
|
984
|
+
terminal_id: {
|
|
985
|
+
[k: string]: unknown;
|
|
986
|
+
};
|
|
987
|
+
type: "terminal_output";
|
|
988
|
+
[k: string]: unknown;
|
|
989
|
+
}
|
|
990
|
+
| {
|
|
991
|
+
exit_code: {
|
|
992
|
+
[k: string]: unknown;
|
|
993
|
+
};
|
|
994
|
+
terminal_id: {
|
|
995
|
+
[k: string]: unknown;
|
|
996
|
+
};
|
|
997
|
+
type: "terminal_exit";
|
|
998
|
+
[k: string]: unknown;
|
|
999
|
+
};
|
|
1000
|
+
|
|
1001
|
+
/* eslint-disable */
|
|
1002
|
+
/**
|
|
1003
|
+
* This file was automatically generated.
|
|
1004
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
1005
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
1006
|
+
*/
|
|
1007
|
+
|
|
1008
|
+
/**
|
|
1009
|
+
* Wire-format runner shape carried inside `runner_connected.connection`.
|
|
1010
|
+
*
|
|
1011
|
+
* This is intentionally a partial Runner payload (snake_case, only the
|
|
1012
|
+
* fields the Python emitter actually populates in
|
|
1013
|
+
* `RunnerEventPublisher.publish_runner_connected`). It is NOT
|
|
1014
|
+
* `qontinui_types::runner::Runner` — that shape requires `derived_status`,
|
|
1015
|
+
* `capabilities`, `created_at` etc., which the connection payload doesn't
|
|
1016
|
+
* include. Consumers reading this should refetch the canonical Runner row
|
|
1017
|
+
* via REST after seeing `runner_connected`.
|
|
1018
|
+
*/
|
|
1019
|
+
interface RunnerConnectedConnection {
|
|
1020
|
+
connected_at?: string | null;
|
|
1021
|
+
/**
|
|
1022
|
+
* Always present as `null` on the wire when the runner is still
|
|
1023
|
+
* connected. Python ships this field unconditionally.
|
|
1024
|
+
*/
|
|
1025
|
+
disconnected_at?: string | null;
|
|
1026
|
+
duration_seconds?: number | null;
|
|
1027
|
+
id: string;
|
|
1028
|
+
ip_address?: string | null;
|
|
1029
|
+
project_id?: string | null;
|
|
1030
|
+
runner_name?: string | null;
|
|
1031
|
+
runner_port?: number | null;
|
|
1032
|
+
ws_connected: boolean;
|
|
1033
|
+
[k: string]: unknown;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
/* eslint-disable */
|
|
1037
|
+
/**
|
|
1038
|
+
* This file was automatically generated.
|
|
1039
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
1040
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
1041
|
+
*/
|
|
1042
|
+
|
|
1043
|
+
|
|
1044
|
+
|
|
1045
|
+
/**
|
|
1046
|
+
* Discriminated union of every event the Python backend pushes to the web
|
|
1047
|
+
* client over the `/api/v1/runners/status` WebSocket.
|
|
1048
|
+
*
|
|
1049
|
+
* Internally tagged on `"type"` matching the Python wire format. Variant
|
|
1050
|
+
* renames (`runner.woke` keeps the dot rather than going to snake_case)
|
|
1051
|
+
* preserve the literal strings the emitter sends.
|
|
1052
|
+
*
|
|
1053
|
+
* Source of truth: the `publish_*` methods in
|
|
1054
|
+
* `qontinui-web/backend/app/services/runner/event_publisher.py` and the
|
|
1055
|
+
* `initial_state` send in `runner_status_ws.py`.
|
|
1056
|
+
*/
|
|
1057
|
+
type RunnerStatusEvent =
|
|
1058
|
+
| {
|
|
1059
|
+
runners: unknown[];
|
|
1060
|
+
type: "initial_state";
|
|
1061
|
+
[k: string]: unknown;
|
|
1062
|
+
}
|
|
1063
|
+
| {
|
|
1064
|
+
connection: RunnerConnectedConnection;
|
|
1065
|
+
timestamp: string;
|
|
1066
|
+
type: "runner_connected";
|
|
1067
|
+
[k: string]: unknown;
|
|
1068
|
+
}
|
|
1069
|
+
| {
|
|
1070
|
+
runner_id: string;
|
|
1071
|
+
timestamp: string;
|
|
1072
|
+
type: "runner_disconnected";
|
|
1073
|
+
[k: string]: unknown;
|
|
1074
|
+
}
|
|
1075
|
+
| {
|
|
1076
|
+
runner_id: string;
|
|
1077
|
+
runner_name: string;
|
|
1078
|
+
timestamp: string;
|
|
1079
|
+
type: "runner_name_updated";
|
|
1080
|
+
[k: string]: unknown;
|
|
1081
|
+
}
|
|
1082
|
+
| {
|
|
1083
|
+
runner_id: string;
|
|
1084
|
+
runner_port: number;
|
|
1085
|
+
timestamp: string;
|
|
1086
|
+
type: "runner_port_updated";
|
|
1087
|
+
[k: string]: unknown;
|
|
1088
|
+
}
|
|
1089
|
+
| {
|
|
1090
|
+
intent_id?: string | null;
|
|
1091
|
+
reason?: string | null;
|
|
1092
|
+
runner_id: string;
|
|
1093
|
+
task_id?: string | null;
|
|
1094
|
+
timestamp: string;
|
|
1095
|
+
type: "runner.woke";
|
|
1096
|
+
[k: string]: unknown;
|
|
1097
|
+
}
|
|
1098
|
+
| {
|
|
1099
|
+
error: string;
|
|
1100
|
+
type: "error";
|
|
1101
|
+
[k: string]: unknown;
|
|
1102
|
+
};
|
|
1103
|
+
|
|
1104
|
+
/* eslint-disable */
|
|
1105
|
+
/**
|
|
1106
|
+
* This file was automatically generated.
|
|
1107
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
1108
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
1109
|
+
*/
|
|
1110
|
+
|
|
1111
|
+
/**
|
|
1112
|
+
* Payload shape emitted on the `dev:seed-finding` Tauri event.
|
|
1113
|
+
*
|
|
1114
|
+
* Field names use camelCase so the TS listener (`TauriFindingsListener.ts`)
|
|
1115
|
+
* can spread them directly into a `Finding` object without translation.
|
|
1116
|
+
* The actual emit site is in `commands::dev_findings::dev_seed_finding`.
|
|
1117
|
+
*
|
|
1118
|
+
* Renamed in the schema registry to `DevSeedFindingPayload` to disambiguate
|
|
1119
|
+
* from the various `Finding*` types in `qontinui_types::findings`.
|
|
1120
|
+
*/
|
|
1121
|
+
interface DevSeedFindingPayload {
|
|
1122
|
+
actionType: string;
|
|
1123
|
+
actionable: boolean;
|
|
1124
|
+
categoryId: string;
|
|
1125
|
+
description: string;
|
|
1126
|
+
detectedAt: number;
|
|
1127
|
+
id: string;
|
|
1128
|
+
severity: string;
|
|
1129
|
+
sourceSessionId?: string | null;
|
|
1130
|
+
status: string;
|
|
1131
|
+
title: string;
|
|
1132
|
+
[k: string]: unknown;
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
/* eslint-disable */
|
|
1136
|
+
/**
|
|
1137
|
+
* This file was automatically generated.
|
|
1138
|
+
* DO NOT MODIFY IT BY HAND. Regenerate with `just generate-types` or
|
|
1139
|
+
* `qontinui-runner/src-tauri/scripts/generate_types.sh`.
|
|
1140
|
+
*/
|
|
1141
|
+
|
|
1142
|
+
/**
|
|
1143
|
+
* Payload shape for the `review-approved` and `review-rejected` Tauri events
|
|
1144
|
+
* emitted by `commands::productivity::approve_recommendation` /
|
|
1145
|
+
* `reject_recommendation` after a user resolves a medium-confidence
|
|
1146
|
+
* recommendation card. Field names are explicit camelCase to match the
|
|
1147
|
+
* `serde_json::json!()` literal previously used at the emit site.
|
|
1148
|
+
*
|
|
1149
|
+
* Single struct shared by both channels: only `user_decision` differs
|
|
1150
|
+
* (`"approved"` vs `"rejected"`), so a tagged enum would inflate the wire
|
|
1151
|
+
* format without payoff.
|
|
1152
|
+
*/
|
|
1153
|
+
interface RecommendationReviewDecisionPayload {
|
|
1154
|
+
reviewId: string;
|
|
1155
|
+
taskId: string;
|
|
1156
|
+
userDecision: string;
|
|
1157
|
+
[k: string]: unknown;
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
export type { AppEvent, CanvasPanel as CanvasUpdatePanel, DevSeedFindingPayload, RecommendationReviewDecisionPayload, RunnerConnectedConnection, RunnerFinding, RunnerFindingCodeContext, RunnerFindingUserInput, RunnerRelayMessage, RunnerStatusEvent, TerminalExitEvent, TerminalInfo, TerminalOutputEvent };
|