@sentry/junior-dashboard 0.243.0 → 0.244.0
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/app.js +10 -1
- package/dist/client.js +23 -23
- package/dist/index.js +10 -1
- package/package.json +3 -3
- package/src/client/conversations/ConversationChildAgents.tsx +5 -0
- package/src/client/conversations/SubagentTranscriptDrawer.tsx +4 -1
- package/src/client/conversations/TranscriptSubagentView.tsx +8 -2
- package/src/client/conversations/eventLog.ts +1 -1
- package/src/client/conversations/eventTranscript.ts +3 -0
- package/src/client/conversations/transcriptRenderModel.ts +6 -1
- package/src/client/conversations/transcriptSearch.tsx +6 -1
- package/src/client/markdownExport.ts +6 -1
- package/src/client/types.ts +3 -0
- package/src/mock-reporting/fixtures.ts +9 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/junior-dashboard",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.244.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"react-router": "^7.18.2",
|
|
35
35
|
"shiki": "4.1.0",
|
|
36
36
|
"zod": "^4.5.4",
|
|
37
|
-
"@sentry/junior": "0.
|
|
38
|
-
"@sentry/junior-plugin-api": "0.
|
|
37
|
+
"@sentry/junior": "0.244.0",
|
|
38
|
+
"@sentry/junior-plugin-api": "0.244.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@oxlint/plugins": "1.79.0",
|
|
@@ -84,6 +84,11 @@ export function ConversationChildAgents(props: {
|
|
|
84
84
|
{agent.status}
|
|
85
85
|
</StatusChip>
|
|
86
86
|
</div>
|
|
87
|
+
{agent.title ? (
|
|
88
|
+
<p className="m-0 break-words text-sm font-semibold text-dashboard-text">
|
|
89
|
+
{agent.title}
|
|
90
|
+
</p>
|
|
91
|
+
) : null}
|
|
87
92
|
{agent.task ? (
|
|
88
93
|
<p className="m-0 line-clamp-4 whitespace-pre-wrap break-words text-sm leading-relaxed text-dashboard-text">
|
|
89
94
|
{agent.task}
|
|
@@ -50,7 +50,10 @@ function SubagentTranscriptDrawerContent(props: {
|
|
|
50
50
|
const [searchOpen, setSearchOpen] = useState(false);
|
|
51
51
|
|
|
52
52
|
const detail = query.data;
|
|
53
|
-
const label =
|
|
53
|
+
const label =
|
|
54
|
+
props.target.part.title ||
|
|
55
|
+
detail?.displayTitle ||
|
|
56
|
+
props.target.part.subagentKind;
|
|
54
57
|
const meta = [
|
|
55
58
|
statusLabel(props.target.part, detail?.status),
|
|
56
59
|
detail ? formatMessageTimestamp(Date.parse(detail.startedAt)) : undefined,
|
|
@@ -9,7 +9,8 @@ export function TranscriptSubagentView(props: {
|
|
|
9
9
|
part: TranscriptViewSubagentPart;
|
|
10
10
|
timestamp?: number;
|
|
11
11
|
}) {
|
|
12
|
-
const label = props.part.subagentKind;
|
|
12
|
+
const label = props.part.agentName ?? props.part.subagentKind;
|
|
13
|
+
const summary = props.part.title ?? props.part.task;
|
|
13
14
|
const status = props.part.status;
|
|
14
15
|
const meta = [
|
|
15
16
|
status,
|
|
@@ -27,6 +28,11 @@ export function TranscriptSubagentView(props: {
|
|
|
27
28
|
<strong className="min-w-0 break-words font-bold text-cyan-100">
|
|
28
29
|
<HighlightText text={label} />
|
|
29
30
|
</strong>
|
|
31
|
+
{summary ? (
|
|
32
|
+
<span className="min-w-0 truncate text-dashboard-text-muted">
|
|
33
|
+
<HighlightText text={summary} />
|
|
34
|
+
</span>
|
|
35
|
+
) : null}
|
|
30
36
|
{props.part.status === "running" ? (
|
|
31
37
|
<span
|
|
32
38
|
aria-hidden="true"
|
|
@@ -44,7 +50,7 @@ export function TranscriptSubagentView(props: {
|
|
|
44
50
|
|
|
45
51
|
return (
|
|
46
52
|
<button
|
|
47
|
-
aria-label={`Open ${
|
|
53
|
+
aria-label={`Open ${label} transcript`}
|
|
48
54
|
className="block w-full min-w-0 cursor-pointer text-left transition-colors hover:bg-white/[0.035] focus-visible:outline focus-visible:outline-1 focus-visible:outline-cyan-300/55"
|
|
49
55
|
onClick={() => props.onOpenTranscript?.(props.part)}
|
|
50
56
|
type="button"
|
|
@@ -94,7 +94,7 @@ export function eventLogSummary(data: ConversationReportEventData): string {
|
|
|
94
94
|
case "handoff":
|
|
95
95
|
return "Handoff · New configuration applied";
|
|
96
96
|
case "subagent":
|
|
97
|
-
return `${data.subagentKind} · ${data.status} · ${data.childConversationId}`;
|
|
97
|
+
return `${data.agentName ?? data.subagentKind} · ${data.status} · ${data.childConversationId}`;
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
@@ -362,6 +362,9 @@ export function transcriptMessagesFromEvents(
|
|
|
362
362
|
childConversationId: data.childConversationId,
|
|
363
363
|
subagentKind: data.subagentKind,
|
|
364
364
|
status: data.status,
|
|
365
|
+
...(data.agentName ? { agentName: data.agentName } : undefined),
|
|
366
|
+
...(data.task ? { task: data.task } : undefined),
|
|
367
|
+
...(data.title ? { title: data.title } : undefined),
|
|
365
368
|
};
|
|
366
369
|
subagents.set(subagentId, part);
|
|
367
370
|
messages.push({
|
|
@@ -194,7 +194,12 @@ export function messageRawText(message: TranscriptViewMessage): string {
|
|
|
194
194
|
if (part.type === "reasoning") return part.text ?? "reasoning redacted";
|
|
195
195
|
if (part.type === "tool_call") return `tool_call ${part.name}`;
|
|
196
196
|
if (part.type === "subagent") {
|
|
197
|
-
return
|
|
197
|
+
return [
|
|
198
|
+
`subagent ${part.agentName ?? part.subagentKind}`,
|
|
199
|
+
...(part.title ? [`title ${part.title}`] : []),
|
|
200
|
+
...(part.task ? [`task ${part.task}`] : []),
|
|
201
|
+
`status ${part.status}`,
|
|
202
|
+
].join("\n");
|
|
198
203
|
}
|
|
199
204
|
if (part.type === "structured_event") {
|
|
200
205
|
return [
|
|
@@ -160,7 +160,12 @@ export function entryMatchesSearch(
|
|
|
160
160
|
|
|
161
161
|
if (entry.kind === "subagent") {
|
|
162
162
|
return (
|
|
163
|
-
textContains(
|
|
163
|
+
textContains(
|
|
164
|
+
entry.part.agentName ?? entry.part.subagentKind,
|
|
165
|
+
normalizedQuery,
|
|
166
|
+
) ||
|
|
167
|
+
textContains(entry.part.title, normalizedQuery) ||
|
|
168
|
+
textContains(entry.part.task, normalizedQuery) ||
|
|
164
169
|
textContains(entry.part.status, normalizedQuery)
|
|
165
170
|
);
|
|
166
171
|
}
|
|
@@ -396,9 +396,14 @@ function appendSubagent(
|
|
|
396
396
|
part: TranscriptViewSubagentPart,
|
|
397
397
|
timestamp: number | undefined,
|
|
398
398
|
): void {
|
|
399
|
-
lines.push(
|
|
399
|
+
lines.push(
|
|
400
|
+
"",
|
|
401
|
+
`### Subagent: ${headingText(part.agentName ?? part.subagentKind)}`,
|
|
402
|
+
);
|
|
400
403
|
addEventMeta(lines, conversationTranscript, timestamp);
|
|
401
404
|
addMetaLine(lines, "Status", part.status);
|
|
405
|
+
addMetaLine(lines, "Title", part.title);
|
|
406
|
+
addMetaLine(lines, "Task", part.task);
|
|
402
407
|
}
|
|
403
408
|
|
|
404
409
|
function appendTool(
|
package/src/client/types.ts
CHANGED
|
@@ -38,10 +38,13 @@ export type TranscriptViewToolCallPart = {
|
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
export type TranscriptViewSubagentPart = {
|
|
41
|
+
agentName?: string;
|
|
41
42
|
childConversationId: string;
|
|
42
43
|
id: string;
|
|
43
44
|
status: "aborted" | "blocked" | "completed" | "error" | "running";
|
|
44
45
|
subagentKind: string;
|
|
46
|
+
task?: string;
|
|
47
|
+
title?: string;
|
|
45
48
|
type: "subagent";
|
|
46
49
|
};
|
|
47
50
|
|
|
@@ -719,6 +719,9 @@ function dashboardQaConversation(nowMs: number): ConversationDetailReport {
|
|
|
719
719
|
startedAt: iso(Date.parse(startedAt), 4_000),
|
|
720
720
|
childConversationId: DASHBOARD_QA_PLAN_ID,
|
|
721
721
|
subagentKind: "agent",
|
|
722
|
+
agentName: "planner",
|
|
723
|
+
task: "Review the dashboard plan before editing.",
|
|
724
|
+
title: "Review the dashboard plan",
|
|
722
725
|
parentToolCallId: "qa-advisor",
|
|
723
726
|
status: "running",
|
|
724
727
|
}),
|
|
@@ -728,6 +731,9 @@ function dashboardQaConversation(nowMs: number): ConversationDetailReport {
|
|
|
728
731
|
startedAt: iso(Date.parse(startedAt), 4_000),
|
|
729
732
|
childConversationId: DASHBOARD_QA_PLAN_ID,
|
|
730
733
|
subagentKind: "agent",
|
|
734
|
+
agentName: "planner",
|
|
735
|
+
task: "Review the dashboard plan before editing.",
|
|
736
|
+
title: "Review the dashboard plan",
|
|
731
737
|
parentToolCallId: "qa-advisor",
|
|
732
738
|
status: "completed",
|
|
733
739
|
}),
|
|
@@ -750,6 +756,7 @@ function dashboardQaConversation(nowMs: number): ConversationDetailReport {
|
|
|
750
756
|
startedAt: iso(Date.parse(startedAt), 25_000),
|
|
751
757
|
childConversationId: DASHBOARD_QA_REVIEW_ID,
|
|
752
758
|
subagentKind: "agent",
|
|
759
|
+
agentName: "reviewer",
|
|
753
760
|
status: "running",
|
|
754
761
|
}),
|
|
755
762
|
reportEvent(7, iso(Date.parse(startedAt), 44_000), {
|
|
@@ -758,6 +765,7 @@ function dashboardQaConversation(nowMs: number): ConversationDetailReport {
|
|
|
758
765
|
startedAt: iso(Date.parse(startedAt), 25_000),
|
|
759
766
|
childConversationId: DASHBOARD_QA_REVIEW_ID,
|
|
760
767
|
subagentKind: "agent",
|
|
768
|
+
agentName: "reviewer",
|
|
761
769
|
status: "blocked",
|
|
762
770
|
}),
|
|
763
771
|
reportEvent(8, iso(Date.parse(startedAt), 50_000), {
|
|
@@ -1843,6 +1851,7 @@ export function readMockConversationChildAgents(
|
|
|
1843
1851
|
conversationId: DASHBOARD_QA_PLAN_ID,
|
|
1844
1852
|
status: "completed",
|
|
1845
1853
|
task: "Review the dashboard plan before editing.",
|
|
1854
|
+
title: "Review the dashboard plan",
|
|
1846
1855
|
updatedAt: iso(startedAtMs, 20_000),
|
|
1847
1856
|
},
|
|
1848
1857
|
],
|