@roj-ai/shared 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 (41) hide show
  1. package/dist/chat-protocol.js +2 -0
  2. package/dist/chat-protocol.js.map +1 -0
  3. package/dist/index.js +13 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/lib/domain-utils.js +23 -0
  6. package/dist/lib/domain-utils.js.map +1 -0
  7. package/dist/lib/ids.js +14 -0
  8. package/dist/lib/ids.js.map +1 -0
  9. package/dist/lib/result.js +21 -0
  10. package/dist/lib/result.js.map +1 -0
  11. package/dist/projections/agent-detail-projection.js +494 -0
  12. package/dist/projections/agent-detail-projection.js.map +1 -0
  13. package/dist/projections/agent-registry.js +26 -0
  14. package/dist/projections/agent-registry.js.map +1 -0
  15. package/dist/projections/agent-tree-projection.js +193 -0
  16. package/dist/projections/agent-tree-projection.js.map +1 -0
  17. package/dist/projections/chat-debug.js +213 -0
  18. package/dist/projections/chat-debug.js.map +1 -0
  19. package/dist/projections/events.js +8 -0
  20. package/dist/projections/events.js.map +1 -0
  21. package/dist/projections/index.js +12 -0
  22. package/dist/projections/index.js.map +1 -0
  23. package/dist/projections/mailbox.js +88 -0
  24. package/dist/projections/mailbox.js.map +1 -0
  25. package/dist/projections/metrics.js +82 -0
  26. package/dist/projections/metrics.js.map +1 -0
  27. package/dist/projections/protocol-status.js +21 -0
  28. package/dist/projections/protocol-status.js.map +1 -0
  29. package/dist/projections/services-projection.js +67 -0
  30. package/dist/projections/services-projection.js.map +1 -0
  31. package/dist/projections/session-info.js +34 -0
  32. package/dist/projections/session-info.js.map +1 -0
  33. package/dist/projections/timeline.js +186 -0
  34. package/dist/projections/timeline.js.map +1 -0
  35. package/dist/projections/types.js +5 -0
  36. package/dist/projections/types.js.map +1 -0
  37. package/dist/rpc/client.js +125 -0
  38. package/dist/rpc/client.js.map +1 -0
  39. package/dist/rpc/index.js +8 -0
  40. package/dist/rpc/index.js.map +1 -0
  41. package/package.json +7 -7
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Agent tree projection - self-contained projection for building agent tree.
3
+ *
4
+ * Replaces the old buildAgentTree() that needed full SessionState.
5
+ * Tracks per-agent: status, parent, pending tool call count, executing flag, mailbox counts.
6
+ */
7
+ import { toProtocolStatus } from './protocol-status.js';
8
+ export function createAgentTreeProjectionState() {
9
+ return { agents: new Map() };
10
+ }
11
+ // ============================================================================
12
+ // Reducer
13
+ // ============================================================================
14
+ export function applyEventToAgentTree(state, event) {
15
+ switch (event.type) {
16
+ case 'agent_spawned': {
17
+ const newAgents = new Map(state.agents);
18
+ newAgents.set(event.agentId, {
19
+ id: event.agentId,
20
+ definitionName: event.definitionName,
21
+ status: 'pending',
22
+ parentId: event.parentId,
23
+ pendingToolCallCount: 0,
24
+ isExecuting: false,
25
+ mailboxUnconsumedCount: 0,
26
+ cost: 0,
27
+ });
28
+ return { ...state, agents: newAgents };
29
+ }
30
+ case 'agent_state_changed': {
31
+ const agent = state.agents.get(event.agentId);
32
+ if (!agent)
33
+ return state;
34
+ const newAgents = new Map(state.agents);
35
+ newAgents.set(event.agentId, { ...agent, status: event.toState });
36
+ return { ...state, agents: newAgents };
37
+ }
38
+ case 'inference_started': {
39
+ const agent = state.agents.get(event.agentId);
40
+ if (!agent)
41
+ return state;
42
+ const newAgents = new Map(state.agents);
43
+ newAgents.set(event.agentId, { ...agent, status: 'inferring' });
44
+ return { ...state, agents: newAgents };
45
+ }
46
+ case 'inference_completed': {
47
+ const agent = state.agents.get(event.agentId);
48
+ if (!agent)
49
+ return state;
50
+ const toolCallCount = event.response.toolCalls.length;
51
+ const newAgents = new Map(state.agents);
52
+ // Decrement mailbox unconsumed count for consumed messages
53
+ let agents = newAgents;
54
+ if (event.consumedMessageIds.length > 0) {
55
+ agents = decrementMailboxCounts(agents, event.agentId, event.consumedMessageIds.length);
56
+ }
57
+ agents.set(event.agentId, {
58
+ ...agent,
59
+ status: toolCallCount > 0 ? 'tool_exec' : 'pending',
60
+ pendingToolCallCount: toolCallCount,
61
+ isExecuting: false,
62
+ cost: agent.cost + (event.metrics.cost ?? 0),
63
+ });
64
+ return { ...state, agents };
65
+ }
66
+ case 'inference_failed': {
67
+ const agent = state.agents.get(event.agentId);
68
+ if (!agent)
69
+ return state;
70
+ const newAgents = new Map(state.agents);
71
+ newAgents.set(event.agentId, { ...agent, status: 'errored' });
72
+ return { ...state, agents: newAgents };
73
+ }
74
+ case 'tool_started': {
75
+ const agent = state.agents.get(event.agentId);
76
+ if (!agent)
77
+ return state;
78
+ const newAgents = new Map(state.agents);
79
+ newAgents.set(event.agentId, { ...agent, isExecuting: true });
80
+ return { ...state, agents: newAgents };
81
+ }
82
+ case 'tool_completed':
83
+ case 'tool_failed': {
84
+ const agent = state.agents.get(event.agentId);
85
+ if (!agent)
86
+ return state;
87
+ const remaining = Math.max(0, agent.pendingToolCallCount - 1);
88
+ const newAgents = new Map(state.agents);
89
+ newAgents.set(event.agentId, {
90
+ ...agent,
91
+ pendingToolCallCount: remaining,
92
+ isExecuting: false,
93
+ status: remaining === 0 ? 'pending' : 'tool_exec',
94
+ });
95
+ return { ...state, agents: newAgents };
96
+ }
97
+ case 'agent_paused': {
98
+ const agent = state.agents.get(event.agentId);
99
+ if (!agent)
100
+ return state;
101
+ const newAgents = new Map(state.agents);
102
+ newAgents.set(event.agentId, { ...agent, status: 'paused' });
103
+ return { ...state, agents: newAgents };
104
+ }
105
+ case 'agent_resumed': {
106
+ const agent = state.agents.get(event.agentId);
107
+ if (!agent)
108
+ return state;
109
+ const newAgents = new Map(state.agents);
110
+ newAgents.set(event.agentId, { ...agent, status: 'pending' });
111
+ return { ...state, agents: newAgents };
112
+ }
113
+ case 'session_restarted': {
114
+ const newAgents = new Map(state.agents);
115
+ for (const [agentId, agent] of state.agents) {
116
+ let updated = agent;
117
+ let changed = false;
118
+ if (agent.status === 'inferring') {
119
+ updated = { ...updated, status: 'pending' };
120
+ changed = true;
121
+ }
122
+ if (agent.isExecuting) {
123
+ updated = { ...updated, isExecuting: false };
124
+ changed = true;
125
+ }
126
+ if (changed) {
127
+ newAgents.set(agentId, updated);
128
+ }
129
+ }
130
+ return { ...state, agents: newAgents };
131
+ }
132
+ case 'mailbox_message': {
133
+ const agent = state.agents.get(event.toAgentId);
134
+ if (!agent)
135
+ return state;
136
+ const newAgents = new Map(state.agents);
137
+ newAgents.set(event.toAgentId, {
138
+ ...agent,
139
+ mailboxUnconsumedCount: agent.mailboxUnconsumedCount + 1,
140
+ });
141
+ return { ...state, agents: newAgents };
142
+ }
143
+ case 'mailbox_consumed': {
144
+ const agent = state.agents.get(event.agentId);
145
+ if (!agent)
146
+ return state;
147
+ return {
148
+ ...state,
149
+ agents: decrementMailboxCounts(new Map(state.agents), event.agentId, event.messageIds.length),
150
+ };
151
+ }
152
+ default:
153
+ return state;
154
+ }
155
+ }
156
+ function decrementMailboxCounts(agents, agentId, count) {
157
+ const agent = agents.get(agentId);
158
+ if (!agent)
159
+ return agents;
160
+ agents.set(agentId, {
161
+ ...agent,
162
+ mailboxUnconsumedCount: Math.max(0, agent.mailboxUnconsumedCount - count),
163
+ });
164
+ return agents;
165
+ }
166
+ // ============================================================================
167
+ // Query
168
+ // ============================================================================
169
+ /**
170
+ * Build agent tree nodes from projection state.
171
+ */
172
+ export function buildAgentTreeFromProjection(state) {
173
+ const allAgents = Array.from(state.agents.values());
174
+ const rootAgents = allAgents.filter((a) => a.parentId === null);
175
+ return rootAgents.map((agent) => buildTreeNode(state, agent));
176
+ }
177
+ function buildTreeNode(state, agent) {
178
+ const children = Array.from(state.agents.values())
179
+ .filter((a) => a.parentId === agent.id)
180
+ .map((child) => buildTreeNode(state, child));
181
+ return {
182
+ id: agent.id,
183
+ definitionName: agent.definitionName,
184
+ status: toProtocolStatus(agent.status),
185
+ parentId: agent.parentId,
186
+ children,
187
+ mailboxCount: agent.mailboxUnconsumedCount,
188
+ pendingToolCalls: agent.pendingToolCallCount,
189
+ isExecuting: agent.isExecuting,
190
+ cost: agent.cost,
191
+ };
192
+ }
193
+ //# sourceMappingURL=agent-tree-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-tree-projection.js","sourceRoot":"","sources":["../../src/projections/agent-tree-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Chat debug projection - tracks user-visible chat messages with debug links.
3
+ */
4
+ export function createChatDebugState() {
5
+ return {
6
+ messages: [],
7
+ pendingToolCalls: new Map(),
8
+ lastLLMCallByAgent: new Map(),
9
+ eventIndex: 0,
10
+ };
11
+ }
12
+ /**
13
+ * Apply event to chat debug state.
14
+ * @param registry Agent registry for name lookups
15
+ */
16
+ export function applyEventToChatDebug(state, event, registry) {
17
+ const currentIndex = state.eventIndex;
18
+ const nextIndex = currentIndex + 1;
19
+ const getAgentName = (agentId) => {
20
+ return registry.names.get(agentId) ?? 'unknown';
21
+ };
22
+ switch (event.type) {
23
+ case 'inference_completed': {
24
+ // Track the last LLM call for this agent
25
+ if (event.llmCallId) {
26
+ const newLastLLMCallByAgent = new Map(state.lastLLMCallByAgent);
27
+ newLastLLMCallByAgent.set(event.agentId, event.llmCallId);
28
+ return {
29
+ ...state,
30
+ lastLLMCallByAgent: newLastLLMCallByAgent,
31
+ eventIndex: nextIndex,
32
+ };
33
+ }
34
+ return { ...state, eventIndex: nextIndex };
35
+ }
36
+ case 'tool_started': {
37
+ // Only track send_user_message and ask_user tools
38
+ if (event.toolName === 'send_user_message' || event.toolName === 'ask_user') {
39
+ const llmCallId = state.lastLLMCallByAgent.get(event.agentId);
40
+ const newPendingToolCalls = new Map(state.pendingToolCalls);
41
+ newPendingToolCalls.set(event.toolCallId, {
42
+ agentId: event.agentId,
43
+ llmCallId,
44
+ toolName: event.toolName,
45
+ });
46
+ return {
47
+ ...state,
48
+ pendingToolCalls: newPendingToolCalls,
49
+ eventIndex: nextIndex,
50
+ };
51
+ }
52
+ return { ...state, eventIndex: nextIndex };
53
+ }
54
+ case 'user_message_sent': {
55
+ // Find the pending tool call for this message
56
+ let toolCallId;
57
+ let llmCallId;
58
+ let agentId;
59
+ // Look through pending tool calls to find a send_user_message from the same agent
60
+ for (const [tcId, info] of state.pendingToolCalls) {
61
+ if (info.toolName === 'send_user_message' && info.agentId === event.agentId) {
62
+ toolCallId = tcId;
63
+ llmCallId = info.llmCallId;
64
+ agentId = info.agentId;
65
+ break;
66
+ }
67
+ }
68
+ // Clean up the used pending tool call
69
+ const newPendingToolCalls = new Map(state.pendingToolCalls);
70
+ if (toolCallId) {
71
+ newPendingToolCalls.delete(toolCallId);
72
+ }
73
+ const newMessage = {
74
+ type: 'agent_message',
75
+ messageId: event.messageId,
76
+ content: event.message,
77
+ timestamp: event.timestamp,
78
+ eventIndex: currentIndex,
79
+ agentId: agentId ?? event.agentId,
80
+ agentName: getAgentName(agentId ?? event.agentId),
81
+ llmCallId,
82
+ toolCallId,
83
+ format: event.format,
84
+ };
85
+ return {
86
+ ...state,
87
+ messages: [...state.messages, newMessage],
88
+ pendingToolCalls: newPendingToolCalls,
89
+ eventIndex: nextIndex,
90
+ };
91
+ }
92
+ case 'user_question_asked': {
93
+ // Find the pending tool call for this question
94
+ let toolCallId;
95
+ let llmCallId;
96
+ let agentId;
97
+ // Look through pending tool calls to find an ask_user from the same agent
98
+ for (const [tcId, info] of state.pendingToolCalls) {
99
+ if (info.toolName === 'ask_user' && info.agentId === event.agentId) {
100
+ toolCallId = tcId;
101
+ llmCallId = info.llmCallId;
102
+ agentId = info.agentId;
103
+ break;
104
+ }
105
+ }
106
+ // Clean up the used pending tool call
107
+ const newPendingToolCalls = new Map(state.pendingToolCalls);
108
+ if (toolCallId) {
109
+ newPendingToolCalls.delete(toolCallId);
110
+ }
111
+ const newMessage = {
112
+ type: 'ask_user',
113
+ messageId: event.messageId,
114
+ content: event.question,
115
+ timestamp: event.timestamp,
116
+ eventIndex: currentIndex,
117
+ agentId: agentId ?? event.agentId,
118
+ agentName: getAgentName(agentId ?? event.agentId),
119
+ llmCallId,
120
+ toolCallId,
121
+ inputType: event.inputType,
122
+ answered: false,
123
+ };
124
+ return {
125
+ ...state,
126
+ messages: [...state.messages, newMessage],
127
+ pendingToolCalls: newPendingToolCalls,
128
+ eventIndex: nextIndex,
129
+ };
130
+ }
131
+ case 'user_chat_message_received': {
132
+ const newMessage = {
133
+ type: 'user_message',
134
+ messageId: event.messageId,
135
+ content: event.content,
136
+ timestamp: event.timestamp,
137
+ eventIndex: currentIndex,
138
+ agentId: event.agentId,
139
+ agentName: getAgentName(event.agentId),
140
+ };
141
+ return {
142
+ ...state,
143
+ messages: [...state.messages, newMessage],
144
+ eventIndex: nextIndex,
145
+ };
146
+ }
147
+ case 'user_chat_answer_received': {
148
+ const updatedMessages = state.messages.map((msg) => {
149
+ if (msg.type === 'ask_user' && msg.messageId === event.questionId) {
150
+ return {
151
+ ...msg,
152
+ answered: true,
153
+ answer: event.answerValue,
154
+ };
155
+ }
156
+ return msg;
157
+ });
158
+ return {
159
+ ...state,
160
+ messages: updatedMessages,
161
+ eventIndex: nextIndex,
162
+ };
163
+ }
164
+ case 'mailbox_message': {
165
+ // Only handle user messages (not answers to questions)
166
+ if (event.message.from === 'user' && !event.message.answerTo) {
167
+ const newMessage = {
168
+ type: 'user_message',
169
+ messageId: event.message.id,
170
+ content: event.message.content,
171
+ timestamp: event.message.timestamp,
172
+ eventIndex: currentIndex,
173
+ agentId: event.toAgentId,
174
+ agentName: getAgentName(event.toAgentId),
175
+ mailboxMessageId: event.message.id,
176
+ };
177
+ return {
178
+ ...state,
179
+ messages: [...state.messages, newMessage],
180
+ eventIndex: nextIndex,
181
+ };
182
+ }
183
+ // Handle answer to question - update the ask_user message
184
+ if (event.message.from === 'user' && event.message.answerTo) {
185
+ const updatedMessages = state.messages.map((msg) => {
186
+ if (msg.type === 'ask_user' && msg.messageId === event.message.answerTo) {
187
+ return {
188
+ ...msg,
189
+ answered: true,
190
+ answer: event.message.answerValue,
191
+ };
192
+ }
193
+ return msg;
194
+ });
195
+ return {
196
+ ...state,
197
+ messages: updatedMessages,
198
+ eventIndex: nextIndex,
199
+ };
200
+ }
201
+ return { ...state, eventIndex: nextIndex };
202
+ }
203
+ default:
204
+ return { ...state, eventIndex: nextIndex };
205
+ }
206
+ }
207
+ /**
208
+ * Get chat debug messages sorted by timestamp.
209
+ */
210
+ export function getChatDebugMessages(state) {
211
+ return state.messages;
212
+ }
213
+ //# sourceMappingURL=chat-debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-debug.js","sourceRoot":"","sources":["../../src/projections/chat-debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * ProjectionEvent — union of all event types handled by shared projections.
3
+ *
4
+ * Boundary code (event-store.ts, debug.ts) casts DomainEvent → ProjectionEvent once.
5
+ * Individual projection reducers accept ProjectionEvent directly — no internal casts.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/projections/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,12 @@
1
+ // Protocol status
2
+ export { toProtocolStatus } from './protocol-status.js';
3
+ export { applyEventToAgentRegistry, createAgentRegistryState, getAgentName } from './agent-registry.js';
4
+ export { applyEventToAgentTree, buildAgentTreeFromProjection, createAgentTreeProjectionState } from './agent-tree-projection.js';
5
+ export { applyEventToMetrics, createMetricsState, metricsStateToResponse } from './metrics.js';
6
+ export { applyEventToTimeline, createTimelineState, getTimelineItems } from './timeline.js';
7
+ export { applyEventToMailbox, createMailboxState, getMailboxMessages } from './mailbox.js';
8
+ export { applyEventToChatDebug, createChatDebugState, getChatDebugMessages } from './chat-debug.js';
9
+ export { applyEventToAgentDetail, createAgentDetailProjectionState, getAgentDetail } from './agent-detail-projection.js';
10
+ export { applyEventToSessionInfo, createSessionInfoState } from './session-info.js';
11
+ export { applyEventToServices, createServicesProjectionState } from './services-projection.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/projections/index.ts"],"names":[],"mappings":"AAqBA,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAIvD,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAIvG,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAA;AAIhI,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAI9F,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAI3F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAI1F,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAInG,OAAO,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAIxH,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAInF,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Global mailbox projection - tracks all inter-agent messages.
3
+ */
4
+ export function createMailboxState() {
5
+ return {
6
+ messages: [],
7
+ consumedIds: new Set(),
8
+ };
9
+ }
10
+ /**
11
+ * Apply event to mailbox state.
12
+ * @param registry Agent registry for name lookups
13
+ */
14
+ export function applyEventToMailbox(state, event, registry) {
15
+ switch (event.type) {
16
+ case 'mailbox_message': {
17
+ const msg = event.message;
18
+ // Determine from agent name
19
+ let fromAgentId;
20
+ let fromAgentName;
21
+ if (msg.from === 'user') {
22
+ fromAgentId = 'user';
23
+ fromAgentName = 'User';
24
+ }
25
+ else if (msg.from === 'orchestrator' || msg.from === 'communicator') {
26
+ fromAgentId = msg.from;
27
+ fromAgentName = msg.from.charAt(0).toUpperCase() + msg.from.slice(1);
28
+ }
29
+ else {
30
+ fromAgentId = msg.from;
31
+ fromAgentName = registry.names.get(msg.from) ?? 'unknown';
32
+ }
33
+ const newMessage = {
34
+ id: msg.id,
35
+ fromAgentId,
36
+ fromAgentName,
37
+ toAgentId: event.toAgentId,
38
+ toAgentName: registry.names.get(event.toAgentId) ?? 'unknown',
39
+ content: msg.content,
40
+ timestamp: msg.timestamp,
41
+ consumed: state.consumedIds.has(msg.id),
42
+ };
43
+ return {
44
+ ...state,
45
+ messages: [...state.messages, newMessage],
46
+ };
47
+ }
48
+ case 'mailbox_consumed': {
49
+ const newConsumedIds = new Set(state.consumedIds);
50
+ for (const msgId of event.messageIds) {
51
+ newConsumedIds.add(msgId);
52
+ }
53
+ // Update consumed status in existing messages
54
+ const consumedSet = new Set(event.messageIds);
55
+ const updatedMessages = state.messages.map((m) => consumedSet.has(m.id) ? { ...m, consumed: true } : m);
56
+ return {
57
+ messages: updatedMessages,
58
+ consumedIds: newConsumedIds,
59
+ };
60
+ }
61
+ case 'inference_completed': {
62
+ // inference_completed also marks messages as consumed
63
+ if (event.consumedMessageIds.length === 0)
64
+ return state;
65
+ const newConsumedIds = new Set(state.consumedIds);
66
+ for (const msgId of event.consumedMessageIds) {
67
+ newConsumedIds.add(msgId);
68
+ }
69
+ // Update consumed status in existing messages
70
+ const consumedSet = new Set(event.consumedMessageIds);
71
+ const updatedMessages = state.messages.map((m) => consumedSet.has(m.id) ? { ...m, consumed: true } : m);
72
+ return {
73
+ messages: updatedMessages,
74
+ consumedIds: newConsumedIds,
75
+ };
76
+ }
77
+ default:
78
+ return state;
79
+ }
80
+ }
81
+ /**
82
+ * Get mailbox messages sorted by timestamp.
83
+ */
84
+ export function getMailboxMessages(state) {
85
+ // Messages are already in order since we append them
86
+ return state.messages;
87
+ }
88
+ //# sourceMappingURL=mailbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../src/projections/mailbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Metrics projection - tracks token usage, costs, and call counts.
3
+ */
4
+ export function createMetricsState() {
5
+ return {
6
+ totalTokens: 0,
7
+ promptTokens: 0,
8
+ completionTokens: 0,
9
+ llmCalls: 0,
10
+ toolCalls: 0,
11
+ totalCost: 0,
12
+ firstEventTimestamp: null,
13
+ lastEventTimestamp: null,
14
+ byProvider: {},
15
+ };
16
+ }
17
+ export function applyEventToMetrics(state, event) {
18
+ // Update timestamps
19
+ const firstEventTimestamp = state.firstEventTimestamp ?? event.timestamp;
20
+ const lastEventTimestamp = event.timestamp;
21
+ switch (event.type) {
22
+ case 'inference_completed': {
23
+ const provider = event.metrics.provider;
24
+ const byProvider = provider
25
+ ? {
26
+ ...state.byProvider,
27
+ [provider]: {
28
+ llmCalls: (state.byProvider[provider]?.llmCalls ?? 0) + 1,
29
+ totalTokens: (state.byProvider[provider]?.totalTokens ?? 0) + event.metrics.totalTokens,
30
+ promptTokens: (state.byProvider[provider]?.promptTokens ?? 0) + event.metrics.promptTokens,
31
+ completionTokens: (state.byProvider[provider]?.completionTokens ?? 0) + event.metrics.completionTokens,
32
+ totalCost: (state.byProvider[provider]?.totalCost ?? 0) + (event.metrics.cost ?? 0),
33
+ },
34
+ }
35
+ : state.byProvider;
36
+ return {
37
+ ...state,
38
+ llmCalls: state.llmCalls + 1,
39
+ promptTokens: state.promptTokens + event.metrics.promptTokens,
40
+ completionTokens: state.completionTokens + event.metrics.completionTokens,
41
+ totalTokens: state.totalTokens + event.metrics.totalTokens,
42
+ totalCost: state.totalCost + (event.metrics.cost ?? 0),
43
+ firstEventTimestamp,
44
+ lastEventTimestamp,
45
+ byProvider,
46
+ };
47
+ }
48
+ case 'tool_started':
49
+ return {
50
+ ...state,
51
+ toolCalls: state.toolCalls + 1,
52
+ firstEventTimestamp,
53
+ lastEventTimestamp,
54
+ };
55
+ default:
56
+ // Only update timestamps for other events
57
+ if (state.firstEventTimestamp !== firstEventTimestamp || state.lastEventTimestamp !== lastEventTimestamp) {
58
+ return { ...state, firstEventTimestamp, lastEventTimestamp };
59
+ }
60
+ return state;
61
+ }
62
+ }
63
+ /**
64
+ * Convert MetricsState to GetMetricsResponse format.
65
+ */
66
+ export function metricsStateToResponse(state, agentCount) {
67
+ const durationMs = state.firstEventTimestamp && state.lastEventTimestamp
68
+ ? state.lastEventTimestamp - state.firstEventTimestamp
69
+ : 0;
70
+ return {
71
+ totalTokens: state.totalTokens,
72
+ promptTokens: state.promptTokens,
73
+ completionTokens: state.completionTokens,
74
+ totalCost: state.totalCost > 0 ? state.totalCost : undefined,
75
+ llmCalls: state.llmCalls,
76
+ toolCalls: state.toolCalls,
77
+ agentCount,
78
+ durationMs,
79
+ byProvider: state.byProvider,
80
+ };
81
+ }
82
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/projections/metrics.ts"],"names":[],"mappings":"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"}