1use serde::{Deserialize, Serialize};
2
3use crate::atheneum_bridge::utils::{
4 default_event_limit, default_search_k, default_tool, default_trigger,
5};
6
7#[derive(Debug, Deserialize)]
11pub struct StoreDiscoveryRequest {
12 pub agent: String,
13 pub discovery_type: String,
14 pub target: String,
15 #[serde(default)]
16 pub project_id: Option<String>,
17 pub metadata: serde_json::Value,
18}
19
20#[derive(Debug, Serialize)]
21pub struct StoreDiscoveryResponse {
22 pub discovery_id: i64,
23 pub agent: String,
24 pub target: String,
25 pub discovery_type: String,
26}
27
28#[derive(Debug, Deserialize)]
29pub struct DiscoveriesQuery {
30 pub target: String,
31 #[serde(default)]
32 pub project: Option<String>,
33}
34
35#[derive(Debug, Serialize)]
36pub struct DiscoveriesResponse {
37 pub target: String,
38 pub discovery_count: usize,
39 pub discoveries: Vec<DiscoveryData>,
40}
41
42#[derive(Debug, Serialize)]
43pub struct DiscoveryData {
44 pub id: i64,
45 pub name: String,
46 pub data: serde_json::Value,
47}
48
49#[derive(Debug, Deserialize)]
50pub struct StoreHandoffRequest {
51 pub from_agent: String,
52 pub to_agent: String,
53 #[serde(default)]
54 pub project_id: Option<String>,
55 pub manifest: serde_json::Value,
56}
57
58#[derive(Debug, Serialize)]
59pub struct StoreHandoffResponse {
60 pub handoff_id: i64,
61 pub from_agent: String,
62 pub to_agent: String,
63 pub created_at: String,
64}
65
66#[derive(Debug, Deserialize)]
67pub struct PendingHandoffQuery {
68 pub agent: String,
69 #[serde(default)]
70 pub project: Option<String>,
71}
72
73#[derive(Debug, Serialize)]
74pub struct PendingHandoffResponse {
75 pub handoff: Option<HandoffData>,
76}
77
78#[derive(Debug, Serialize)]
79pub struct HandoffData {
80 pub id: i64,
81 pub name: String,
82 pub from_agent: String,
83 pub to_agent: String,
84 pub manifest: serde_json::Value,
85 pub created_at: String,
86}
87
88#[derive(Debug, Serialize)]
89pub struct ClaimHandoffResponse {
90 pub claimed: bool,
91 pub handoff_id: i64,
92}
93
94#[derive(Debug, Deserialize)]
95pub struct KnowledgeQuery {
96 pub target: String,
97 #[serde(default)]
98 pub project: Option<String>,
99}
100
101#[derive(Debug, Deserialize)]
102pub struct ProjectContextQuery {
103 pub project: String,
104 #[serde(default = "default_context_limit")]
105 pub limit: i64,
106}
107
108fn default_context_limit() -> i64 {
109 8
110}
111
112#[derive(Debug, Serialize)]
113pub struct ProjectContextItem {
114 pub discovery_type: String,
115 pub target: String,
116 pub why: String,
117 pub agent: String,
118}
119
120#[derive(Debug, Serialize)]
121pub struct ProjectContextResponse {
122 pub project: String,
123 pub items: Vec<ProjectContextItem>,
124}
125
126#[derive(Debug, Deserialize)]
127pub struct SearchQuery {
128 pub q: String,
129 #[serde(default = "default_search_k")]
130 pub k: usize,
131 #[serde(default)]
132 pub project: Option<String>,
133}
134
135#[derive(Debug, Serialize)]
139pub struct SearchResponse {
140 pub query: String,
141 pub project: Option<String>,
142 pub count: usize,
143 pub results: Vec<SearchResultItem>,
144}
145
146#[derive(Debug, Serialize)]
147pub struct SearchResultItem {
148 pub id: i64,
149 pub name: String,
150 pub kind: String,
151 pub score: f32,
152 pub data: serde_json::Value,
153}
154
155#[derive(Debug, Serialize)]
156pub struct KnowledgeResponse {
157 pub target: String,
158 pub queried_at: String,
159 pub total_entities: i64,
160 pub discovery_count: usize,
161 pub discoveries: Vec<DiscoveryData>,
162 pub handoff_count: usize,
163 pub handoffs: Vec<HandoffData>,
164 pub token_savings: TokenSavings,
165}
166
167#[derive(Debug, Serialize)]
168pub struct TokenSavings {
169 pub unique_agents: i64,
170 pub estimated_file_tokens: i64,
171 pub without_sharing: i64,
172 pub with_sharing: i64,
173 pub saved: i64,
174 pub percentage_reduction: f64,
175}
176
177#[derive(Debug, Deserialize)]
178pub struct ImportMagellanSymbolRequest {
179 pub magellan_db_path: String,
180 pub symbol_name: String,
181 pub agent_name: String,
182 #[serde(default)]
183 pub project_id: Option<String>,
184}
185
186#[derive(Debug, Deserialize)]
187pub struct ImportMagellanBulkRequest {
188 pub magellan_db_path: String,
189 pub agent_name: String,
190 #[serde(default)]
191 pub project_id: Option<String>,
192 #[serde(default)]
193 pub limit: Option<usize>,
194}
195
196#[derive(Debug, Serialize)]
197pub struct ImportMagellanSymbolResponse {
198 pub found: bool,
199 #[serde(skip_serializing_if = "Option::is_none")]
200 pub discovery_id: Option<i64>,
201}
202
203#[derive(Debug, Serialize)]
204pub struct ImportMagellanBulkResponse {
205 pub imported_count: i64,
206}
207
208#[derive(Debug, Deserialize)]
213pub struct CreateTaskRequest {
214 pub title: String,
215 #[serde(default)]
216 pub description: Option<String>,
217 #[serde(default)]
218 pub project_id: Option<String>,
219}
220
221#[derive(Debug, Serialize)]
222pub struct TaskCreatedResponse {
223 pub task_id: i64,
224 pub status: String,
225}
226
227#[derive(Debug, Deserialize)]
228pub struct ListTasksQuery {
229 #[serde(default)]
230 pub project: Option<String>,
231 #[serde(default)]
232 pub status: Option<String>,
233}
234
235#[derive(Debug, Serialize)]
236pub struct ListTasksResponse {
237 pub tasks: Vec<serde_json::Value>,
238}
239
240#[derive(Debug, Deserialize)]
241pub struct UpdateTaskStatusRequest {
242 pub status: String,
243}
244
245#[derive(Debug, Serialize)]
246pub struct TaskDetailResponse {
247 pub task: serde_json::Value,
248 pub requirements: Vec<serde_json::Value>,
249 pub blockers: Vec<serde_json::Value>,
250}
251
252#[derive(Debug, Deserialize)]
253pub struct CreateRequirementRequest {
254 pub statement: String,
255 #[serde(default)]
256 pub verification_method: Option<String>,
257}
258
259#[derive(Debug, Deserialize)]
260pub struct CreateBlockerRequest {
261 pub description: String,
262 pub blocker_type: String,
263}
264
265#[derive(Debug, Deserialize)]
266pub struct IngestJournalRequest {
267 pub path: String,
268 pub content: String,
269 #[serde(default)]
270 pub project_id: Option<String>,
271}
272
273#[derive(Debug, Serialize)]
274pub struct IngestJournalResponse {
275 pub section_ids: Vec<i64>,
276 pub applied_kanban_updates: Vec<serde_json::Value>,
277}
278
279#[derive(Debug, Deserialize)]
280pub struct ToolCallInput {
281 pub tool_name: String,
282 pub args: serde_json::Value,
283 #[serde(default)]
284 pub modified_targets: Vec<i64>,
285}
286
287#[derive(Debug, Deserialize)]
288pub struct CreateActionRequest {
289 pub agent: String,
290 pub thought: String,
291 #[serde(default)]
292 pub project_id: Option<String>,
293 #[serde(default)]
294 pub tool_calls: Vec<ToolCallInput>,
295}
296
297#[derive(Debug, Serialize)]
298pub struct ActionTraceResponse {
299 pub agent_id: i64,
300 pub reasoning_log_id: i64,
301 pub tool_call_ids: Vec<i64>,
302 pub modified_edge_ids: Vec<i64>,
303}
304
305#[derive(Debug, Deserialize)]
306pub struct GetActionsQuery {
307 pub agent: String,
308 #[serde(default)]
309 pub project: Option<String>,
310}
311
312#[derive(Debug, Serialize)]
313pub struct GetActionsResponse {
314 pub actions: Vec<serde_json::Value>,
315}
316
317#[derive(Debug, Deserialize)]
318pub struct CreateClassRequest {
319 pub name: String,
320 #[serde(default)]
321 pub description: Option<String>,
322}
323
324#[derive(Debug, Serialize)]
325pub struct ClassCreatedResponse {
326 pub class_id: i64,
327}
328
329#[derive(Debug, Serialize)]
330pub struct ListClassesResponse {
331 pub classes: Vec<serde_json::Value>,
332}
333
334#[derive(Debug, Deserialize)]
335pub struct CreatePropertyRequest {
336 pub name: String,
337 pub domain_class: String,
338 pub range_class: String,
339 #[serde(default)]
340 pub description: Option<String>,
341}
342
343#[derive(Debug, Serialize)]
344pub struct PropertyCreatedResponse {
345 pub property_id: i64,
346}
347
348#[derive(Debug, Serialize)]
349pub struct ListPropertiesResponse {
350 pub properties: Vec<serde_json::Value>,
351}
352
353#[derive(Debug, Deserialize)]
354pub struct ValidateEdgeQuery {
355 pub from: String,
356 pub to: String,
357 pub edge: String,
358}
359
360#[derive(Debug, Serialize)]
361pub struct ValidateEdgeResponse {
362 pub allowed: bool,
363}
364
365#[derive(Debug, Serialize)]
366pub struct SeedResponse {
367 pub seeded: i64,
368}
369
370#[derive(Debug, Deserialize)]
371pub struct RecordSessionRequest {
372 pub session_id: String,
373 pub agent: String,
374 pub project: String,
375 #[serde(default = "default_tool")]
376 pub tool: String,
377 #[serde(default = "default_trigger")]
378 pub trigger: String,
379 pub model: Option<String>,
380 pub git_branch: Option<String>,
381 pub git_head: Option<String>,
382 pub parent_session_id: Option<String>,
383}
384
385#[derive(Debug, Serialize)]
388pub struct RecordSessionResponse {
389 pub session_id: String,
390 pub recorded: bool,
391}
392
393#[derive(Debug, Deserialize)]
394pub struct QuerySessionsQuery {
395 #[serde(default)]
396 pub project: Option<String>,
397 #[serde(default = "default_sessions_last")]
398 pub last: i64,
399 pub parent_id: Option<String>,
400}
401
402fn default_sessions_last() -> i64 {
403 5
404}
405
406#[derive(Debug, Deserialize)]
407pub struct SubagentHandoverRequest {
408 pub summary: String,
409 #[serde(default)]
410 pub files_changed: Vec<String>,
411 #[serde(default = "default_outcome")]
412 pub outcome: String,
413}
414
415fn default_outcome() -> String {
416 "complete".to_string()
417}
418
419#[derive(Debug, Deserialize)]
420pub struct EndSessionRequest {
421 pub exit_status: String,
422 #[serde(default)]
423 pub prompt_count: u32,
424 #[serde(default)]
425 pub tool_call_count: u32,
426 #[serde(default)]
427 pub file_write_count: u32,
428 #[serde(default)]
429 pub commit_count: u32,
430 #[serde(default)]
431 pub test_run_count: u32,
432 #[serde(default)]
433 pub total_input_tokens: u64,
434 #[serde(default)]
435 pub total_output_tokens: u64,
436 #[serde(default)]
437 pub total_cost_usd: f64,
438}
439
440#[derive(Debug, Deserialize)]
441pub struct RecordPromptRequest {
442 pub session_id: String,
443 pub role: String,
444 #[serde(default)]
445 pub sequence: u32,
446 pub input_hash: String,
447 pub input_tokens: Option<u64>,
448 pub output_hash: Option<String>,
449 pub output_tokens: Option<u64>,
450 pub latency_ms: Option<u64>,
451 pub model: Option<String>,
452 pub cost_usd: Option<f64>,
453}
454
455#[derive(Debug, Deserialize)]
456pub struct RecordToolCallRequest {
457 pub session_id: String,
458 pub tool_name: String,
459 pub tool_version: Option<String>,
460 pub input_hash: Option<String>,
461 pub input_summary: Option<String>,
462 pub output_hash: Option<String>,
463 pub output_summary: Option<String>,
464 pub exit_status: String,
465 #[serde(default)]
466 pub latency_ms: u64,
467 pub input_tokens_est: Option<u64>,
468 #[serde(default)]
469 pub tool_category: String,
470}
471
472#[derive(Debug, Deserialize)]
473pub struct RecordFileWriteRequest {
474 pub session_id: String,
475 pub file_path: String,
476 pub file_id: Option<String>,
477 pub before_hash: Option<String>,
478 pub after_hash: Option<String>,
479 #[serde(default)]
480 pub lines_added: u32,
481 #[serde(default)]
482 pub lines_deleted: u32,
483 #[serde(default)]
484 pub lines_changed: u32,
485 #[serde(default)]
486 pub write_type: String,
487}
488
489#[derive(Debug, Deserialize)]
490pub struct RecordCommitRequest {
491 pub session_id: String,
492 pub commit_sha: String,
493 pub parent_sha: Option<String>,
494 pub message: String,
495 pub author: String,
496 #[serde(default)]
497 pub files_changed: u32,
498 #[serde(default)]
499 pub lines_inserted: u32,
500 #[serde(default)]
501 pub lines_deleted: u32,
502 pub commit_type: String,
503 pub feature_tag: Option<String>,
504}
505
506#[derive(Debug, Deserialize)]
507pub struct RecordTestRunRequest {
508 pub session_id: String,
509 pub test_name: String,
510 pub test_suite: Option<String>,
511 pub test_command: Option<String>,
512 pub result: String,
513 #[serde(default)]
514 pub duration_ms: u64,
515 pub logs_summary: Option<String>,
516 pub commit_sha: Option<String>,
517}
518
519#[derive(Debug, Deserialize)]
520pub struct RecordFixChainRequest {
521 pub session_id: String,
522 pub bug_commit_sha: String,
523 pub fix_commit_sha: String,
524 pub fix_type: String,
525 pub severity: String,
526 #[serde(default)]
527 pub cycles_to_fix: u32,
528 #[serde(default)]
529 pub time_to_fix_ms: u64,
530}
531
532#[derive(Debug, Deserialize)]
533pub struct RecordBenchRunRequest {
534 pub session_id: String,
535 pub bench_name: String,
536 pub mean_ns: Option<i64>,
537 pub median_ns: Option<i64>,
538 pub p95_ns: Option<i64>,
539 #[serde(default)]
540 pub is_regression: bool,
541}
542
543#[derive(Debug, Deserialize)]
544pub struct QueryEventsQuery {
545 pub session_id: Option<String>,
546 pub event_type: Option<String>,
547 #[serde(default = "default_event_limit")]
548 pub limit: usize,
549}
550
551#[derive(Debug, Deserialize)]
554pub struct RecordEventRequest {
555 pub session_id: String,
556 pub event_type: String,
557 pub entity_id: String,
558 pub payload: serde_json::Value,
559}
560
561#[derive(Debug, Serialize)]
562pub struct QueryEventsResponse {
563 pub events: Vec<serde_json::Value>,
564}
565
566#[derive(Debug, Serialize)]
571pub struct GraphEntityResponse {
572 pub id: i64,
573 pub kind: String,
574 pub name: String,
575 pub file_path: Option<String>,
576 pub data: serde_json::Value,
577}
578
579#[derive(Debug, Serialize)]
580pub struct GraphEdgeResponse {
581 pub id: i64,
582 pub from_id: i64,
583 pub to_id: i64,
584 pub edge_type: String,
585 pub data: serde_json::Value,
586}
587
588#[derive(Debug, Serialize)]
589pub struct NeighborsResponse {
590 pub entity_id: i64,
591 pub outgoing: Vec<GraphEdgeResponse>,
592 pub incoming: Vec<GraphEdgeResponse>,
593}
594
595#[derive(Debug, Serialize)]
596pub struct SubgraphViewResponse {
597 pub entry: GraphEntityResponse,
598 pub depth: u32,
599 pub entities: Vec<GraphEntityResponse>,
600 pub edges: Vec<GraphEdgeResponse>,
601}
602
603#[derive(Debug, Serialize)]
604pub struct NavigateResponse {
605 pub query: String,
606 pub subgraphs: Vec<SubgraphViewResponse>,
607}
608
609#[derive(Debug, Serialize)]
610pub struct GraphStatsResponse {
611 pub total_entities: i64,
612 pub total_edges: i64,
613 pub entity_counts: Vec<(String, i64)>,
614 pub edge_counts: Vec<(String, i64)>,
615}
616
617#[derive(Debug, Deserialize)]
618pub struct NavigateQuery {
619 pub q: String,
620 #[serde(default = "default_search_k")]
621 pub k: usize,
622 #[serde(default = "default_navigate_depth")]
623 pub depth: u32,
624 #[serde(default)]
625 pub project: Option<String>,
626}
627
628#[derive(Debug, Deserialize)]
629pub struct CrossSearchQuery {
630 pub q: String,
631 #[serde(default = "default_search_k")]
632 pub k: usize,
633 #[serde(default)]
634 pub language: Option<String>,
635}
636
637#[derive(Debug, Serialize)]
638pub struct CrossSearchResponse {
639 pub query: String,
640 pub language: Option<String>,
641 pub count: usize,
642 pub results: Vec<CrossSearchResultItem>,
643}
644
645#[derive(Debug, Serialize)]
646pub struct CrossSearchResultItem {
647 pub project: String,
648 pub id: i64,
649 pub kind: String,
650 pub name: String,
651 #[serde(skip_serializing_if = "Option::is_none")]
652 pub file_path: Option<String>,
653 pub data: serde_json::Value,
654}
655
656#[derive(Debug, Deserialize)]
657pub struct CrossNavigateQuery {
658 pub q: String,
659 #[serde(default = "default_search_k")]
660 pub k: usize,
661 #[serde(default = "default_navigate_depth")]
662 pub depth: u32,
663 #[serde(default)]
664 pub language: Option<String>,
665}
666
667#[derive(Debug, Serialize)]
668pub struct CrossNavigateResponse {
669 pub query: String,
670 pub language: Option<String>,
671 pub count: usize,
672 pub views: Vec<CrossSubgraphView>,
673}
674
675#[derive(Debug, Serialize)]
676pub struct CrossSubgraphView {
677 pub project: String,
678 pub entry_id: i64,
679 pub entities: Vec<CrossSearchResultItem>,
680 pub edges: Vec<CrossEdgeItem>,
681}
682
683#[derive(Debug, Serialize)]
684pub struct CrossEdgeItem {
685 pub id: i64,
686 pub kind: String,
687 pub from_id: i64,
688 pub to_id: i64,
689 pub data: serde_json::Value,
690}
691
692#[derive(Debug, Deserialize)]
693pub struct NeighborsQuery {
694 pub depth: Option<u32>,
695}
696
697fn default_navigate_depth() -> u32 {
698 2
699}