@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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chat-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-protocol.js","sourceRoot":"","sources":["../src/chat-protocol.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @roj-ai/shared
3
+ *
4
+ * Shared projections and utilities for Roj packages.
5
+ * Pure functions with no runtime dependencies beyond @roj-ai/sdk types.
6
+ */
7
+ // ID constructors (branded types — compile-time only)
8
+ export { AgentId, ChatMessageId, SessionId } from './lib/ids.js';
9
+ // Domain utilities
10
+ export { contentToString, isDomainEvent } from './lib/domain-utils.js';
11
+ // Projections
12
+ export { applyEventToAgentDetail, applyEventToAgentRegistry, applyEventToAgentTree, applyEventToChatDebug, applyEventToMailbox, applyEventToMetrics, applyEventToServices, applyEventToSessionInfo, applyEventToTimeline, buildAgentTreeFromProjection, createAgentDetailProjectionState, createAgentRegistryState, createAgentTreeProjectionState, createChatDebugState, createMailboxState, createMetricsState, createServicesProjectionState, createSessionInfoState, createTimelineState, getAgentDetail, getAgentName, getChatDebugMessages, getMailboxMessages, getTimelineItems, metricsStateToResponse, toProtocolStatus, } from './projections/index.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sDAAsD;AACtD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAahE,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEtE,cAAc;AACd,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,4BAA4B,EAC5B,gCAAgC,EAChC,wBAAwB,EACxB,8BAA8B,EAC9B,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,6BAA6B,EAC7B,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,GAChB,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Domain utility functions for client-side use.
3
+ */
4
+ /**
5
+ * Type guard to check if an unknown value is a DomainEvent.
6
+ */
7
+ export const isDomainEvent = (event) => typeof event === 'object'
8
+ && event !== null
9
+ && 'type' in event
10
+ && 'sessionId' in event
11
+ && 'timestamp' in event;
12
+ /**
13
+ * Helper to normalize content to string (for display/logging).
14
+ */
15
+ export const contentToString = (content) => {
16
+ if (typeof content === 'string')
17
+ return content;
18
+ return content
19
+ .filter((c) => c.type === 'text')
20
+ .map((c) => c.text)
21
+ .join('\n');
22
+ };
23
+ //# 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;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAwB,EAAE,CACrE,OAAO,KAAK,KAAK,QAAQ;OACtB,KAAK,KAAK,IAAI;OACd,MAAM,IAAI,KAAK;OACf,WAAW,IAAI,KAAK;OACpB,WAAW,IAAI,KAAK,CAAA;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAwD,EAAU,EAAE;IACnG,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAA;IAC/C,OAAO,OAAO;SACZ,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;SACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,IAAI,CAAC,CAAA;AACb,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Branded ID types and constructors.
3
+ *
4
+ * Uses Zod brands for structural compatibility with agent-server types.
5
+ * These are the canonical definitions — other packages import from here.
6
+ */
7
+ import z from 'zod/v4';
8
+ const sessionIdSchema = z.string().brand('SessionId');
9
+ export const SessionId = (id) => id;
10
+ const agentIdSchema = z.string().brand('AgentId');
11
+ export const AgentId = (id) => id;
12
+ const chatMessageIdSchema = z.string().brand('ChatMessageId');
13
+ export const ChatMessageId = (id) => id;
14
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/lib/ids.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,CAAC,MAAM,QAAQ,CAAA;AAEtB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;AAErD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAa,EAAE,CAAC,EAAe,CAAA;AAEnE,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AAEjD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,EAAa,CAAA;AAE7D,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAU,EAAiB,EAAE,CAAC,EAAmB,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Result type for explicit error handling without exceptions.
3
+ * Inspired by Rust/Go approach.
4
+ */
5
+ // Constructors
6
+ export const Ok = (value) => ({ ok: true, value });
7
+ export const Err = (error) => ({ ok: false, error });
8
+ // Type guards
9
+ export const isOk = (result) => result.ok;
10
+ export const isErr = (result) => !result.ok;
11
+ // Helper functions
12
+ export const mapResult = (result, fn) => result.ok ? Ok(fn(result.value)) : result;
13
+ export const flatMapResult = (result, fn) => result.ok ? fn(result.value) : result;
14
+ // Unwrap functions
15
+ export const unwrapOr = (result, defaultValue) => result.ok ? result.value : defaultValue;
16
+ export const unwrapOrThrow = (result) => {
17
+ if (result.ok)
18
+ return result.value;
19
+ throw result.error;
20
+ };
21
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,eAAe;AACf,MAAM,CAAC,MAAM,EAAE,GAAG,CAAI,KAAQ,EAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AAC1E,MAAM,CAAC,MAAM,GAAG,GAAG,CAAI,KAAQ,EAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;AAE5E,cAAc;AACd,MAAM,CAAC,MAAM,IAAI,GAAG,CAAO,MAAoB,EAAoC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAA;AAC/F,MAAM,CAAC,MAAM,KAAK,GAAG,CAAO,MAAoB,EAAqC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;AAElG,mBAAmB;AACnB,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,MAAoB,EACpB,EAAmB,EACJ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,MAAoB,EACpB,EAA8B,EACf,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AAExD,mBAAmB;AACnB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAO,MAAoB,EAAE,YAAe,EAAK,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAA;AAEnH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAO,MAAoB,EAAK,EAAE;IAC9D,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,KAAK,CAAA;IAClC,MAAM,MAAM,CAAC,KAAK,CAAA;AACnB,CAAC,CAAA"}
@@ -0,0 +1,494 @@
1
+ /**
2
+ * Agent detail projection - self-contained projection for agent detail views.
3
+ *
4
+ * Replaces useAgentDetail (client) and buildAgentDetail (CLI) that needed full SessionState.
5
+ * Tracks per-agent: conversation history, tool calls, mailbox, counters, skills.
6
+ */
7
+ import { contentToString } from '../lib/domain-utils.js';
8
+ import { toProtocolStatus } from './protocol-status.js';
9
+ export function createAgentDetailProjectionState() {
10
+ return {
11
+ agents: new Map(),
12
+ agentMailboxes: new Map(),
13
+ agentCounters: new Map(),
14
+ agentSkills: new Map(),
15
+ };
16
+ }
17
+ const createDefaultCounters = () => ({
18
+ inferenceCount: 0,
19
+ toolCallCount: 0,
20
+ spawnedAgentCount: 0,
21
+ messagesSentCount: 0,
22
+ consecutiveToolFailures: {},
23
+ recentToolCallHashes: [],
24
+ recentResponseHashes: [],
25
+ });
26
+ // ============================================================================
27
+ // Reducer
28
+ // ============================================================================
29
+ export function applyEventToAgentDetail(state, event) {
30
+ switch (event.type) {
31
+ // ---- Core agent lifecycle ----
32
+ case 'agent_spawned': {
33
+ const newAgents = new Map(state.agents);
34
+ newAgents.set(event.agentId, {
35
+ id: event.agentId,
36
+ definitionName: event.definitionName,
37
+ parentId: event.parentId,
38
+ status: 'pending',
39
+ conversationHistory: [],
40
+ pendingToolCalls: [],
41
+ pendingToolResults: [],
42
+ pendingMessages: [],
43
+ typedInput: event.typedInput,
44
+ cost: 0,
45
+ });
46
+ const newCounters = new Map(state.agentCounters);
47
+ newCounters.set(event.agentId, createDefaultCounters());
48
+ // Increment parent's spawnedAgentCount
49
+ if (event.parentId) {
50
+ const parentCounters = newCounters.get(event.parentId);
51
+ if (parentCounters) {
52
+ newCounters.set(event.parentId, {
53
+ ...parentCounters,
54
+ spawnedAgentCount: parentCounters.spawnedAgentCount + 1,
55
+ });
56
+ }
57
+ }
58
+ return { ...state, agents: newAgents, agentCounters: newCounters };
59
+ }
60
+ case 'agent_state_changed': {
61
+ const agent = state.agents.get(event.agentId);
62
+ if (!agent)
63
+ return state;
64
+ const newAgents = new Map(state.agents);
65
+ newAgents.set(event.agentId, { ...agent, status: event.toState });
66
+ return { ...state, agents: newAgents };
67
+ }
68
+ case 'inference_started': {
69
+ const agent = state.agents.get(event.agentId);
70
+ if (!agent)
71
+ return state;
72
+ const newAgents = new Map(state.agents);
73
+ newAgents.set(event.agentId, {
74
+ ...agent,
75
+ status: 'inferring',
76
+ pendingMessages: event.messages.map((m) => ({ ...m, timestamp: event.timestamp })),
77
+ });
78
+ return { ...state, agents: newAgents };
79
+ }
80
+ case 'inference_completed': {
81
+ const agent = state.agents.get(event.agentId);
82
+ if (!agent)
83
+ return state;
84
+ const toolCalls = event.response.toolCalls.map((tc) => ({
85
+ id: tc.id,
86
+ name: tc.name,
87
+ input: tc.input,
88
+ }));
89
+ const assistantMessage = {
90
+ role: 'assistant',
91
+ content: event.response.content ?? '',
92
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
93
+ timestamp: event.timestamp,
94
+ cost: event.metrics.cost ?? undefined,
95
+ llmCallId: event.llmCallId ?? undefined,
96
+ promptTokens: event.metrics.promptTokens,
97
+ cachedTokens: event.metrics.cachedTokens ?? undefined,
98
+ cacheWriteTokens: event.metrics.cacheWriteTokens ?? undefined,
99
+ };
100
+ const hasToolCalls = toolCalls.length > 0;
101
+ const newAgents = new Map(state.agents);
102
+ newAgents.set(event.agentId, {
103
+ ...agent,
104
+ status: hasToolCalls ? 'tool_exec' : 'pending',
105
+ conversationHistory: [...agent.conversationHistory, ...agent.pendingMessages, assistantMessage],
106
+ pendingToolCalls: toolCalls,
107
+ pendingMessages: [],
108
+ pendingToolResults: [],
109
+ cost: agent.cost + (event.metrics.cost ?? 0),
110
+ });
111
+ // Update counters
112
+ const counters = state.agentCounters.get(event.agentId);
113
+ if (counters) {
114
+ const newCounters = new Map(state.agentCounters);
115
+ newCounters.set(event.agentId, {
116
+ ...counters,
117
+ inferenceCount: counters.inferenceCount + 1,
118
+ });
119
+ return { ...state, agents: newAgents, agentCounters: newCounters };
120
+ }
121
+ return { ...state, agents: newAgents };
122
+ }
123
+ case 'inference_failed': {
124
+ const agent = state.agents.get(event.agentId);
125
+ if (!agent)
126
+ return state;
127
+ const newAgents = new Map(state.agents);
128
+ newAgents.set(event.agentId, {
129
+ ...agent,
130
+ status: 'errored',
131
+ pendingMessages: [],
132
+ });
133
+ return { ...state, agents: newAgents };
134
+ }
135
+ case 'tool_started': {
136
+ const agent = state.agents.get(event.agentId);
137
+ if (!agent)
138
+ return state;
139
+ const newAgents = new Map(state.agents);
140
+ newAgents.set(event.agentId, {
141
+ ...agent,
142
+ executingToolCall: {
143
+ toolCallId: event.toolCallId,
144
+ toolName: event.toolName,
145
+ startedAt: event.timestamp,
146
+ },
147
+ });
148
+ // Update counters
149
+ const counters = state.agentCounters.get(event.agentId);
150
+ if (counters) {
151
+ const newCounters = new Map(state.agentCounters);
152
+ newCounters.set(event.agentId, {
153
+ ...counters,
154
+ toolCallCount: counters.toolCallCount + 1,
155
+ });
156
+ return { ...state, agents: newAgents, agentCounters: newCounters };
157
+ }
158
+ return { ...state, agents: newAgents };
159
+ }
160
+ case 'tool_completed': {
161
+ const agent = state.agents.get(event.agentId);
162
+ if (!agent)
163
+ return state;
164
+ const remaining = agent.pendingToolCalls.filter((tc) => tc.id !== event.toolCallId);
165
+ const toolName = agent.executingToolCall?.toolName
166
+ ?? agent.pendingToolCalls.find((tc) => tc.id === event.toolCallId)?.name
167
+ ?? 'unknown';
168
+ const pendingToolResult = {
169
+ toolCallId: event.toolCallId,
170
+ toolName,
171
+ timestamp: event.timestamp,
172
+ isError: false,
173
+ content: event.result,
174
+ };
175
+ const newAgents = new Map(state.agents);
176
+ newAgents.set(event.agentId, {
177
+ ...agent,
178
+ pendingToolCalls: remaining,
179
+ pendingToolResults: [...agent.pendingToolResults, pendingToolResult],
180
+ status: remaining.length === 0 ? 'pending' : 'tool_exec',
181
+ executingToolCall: undefined,
182
+ });
183
+ // Reset consecutive failures for this tool
184
+ const counters = state.agentCounters.get(event.agentId);
185
+ if (counters) {
186
+ const { [toolName]: _, ...restFailures } = counters.consecutiveToolFailures;
187
+ const newCounters = new Map(state.agentCounters);
188
+ newCounters.set(event.agentId, {
189
+ ...counters,
190
+ consecutiveToolFailures: restFailures,
191
+ });
192
+ return { ...state, agents: newAgents, agentCounters: newCounters };
193
+ }
194
+ return { ...state, agents: newAgents };
195
+ }
196
+ case 'tool_failed': {
197
+ const agent = state.agents.get(event.agentId);
198
+ if (!agent)
199
+ return state;
200
+ const remaining = agent.pendingToolCalls.filter((tc) => tc.id !== event.toolCallId);
201
+ const toolName = agent.executingToolCall?.toolName
202
+ ?? agent.pendingToolCalls.find((tc) => tc.id === event.toolCallId)?.name
203
+ ?? 'unknown';
204
+ const pendingToolResult = {
205
+ toolCallId: event.toolCallId,
206
+ toolName,
207
+ timestamp: event.timestamp,
208
+ isError: true,
209
+ content: event.error,
210
+ };
211
+ const newAgents = new Map(state.agents);
212
+ newAgents.set(event.agentId, {
213
+ ...agent,
214
+ pendingToolCalls: remaining,
215
+ pendingToolResults: [...agent.pendingToolResults, pendingToolResult],
216
+ status: remaining.length === 0 ? 'pending' : 'tool_exec',
217
+ executingToolCall: undefined,
218
+ });
219
+ // Increment consecutive failures for this tool
220
+ const counters = state.agentCounters.get(event.agentId);
221
+ if (counters) {
222
+ const currentEntry = counters.consecutiveToolFailures[toolName];
223
+ const newCounters = new Map(state.agentCounters);
224
+ newCounters.set(event.agentId, {
225
+ ...counters,
226
+ consecutiveToolFailures: {
227
+ ...counters.consecutiveToolFailures,
228
+ [toolName]: { count: (currentEntry?.count ?? 0) + 1, lastError: event.error },
229
+ },
230
+ });
231
+ return { ...state, agents: newAgents, agentCounters: newCounters };
232
+ }
233
+ return { ...state, agents: newAgents };
234
+ }
235
+ case 'context_compacted': {
236
+ const agent = state.agents.get(event.agentId);
237
+ if (!agent)
238
+ return state;
239
+ const newAgents = new Map(state.agents);
240
+ newAgents.set(event.agentId, {
241
+ ...agent,
242
+ conversationHistory: event.newConversationHistory.map((m) => ({
243
+ role: m.role,
244
+ content: m.content,
245
+ })),
246
+ });
247
+ return { ...state, agents: newAgents };
248
+ }
249
+ case 'agent_paused': {
250
+ const agent = state.agents.get(event.agentId);
251
+ if (!agent)
252
+ return state;
253
+ const newAgents = new Map(state.agents);
254
+ newAgents.set(event.agentId, {
255
+ ...agent,
256
+ status: 'paused',
257
+ pauseReason: event.reason,
258
+ pauseMessage: event.message,
259
+ });
260
+ return { ...state, agents: newAgents };
261
+ }
262
+ case 'agent_resumed': {
263
+ const agent = state.agents.get(event.agentId);
264
+ if (!agent)
265
+ return state;
266
+ const newAgents = new Map(state.agents);
267
+ newAgents.set(event.agentId, {
268
+ ...agent,
269
+ status: 'pending',
270
+ pauseReason: undefined,
271
+ pauseMessage: undefined,
272
+ });
273
+ // Reset counters on resume
274
+ const counters = state.agentCounters.get(event.agentId);
275
+ if (counters) {
276
+ const newCounters = new Map(state.agentCounters);
277
+ newCounters.set(event.agentId, {
278
+ ...counters,
279
+ inferenceCount: 0,
280
+ toolCallCount: 0,
281
+ spawnedAgentCount: 0,
282
+ messagesSentCount: 0,
283
+ consecutiveToolFailures: {},
284
+ recentToolCallHashes: [],
285
+ recentResponseHashes: [],
286
+ });
287
+ return { ...state, agents: newAgents, agentCounters: newCounters };
288
+ }
289
+ return { ...state, agents: newAgents };
290
+ }
291
+ case 'session_restarted': {
292
+ const newAgents = new Map(state.agents);
293
+ for (const [agentId, agent] of state.agents) {
294
+ let updated = agent;
295
+ let changed = false;
296
+ if (agent.status === 'inferring') {
297
+ updated = { ...updated, status: 'pending', pendingMessages: [] };
298
+ changed = true;
299
+ }
300
+ if (agent.executingToolCall !== undefined) {
301
+ updated = { ...updated, executingToolCall: undefined };
302
+ changed = true;
303
+ }
304
+ if (changed) {
305
+ newAgents.set(agentId, updated);
306
+ }
307
+ }
308
+ return { ...state, agents: newAgents };
309
+ }
310
+ case 'agent_conversation_spliced': {
311
+ const agent = state.agents.get(event.agentId);
312
+ if (!agent)
313
+ return state;
314
+ const newHistory = [...agent.conversationHistory];
315
+ newHistory.splice(event.start, event.deleteCount, ...(event.insert ?? []));
316
+ const newAgents = new Map(state.agents);
317
+ newAgents.set(event.agentId, {
318
+ ...agent,
319
+ conversationHistory: newHistory,
320
+ pendingToolCalls: [],
321
+ pendingToolResults: [],
322
+ pendingMessages: [],
323
+ executingToolCall: undefined,
324
+ status: 'pending',
325
+ });
326
+ return { ...state, agents: newAgents };
327
+ }
328
+ // ---- Mailbox ----
329
+ case 'mailbox_message': {
330
+ const msg = event.message;
331
+ const entry = {
332
+ id: msg.id,
333
+ from: msg.from,
334
+ content: msg.content,
335
+ timestamp: msg.timestamp,
336
+ consumed: msg.consumed,
337
+ };
338
+ const existing = state.agentMailboxes.get(event.toAgentId) ?? [];
339
+ const newMailboxes = new Map(state.agentMailboxes);
340
+ newMailboxes.set(event.toAgentId, [...existing, entry]);
341
+ // Increment sender's messagesSentCount if sender is an agent
342
+ const senderAgentId = typeof msg.from === 'string' && msg.from !== 'user'
343
+ && msg.from !== 'orchestrator' && msg.from !== 'communicator'
344
+ ? msg.from
345
+ : null;
346
+ if (senderAgentId) {
347
+ const senderCounters = state.agentCounters.get(senderAgentId);
348
+ if (senderCounters) {
349
+ const newCounters = new Map(state.agentCounters);
350
+ newCounters.set(senderAgentId, {
351
+ ...senderCounters,
352
+ messagesSentCount: senderCounters.messagesSentCount + 1,
353
+ });
354
+ return { ...state, agentMailboxes: newMailboxes, agentCounters: newCounters };
355
+ }
356
+ }
357
+ return { ...state, agentMailboxes: newMailboxes };
358
+ }
359
+ case 'mailbox_consumed': {
360
+ const existing = state.agentMailboxes.get(event.agentId);
361
+ if (!existing)
362
+ return state;
363
+ const consumedSet = new Set(event.messageIds);
364
+ const updated = existing.map((m) => consumedSet.has(m.id) ? { ...m, consumed: true } : m);
365
+ const newMailboxes = new Map(state.agentMailboxes);
366
+ newMailboxes.set(event.agentId, updated);
367
+ return { ...state, agentMailboxes: newMailboxes };
368
+ }
369
+ // ---- Skills ----
370
+ case 'skill_loaded': {
371
+ const agentSkills = state.agentSkills.get(event.agentId) ?? [];
372
+ const newSkills = new Map(state.agentSkills);
373
+ newSkills.set(event.agentId, [...agentSkills, {
374
+ id: event.skillId,
375
+ name: event.skillName,
376
+ loadedAt: event.timestamp,
377
+ }]);
378
+ return { ...state, agentSkills: newSkills };
379
+ }
380
+ default:
381
+ return state;
382
+ }
383
+ }
384
+ // ============================================================================
385
+ // Query
386
+ // ============================================================================
387
+ const truncate = (text) => text.length > 500 ? text.slice(0, 500) + '...' : text;
388
+ /**
389
+ * Get agent detail response from projection state.
390
+ */
391
+ export function getAgentDetail(state, agentId) {
392
+ const agent = state.agents.get(agentId);
393
+ if (!agent)
394
+ return null;
395
+ // Mailbox
396
+ const agentMailbox = state.agentMailboxes.get(agentId) ?? [];
397
+ const mailbox = agentMailbox.map((m) => ({
398
+ id: m.id,
399
+ from: m.from,
400
+ content: m.content,
401
+ timestamp: m.timestamp,
402
+ consumed: m.consumed,
403
+ }));
404
+ // Conversation history
405
+ const conversationHistory = agent.conversationHistory.map((m) => {
406
+ switch (m.role) {
407
+ case 'user': {
408
+ const full = contentToString(m.content);
409
+ return { role: 'user', content: truncate(full), fullContent: full, timestamp: m.timestamp };
410
+ }
411
+ case 'assistant': {
412
+ const full = contentToString(m.content);
413
+ return {
414
+ role: 'assistant',
415
+ content: truncate(full),
416
+ fullContent: full,
417
+ toolCalls: m.toolCalls?.map((tc) => ({
418
+ id: tc.id,
419
+ name: tc.name,
420
+ input: tc.input,
421
+ })),
422
+ timestamp: m.timestamp,
423
+ cost: m.cost,
424
+ llmCallId: m.llmCallId,
425
+ promptTokens: m.promptTokens,
426
+ cachedTokens: m.cachedTokens,
427
+ cacheWriteTokens: m.cacheWriteTokens,
428
+ };
429
+ }
430
+ case 'tool': {
431
+ const full = contentToString(m.content);
432
+ return {
433
+ role: 'tool',
434
+ toolCallId: m.toolCallId,
435
+ content: truncate(full),
436
+ fullContent: full,
437
+ isError: m.isError ?? false,
438
+ timestamp: m.timestamp,
439
+ };
440
+ }
441
+ case 'system': {
442
+ const full = contentToString(m.content);
443
+ return { role: 'system', content: truncate(full), fullContent: full, timestamp: m.timestamp };
444
+ }
445
+ }
446
+ });
447
+ // Pending tool calls
448
+ const pendingToolCalls = [
449
+ ...agent.pendingToolCalls.map((tc) => ({
450
+ id: tc.id,
451
+ name: tc.name,
452
+ input: tc.input,
453
+ status: 'pending',
454
+ })),
455
+ ...(agent.executingToolCall
456
+ ? [
457
+ {
458
+ id: agent.executingToolCall.toolCallId,
459
+ name: agent.executingToolCall.toolName,
460
+ input: undefined,
461
+ status: 'executing',
462
+ },
463
+ ]
464
+ : []),
465
+ ...agent.pendingToolResults.map((pr) => ({
466
+ id: pr.toolCallId,
467
+ name: pr.toolName,
468
+ input: undefined,
469
+ status: pr.isError ? 'failed' : 'completed',
470
+ result: pr.isError ? undefined : contentToString(pr.content),
471
+ error: pr.isError ? contentToString(pr.content) : undefined,
472
+ })),
473
+ ];
474
+ // Counters
475
+ const counters = state.agentCounters.get(agentId) ?? createDefaultCounters();
476
+ // Skills
477
+ const loadedSkills = state.agentSkills.get(agentId) ?? [];
478
+ return {
479
+ id: agent.id,
480
+ definitionName: agent.definitionName,
481
+ status: toProtocolStatus(agent.status),
482
+ parentId: agent.parentId,
483
+ mailbox,
484
+ conversationHistory,
485
+ pendingToolCalls,
486
+ counters,
487
+ loadedSkills,
488
+ cost: agent.cost,
489
+ typedInput: agent.typedInput,
490
+ pauseReason: agent.pauseReason,
491
+ pauseMessage: agent.pauseMessage,
492
+ };
493
+ }
494
+ //# sourceMappingURL=agent-detail-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-detail-projection.js","sourceRoot":"","sources":["../../src/projections/agent-detail-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Agent registry projection - tracks agent names and count.
3
+ *
4
+ * Minimal projection that replaces SessionState for name lookups.
5
+ * Handles only agent_spawned events.
6
+ */
7
+ export function createAgentRegistryState() {
8
+ return {
9
+ names: new Map(),
10
+ count: 0,
11
+ };
12
+ }
13
+ export function applyEventToAgentRegistry(state, event) {
14
+ if (event.type !== 'agent_spawned')
15
+ return state;
16
+ const newNames = new Map(state.names);
17
+ newNames.set(event.agentId, event.definitionName);
18
+ return {
19
+ names: newNames,
20
+ count: state.count + 1,
21
+ };
22
+ }
23
+ export function getAgentName(state, agentId) {
24
+ return state.names.get(agentId) ?? 'unknown';
25
+ }
26
+ //# sourceMappingURL=agent-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/projections/agent-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,UAAU,wBAAwB;IACvC,OAAO;QACN,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,KAAK,EAAE,CAAC;KACR,CAAA;AACF,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAyB,EAAE,KAAsB;IAC1F,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;QAAE,OAAO,KAAK,CAAA;IAEhD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACrC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IAEjD,OAAO;QACN,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;KACtB,CAAA;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAyB,EAAE,OAAyB;IAChF,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAkB,CAAC,IAAI,SAAS,CAAA;AACxD,CAAC"}