@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,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { DebugLink } from '../DebugNavigation';
4
+ import { useChatDebug, useEventStore } from '../../../stores/event-store';
5
+ export function UserChatPage() {
6
+ // Get chat debug messages from event store
7
+ const messages = useChatDebug();
8
+ const isLoading = useEventStore((s) => s.isLoading);
9
+ const error = useEventStore((s) => s.error);
10
+ const [expandedIds, setExpandedIds] = useState(new Set());
11
+ const toggleExpanded = (id) => {
12
+ setExpandedIds((prev) => {
13
+ const next = new Set(prev);
14
+ if (next.has(id)) {
15
+ next.delete(id);
16
+ }
17
+ else {
18
+ next.add(id);
19
+ }
20
+ return next;
21
+ });
22
+ };
23
+ // Calculate stats
24
+ const total = messages.length;
25
+ const userCount = messages.filter((m) => m.type === 'user_message').length;
26
+ const agentCount = messages.filter((m) => m.type === 'agent_message').length;
27
+ const askUserCount = messages.filter((m) => m.type === 'ask_user').length;
28
+ const answeredCount = messages.filter((m) => m.type === 'ask_user' && m.answered).length;
29
+ return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center gap-6 text-sm", children: [_jsxs("span", { className: "text-slate-600", children: [_jsx("span", { className: "font-medium text-slate-900", children: total }), " messages"] }), _jsxs("span", { className: "text-slate-600", children: [_jsx("span", { className: "font-medium text-blue-600", children: userCount }), " user"] }), _jsxs("span", { className: "text-slate-600", children: [_jsx("span", { className: "font-medium text-green-600", children: agentCount }), " agent"] }), askUserCount > 0 && (_jsxs("span", { className: "text-slate-600", children: [_jsx("span", { className: "font-medium text-purple-600", children: askUserCount }), " questions", answeredCount > 0 && _jsxs("span", { className: "text-slate-500", children: ["(", answeredCount, " answered)"] })] }))] }), error && _jsx("div", { className: "text-red-500 text-sm", children: error }), isLoading && messages.length === 0 && _jsx("div", { className: "text-slate-500 text-sm", children: "Loading chat messages..." }), messages.length > 0 && (_jsx("div", { className: "bg-white rounded-md border border-slate-200 overflow-hidden", children: _jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "bg-slate-50 border-b border-slate-200", children: _jsxs("tr", { children: [_jsx("th", { className: "px-3 py-2 text-left font-medium text-slate-600 w-20", children: "Type" }), _jsx("th", { className: "px-3 py-2 text-left font-medium text-slate-600", children: "Content" }), _jsx("th", { className: "px-3 py-2 text-left font-medium text-slate-600 w-24", children: "Agent" }), _jsx("th", { className: "px-3 py-2 text-left font-medium text-slate-600 w-32", children: "Links" }), _jsx("th", { className: "px-3 py-2 text-left font-medium text-slate-600 w-20", children: "Time" }), _jsx("th", { className: "px-3 py-2 text-left font-medium text-slate-600 w-16", children: "Event" })] }) }), _jsx("tbody", { className: "divide-y divide-slate-200", children: messages.map((msg) => (_jsx(MessageRow, { message: msg, isExpanded: expandedIds.has(msg.messageId), onToggleExpand: () => toggleExpanded(msg.messageId) }, msg.messageId))) })] }) }) })), !isLoading && messages.length === 0 && _jsx("div", { className: "text-slate-500 text-sm", children: "No chat messages found" })] }));
30
+ }
31
+ function MessageRow({ message, isExpanded, onToggleExpand, }) {
32
+ const isLongMessage = message.content.length > 100;
33
+ const displayContent = isExpanded
34
+ ? message.content
35
+ : message.content.slice(0, 100) + (isLongMessage ? '...' : '');
36
+ return (_jsxs("tr", { className: "hover:bg-slate-50", children: [_jsx("td", { className: "px-3 py-2", children: _jsx(TypeBadge, { type: message.type, answered: message.answered }) }), _jsxs("td", { className: "px-3 py-2", children: [_jsxs("div", { className: `text-slate-700 ${isLongMessage ? 'cursor-pointer' : ''}`, onClick: isLongMessage ? onToggleExpand : undefined, children: [_jsx("span", { className: "whitespace-pre-wrap break-words", children: displayContent }), isLongMessage && (_jsx("button", { onClick: (e) => {
37
+ e.stopPropagation();
38
+ onToggleExpand();
39
+ }, className: "ml-2 text-violet-600 hover:text-violet-800 text-xs", children: isExpanded ? 'less' : 'more' }))] }), message.type === 'ask_user' && message.answered && (_jsxs("div", { className: "mt-1 text-xs text-slate-500", children: ["Answer: ", _jsx("span", { className: "font-mono", children: JSON.stringify(message.answer) })] })), message.type === 'ask_user' && message.inputType && (_jsxs("div", { className: "mt-1 text-xs text-slate-400", children: ["Input: ", message.inputType.type] }))] }), _jsx("td", { className: "px-3 py-2", children: message.agentId && message.agentName && (_jsx(AgentBadge, { agentId: message.agentId, agentName: message.agentName })) }), _jsx("td", { className: "px-3 py-2", children: _jsxs("div", { className: "flex flex-wrap gap-1", children: [message.llmCallId && (_jsx(DebugLink, { to: `llm-calls/${message.llmCallId}`, className: "inline-flex items-center px-1.5 py-0.5 rounded text-xs bg-yellow-100 text-yellow-700 hover:bg-yellow-200", children: "LLM" })), message.toolCallId && (_jsx("span", { className: "inline-flex items-center px-1.5 py-0.5 rounded text-xs bg-slate-100 text-slate-600", title: `Tool Call: ${message.toolCallId}`, children: "Tool" })), message.mailboxMessageId && (_jsx(DebugLink, { to: "mailbox", className: "inline-flex items-center px-1.5 py-0.5 rounded text-xs bg-indigo-100 text-indigo-700 hover:bg-indigo-200", children: "Mailbox" }))] }) }), _jsx("td", { className: "px-3 py-2 font-mono text-xs text-slate-500 whitespace-nowrap", children: new Date(message.timestamp).toLocaleTimeString() }), _jsxs("td", { className: "px-3 py-2 font-mono text-xs text-slate-400", children: ["#", message.eventIndex] })] }));
40
+ }
41
+ function TypeBadge({ type, answered }) {
42
+ switch (type) {
43
+ case 'user_message':
44
+ return (_jsx("span", { className: "inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-blue-100 text-blue-700", children: "User" }));
45
+ case 'agent_message':
46
+ return (_jsx("span", { className: "inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-green-100 text-green-700", children: "Agent" }));
47
+ case 'ask_user':
48
+ return (_jsxs("span", { className: `inline-flex items-center px-2 py-0.5 rounded text-xs font-medium ${answered
49
+ ? 'bg-purple-100 text-purple-700'
50
+ : 'bg-purple-200 text-purple-800 animate-pulse'}`, children: ["Question", answered ? '' : ' (pending)'] }));
51
+ }
52
+ }
53
+ function AgentBadge({ agentId, agentName, }) {
54
+ return (_jsx(DebugLink, { to: `agents/${agentId}`, className: "inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs font-medium bg-slate-100 text-slate-700 hover:bg-slate-200", children: _jsx("span", { className: "truncate max-w-20", title: agentName, children: agentName }) }));
55
+ }
56
+ //# sourceMappingURL=UserChatPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserChatPage.js","sourceRoot":"","sources":["../../../../src/components/debug/pages/UserChatPage.tsx"],"names":[],"mappings":"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"}
@@ -11,3 +11,4 @@ export { UserChatPage } from './UserChatPage';
11
11
  export { FilesPage } from './FilesPage';
