Skip to content

Commit 3d875c8

Browse files
Shukriclaude
authored andcommitted
fix: preserve extra SDK fields in ingest payload + Laravel command UI
- Add #[serde(flatten)] extra field to IngestPayload so SDK-specific fields (command, exit_code, laravel version, etc.) are no longer silently dropped on deserialization - Add Artisan Command context panel to IssueDetails showing command name, exit code, input, and Laravel/PHP version badges Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 6bab60e commit 3d875c8

2 files changed

Lines changed: 34 additions & 0 deletions

File tree

dashboard/src/views/IssueDetails.vue

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,34 @@
180180
</div>
181181
</div>
182182

183+
<!-- Laravel command context -->
184+
<div v-if="event.payload?.command" class="px-4 py-3 border-t border-white/5">
185+
<p class="text-[10px] text-gray-600 uppercase tracking-wide font-medium mb-2">Artisan Command</p>
186+
<div class="flex flex-wrap items-center gap-2">
187+
<span class="text-[12px] font-mono text-emerald-400 bg-emerald-500/10 px-2 py-1 rounded">
188+
php artisan {{ event.payload.command }}
189+
</span>
190+
<span v-if="event.payload.exit_code !== undefined"
191+
class="text-[11px] font-mono text-red-400 bg-red-500/10 px-2 py-0.5 rounded">
192+
exit {{ event.payload.exit_code }}
193+
</span>
194+
<span v-if="event.payload.input?.trim()"
195+
class="text-[11px] text-gray-400 font-mono">
196+
{{ event.payload.input }}
197+
</span>
198+
</div>
199+
<div v-if="event.payload.laravel || event.payload.php" class="flex gap-2 mt-2">
200+
<span v-if="event.payload.laravel"
201+
class="text-[10px] text-purple-400 bg-purple-500/10 px-1.5 py-0.5 rounded font-mono">
202+
Laravel {{ event.payload.laravel }}
203+
</span>
204+
<span v-if="event.payload.php"
205+
class="text-[10px] text-blue-400 bg-blue-500/10 px-1.5 py-0.5 rounded font-mono">
206+
PHP {{ event.payload.php }}
207+
</span>
208+
</div>
209+
</div>
210+
183211
<!-- Request -->
184212
<div v-if="event.payload?.request" class="px-4 py-3 border-t border-white/5">
185213
<p class="text-[10px] text-gray-600 uppercase tracking-wide font-medium mb-2">Request</p>

src/models/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use serde::{Deserialize, Serialize};
2+
use std::collections::HashMap;
23

34
#[derive(Debug, Serialize, Deserialize)]
45
pub struct IngestPayload {
@@ -13,6 +14,11 @@ pub struct IngestPayload {
1314
pub request: Option<serde_json::Value>,
1415
pub breadcrumbs: Option<Vec<Breadcrumb>>,
1516
pub timestamp: Option<String>,
17+
/// Captures all SDK-specific extra fields (e.g. Laravel's command, exit_code,
18+
/// laravel version, php version) so they are preserved in the stored payload
19+
/// and available in the dashboard without being silently dropped.
20+
#[serde(flatten)]
21+
pub extra: HashMap<String, serde_json::Value>,
1622
}
1723

1824
#[derive(Debug, Serialize, Deserialize)]

0 commit comments

Comments
 (0)