@roj-ai/debug 0.1.3 → 0.1.4

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.
Files changed (153) hide show
  1. package/dist/components/debug/DebugContext.d.ts +1 -0
  2. package/dist/components/debug/DebugContext.d.ts.map +1 -0
  3. package/dist/components/debug/DebugContext.js +9 -0
  4. package/dist/components/debug/DebugContext.js.map +1 -0
  5. package/dist/components/debug/DebugNavigation.d.ts +1 -0
  6. package/dist/components/debug/DebugNavigation.d.ts.map +1 -0
  7. package/dist/components/debug/DebugNavigation.js +36 -0
  8. package/dist/components/debug/DebugNavigation.js.map +1 -0
  9. package/dist/components/debug/DebugShell.d.ts +1 -0
  10. package/dist/components/debug/DebugShell.d.ts.map +1 -0
  11. package/dist/components/debug/DebugShell.js +103 -0
  12. package/dist/components/debug/DebugShell.js.map +1 -0
  13. package/dist/components/debug/LLMCallDetail.d.ts +1 -0
  14. package/dist/components/debug/LLMCallDetail.d.ts.map +1 -0
  15. package/dist/components/debug/LLMCallDetail.js +204 -0
  16. package/dist/components/debug/LLMCallDetail.js.map +1 -0
  17. package/dist/components/debug/TimelineDetailInspector.d.ts +1 -0
  18. package/dist/components/debug/TimelineDetailInspector.d.ts.map +1 -0
  19. package/dist/components/debug/TimelineDetailInspector.js +48 -0
  20. package/dist/components/debug/TimelineDetailInspector.js.map +1 -0
  21. package/dist/components/debug/communication/CommunicationDiagram.d.ts +1 -0
  22. package/dist/components/debug/communication/CommunicationDiagram.d.ts.map +1 -0
  23. package/dist/components/debug/communication/CommunicationDiagram.js +67 -0
  24. package/dist/components/debug/communication/CommunicationDiagram.js.map +1 -0
  25. package/dist/components/debug/communication/DiagramHeader.d.ts +1 -0
  26. package/dist/components/debug/communication/DiagramHeader.d.ts.map +1 -0
  27. package/dist/components/debug/communication/DiagramHeader.js +44 -0
  28. package/dist/components/debug/communication/DiagramHeader.js.map +1 -0
  29. package/dist/components/debug/communication/ParticipantLane.d.ts +1 -0
  30. package/dist/components/debug/communication/ParticipantLane.d.ts.map +1 -0
  31. package/dist/components/debug/communication/ParticipantLane.js +10 -0
  32. package/dist/components/debug/communication/ParticipantLane.js.map +1 -0
  33. package/dist/components/debug/communication/TimeAxis.d.ts +1 -0
  34. package/dist/components/debug/communication/TimeAxis.d.ts.map +1 -0
  35. package/dist/components/debug/communication/TimeAxis.js +49 -0
  36. package/dist/components/debug/communication/TimeAxis.js.map +1 -0
  37. package/dist/components/debug/communication/elements/IdleGap.d.ts +1 -0
  38. package/dist/components/debug/communication/elements/IdleGap.d.ts.map +1 -0
  39. package/dist/components/debug/communication/elements/IdleGap.js +12 -0
  40. package/dist/components/debug/communication/elements/IdleGap.js.map +1 -0
  41. package/dist/components/debug/communication/elements/LLMBlock.d.ts +1 -0
  42. package/dist/components/debug/communication/elements/LLMBlock.d.ts.map +1 -0
  43. package/dist/components/debug/communication/elements/LLMBlock.js +30 -0
  44. package/dist/components/debug/communication/elements/LLMBlock.js.map +1 -0
  45. package/dist/components/debug/communication/elements/MessageArrow.d.ts +1 -0
  46. package/dist/components/debug/communication/elements/MessageArrow.d.ts.map +1 -0
  47. package/dist/components/debug/communication/elements/MessageArrow.js +34 -0
  48. package/dist/components/debug/communication/elements/MessageArrow.js.map +1 -0
  49. package/dist/components/debug/communication/elements/ToolBlock.d.ts +1 -0
  50. package/dist/components/debug/communication/elements/ToolBlock.d.ts.map +1 -0
  51. package/dist/components/debug/communication/elements/ToolBlock.js +27 -0
  52. package/dist/components/debug/communication/elements/ToolBlock.js.map +1 -0
  53. package/dist/components/debug/communication/hooks/useDiagramData.d.ts +1 -0
  54. package/dist/components/debug/communication/hooks/useDiagramData.d.ts.map +1 -0
  55. package/dist/components/debug/communication/hooks/useDiagramData.js +252 -0
  56. package/dist/components/debug/communication/hooks/useDiagramData.js.map +1 -0
  57. package/dist/components/debug/communication/hooks/useTimeCompression.d.ts +1 -0
  58. package/dist/components/debug/communication/hooks/useTimeCompression.d.ts.map +1 -0
  59. package/dist/components/debug/communication/hooks/useTimeCompression.js +109 -0
  60. package/dist/components/debug/communication/hooks/useTimeCompression.js.map +1 -0
  61. package/dist/components/debug/communication/hooks/useZoomPan.d.ts +1 -0
  62. package/dist/components/debug/communication/hooks/useZoomPan.d.ts.map +1 -0
  63. package/dist/components/debug/communication/hooks/useZoomPan.js +75 -0
  64. package/dist/components/debug/communication/hooks/useZoomPan.js.map +1 -0
  65. package/dist/components/debug/communication/popovers/ElementPopover.d.ts +1 -0
  66. package/dist/components/debug/communication/popovers/ElementPopover.d.ts.map +1 -0
  67. package/dist/components/debug/communication/popovers/ElementPopover.js +39 -0
  68. package/dist/components/debug/communication/popovers/ElementPopover.js.map +1 -0
  69. package/dist/components/debug/communication/types.d.ts +1 -0
  70. package/dist/components/debug/communication/types.d.ts.map +1 -0
  71. package/dist/components/debug/communication/types.js +52 -0
  72. package/dist/components/debug/communication/types.js.map +1 -0
  73. package/dist/components/debug/index.d.ts +1 -0
  74. package/dist/components/debug/index.d.ts.map +1 -0
  75. package/dist/components/debug/index.js +18 -0
  76. package/dist/components/debug/index.js.map +1 -0
  77. package/dist/components/debug/pages/AgentDetailPage.d.ts +1 -0
  78. package/dist/components/debug/pages/AgentDetailPage.d.ts.map +1 -0
  79. package/dist/components/debug/pages/AgentDetailPage.js +365 -0
  80. package/dist/components/debug/pages/AgentDetailPage.js.map +1 -0
  81. package/dist/components/debug/pages/AgentsPage.d.ts +1 -0
  82. package/dist/components/debug/pages/AgentsPage.d.ts.map +1 -0
  83. package/dist/components/debug/pages/AgentsPage.js +111 -0
  84. package/dist/components/debug/pages/AgentsPage.js.map +1 -0
  85. package/dist/components/debug/pages/CommunicationPage.d.ts +1 -0
  86. package/dist/components/debug/pages/CommunicationPage.d.ts.map +1 -0
  87. package/dist/components/debug/pages/CommunicationPage.js +19 -0
  88. package/dist/components/debug/pages/CommunicationPage.js.map +1 -0
  89. package/dist/components/debug/pages/DashboardPage.d.ts +1 -0
  90. package/dist/components/debug/pages/DashboardPage.d.ts.map +1 -0
  91. package/dist/components/debug/pages/DashboardPage.js +430 -0
  92. package/dist/components/debug/pages/DashboardPage.js.map +1 -0
  93. package/dist/components/debug/pages/EventsPage.d.ts +1 -0
  94. package/dist/components/debug/pages/EventsPage.d.ts.map +1 -0
  95. package/dist/components/debug/pages/EventsPage.js +137 -0
  96. package/dist/components/debug/pages/EventsPage.js.map +1 -0
  97. package/dist/components/debug/pages/FilesPage.d.ts +1 -0
  98. package/dist/components/debug/pages/FilesPage.d.ts.map +1 -0
  99. package/dist/components/debug/pages/FilesPage.js +187 -0
  100. package/dist/components/debug/pages/FilesPage.js.map +1 -0
  101. package/dist/components/debug/pages/LLMCallPage.d.ts +1 -0
  102. package/dist/components/debug/pages/LLMCallPage.d.ts.map +1 -0
  103. package/dist/components/debug/pages/LLMCallPage.js +12 -0
  104. package/dist/components/debug/pages/LLMCallPage.js.map +1 -0
  105. package/dist/components/debug/pages/LLMCallsPage.d.ts +1 -0
  106. package/dist/components/debug/pages/LLMCallsPage.d.ts.map +1 -0
  107. package/dist/components/debug/pages/LLMCallsPage.js +200 -0
  108. package/dist/components/debug/pages/LLMCallsPage.js.map +1 -0
  109. package/dist/components/debug/pages/LogsPage.d.ts +1 -0
  110. package/dist/components/debug/pages/LogsPage.d.ts.map +1 -0
  111. package/dist/components/debug/pages/LogsPage.js +107 -0
  112. package/dist/components/debug/pages/LogsPage.js.map +1 -0
  113. package/dist/components/debug/pages/MailboxPage.d.ts +1 -0
  114. package/dist/components/debug/pages/MailboxPage.d.ts.map +1 -0
  115. package/dist/components/debug/pages/MailboxPage.js +60 -0
  116. package/dist/components/debug/pages/MailboxPage.js.map +1 -0
  117. package/dist/components/debug/pages/ServicesPage.d.ts +1 -0
  118. package/dist/components/debug/pages/ServicesPage.d.ts.map +1 -0
  119. package/dist/components/debug/pages/ServicesPage.js +91 -0
  120. package/dist/components/debug/pages/ServicesPage.js.map +1 -0
  121. package/dist/components/debug/pages/TimelinePage.d.ts +1 -0
  122. package/dist/components/debug/pages/TimelinePage.d.ts.map +1 -0
  123. package/dist/components/debug/pages/TimelinePage.js +101 -0
  124. package/dist/components/debug/pages/TimelinePage.js.map +1 -0
  125. package/dist/components/debug/pages/UserChatPage.d.ts +1 -0
  126. package/dist/components/debug/pages/UserChatPage.d.ts.map +1 -0
  127. package/dist/components/debug/pages/UserChatPage.js +56 -0
  128. package/dist/components/debug/pages/UserChatPage.js.map +1 -0
  129. package/dist/components/debug/pages/index.d.ts +1 -0
  130. package/dist/components/debug/pages/index.d.ts.map +1 -0
  131. package/dist/components/debug/pages/index.js +14 -0
  132. package/dist/components/debug/pages/index.js.map +1 -0
  133. package/dist/index.d.ts +1 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +12 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/lib/domain-utils.d.ts +1 -0
  138. package/dist/lib/domain-utils.d.ts.map +1 -0
  139. package/dist/lib/domain-utils.js +11 -0
  140. package/dist/lib/domain-utils.js.map +1 -0
  141. package/dist/providers/EventPollingProvider.d.ts +1 -0
  142. package/dist/providers/EventPollingProvider.d.ts.map +1 -0
  143. package/dist/providers/EventPollingProvider.js +49 -0
  144. package/dist/providers/EventPollingProvider.js.map +1 -0
  145. package/dist/stores/event-store.d.ts +1 -0
  146. package/dist/stores/event-store.d.ts.map +1 -0
  147. package/dist/stores/event-store.js +341 -0
  148. package/dist/stores/event-store.js.map +1 -0
  149. package/dist/utils/format.d.ts +1 -0
  150. package/dist/utils/format.d.ts.map +1 -0
  151. package/dist/utils/format.js +11 -0
  152. package/dist/utils/format.js.map +1 -0
  153. package/package.json +7 -7
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Debug Components Index
3
+ *
4
+ * Re-exports all debug-related components for external use.
5
+ */
6
+ // Context (host app must provide this)
7
+ export { DebugContext, useDebugContext } from './DebugContext';
8
+ // Navigation utilities
9
+ export { DebugLink, useDebugNavigate, useDebugParams, useDebugSessionId } from './DebugNavigation';
10
+ // Shell (layout without router dependency)
11
+ export { BackIcon, DebugShell, getNavItemClassName, navItems } from './DebugShell';
12
+ // Detail components
13
+ export { LLMCallDetail } from './LLMCallDetail';
14
+ // Pages
15
+ export { AgentDetailPage, AgentsPage, CommunicationPage, DashboardPage, EventsPage, FilesPage, LLMCallPage, LLMCallsPage, LogsPage, MailboxPage, ServicesPage, TimelinePage, UserChatPage, } from './pages';
16
+ // Communication diagram components
17
+ export { CommunicationDiagram } from './communication/CommunicationDiagram';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/debug/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,eAAe,EAA0B,MAAM,gBAAgB,CAAA;AAEtF,uBAAuB;AACvB,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAElG,2CAA2C;AAC3C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAgB,MAAM,cAAc,CAAA;AAEhG,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,QAAQ;AACR,OAAO,EACN,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,GACZ,MAAM,SAAS,CAAA;AAEhB,mCAAmC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export declare function AgentDetailPage({ agentId: agentIdProp, }?: {
2
2
  agentId?: string;
3
3
  }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=AgentDetailPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentDetailPage.d.ts","sourceRoot":"","sources":["../../../../src/components/debug/pages/AgentDetailPage.tsx"],"names":[],"mappings":"AA6GA,wBAAgB,eAAe,CAAC,EAC/B,OAAO,EAAE,WAAW,GACpB,GAAE;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;CACZ,2CAiQL"}
@@ -0,0 +1,365 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { AgentId } from "@roj-ai/shared";
3
+ import { useCallback, useMemo, useState } from "react";
4
+ import { api, unwrap } from "@roj-ai/client";
5
+ import { useAgentDetail, useEventStore } from "../../../stores/event-store";
6
+ import { formatDuration } from "../../../utils/format";
7
+ import { DebugLink, useDebugParams, useDebugSessionId, } from "../DebugNavigation";
8
+ function formatTime(ts) {
9
+ if (ts === undefined)
10
+ return null;
11
+ return new Date(ts).toLocaleTimeString();
12
+ }
13
+ function Timestamp({ value }) {
14
+ const formatted = formatTime(value);
15
+ if (!formatted)
16
+ return null;
17
+ return (_jsx("span", { className: "text-[10px] text-gray-400 tabular-nums ml-auto shrink-0", children: formatted }));
18
+ }
19
+ function CopyButton({ text }) {
20
+ const [copied, setCopied] = useState(false);
21
+ const handleCopy = useCallback((e) => {
22
+ e.stopPropagation();
23
+ navigator.clipboard.writeText(text);
24
+ setCopied(true);
25
+ setTimeout(() => setCopied(false), 1500);
26
+ }, [text]);
27
+ return (_jsx("button", { type: "button", onClick: handleCopy, className: "absolute top-1.5 right-1.5 opacity-0 group-hover/code:opacity-100 transition-opacity p-1 rounded bg-white/80 hover:bg-gray-100 border border-gray-200 cursor-pointer", title: "Copy to clipboard", children: copied ? (_jsx("svg", { className: "w-3.5 h-3.5 text-green-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) })) : (_jsx("svg", { className: "w-3.5 h-3.5 text-gray-500", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" }) })) }));
28
+ }
29
+ function CodeBlock({ children, variant = "default", }) {
30
+ const styles = {
31
+ default: "bg-gray-50 border-gray-200 text-gray-800",
32
+ success: "bg-green-50 border-green-200 text-gray-800",
33
+ error: "bg-red-50 border-red-200 text-red-800",
34
+ };
35
+ return (_jsxs("div", { className: "relative group/code", children: [_jsx("pre", { className: `p-2 rounded-lg border overflow-x-auto text-[11px] font-mono whitespace-pre-wrap break-words ${styles[variant]}`, children: children }), _jsx(CopyButton, { text: children })] }));
36
+ }
37
+ export function AgentDetailPage({ agentId: agentIdProp, } = {}) {
38
+ const { agentId: agentIdParam } = useDebugParams();
39
+ const agentId = agentIdProp ?? agentIdParam ?? "";
40
+ const sessionId = useDebugSessionId();
41
+ const detail = useAgentDetail(AgentId(agentId));
42
+ const isLoading = useEventStore((s) => s.isLoading);
43
+ const handleRewind = useCallback(async (messageIndex) => {
44
+ if (!sessionId || !agentId)
45
+ return;
46
+ unwrap(await api.call("agents.rewind", {
47
+ sessionId,
48
+ agentId: AgentId(agentId),
49
+ messageIndex,
50
+ }));
51
+ }, [sessionId, agentId]);
52
+ if (isLoading) {
53
+ return _jsx("div", { className: "text-gray-400 text-sm", children: "Loading..." });
54
+ }
55
+ if (!detail) {
56
+ return _jsx("div", { className: "text-gray-400 text-sm", children: "Agent not found" });
57
+ }
58
+ const { counters } = detail;
59
+ return (_jsx("div", { className: "text-sm", children: _jsxs("div", { className: "flex gap-5 items-start", children: [_jsx("div", { className: "flex-[2] min-w-0 space-y-5", children: _jsx(CollapsibleSection, { title: "Conversation History", count: detail.conversationHistory.length, defaultOpen: true, children: detail.conversationHistory.length === 0 ? (_jsx("div", { className: "text-gray-400", children: "Empty" })) : (_jsx(ConversationGroups, { messages: detail.conversationHistory, onRewind: handleRewind })) }) }), _jsxs("div", { className: "flex-1 min-w-0 space-y-4 sticky top-0", children: [_jsxs("div", { className: "bg-white rounded-2xl shadow-card p-4", children: [_jsxs("div", { className: "flex items-center gap-3 mb-4", children: [_jsx("div", { className: "w-9 h-9 rounded-xl bg-accent-peri/15 flex items-center justify-center shrink-0", children: _jsx("svg", { className: "w-4.5 h-4.5 text-accent-peri", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }) }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("div", { className: "font-bold text-gray-900", children: detail.definitionName }), _jsx("div", { className: "text-[11px] text-gray-400 font-mono truncate", children: detail.id })] }), _jsx(StatusBadge, { status: detail.status })] }), detail.parentId && (_jsxs("div", { className: "text-[11px] text-gray-400 mb-3", children: ["Parent:", " ", _jsxs(DebugLink, { to: `agents/${detail.parentId}`, className: "text-accent-peri hover:underline font-mono", children: [detail.parentId.slice(0, 12), "..."] })] })), detail.pauseReason && (_jsxs("div", { className: "bg-red-50 border border-red-200 rounded-xl px-3 py-2 mb-3 flex items-center gap-2", children: [_jsx("div", { className: "w-2 h-2 rounded-full bg-red-500 shrink-0" }), _jsxs("span", { className: "text-[11px] font-semibold text-red-700 flex-1", children: ["Paused", detail.pauseMessage
60
+ ? `: ${detail.pauseMessage}`
61
+ : ` (${detail.pauseReason})`] }), _jsx(ResumeAgentButton, { sessionId: sessionId, agentId: agentId })] })), _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsx(CounterItem, { label: "Inferences", value: counters.inferenceCount }), _jsx(CounterItem, { label: "Tool Calls", value: counters.toolCallCount }), _jsx(CounterItem, { label: "Spawned", value: counters.spawnedAgentCount }), _jsx(CounterItem, { label: "Messages", value: counters.messagesSentCount })] }), detail.cost > 0 && (_jsxs("div", { className: "mt-2 bg-emerald-50 rounded-xl px-3 py-2.5 border border-emerald-100 flex items-center gap-2", children: [_jsx("svg", { className: "w-4 h-4 text-emerald-600 shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M12 6v12m-3-2.818l.879.659c1.171.879 3.07.879 4.242 0 1.172-.879 1.172-2.303 0-3.182C13.536 12.219 12.768 12 12 12c-.725 0-1.45-.22-2.003-.659-1.106-.879-1.106-2.303 0-3.182s2.9-.879 4.006 0l.415.33M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }), _jsx("span", { className: "text-[10px] text-emerald-600 uppercase tracking-wider font-medium", children: "Cost" }), _jsxs("span", { className: "ml-auto text-sm font-bold tabular-nums text-emerald-700", children: ["$", detail.cost.toFixed(4)] })] }))] }), _jsx(CollapsibleSection, { title: "Pending Tool Calls", count: detail.pendingToolCalls.length, warnIfPositive: true, defaultOpen: detail.pendingToolCalls.length > 0, children: detail.pendingToolCalls.length === 0 ? (_jsx("div", { className: "text-gray-400", children: "None" })) : (_jsx("div", { className: "space-y-2", children: detail.pendingToolCalls.map((tool) => (_jsx(ToolCallCard, { tool: tool }, tool.id))) })) }), _jsx(CollapsibleSection, { title: "Mailbox", count: detail.mailbox.length, defaultOpen: detail.mailbox.some((m) => !m.consumed), children: detail.mailbox.length === 0 ? (_jsx("div", { className: "text-gray-400", children: "Empty" })) : (_jsx("div", { className: "space-y-2", children: detail.mailbox.map((msg) => (_jsxs("div", { className: `rounded-xl px-3 py-2.5 border ${msg.consumed
62
+ ? "bg-gray-50 border-gray-100"
63
+ : "bg-amber-50 border-amber-200"}`, children: [_jsxs("div", { className: "flex items-center gap-2 text-[11px] text-gray-400 mb-1.5 flex-wrap", children: [_jsx("span", { className: "font-medium", children: "From:" }), msg.from !== "user" &&
64
+ msg.from !== "orchestrator" &&
65
+ msg.from !== "communicator" ? (_jsxs(DebugLink, { to: `agents/${msg.from}`, className: "text-accent-peri hover:underline font-mono", children: [msg.from.slice(0, 8), "..."] })) : (_jsx("span", { className: "font-semibold text-gray-500", children: msg.from })), msg.consumed && (_jsx("span", { className: "text-[10px] bg-green-100 text-green-700 px-1.5 py-0.5 rounded-full font-medium", children: "consumed" })), _jsx("span", { className: "text-[10px] text-gray-400 tabular-nums ml-auto", children: new Date(msg.timestamp).toLocaleTimeString() })] }), _jsx("div", { className: "whitespace-pre-wrap break-words text-gray-700 text-[12px] leading-relaxed", children: msg.content })] }, msg.id))) })) }), detail.loadedSkills.length > 0 && (_jsx(CollapsibleSection, { title: "Loaded Skills", count: detail.loadedSkills.length, defaultOpen: false, children: _jsx("div", { className: "flex flex-wrap gap-1.5", children: detail.loadedSkills.map((skill) => (_jsxs("div", { className: "bg-accent-peri/10 text-gray-700 px-2 py-0.5 rounded-full text-[11px] font-medium", children: [skill.name, _jsxs("span", { className: "text-gray-400 ml-1", children: [formatDuration(Date.now() - skill.loadedAt), " ago"] })] }, skill.id))) }) })), detail.typedInput !== undefined && (_jsx(CollapsibleSection, { title: "Typed Input", defaultOpen: false, children: _jsx("pre", { className: "bg-gray-50 rounded-xl px-3 py-2.5 text-[11px] font-mono overflow-x-auto text-gray-700", children: JSON.stringify(detail.typedInput, null, 2) }) })), _jsx(SendMessageForm, { sessionId: sessionId, agentId: agentId })] })] }) }));
66
+ }
67
+ // ============================================================================
68
+ // CollapsibleSection
69
+ // ============================================================================
70
+ function CollapsibleSection({ title, count, warnIfPositive, defaultOpen = true, children, }) {
71
+ const [open, setOpen] = useState(defaultOpen);
72
+ const isWarning = warnIfPositive && count !== undefined && count > 0;
73
+ return (_jsxs("div", { className: "bg-white rounded-2xl shadow-card overflow-hidden", children: [_jsxs("button", { type: "button", onClick: () => setOpen(!open), className: "w-full flex items-center gap-2 px-4 py-3 text-left hover:bg-gray-50 transition-colors cursor-pointer", children: [_jsx("svg", { className: `w-3.5 h-3.5 text-gray-400 transition-transform ${open ? "rotate-90" : ""}`, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) }), _jsx("span", { className: "text-sm font-semibold text-gray-900", children: title }), count !== undefined && (_jsx("span", { className: `text-[11px] px-2 py-0.5 rounded-full font-medium tabular-nums ${isWarning
74
+ ? "bg-amber-100 text-amber-700"
75
+ : "bg-gray-100 text-gray-500"}`, children: count }))] }), open && _jsx("div", { className: "px-4 pb-4", children: children })] }));
76
+ }
77
+ // ============================================================================
78
+ // CounterItem
79
+ // ============================================================================
80
+ const counterIcons = {
81
+ Inferences: (_jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.455 2.456L21.75 6l-1.036.259a3.375 3.375 0 00-2.455 2.456z" }) })),
82
+ "Tool Calls": (_jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M11.42 15.17l-5.1-5.1a1.5 1.5 0 010-2.12l.88-.88a1.5 1.5 0 012.12 0l2.83 2.83 5.66-5.66a1.5 1.5 0 012.12 0l.88.88a1.5 1.5 0 010 2.12l-7.07 7.07a1.5 1.5 0 01-2.12-.14z" }) })),
83
+ Spawned: (_jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M18 18.72a9.094 9.094 0 003.741-.479 3 3 0 00-4.682-2.72m.94 3.198l.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0112 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 016 18.719m12 0a5.971 5.971 0 00-.941-3.197m0 0A5.995 5.995 0 0012 12.75a5.995 5.995 0 00-5.058 2.772m0 0a3 3 0 00-4.681 2.72 8.986 8.986 0 003.74.477m.94-3.197a5.971 5.971 0 00-.94 3.197M15 6.75a3 3 0 11-6 0 3 3 0 016 0zm6 3a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0zm-13.5 0a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0z" }) })),
84
+ Messages: (_jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M8.625 12a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H8.25m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0H12m4.125 0a.375.375 0 11-.75 0 .375.375 0 01.75 0zm0 0h-.375M21 12c0 4.556-4.03 8.25-9 8.25a9.764 9.764 0 01-2.555-.337A5.972 5.972 0 015.41 20.97a5.969 5.969 0 01-.474-.065 4.48 4.48 0 00.978-2.025c.09-.457-.133-.901-.467-1.226C3.93 16.178 3 14.189 3 12c0-4.556 4.03-8.25 9-8.25s9 3.694 9 8.25z" }) })),
85
+ };
86
+ function CounterItem({ label, value }) {
87
+ return (_jsxs("div", { className: "bg-gray-50 rounded-xl px-3 py-2.5 border border-gray-100", children: [_jsxs("div", { className: "flex items-center gap-1.5 mb-1", children: [_jsx("span", { className: "text-gray-400", children: counterIcons[label] }), _jsx("span", { className: "text-[10px] text-gray-400 uppercase tracking-wider font-medium", children: label })] }), _jsx("div", { className: "text-lg font-bold tabular-nums text-gray-900", children: value })] }));
88
+ }
89
+ // ============================================================================
90
+ // ToolCallCard
91
+ // ============================================================================
92
+ function ToolCallCard({ tool }) {
93
+ const [expanded, setExpanded] = useState(false);
94
+ return (_jsxs("div", { className: "rounded-xl border border-gray-100 bg-gray-50 overflow-hidden", children: [_jsxs("button", { type: "button", onClick: () => setExpanded(!expanded), className: "w-full flex items-center gap-2 px-3 py-2.5 text-left hover:bg-gray-100 transition-colors cursor-pointer", children: [_jsx(ToolStatusDot, { status: tool.status }), _jsx("span", { className: "font-mono font-medium text-sm text-gray-900", children: tool.name }), _jsx(ToolStatusBadge, { status: tool.status }), _jsx("span", { className: "text-[10px] text-gray-400 font-mono ml-auto", children: tool.id.slice(0, 12) }), _jsx("svg", { className: `w-3 h-3 text-gray-400 transition-transform shrink-0 ${expanded ? "rotate-90" : ""}`, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })] }), expanded && (_jsxs("div", { className: "px-3 pb-3 space-y-2 border-t border-gray-100", children: [tool.input !== undefined && (_jsxs("div", { className: "mt-2", children: [_jsx("div", { className: "text-[10px] text-gray-500 uppercase tracking-wider font-medium mb-1", children: "Input" }), _jsx(CodeBlock, { children: JSON.stringify(tool.input, null, 2) })] })), tool.result !== undefined && (_jsxs("div", { children: [_jsx("div", { className: "text-[10px] text-green-700 uppercase tracking-wider font-medium mb-1", children: "Result" }), _jsx(CodeBlock, { variant: "success", children: typeof tool.result === "string"
95
+ ? tool.result
96
+ : JSON.stringify(tool.result, null, 2) })] })), tool.error && (_jsxs("div", { children: [_jsx("div", { className: "text-[10px] text-red-700 uppercase tracking-wider font-medium mb-1", children: "Error" }), _jsx(CodeBlock, { variant: "error", children: tool.error })] }))] }))] }));
97
+ }
98
+ function groupConversation(messages) {
99
+ const groups = [];
100
+ let i = 0;
101
+ while (i < messages.length) {
102
+ const msg = messages[i];
103
+ if (msg.role === "assistant" && msg.toolCalls && msg.toolCalls.length > 0) {
104
+ const toolResponses = new Map();
105
+ let j = i + 1;
106
+ while (j < messages.length) {
107
+ const nextMsg = messages[j];
108
+ if (nextMsg.role !== "tool")
109
+ break;
110
+ toolResponses.set(nextMsg.toolCallId, nextMsg);
111
+ j++;
112
+ }
113
+ groups.push({
114
+ type: "assistant-with-tools",
115
+ assistantMessage: msg,
116
+ toolInteractions: msg.toolCalls.map((tc) => ({
117
+ call: tc,
118
+ response: toolResponses.get(tc.id),
119
+ })),
120
+ messageIndex: i,
121
+ });
122
+ i = j;
123
+ }
124
+ else {
125
+ groups.push({ type: "message", message: msg, messageIndex: i });
126
+ i++;
127
+ }
128
+ }
129
+ return groups;
130
+ }
131
+ function ConversationGroups({ messages, onRewind, }) {
132
+ const groups = useMemo(() => groupConversation(messages), [messages]);
133
+ // Compute previous assistant message's total input for cache validation.
134
+ // promptTokens (= Anthropic input_tokens) is the TOTAL input including cached/cache-write portions.
135
+ const prevTotalInputs = useMemo(() => {
136
+ const result = [];
137
+ let prevTotal;
138
+ for (const group of groups) {
139
+ result.push(prevTotal);
140
+ if (group.type === "assistant-with-tools") {
141
+ const msg = group.assistantMessage;
142
+ if (msg.promptTokens !== undefined) {
143
+ prevTotal = msg.promptTokens;
144
+ }
145
+ }
146
+ }
147
+ return result;
148
+ }, [groups]);
149
+ return (_jsx("div", { className: "space-y-3", children: groups.map((group, idx) => {
150
+ if (group.type === "message") {
151
+ return _jsx(ConversationMessage, { msg: group.message }, idx);
152
+ }
153
+ return (_jsx(AssistantToolGroup, { group: group, expectedCacheRead: prevTotalInputs[idx], onRewind: onRewind }, idx));
154
+ }) }));
155
+ }
156
+ // ============================================================================
157
+ // AssistantToolGroup
158
+ // ============================================================================
159
+ function formatTokens(n) {
160
+ if (n >= 1000000)
161
+ return `${(n / 1000000).toFixed(1)}M`;
162
+ if (n >= 1000)
163
+ return `${(n / 1000).toFixed(1)}k`;
164
+ return n.toString();
165
+ }
166
+ function CacheStatsLine({ msg, expectedCacheRead, }) {
167
+ if (msg.promptTokens === undefined)
168
+ return null;
169
+ // promptTokens (= Anthropic input_tokens) is TOTAL input including cached/cache-write.
170
+ // Uncached = total - cached - cache_write (the remainder billed at full price).
171
+ const totalInput = msg.promptTokens ?? 0;
172
+ const cached = msg.cachedTokens ?? 0;
173
+ const cacheWrite = msg.cacheWriteTokens ?? 0;
174
+ const uncached = totalInput - cached - cacheWrite;
175
+ // Cache validation: compare actual cache read with expected (prev call total input)
176
+ let cacheValidation;
177
+ if (expectedCacheRead !== undefined && expectedCacheRead > 0 && cached > 0) {
178
+ const ratio = cached / expectedCacheRead;
179
+ cacheValidation = { ratio, ok: ratio >= 0.9 };
180
+ }
181
+ return (_jsxs("div", { className: "flex items-center gap-1.5 text-[10px] tabular-nums flex-wrap", children: [uncached > 0 && (_jsxs("span", { className: "text-gray-400", children: [formatTokens(uncached), " in"] })), cached > 0 && (_jsxs("span", { className: "text-blue-500", children: [uncached > 0 ? "+ " : "", formatTokens(cached), " cached"] })), cacheWrite > 0 && (_jsxs("span", { className: "text-amber-500", children: ["+ ", formatTokens(cacheWrite), " write"] })), cacheValidation && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-gray-300", children: "|" }), _jsxs("span", { className: cacheValidation.ok ? "text-green-600" : "text-red-500", children: ["prev ", formatTokens(expectedCacheRead), " \u2192", " ", (cacheValidation.ratio * 100).toFixed(0), "% hit"] })] }))] }));
182
+ }
183
+ function AssistantToolGroup({ group, expectedCacheRead, onRewind, }) {
184
+ const { assistantMessage, toolInteractions } = group;
185
+ const [textExpanded, setTextExpanded] = useState(false);
186
+ const hasText = assistantMessage.content.trim().length > 0;
187
+ const isTextTruncated = assistantMessage.content !== assistantMessage.fullContent;
188
+ const displayText = textExpanded
189
+ ? assistantMessage.fullContent
190
+ : assistantMessage.content;
191
+ return (_jsxs("div", { className: "rounded-xl bg-white border border-gray-100 border-l-[3px] border-l-green-500 px-3.5 py-3", children: [_jsxs("div", { className: "flex items-center gap-2 mb-1", children: [_jsx("span", { className: "text-[10px] font-bold uppercase tracking-wider text-green-700", children: "assistant" }), toolInteractions.length > 0 && (_jsxs("span", { className: "text-[10px] bg-green-100 text-green-700 px-1.5 py-0.5 rounded-full font-medium", children: [toolInteractions.length, " tool", toolInteractions.length !== 1 ? "s" : ""] })), assistantMessage.cost !== undefined && assistantMessage.cost > 0 && (_jsxs("span", { className: "text-[10px] text-emerald-600 font-medium tabular-nums", children: ["$", assistantMessage.cost.toFixed(4)] })), assistantMessage.llmCallId && (_jsx(DebugLink, { to: `llm-calls/${assistantMessage.llmCallId}`, className: "text-[10px] text-accent-peri hover:underline font-medium", children: "view llm call \u2192" })), onRewind && (_jsx("button", { type: "button", onClick: () => onRewind(group.messageIndex), className: "text-[10px] text-orange-600 hover:underline font-medium cursor-pointer", children: "retry from here" })), _jsx(Timestamp, { value: assistantMessage.timestamp })] }), _jsx(CacheStatsLine, { msg: assistantMessage, expectedCacheRead: expectedCacheRead }), hasText && (_jsxs("div", { className: "mt-1", children: [_jsx("div", { className: "whitespace-pre-wrap break-words text-gray-700 text-[12px] leading-relaxed", children: displayText }), isTextTruncated && (_jsx("button", { type: "button", onClick: () => setTextExpanded(!textExpanded), className: "text-[11px] text-accent-peri hover:underline mt-1 font-medium cursor-pointer", children: textExpanded ? "Show less" : "Show more" }))] })), _jsx("div", { className: `space-y-1.5 ${hasText ? "mt-2" : ""}`, children: toolInteractions.map(({ call, response }) => (_jsx(ToolInteractionCard, { call: call, response: response }, call.id))) })] }));
192
+ }
193
+ // ============================================================================
194
+ // ToolInteractionCard
195
+ // ============================================================================
196
+ function oneLinePreview(value, maxLen = 80) {
197
+ const str = typeof value === "string" ? value : JSON.stringify(value);
198
+ const line = str.replace(/\n/g, " ").trim();
199
+ return line.length > maxLen ? line.slice(0, maxLen) + "…" : line;
200
+ }
201
+ function ToolInteractionCard({ call, response, }) {
202
+ const [expanded, setExpanded] = useState(false);
203
+ const [resultExpanded, setResultExpanded] = useState(false);
204
+ const status = response
205
+ ? response.isError
206
+ ? "failed"
207
+ : "completed"
208
+ : "pending";
209
+ const isResultTruncated = response !== undefined && response.content !== response.fullContent;
210
+ const displayResult = resultExpanded
211
+ ? response?.fullContent
212
+ : response?.content;
213
+ return (_jsxs("div", { className: `rounded-lg border overflow-hidden ${response?.isError
214
+ ? "border-red-200 bg-red-50/50"
215
+ : "border-gray-200 bg-gray-50/50"}`, children: [_jsxs("button", { type: "button", onClick: () => setExpanded(!expanded), className: "w-full flex items-start gap-2 px-2.5 py-2 text-left hover:bg-white/60 transition-colors cursor-pointer", children: [_jsx(ToolStatusDot, { status: status }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "font-mono font-medium text-[11px] text-gray-800", children: call.name }), response?.isError && (_jsx("span", { className: "text-[9px] bg-red-100 text-red-700 px-1.5 py-0.5 rounded-full font-semibold", children: "error" })), _jsx(Timestamp, { value: response?.timestamp })] }), !expanded && (_jsxs("div", { className: "mt-0.5 space-y-0", children: [call.input !== undefined && (_jsxs("div", { className: "text-[10px] text-gray-500 font-mono truncate", children: ["\u2191 ", oneLinePreview(call.input)] })), response && (_jsxs("div", { className: `text-[10px] font-mono truncate ${response.isError ? "text-red-600" : "text-gray-500"}`, children: ["\u2193 ", oneLinePreview(response.content)] }))] }))] }), _jsx("svg", { className: `w-3 h-3 text-gray-400 transition-transform shrink-0 mt-0.5 ${expanded ? "rotate-90" : ""}`, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })] }), expanded && (_jsxs("div", { className: "px-2.5 pb-2.5 space-y-2 border-t border-gray-100", children: [call.input !== undefined && (_jsxs("div", { className: "mt-2", children: [_jsx("div", { className: "text-[9px] text-gray-500 uppercase tracking-wider font-medium mb-1", children: "Input" }), _jsx(CodeBlock, { children: JSON.stringify(call.input, null, 2) })] })), response && !response.isError && (_jsxs("div", { children: [_jsx("div", { className: "text-[9px] text-green-700 uppercase tracking-wider font-medium mb-1", children: "Result" }), _jsx(CodeBlock, { variant: "success", children: displayResult ?? "" }), isResultTruncated && (_jsx("button", { type: "button", onClick: (e) => {
216
+ e.stopPropagation();
217
+ setResultExpanded(!resultExpanded);
218
+ }, className: "text-[10px] text-accent-peri hover:underline mt-0.5 font-medium cursor-pointer", children: resultExpanded ? "Show less" : "Show more" }))] })), response?.isError && (_jsxs("div", { children: [_jsx("div", { className: "text-[9px] text-red-700 uppercase tracking-wider font-medium mb-1", children: "Error" }), _jsx(CodeBlock, { variant: "error", children: displayResult ?? "" }), isResultTruncated && (_jsx("button", { type: "button", onClick: (e) => {
219
+ e.stopPropagation();
220
+ setResultExpanded(!resultExpanded);
221
+ }, className: "text-[10px] text-accent-peri hover:underline mt-0.5 font-medium cursor-pointer", children: resultExpanded ? "Show less" : "Show more" }))] }))] }))] }));
222
+ }
223
+ // ============================================================================
224
+ // ConversationMessage (user, system, orphan tool)
225
+ // ============================================================================
226
+ const roleStyles = {
227
+ user: {
228
+ bg: "bg-white",
229
+ leftBorder: "border-l-blue-500",
230
+ label: "text-blue-600",
231
+ },
232
+ assistant: {
233
+ bg: "bg-white",
234
+ leftBorder: "border-l-green-500",
235
+ label: "text-green-700",
236
+ },
237
+ tool: {
238
+ bg: "bg-white",
239
+ leftBorder: "border-l-indigo-400",
240
+ label: "text-indigo-600",
241
+ },
242
+ system: {
243
+ bg: "bg-gray-50",
244
+ leftBorder: "border-l-gray-300",
245
+ label: "text-gray-500",
246
+ },
247
+ };
248
+ function ConversationMessage({ msg }) {
249
+ const [expanded, setExpanded] = useState(false);
250
+ const style = roleStyles[msg.role] ?? roleStyles.system;
251
+ const isTruncated = msg.content !== msg.fullContent;
252
+ const displayContent = expanded ? msg.fullContent : msg.content;
253
+ const isError = msg.role === "tool" && msg.isError;
254
+ return (_jsxs("div", { className: `rounded-xl border border-gray-100 border-l-[3px] px-3.5 py-3 ${isError
255
+ ? "bg-red-50 border-l-red-500"
256
+ : `${style.bg} ${style.leftBorder}`}`, children: [_jsxs("div", { className: "flex items-center gap-2 mb-2", children: [_jsx("span", { className: `text-[10px] font-bold uppercase tracking-wider ${isError ? "text-red-700" : style.label}`, children: msg.role }), msg.role === "tool" && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[10px] text-gray-400 font-mono", children: msg.toolCallId.slice(0, 12) }), msg.isError && (_jsx("span", { className: "text-[9px] bg-red-100 text-red-700 px-1.5 py-0.5 rounded-full font-semibold", children: "error" }))] })), msg.role === "assistant" && msg.cost !== undefined && msg.cost > 0 && (_jsxs("span", { className: "text-[10px] text-emerald-600 font-medium tabular-nums", children: ["$", msg.cost.toFixed(4)] })), _jsx(Timestamp, { value: msg.timestamp })] }), _jsx("div", { className: `whitespace-pre-wrap break-words text-[12px] leading-relaxed ${isError ? "text-red-800" : "text-gray-700"}`, children: displayContent }), isTruncated && (_jsx("button", { type: "button", onClick: () => setExpanded(!expanded), className: "text-[11px] text-accent-peri hover:underline mt-1.5 font-medium cursor-pointer", children: expanded ? "Show less" : "Show more" }))] }));
257
+ }
258
+ // ============================================================================
259
+ // SendMessageForm
260
+ // ============================================================================
261
+ function SendMessageForm({ sessionId, agentId, }) {
262
+ const [content, setContent] = useState("");
263
+ const [senderType, setSenderType] = useState("user");
264
+ const [customSender, setCustomSender] = useState("");
265
+ const [sending, setSending] = useState(false);
266
+ const [error, setError] = useState(null);
267
+ const handleSend = useCallback(async () => {
268
+ if (!content.trim())
269
+ return;
270
+ setSending(true);
271
+ setError(null);
272
+ try {
273
+ if (senderType === "debug") {
274
+ unwrap(await api.call("mailbox.send", {
275
+ sessionId,
276
+ toAgentId: AgentId(agentId),
277
+ content: content.trim(),
278
+ debug: true,
279
+ }));
280
+ }
281
+ else {
282
+ unwrap(await api.call("user-chat.sendMessage", {
283
+ sessionId,
284
+ agentId: AgentId(agentId),
285
+ content: content.trim(),
286
+ }));
287
+ }
288
+ setContent("");
289
+ }
290
+ catch (e) {
291
+ setError(e instanceof Error ? e.message : "Failed to send message");
292
+ }
293
+ finally {
294
+ setSending(false);
295
+ }
296
+ }, [content, senderType, sessionId, agentId]);
297
+ const handleKeyDown = useCallback((e) => {
298
+ if (e.key === "Enter" && !e.shiftKey) {
299
+ e.preventDefault();
300
+ handleSend();
301
+ }
302
+ }, [handleSend]);
303
+ const handleSubmit = useCallback((e) => {
304
+ e.preventDefault();
305
+ handleSend();
306
+ }, [handleSend]);
307
+ return (_jsxs("div", { className: "bg-white rounded-2xl shadow-card p-4", children: [_jsx("h3", { className: "text-sm font-semibold text-gray-900 mb-3", children: "Send Debug Message" }), _jsxs("form", { onSubmit: handleSubmit, className: "space-y-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("label", { className: "text-[11px] text-gray-400 font-medium", children: "From:" }), _jsxs("select", { value: senderType, onChange: (e) => setSenderType(e.target.value), className: "text-[11px] border border-gray-200 rounded-lg px-2 py-1 bg-gray-50", children: [_jsx("option", { value: "user", children: "user" }), _jsx("option", { value: "debug", children: "debug" }), _jsx("option", { value: "custom", children: "custom..." })] }), senderType === "custom" && (_jsx("input", { type: "text", value: customSender, onChange: (e) => setCustomSender(e.target.value), placeholder: "agent ID or role", className: "text-[11px] border border-gray-200 rounded-lg px-2 py-1 flex-1 bg-gray-50" }))] }), _jsx("textarea", { value: content, onChange: (e) => setContent(e.target.value), onKeyDown: handleKeyDown, placeholder: "Message content... (Enter to send, Shift+Enter for new line)", rows: 3, className: "w-full border border-gray-200 rounded-xl px-3 py-2 text-sm resize-y bg-gray-50" }), error && _jsx("div", { className: "text-[11px] text-red-600", children: error }), _jsx("button", { type: "submit", disabled: sending || !content.trim(), className: `px-3 py-1.5 text-[11px] font-semibold rounded-lg transition-all ${content.trim()
308
+ ? "text-white bg-accent-peri hover:brightness-110 cursor-pointer shadow-sm"
309
+ : "text-gray-400 bg-gray-100 cursor-not-allowed"} disabled:opacity-50 disabled:cursor-not-allowed`, children: sending ? "Sending..." : "Send Message" })] })] }));
310
+ }
311
+ // ============================================================================
312
+ // ResumeAgentButton
313
+ // ============================================================================
314
+ function ResumeAgentButton({ sessionId, agentId, }) {
315
+ const [resuming, setResuming] = useState(false);
316
+ const handleResume = useCallback(async (e) => {
317
+ e.stopPropagation();
318
+ setResuming(true);
319
+ try {
320
+ unwrap(await api.call("agents.resume", {
321
+ sessionId,
322
+ agentId: AgentId(agentId),
323
+ }));
324
+ }
325
+ catch {
326
+ // Error is visible via state change (or lack thereof)
327
+ }
328
+ finally {
329
+ setResuming(false);
330
+ }
331
+ }, [sessionId, agentId]);
332
+ return (_jsx("button", { type: "button", onClick: handleResume, disabled: resuming, className: "text-[11px] font-semibold text-white bg-red-600 hover:bg-red-700 px-2.5 py-1 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed transition-colors shrink-0 cursor-pointer", children: resuming ? "Resuming..." : "Resume" }));
333
+ }
334
+ // ============================================================================
335
+ // Badges
336
+ // ============================================================================
337
+ function StatusBadge({ status }) {
338
+ const styles = {
339
+ idle: "bg-gray-100 text-gray-600",
340
+ thinking: "bg-accent-lime/30 text-gray-700",
341
+ responding: "bg-accent-peri/30 text-gray-700",
342
+ waiting_for_user: "bg-purple-100 text-purple-700",
343
+ error: "bg-red-100 text-red-700",
344
+ };
345
+ return (_jsx("span", { className: `text-[11px] px-2.5 py-1 rounded-full font-semibold ${styles[status] ?? "bg-gray-100 text-gray-600"}`, children: status }));
346
+ }
347
+ function ToolStatusBadge({ status }) {
348
+ const styles = {
349
+ pending: "bg-gray-100 text-gray-600",
350
+ executing: "bg-amber-100 text-amber-700",
351
+ completed: "bg-green-100 text-green-700",
352
+ failed: "bg-red-100 text-red-700",
353
+ };
354
+ return (_jsx("span", { className: `text-[10px] px-2 py-0.5 rounded-full font-semibold ${styles[status] ?? "bg-gray-100 text-gray-600"}`, children: status }));
355
+ }
356
+ function ToolStatusDot({ status }) {
357
+ const colors = {
358
+ pending: "bg-gray-400",
359
+ executing: "bg-amber-400 animate-pulse",
360
+ completed: "bg-green-500",
361
+ failed: "bg-red-500",
362
+ };
363
+ return (_jsx("div", { className: `w-2 h-2 rounded-full shrink-0 ${colors[status] ?? "bg-gray-400"}` }));
364
+ }
365
+ //# sourceMappingURL=AgentDetailPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentDetailPage.js","sourceRoot":"","sources":["../../../../src/components/debug/pages/AgentDetailPage.tsx"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  export declare function AgentsPage(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=AgentsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentsPage.d.ts","sourceRoot":"","sources":["../../../../src/components/debug/pages/AgentsPage.tsx"],"names":[],"mappings":"AAWA,wBAAgB,UAAU,4CAiEzB"}
@@ -0,0 +1,111 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { AgentId } from '@roj-ai/shared';
3
+ import { useCallback, useEffect, useState } from 'react';
4
+ import { api, unwrap } from '@roj-ai/client';
5
+ import { useAgentTree, useEventStore } from '../../../stores/event-store';
6
+ import { useDebugContext } from '../DebugContext';
7
+ import { DebugLink, useDebugSessionId } from '../DebugNavigation';
8
+ import { AgentDetailPage } from './AgentDetailPage';
9
+ export function AgentsPage() {
10
+ const sessionId = useDebugSessionId();
11
+ const { params } = useDebugContext();
12
+ // Get agent tree from event store (already loaded by DebugLayout)
13
+ const agents = useAgentTree();
14
+ const isLoading = useEventStore((s) => s.isLoading);
15
+ const error = useEventStore((s) => s.error);
16
+ const selectedAgentId = params.agentId ?? null;
17
+ return (_jsxs("div", { className: "h-full flex gap-4", children: [_jsxs("div", { className: "w-80 shrink-0 bg-white rounded-2xl shadow-card flex flex-col", children: [_jsx("div", { className: "p-3 border-b border-gray-100", children: _jsx("h2", { className: "font-semibold text-gray-900 text-sm", children: "Agent Tree" }) }), _jsx("div", { className: "flex-1 overflow-auto p-3", children: isLoading && agents.length === 0
18
+ ? _jsx("div", { className: "text-gray-400 text-sm", children: "Loading..." })
19
+ : error
20
+ ? _jsx("div", { className: "text-red-500 text-sm", children: error })
21
+ : agents.length === 0
22
+ ? _jsx("div", { className: "text-gray-400 text-sm", children: "No agents yet" })
23
+ : (_jsx("div", { children: agents.map((agent, i) => (_jsx(AgentNode, { agent: agent, selectedId: selectedAgentId, isLast: i === agents.length - 1, guides: [] }, agent.id))) })) }), selectedAgentId && (_jsx(SpawnAgentSection, { sessionId: sessionId, parentId: selectedAgentId, parentDefinitionName: findAgentDefinitionName(agents, selectedAgentId) }))] }), _jsxs("div", { className: "flex-1 bg-gray-50/50 rounded-2xl flex flex-col min-w-0", children: [_jsx("div", { className: "p-3 border-b border-gray-100", children: _jsx("h2", { className: "font-semibold text-gray-900 text-sm", children: "Agent Detail" }) }), _jsx("div", { className: "flex-1 overflow-auto p-4", children: selectedAgentId
24
+ ? _jsx(AgentDetailPage, { agentId: selectedAgentId })
25
+ : (_jsx("div", { className: "text-gray-400 text-sm", children: "Select an agent from the tree to view details" })) })] })] }));
26
+ }
27
+ /**
28
+ * Find the definitionName of an agent by its ID in the tree.
29
+ */
30
+ function findAgentDefinitionName(agents, agentId) {
31
+ for (const agent of agents) {
32
+ if (agent.id === agentId)
33
+ return agent.definitionName;
34
+ const found = findAgentDefinitionName(agent.children, agentId);
35
+ if (found)
36
+ return found;
37
+ }
38
+ return null;
39
+ }
40
+ function SpawnAgentSection({ sessionId, parentId, parentDefinitionName, }) {
41
+ const [presetAgents, setPresetAgents] = useState([]);
42
+ const [selectedAgent, setSelectedAgent] = useState('');
43
+ const [message, setMessage] = useState('');
44
+ const [spawning, setSpawning] = useState(false);
45
+ const [error, setError] = useState(null);
46
+ useEffect(() => {
47
+ api.call('presets.getAgents', { sessionId }).then((result) => {
48
+ setPresetAgents(unwrap(result).agents);
49
+ }).catch(() => {
50
+ setPresetAgents([]);
51
+ });
52
+ }, [sessionId]);
53
+ // Filter agents spawnable by the selected parent
54
+ const spawnableAgents = presetAgents.filter((a) => parentDefinitionName && a.spawnableBy.includes(parentDefinitionName));
55
+ const handleSpawn = useCallback(async () => {
56
+ if (!selectedAgent)
57
+ return;
58
+ setSpawning(true);
59
+ setError(null);
60
+ try {
61
+ unwrap(await api.call('agents.spawn', {
62
+ sessionId,
63
+ definitionName: selectedAgent,
64
+ parentId: AgentId(parentId),
65
+ message: message.trim() || undefined,
66
+ }));
67
+ setSelectedAgent('');
68
+ setMessage('');
69
+ }
70
+ catch (e) {
71
+ setError(e instanceof Error ? e.message : 'Failed to spawn agent');
72
+ }
73
+ finally {
74
+ setSpawning(false);
75
+ }
76
+ }, [selectedAgent, sessionId, parentId, message]);
77
+ if (spawnableAgents.length === 0)
78
+ return null;
79
+ return (_jsxs("div", { className: "p-3 border-t border-gray-100", children: [_jsx("h3", { className: "text-xs font-medium text-gray-400 mb-2", children: "Spawn Agent" }), _jsxs("div", { className: "space-y-2", children: [_jsxs("select", { value: selectedAgent, onChange: (e) => setSelectedAgent(e.target.value), className: "w-full text-xs border border-gray-200 rounded px-2 py-1", children: [_jsx("option", { value: "", children: "Select agent..." }), spawnableAgents.map((a) => (_jsxs("option", { value: a.name, children: [a.name, a.hasInputSchema ? ' (typed)' : ''] }, a.name)))] }), _jsx("input", { type: "text", value: message, onChange: (e) => setMessage(e.target.value), placeholder: "Initial message (optional)", className: "w-full text-xs border border-gray-200 rounded px-2 py-1" }), error && _jsx("div", { className: "text-xs text-red-600", children: error }), _jsx("button", { onClick: handleSpawn, disabled: spawning || !selectedAgent, className: "w-full px-2 py-1 text-xs font-medium text-white bg-green-600 rounded hover:bg-green-700 disabled:opacity-50 disabled:cursor-not-allowed", children: spawning ? 'Spawning...' : 'Spawn' })] })] }));
80
+ }
81
+ const statusDotColors = {
82
+ idle: 'bg-gray-400',
83
+ thinking: 'bg-accent-lime animate-pulse',
84
+ responding: 'bg-accent-peri',
85
+ waiting_for_user: 'bg-purple-400',
86
+ error: 'bg-red-400',
87
+ paused: 'bg-amber-400',
88
+ };
89
+ const statusTextColors = {
90
+ idle: 'text-gray-500',
91
+ thinking: 'text-lime-600',
92
+ responding: 'text-indigo-500',
93
+ waiting_for_user: 'text-purple-500',
94
+ error: 'text-red-500',
95
+ paused: 'text-amber-500',
96
+ };
97
+ const statusLabels = {
98
+ idle: 'idle',
99
+ thinking: 'thinking',
100
+ responding: 'responding',
101
+ waiting_for_user: 'waiting',
102
+ error: 'error',
103
+ paused: 'paused',
104
+ };
105
+ function AgentNode({ agent, selectedId, isLast, guides, }) {
106
+ const isSelected = selectedId === agent.id;
107
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex", children: [guides.map((active, i) => (_jsx("div", { className: "w-5 shrink-0 relative", children: active && _jsx("div", { className: "absolute left-2 top-0 bottom-0 w-px bg-gray-200" }) }, i))), _jsxs("div", { className: "w-5 shrink-0 relative", children: [_jsx("div", { className: `absolute left-2 top-0 w-px bg-gray-200 ${isLast ? 'h-5' : 'h-full'}` }), _jsx("div", { className: "absolute left-2 top-5 h-px w-2.5 bg-gray-200" })] }), _jsx("div", { className: "flex-1 min-w-0 py-0.5", children: _jsxs(DebugLink, { to: `agents/${agent.id}`, className: `block w-full text-left px-2.5 py-2 rounded-lg border transition-all ${isSelected
108
+ ? 'bg-accent-peri/15 border-accent-peri/40 border-l-[3px] border-l-accent-peri text-gray-900 shadow-sm'
109
+ : 'bg-white border-gray-100 text-gray-700 hover:border-gray-200 hover:shadow-sm'}`, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: `w-2 h-2 rounded-full shrink-0 ${statusDotColors[agent.status]}` }), _jsx("span", { className: "font-mono text-sm truncate font-medium", children: agent.definitionName }), _jsxs("span", { className: "ml-auto flex items-center gap-1.5 shrink-0", children: [_jsx("span", { className: `text-[10px] font-medium ${statusTextColors[agent.status]}`, children: statusLabels[agent.status] }), agent.cost > 0 && (_jsxs("span", { className: "text-[10px] text-emerald-600 font-medium tabular-nums", children: ["$", agent.cost.toFixed(4)] }))] })] }), _jsxs("div", { className: "flex items-center gap-1.5 ml-4 mt-1", children: [agent.isExecuting && (_jsx("span", { className: "text-[10px] bg-amber-100 text-amber-700 px-1.5 py-0.5 rounded-full font-semibold animate-pulse", children: "exec" })), agent.mailboxCount > 0 && (_jsxs("span", { className: "text-[10px] bg-orange-100 text-orange-600 px-1.5 py-0.5 rounded-full font-medium", children: [agent.mailboxCount, " msgs"] })), agent.pendingToolCalls > 0 && (_jsxs("span", { className: "text-[10px] bg-accent-peri/15 text-gray-600 px-1.5 py-0.5 rounded-full font-medium", children: [agent.pendingToolCalls, " tools"] })), _jsx("span", { className: "text-[10px] text-gray-400 font-mono ml-auto", children: agent.id.slice(0, 8) })] })] }) })] }), agent.children.map((child, i) => (_jsx(AgentNode, { agent: child, selectedId: selectedId, isLast: i === agent.children.length - 1, guides: [...guides, !isLast] }, child.id)))] }));
110
+ }
111
+ //# sourceMappingURL=AgentsPage.js.map