12
12
  export { LogsPage } from './LogsPage';
13
13
  export { ServicesPage } from './ServicesPage';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/debug/pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,14 @@
1
+ export { AgentDetailPage } from './AgentDetailPage';
2
+ export { DashboardPage } from './DashboardPage';
3
+ export { AgentsPage } from './AgentsPage';
4
+ export { CommunicationPage } from './CommunicationPage';
5
+ export { EventsPage } from './EventsPage';
6
+ export { LLMCallPage } from './LLMCallPage';
7
+ export { LLMCallsPage } from './LLMCallsPage';
8
+ export { MailboxPage } from './MailboxPage';
9
+ export { TimelinePage } from './TimelinePage';
10
+ export { UserChatPage } from './UserChatPage';
11
+ export { FilesPage } from './FilesPage';
12
+ export { LogsPage } from './LogsPage';
13
+ export { ServicesPage } from './ServicesPage';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/debug/pages/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/index.d.ts CHANGED
@@ -7,3 +7,4 @@ export { selectAgentTree, selectGlobalMailbox, selectMetrics, selectTimeline, us
7
7
  export { EventPollingProvider, useEventPolling } from './providers/EventPollingProvider';
8
8
  export { AgentDetailPage, AgentsPage, BackIcon, CommunicationDiagram, CommunicationPage, DashboardPage, DebugContext, DebugLink, DebugShell, EventsPage, FilesPage, getNavItemClassName, LLMCallDetail, LLMCallPage, LLMCallsPage, LogsPage, MailboxPage, navItems, ServicesPage, TimelinePage, useDebugContext, useDebugNavigate, useDebugParams, useDebugSessionId, UserChatPage, } from './components/debug';
9
9
  export type { DebugContextValue, NavItem } from './components/debug';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACN,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,WAAW,GACX,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAGxF,OAAO,EACN,eAAe,EACf,UAAU,EACV,QAAQ,EACR,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,YAAY,GACZ,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @roj-ai/debug
3
+ *
4
+ * React debug UI for session event inspection — extracted from @roj-ai/client.
5
+ */
6
+ // Event store
7
+ export { selectAgentTree, selectGlobalMailbox, selectMetrics, selectTimeline, useAgentDetail, useAgentTree, useChatDebug, useEvents, useEventStore, useGlobalMailbox, useMetrics, useSessionInfo, useTimeline, } from './stores/event-store';
8
+ // Event polling provider
9
+ export { EventPollingProvider, useEventPolling } from './providers/EventPollingProvider';
10
+ // Debug components (context, navigation, shell, pages, diagrams)
11
+ export { AgentDetailPage, AgentsPage, BackIcon, CommunicationDiagram, CommunicationPage, DashboardPage, DebugContext, DebugLink, DebugShell, EventsPage, FilesPage, getNavItemClassName, LLMCallDetail, LLMCallPage, LLMCallsPage, LogsPage, MailboxPage, navItems, ServicesPage, TimelinePage, useDebugContext, useDebugNavigate, useDebugParams, useDebugSessionId, UserChatPage, } from './components/debug';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc;AACd,OAAO,EACN,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,WAAW,GACX,MAAM,sBAAsB,CAAA;AAE7B,yBAAyB;AACzB,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAExF,iEAAiE;AACjE,OAAO,EACN,eAAe,EACf,UAAU,EACV,QAAQ,EACR,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,YAAY,GACZ,MAAM,oBAAoB,CAAA"}
@@ -5,3 +5,4 @@
5
5
  * Estimate token count for a text string.
6
6
  */
7
7
  export declare function estimateTokens(text: string): number;
8
+ //# sourceMappingURL=domain-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-utils.d.ts","sourceRoot":"","sources":["../../src/lib/domain-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Client-specific domain utilities.
3
+ */
4
+ import { estimateTokenCount } from 'tokenx';
5
+ /**
6
+ * Estimate token count for a text string.
7
+ */
8
+ export function estimateTokens(text) {
9
+ return estimateTokenCount(text);
10
+ }
11
+ //# sourceMappingURL=domain-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-utils.js","sourceRoot":"","sources":["../../src/lib/domain-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAE3C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC"}
@@ -25,3 +25,4 @@ export declare function useEventPolling(sessionId: string | undefined): {
25
25
  error: string | null;
26
26
  };
27
27
  export {};
28
+ //# sourceMappingURL=EventPollingProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventPollingProvider.d.ts","sourceRoot":"","sources":["../../src/providers/EventPollingProvider.tsx"],"names":[],"mappings":"AAGA,UAAU,yBAAyB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,yBAAyB,2CActF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;;;EAkB5D"}
@@ -0,0 +1,49 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { useEventStore } from '../stores/event-store';
4
+ /**
5
+ * Provider component that manages event polling for a session.
6
+ *
7
+ * When mounted, it loads the session's events and starts polling for new events.
8
+ * When unmounted (e.g., navigating away), it stops polling and resets the store.
9
+ *
10
+ * Usage:
11
+ * ```tsx
12
+ * <EventPollingProvider sessionId={sessionId}>
13
+ * <DebugViews />
14
+ * </EventPollingProvider>
15
+ * ```
16
+ */
17
+ export function EventPollingProvider({ sessionId, children }) {
18
+ const loadSession = useEventStore((s) => s.loadSession);
19
+ const reset = useEventStore((s) => s.reset);
20
+ useEffect(() => {
21
+ loadSession(sessionId);
22
+ // Cleanup on unmount or sessionId change
23
+ return () => {
24
+ reset();
25
+ };
26
+ }, [sessionId, loadSession, reset]);
27
+ return _jsx(_Fragment, { children: children });
28
+ }
29
+ /**
30
+ * Hook to initialize event polling for a session.
31
+ * Use this instead of EventPollingProvider if you want more control.
32
+ */
33
+ export function useEventPolling(sessionId) {
34
+ const loadSession = useEventStore((s) => s.loadSession);
35
+ const reset = useEventStore((s) => s.reset);
36
+ const isLoading = useEventStore((s) => s.isLoading);
37
+ const error = useEventStore((s) => s.error);
38
+ useEffect(() => {
39
+ if (!sessionId)
40
+ return;
41
+ loadSession(sessionId);
42
+ // Cleanup on unmount or sessionId change
43
+ return () => {
44
+ reset();
45
+ };
46
+ }, [sessionId, loadSession, reset]);
47
+ return { isLoading, error };
48
+ }
49
+ //# sourceMappingURL=EventPollingProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventPollingProvider.js","sourceRoot":"","sources":["../../src/providers/EventPollingProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAOrD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAA6B;IACtF,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAE3C,SAAS,CAAC,GAAG,EAAE;QACd,WAAW,CAAC,SAAS,CAAC,CAAA;QAEtB,yCAAyC;QACzC,OAAO,GAAG,EAAE;YACX,KAAK,EAAE,CAAA;QACR,CAAC,CAAA;IACF,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAA;IAEnC,OAAO,4BAAG,QAAQ,GAAI,CAAA;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAA6B;IAC5D,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IACvD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACnD,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAE3C,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,SAAS;YAAE,OAAM;QAEtB,WAAW,CAAC,SAAS,CAAC,CAAA;QAEtB,yCAAyC;QACzC,OAAO,GAAG,EAAE;YACX,KAAK,EAAE,CAAA;QACR,CAAC,CAAA;IACF,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAA;IAEnC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;AAC5B,CAAC"}
@@ -91,3 +91,4 @@ export declare function useSessionInfo(): SessionInfoState;
91
91
  */
92
92
  export declare function useAgentDetail(agentId: AgentId): GetAgentDetailResponse | null;
93
93
  export {};
94
+ //# sourceMappingURL=event-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../../src/stores/event-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,gBAAgB,CAAA;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EACN,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EA0BlB,MAAM,gBAAgB,CAAA;AAKvB;;;;;;;;;;GAUG;AACH,UAAU,eAAe;IAExB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAGpB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,wBAAwB,EAAE,wBAAwB,CAAA;IAClD,0BAA0B,EAAE,0BAA0B,CAAA;IACtD,uBAAuB,EAAE,uBAAuB,CAAA;IAChD,YAAY,EAAE,YAAY,CAAA;IAC1B,aAAa,EAAE,aAAa,CAAA;IAC5B,YAAY,EAAE,YAAY,CAAA;IAC1B,cAAc,EAAE,cAAc,CAAA;IAG9B,OAAO,EAAE,kBAAkB,CAAA;IAC3B,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,aAAa,EAAE,oBAAoB,EAAE,CAAA;IACrC,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;IAGrC,SAAS,EAAE,OAAO,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IAGtB,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,WAAW,EAAE,MAAM,IAAI,CAAA;CACvB;AAwFD,eAAO,MAAM,aAAa,8EAwNvB,CAAA;AAMH;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,aAAa,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,EAAE,CAErE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,oBAAoB,EAAE,CAElF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAExE;AAMD;;GAEG;AACH,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAE5C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,oBAAoB,EAAE,CAEzD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,kBAAkB,CAE/C;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,WAAW,EAAE,CAEzC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,gBAAgB,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,gBAAgB,CAEjD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAM9E"}
@@ -0,0 +1,341 @@
1
+ import { applyEventToAgentDetail, applyEventToAgentRegistry, applyEventToAgentTree, applyEventToChatDebug, applyEventToMailbox, applyEventToMetrics, applyEventToServices, applyEventToSessionInfo, applyEventToTimeline, buildAgentTreeFromProjection, createAgentDetailProjectionState, createAgentRegistryState, createAgentTreeProjectionState, createChatDebugState, createMailboxState, createMetricsState, createServicesProjectionState, createSessionInfoState, createTimelineState, getAgentDetail, getChatDebugMessages, getMailboxMessages, getTimelineItems, isDomainEvent, metricsStateToResponse, } from '@roj-ai/shared';
2
+ import { useMemo } from 'react';
3
+ import { create } from 'zustand';
4
+ import { api, unwrap } from '@roj-ai/client';
5
+ // Polling interval reference (stored outside Zustand for cleanup)
6
+ let pollingIntervalId = null;
7
+ // Counter to track which loadSession call is current (for cancellation)
8
+ let loadSessionCounter = 0;
9
+ // Default empty metrics
10
+ const emptyMetrics = {
11
+ totalTokens: 0,
12
+ promptTokens: 0,
13
+ completionTokens: 0,
14
+ llmCalls: 0,
15
+ toolCalls: 0,
16
+ agentCount: 0,
17
+ totalCost: 0,
18
+ durationMs: 0,
19
+ byProvider: {},
20
+ };
21
+ function createInitialProjections() {
22
+ return {
23
+ sessionInfoState: createSessionInfoState(),
24
+ agentRegistryState: createAgentRegistryState(),
25
+ agentTreeProjectionState: createAgentTreeProjectionState(),
26
+ agentDetailProjectionState: createAgentDetailProjectionState(),
27
+ servicesProjectionState: createServicesProjectionState(),
28
+ metricsState: createMetricsState(),
29
+ timelineState: createTimelineState(),
30
+ mailboxState: createMailboxState(),
31
+ chatDebugState: createChatDebugState(),
32
+ };
33
+ }
34
+ /**
35
+ * Compute all derived data from projection states.
36
+ */
37
+ function computeDerivedData(projections) {
38
+ return {
39
+ metrics: metricsStateToResponse(projections.metricsState, projections.agentRegistryState.count),
40
+ timeline: getTimelineItems(projections.timelineState, projections.agentRegistryState),
41
+ agentTree: buildAgentTreeFromProjection(projections.agentTreeProjectionState),
42
+ globalMailbox: getMailboxMessages(projections.mailboxState),
43
+ chatDebugMessages: getChatDebugMessages(projections.chatDebugState),
44
+ };
45
+ }
46
+ /**
47
+ * Apply a single event to all projection states.
48
+ * Does NOT compute derived data - call computeDerivedData separately at the end.
49
+ */
50
+ function applyEventToProjections(projections, event) {
51
+ const e = event;
52
+ // Update registry first (other projections may need agent names)
53
+ const agentRegistryState = applyEventToAgentRegistry(projections.agentRegistryState, e);
54
+ return {
55
+ sessionInfoState: applyEventToSessionInfo(projections.sessionInfoState, e),
56
+ agentRegistryState,
57
+ agentTreeProjectionState: applyEventToAgentTree(projections.agentTreeProjectionState, e),
58
+ agentDetailProjectionState: applyEventToAgentDetail(projections.agentDetailProjectionState, e),
59
+ servicesProjectionState: applyEventToServices(projections.servicesProjectionState, e),
60
+ metricsState: applyEventToMetrics(projections.metricsState, e),
61
+ timelineState: applyEventToTimeline(projections.timelineState, e, agentRegistryState),
62
+ mailboxState: applyEventToMailbox(projections.mailboxState, e, agentRegistryState),
63
+ chatDebugState: applyEventToChatDebug(projections.chatDebugState, e, agentRegistryState),
64
+ };
65
+ }
66
+ export const useEventStore = create((set, get) => ({
67
+ sessionId: null,
68
+ events: [],
69
+ lastIndex: -1,
70
+ ...createInitialProjections(),
71
+ // Derived data (cached)
72
+ metrics: emptyMetrics,
73
+ timeline: [],
74
+ agentTree: [],
75
+ globalMailbox: [],
76
+ chatDebugMessages: [],
77
+ isLoading: false,
78
+ error: null,
79
+ isPolling: false,
80
+ pollIntervalMs: 2000,
81
+ loadSession: async (sessionId) => {
82
+ // Stop any existing polling
83
+ get().stopPolling();
84
+ // Increment counter to invalidate any in-flight loadSession calls
85
+ const thisLoadId = ++loadSessionCounter;
86
+ set({
87
+ sessionId,
88
+ events: [],
89
+ lastIndex: -1,
90
+ ...createInitialProjections(),
91
+ metrics: emptyMetrics,
92
+ timeline: [],
93
+ agentTree: [],
94
+ globalMailbox: [],
95
+ chatDebugMessages: [],
96
+ isLoading: true,
97
+ error: null,
98
+ });
99
+ try {
100
+ // Load all events for the session
101
+ const response = unwrap(await api.call('sessions.getEvents', { sessionId, limit: 10000 }));
102
+ // Check if this load was superseded by a newer one
103
+ if (loadSessionCounter !== thisLoadId) {
104
+ return;
105
+ }
106
+ // Validate unknown[] to DomainEvent[]
107
+ const validEvents = response.events.filter(isDomainEvent);
108
+ if (validEvents.length === 0) {
109
+ set({
110
+ isLoading: false,
111
+ lastIndex: response.lastIndex,
112
+ });
113
+ return;
114
+ }
115
+ // First event should be session_created
116
+ const firstEvent = validEvents[0];
117
+ const e = firstEvent;
118
+ if (e.type !== 'session_created') {
119
+ throw new Error('First event must be session_created');
120
+ }
121
+ // Apply all events to projections
122
+ let projections = createInitialProjections();
123
+ for (const event of validEvents) {
124
+ projections = applyEventToProjections(projections, event);
125
+ }
126
+ // Compute derived data once at the end
127
+ const derived = computeDerivedData(projections);
128
+ set({
129
+ events: validEvents,
130
+ lastIndex: response.lastIndex,
131
+ ...projections,
132
+ ...derived,
133
+ isLoading: false,
134
+ });
135
+ // Start polling for new events
136
+ get().startPolling();
137
+ }
138
+ catch (err) {
139
+ set({
140
+ isLoading: false,
141
+ error: err instanceof Error ? err.message : 'Failed to load session events',
142
+ });
143
+ }
144
+ },
145
+ fetchNewEvents: async () => {
146
+ const { sessionId, lastIndex } = get();
147
+ if (!sessionId)
148
+ return;
149
+ try {
150
+ // Fetch events since last index
151
+ const response = unwrap(await api.call('sessions.getEvents', {
152
+ sessionId,
153
+ since: lastIndex,
154
+ limit: 1000,
155
+ }));
156
+ // Check if session was reset/changed while we were fetching
157
+ const currentState = get();
158
+ if (currentState.sessionId !== sessionId) {
159
+ return;
160
+ }
161
+ // Validate unknown[] to DomainEvent[]
162
+ const newEvents = response.events.filter(isDomainEvent);
163
+ if (newEvents.length === 0) {
164
+ // No new events, just update lastIndex in case it changed
165
+ if (response.lastIndex !== lastIndex) {
166
+ set({ lastIndex: response.lastIndex });
167
+ }
168
+ return;
169
+ }
170
+ // Get current projection states
171
+ const { events } = get();
172
+ let projections = {
173
+ sessionInfoState: currentState.sessionInfoState,
174
+ agentRegistryState: currentState.agentRegistryState,
175
+ agentTreeProjectionState: currentState.agentTreeProjectionState,
176
+ agentDetailProjectionState: currentState.agentDetailProjectionState,
177
+ servicesProjectionState: currentState.servicesProjectionState,
178
+ metricsState: currentState.metricsState,
179
+ timelineState: currentState.timelineState,
180
+ mailboxState: currentState.mailboxState,
181
+ chatDebugState: currentState.chatDebugState,
182
+ };
183
+ // If we don't have any agents yet, check if first event is session_created
184
+ if (projections.agentRegistryState.count === 0 && events.length === 0) {
185
+ const allEvents = [...events, ...newEvents];
186
+ const firstEvent = allEvents[0];
187
+ if (!firstEvent || firstEvent.type !== 'session_created') {
188
+ // Wait for session_created event
189
+ set({ lastIndex: response.lastIndex });
190
+ return;
191
+ }
192
+ // Initialize from scratch
193
+ projections = createInitialProjections();
194
+ for (const event of allEvents) {
195
+ projections = applyEventToProjections(projections, event);
196
+ }
197
+ const derived = computeDerivedData(projections);
198
+ set({
199
+ events: allEvents,
200
+ lastIndex: response.lastIndex,
201
+ ...projections,
202
+ ...derived,
203
+ error: null,
204
+ });
205
+ return;
206
+ }
207
+ // Apply only new events incrementally
208
+ for (const event of newEvents) {
209
+ projections = applyEventToProjections(projections, event);
210
+ }
211
+ const derived = computeDerivedData(projections);
212
+ set({
213
+ events: [...events, ...newEvents],
214
+ lastIndex: response.lastIndex,
215
+ ...projections,
216
+ ...derived,
217
+ error: null,
218
+ });
219
+ }
220
+ catch (err) {
221
+ // Don't set error on poll failures to avoid UI flicker
222
+ console.error('Failed to fetch new events:', err);
223
+ }
224
+ },
225
+ reset: () => {
226
+ get().stopPolling();
227
+ // Invalidate any in-flight loadSession calls
228
+ loadSessionCounter++;
229
+ set({
230
+ sessionId: null,
231
+ events: [],
232
+ lastIndex: -1,
233
+ ...createInitialProjections(),
234
+ metrics: emptyMetrics,
235
+ timeline: [],
236
+ agentTree: [],
237
+ globalMailbox: [],
238
+ chatDebugMessages: [],
239
+ isLoading: false,
240
+ error: null,
241
+ });
242
+ },
243
+ startPolling: () => {
244
+ if (pollingIntervalId) {
245
+ clearInterval(pollingIntervalId);
246
+ }
247
+ const { pollIntervalMs, fetchNewEvents } = get();
248
+ pollingIntervalId = setInterval(fetchNewEvents, pollIntervalMs);
249
+ set({ isPolling: true });
250
+ },
251
+ stopPolling: () => {
252
+ if (pollingIntervalId) {
253
+ clearInterval(pollingIntervalId);
254
+ pollingIntervalId = null;
255
+ }
256
+ set({ isPolling: false });
257
+ },
258
+ }));
259
+ // ============================================================================
260
+ // Selectors - return cached data from store
261
+ // ============================================================================
262
+ /**
263
+ * Get agent tree (cached in store).
264
+ */
265
+ export function selectAgentTree(state) {
266
+ return state.agentTree;
267
+ }
268
+ /**
269
+ * Get timeline items (cached in store).
270
+ */
271
+ export function selectTimeline(state) {
272
+ return state.timeline;
273
+ }
274
+ /**
275
+ * Get global mailbox messages (cached in store).
276
+ */
277
+ export function selectGlobalMailbox(state) {
278
+ return state.globalMailbox;
279
+ }
280
+ /**
281
+ * Get metrics (cached in store).
282
+ */
283
+ export function selectMetrics(state) {
284
+ return state.metrics;
285
+ }
286
+ // ============================================================================
287
+ // React hooks for derived data
288
+ // ============================================================================
289
+ /**
290
+ * Hook to get agent tree (cached in store).
291
+ */
292
+ export function useAgentTree() {
293
+ return useEventStore((s) => s.agentTree);
294
+ }
295
+ /**
296
+ * Hook to get timeline items (cached in store).
297
+ */
298
+ export function useTimeline() {
299
+ return useEventStore((s) => s.timeline);
300
+ }
301
+ /**
302
+ * Hook to get global mailbox messages (cached in store).
303
+ */
304
+ export function useGlobalMailbox() {
305
+ return useEventStore((s) => s.globalMailbox);
306
+ }
307
+ /**
308
+ * Hook to get metrics (cached in store).
309
+ */
310
+ export function useMetrics() {
311
+ return useEventStore((s) => s.metrics);
312
+ }
313
+ /**
314
+ * Hook to get raw events.
315
+ */
316
+ export function useEvents() {
317
+ return useEventStore((s) => s.events);
318
+ }
319
+ /**
320
+ * Hook to get chat debug messages (cached in store).
321
+ */
322
+ export function useChatDebug() {
323
+ return useEventStore((s) => s.chatDebugMessages);
324
+ }
325
+ /**
326
+ * Hook to get session info (metadata from session lifecycle events).
327
+ */
328
+ export function useSessionInfo() {
329
+ return useEventStore((s) => s.sessionInfoState);
330
+ }
331
+ /**
332
+ * Hook to get agent detail by ID.
333
+ * Uses useMemo to avoid creating new objects on every render.
334
+ */
335
+ export function useAgentDetail(agentId) {
336
+ const agentDetailProjectionState = useEventStore((s) => s.agentDetailProjectionState);
337
+ return useMemo(() => {
338
+ return getAgentDetail(agentDetailProjectionState, agentId);
339
+ }, [agentDetailProjectionState, agentId]);
340
+ }
341
+ //# sourceMappingURL=event-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-store.js","sourceRoot":"","sources":["../../src/stores/event-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  export declare function formatDuration(ms: number): string;
2
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAOjD"}
@@ -0,0 +1,11 @@
1
+ export function formatDuration(ms) {
2
+ if (ms < 1000)
3
+ return `${Math.round(ms)}ms`;
4
+ const seconds = Math.floor(ms / 1000);
5
+ if (seconds < 60)
6
+ return `${seconds}s`;
7
+ const minutes = Math.floor(seconds / 60);
8
+ const remainingSeconds = seconds % 60;
9
+ return `${minutes}m ${remainingSeconds}s`;
10
+ }
11
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,EAAU;IACxC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAA;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IACrC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAA;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACxC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAA;IACrC,OAAO,GAAG,OAAO,KAAK,gBAAgB,GAAG,CAAA;AAC1C,CAAC"}