factory-factory 0.1.1 → 0.1.2

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 (137) hide show
  1. package/README.md +4 -0
  2. package/dist/client/assets/_basePickBy-DlAy2gPt.js +1 -0
  3. package/dist/client/assets/_baseUniq-CPsiGaG0.js +1 -0
  4. package/dist/client/assets/{arc-DVq0HXVP.js → arc-1JZNjpJ_.js} +1 -1
  5. package/dist/client/assets/architectureDiagram-VXUJARFQ-CQPIcyoO.js +36 -0
  6. package/dist/client/assets/{blockDiagram-VD42YOAC-BS_PlNQe.js → blockDiagram-VD42YOAC-MmcBB068.js} +1 -1
  7. package/dist/client/assets/{c4Diagram-YG6GDRKO-CXhpBzRl.js → c4Diagram-YG6GDRKO-rLEwaSli.js} +1 -1
  8. package/dist/client/assets/channel-NbT5TRpd.js +1 -0
  9. package/dist/client/assets/{chunk-4BX2VUAB-DYwFxcKG.js → chunk-4BX2VUAB-BpP3xHzh.js} +1 -1
  10. package/dist/client/assets/{chunk-55IACEB6-DSe89z7c.js → chunk-55IACEB6-bhNSTzRt.js} +1 -1
  11. package/dist/client/assets/{chunk-B4BG7PRW-Q-zJEAJ2.js → chunk-B4BG7PRW-C0Ij7L-8.js} +1 -1
  12. package/dist/client/assets/{chunk-DI55MBZ5-514vDiif.js → chunk-DI55MBZ5-BlzMN1zE.js} +1 -1
  13. package/dist/client/assets/{chunk-FMBD7UC4-BRb29JdO.js → chunk-FMBD7UC4-C8tat_tr.js} +1 -1
  14. package/dist/client/assets/{chunk-QN33PNHL-BDmm1KlY.js → chunk-QN33PNHL-Dny9DeCO.js} +1 -1
  15. package/dist/client/assets/{chunk-QZHKN3VN-BPAyDs21.js → chunk-QZHKN3VN-DQ2zbmnL.js} +1 -1
  16. package/dist/client/assets/{chunk-TZMSLE5B-B7TXoVnM.js → chunk-TZMSLE5B-BjcTEJG5.js} +1 -1
  17. package/dist/client/assets/classDiagram-2ON5EDUG-DsshYhcN.js +1 -0
  18. package/dist/client/assets/classDiagram-v2-WZHVMYZB-DsshYhcN.js +1 -0
  19. package/dist/client/assets/clone-Cvh2OAuU.js +1 -0
  20. package/dist/client/assets/{cose-bilkent-S5V4N54A-BsHKMbKi.js → cose-bilkent-S5V4N54A-fICTsOTb.js} +1 -1
  21. package/dist/client/assets/dagre-6UL2VRFP-DobOTWu6.js +4 -0
  22. package/dist/client/assets/diagram-PSM6KHXK-DBWTqTcE.js +24 -0
  23. package/dist/client/assets/diagram-QEK2KX5R-qi6alECI.js +43 -0
  24. package/dist/client/assets/diagram-S2PKOQOG-D5EcU6AG.js +24 -0
  25. package/dist/client/assets/{erDiagram-Q2GNP2WA-DROr2BdA.js → erDiagram-Q2GNP2WA-Dih4JIt2.js} +1 -1
  26. package/dist/client/assets/{flowDiagram-NV44I4VS-CxElmiLh.js → flowDiagram-NV44I4VS-CuDCTnxh.js} +1 -1
  27. package/dist/client/assets/{ganttDiagram-JELNMOA3-BP5HGHDw.js → ganttDiagram-JELNMOA3-CPzDHErk.js} +4 -4
  28. package/dist/client/assets/gitGraphDiagram-NY62KEGX-Cv1AvbyZ.js +65 -0
  29. package/dist/client/assets/graph-Cc4gWRmw.js +1 -0
  30. package/dist/client/assets/{index-CfWUaA_Z.js → index-5MJv0jou.js} +128 -128
  31. package/dist/client/assets/index-YQ6vfX-S.css +1 -0
  32. package/dist/client/assets/infoDiagram-WHAUD3N6-Btdw0Tyi.js +2 -0
  33. package/dist/client/assets/{journeyDiagram-XKPGCS4Q-B2TfCrei.js → journeyDiagram-XKPGCS4Q-DVUAsZwf.js} +1 -1
  34. package/dist/client/assets/{kanban-definition-3W4ZIXB7-De5vZhh6.js → kanban-definition-3W4ZIXB7-CpcsqtK2.js} +1 -1
  35. package/dist/client/assets/layout-yaIlj2KI.js +1 -0
  36. package/dist/client/assets/{linear-Bs4QPHDc.js → linear-BJc8M4HU.js} +1 -1
  37. package/dist/client/assets/{mindmap-definition-VGOIOE7T-zGdeQV40.js → mindmap-definition-VGOIOE7T-D6H5ND7O.js} +3 -3
  38. package/dist/client/assets/pieDiagram-ADFJNKIX-yVvC2gSi.js +30 -0
  39. package/dist/client/assets/{quadrantDiagram-AYHSOK5B-CJkWx-q3.js → quadrantDiagram-AYHSOK5B-CgVAxGtA.js} +1 -1
  40. package/dist/client/assets/{requirementDiagram-UZGBJVZJ-GdLIN21l.js → requirementDiagram-UZGBJVZJ-GaSyCgqs.js} +1 -1
  41. package/dist/client/assets/{sankeyDiagram-TZEHDZUN-Djp9DXsj.js → sankeyDiagram-TZEHDZUN-DJxErFxm.js} +1 -1
  42. package/dist/client/assets/{sequenceDiagram-WL72ISMW-BUrxKS84.js → sequenceDiagram-WL72ISMW-CVYhq23p.js} +1 -1
  43. package/dist/client/assets/stateDiagram-FKZM4ZOC-BWNn_HOS.js +1 -0
  44. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BAVRa6EM.js +1 -0
  45. package/dist/client/assets/{terminal-instance-CCr56Bfx.js → terminal-instance-Zu1T5dur.js} +1 -1
  46. package/dist/client/assets/{timeline-definition-IT6M3QCI-DTfcbDd-.js → timeline-definition-IT6M3QCI-toe2Q26C.js} +1 -1
  47. package/dist/client/assets/treemap-KMMF4GRG-CrSa1h0j.js +128 -0
  48. package/dist/client/assets/{xychartDiagram-PRI3JC2R-BSraPgg_.js → xychartDiagram-PRI3JC2R-Dnal04rK.js} +1 -1
  49. package/dist/client/index.html +2 -2
  50. package/dist/client/working.png +0 -0
  51. package/dist/src/backend/claude/process.d.ts.map +1 -1
  52. package/dist/src/backend/claude/process.js +5 -5
  53. package/dist/src/backend/claude/process.js.map +1 -1
  54. package/dist/src/backend/clients/git.client.d.ts.map +1 -1
  55. package/dist/src/backend/clients/git.client.js +22 -1
  56. package/dist/src/backend/clients/git.client.js.map +1 -1
  57. package/dist/src/backend/lib/ide-helpers.d.ts.map +1 -1
  58. package/dist/src/backend/lib/ide-helpers.js +4 -4
  59. package/dist/src/backend/lib/ide-helpers.js.map +1 -1
  60. package/dist/src/backend/routers/websocket/chat.handler.d.ts +1 -1
  61. package/dist/src/backend/routers/websocket/chat.handler.d.ts.map +1 -1
  62. package/dist/src/backend/routers/websocket/chat.handler.js +23 -3
  63. package/dist/src/backend/routers/websocket/chat.handler.js.map +1 -1
  64. package/dist/src/backend/routers/websocket/terminal.handler.d.ts.map +1 -1
  65. package/dist/src/backend/routers/websocket/terminal.handler.js +20 -4
  66. package/dist/src/backend/routers/websocket/terminal.handler.js.map +1 -1
  67. package/dist/src/backend/schemas/websocket/chat-message.schema.d.ts +69 -0
  68. package/dist/src/backend/schemas/websocket/chat-message.schema.d.ts.map +1 -0
  69. package/dist/src/backend/schemas/websocket/chat-message.schema.js +54 -0
  70. package/dist/src/backend/schemas/websocket/chat-message.schema.js.map +1 -0
  71. package/dist/src/backend/schemas/websocket/index.d.ts +3 -0
  72. package/dist/src/backend/schemas/websocket/index.d.ts.map +1 -0
  73. package/dist/src/backend/schemas/websocket/index.js +3 -0
  74. package/dist/src/backend/schemas/websocket/index.js.map +1 -0
  75. package/dist/src/backend/schemas/websocket/terminal-message.schema.d.ts +25 -0
  76. package/dist/src/backend/schemas/websocket/terminal-message.schema.d.ts.map +1 -0
  77. package/dist/src/backend/schemas/websocket/terminal-message.schema.js +29 -0
  78. package/dist/src/backend/schemas/websocket/terminal-message.schema.js.map +1 -0
  79. package/dist/src/backend/server.d.ts.map +1 -1
  80. package/dist/src/backend/server.js +31 -2
  81. package/dist/src/backend/server.js.map +1 -1
  82. package/dist/src/backend/services/chat-event-forwarder.service.d.ts.map +1 -1
  83. package/dist/src/backend/services/chat-event-forwarder.service.js +25 -15
  84. package/dist/src/backend/services/chat-event-forwarder.service.js.map +1 -1
  85. package/dist/src/backend/services/chat-message-handlers.service.d.ts +10 -27
  86. package/dist/src/backend/services/chat-message-handlers.service.d.ts.map +1 -1
  87. package/dist/src/backend/services/chat-message-handlers.service.js +161 -89
  88. package/dist/src/backend/services/chat-message-handlers.service.js.map +1 -1
  89. package/dist/src/backend/services/index.d.ts +1 -0
  90. package/dist/src/backend/services/index.d.ts.map +1 -1
  91. package/dist/src/backend/services/index.js +1 -0
  92. package/dist/src/backend/services/index.js.map +1 -1
  93. package/dist/src/backend/services/message-state.service.d.ts +43 -0
  94. package/dist/src/backend/services/message-state.service.d.ts.map +1 -0
  95. package/dist/src/backend/services/message-state.service.js +377 -0
  96. package/dist/src/backend/services/message-state.service.js.map +1 -0
  97. package/dist/src/backend/services/message-state.service.test.d.ts +2 -0
  98. package/dist/src/backend/services/message-state.service.test.d.ts.map +1 -0
  99. package/dist/src/backend/services/message-state.service.test.js +517 -0
  100. package/dist/src/backend/services/message-state.service.test.js.map +1 -0
  101. package/dist/src/backend/services/rate-limiter.service.d.ts +9 -0
  102. package/dist/src/backend/services/rate-limiter.service.d.ts.map +1 -1
  103. package/dist/src/backend/services/rate-limiter.service.js +76 -7
  104. package/dist/src/backend/services/rate-limiter.service.js.map +1 -1
  105. package/dist/src/backend/trpc/user-settings.trpc.d.ts.map +1 -1
  106. package/dist/src/backend/trpc/user-settings.trpc.js +6 -6
  107. package/dist/src/backend/trpc/user-settings.trpc.js.map +1 -1
  108. package/dist/src/lib/claude-types.d.ts +70 -8
  109. package/dist/src/lib/claude-types.d.ts.map +1 -1
  110. package/dist/src/lib/claude-types.js +38 -76
  111. package/dist/src/lib/claude-types.js.map +1 -1
  112. package/dist/src/shared/pending-request-types.d.ts +2 -0
  113. package/dist/src/shared/pending-request-types.d.ts.map +1 -1
  114. package/dist/src/shared/pending-request-types.js +1 -1
  115. package/dist/src/shared/pending-request-types.js.map +1 -1
  116. package/dist/tsconfig.backend.tsbuildinfo +1 -1
  117. package/package.json +8 -2
  118. package/dist/client/assets/_baseUniq-B7YPJhsy.js +0 -1
  119. package/dist/client/assets/architectureDiagram-VXUJARFQ-BZS5cfn6.js +0 -36
  120. package/dist/client/assets/channel-CUsyQWZO.js +0 -1
  121. package/dist/client/assets/classDiagram-2ON5EDUG-Ca3-kux2.js +0 -1
  122. package/dist/client/assets/classDiagram-v2-WZHVMYZB-Ca3-kux2.js +0 -1
  123. package/dist/client/assets/clone-CkDCPGSJ.js +0 -1
  124. package/dist/client/assets/dagre-6UL2VRFP-DpFi696C.js +0 -4
  125. package/dist/client/assets/diagram-PSM6KHXK-D9hkYaHu.js +0 -24
  126. package/dist/client/assets/diagram-QEK2KX5R-3SmRS9Z5.js +0 -43
  127. package/dist/client/assets/diagram-S2PKOQOG-IjJEAYjQ.js +0 -24
  128. package/dist/client/assets/gitGraphDiagram-NY62KEGX-B-EXq7SE.js +0 -65
  129. package/dist/client/assets/graph-B1Uf9HNM.js +0 -1
  130. package/dist/client/assets/index-CxiZFewN.css +0 -1
  131. package/dist/client/assets/infoDiagram-WHAUD3N6-B91S7nEk.js +0 -2
  132. package/dist/client/assets/layout-D4YF9LlS.js +0 -1
  133. package/dist/client/assets/min-U19yp9Jh.js +0 -1
  134. package/dist/client/assets/pieDiagram-ADFJNKIX-MD-veORZ.js +0 -30
  135. package/dist/client/assets/stateDiagram-FKZM4ZOC-BmNLxd9m.js +0 -1
  136. package/dist/client/assets/stateDiagram-v2-4FDKWEC3-BHlucL45.js +0 -1
  137. package/dist/client/assets/treemap-KMMF4GRG-DlSxlzLb.js +0 -128
@@ -0,0 +1,377 @@
1
+ import { isUserMessage, MessageState, } from '../../lib/claude-types.js';
2
+ import { chatConnectionService } from './chat-connection.service.js';
3
+ import { createLogger } from './logger.service.js';
4
+ const logger = createLogger('message-state-service');
5
+ const USER_STATE_TRANSITIONS = {
6
+ PENDING: ['SENT'],
7
+ SENT: ['ACCEPTED', 'REJECTED'],
8
+ ACCEPTED: ['DISPATCHED', 'CANCELLED'],
9
+ DISPATCHED: ['COMMITTED', 'FAILED'],
10
+ COMMITTED: [],
11
+ REJECTED: [],
12
+ FAILED: [],
13
+ CANCELLED: [],
14
+ };
15
+ const USER_STATES = new Set(Object.keys(USER_STATE_TRANSITIONS));
16
+ function isValidUserTransition(from, to) {
17
+ return USER_STATE_TRANSITIONS[from]?.includes(to) ?? false;
18
+ }
19
+ function isValidTransition(messageType, from, to) {
20
+ if (messageType === 'claude') {
21
+ logger.error('Claude messages do not support state transitions', { from, to });
22
+ return false;
23
+ }
24
+ if (!(USER_STATES.has(from) && USER_STATES.has(to))) {
25
+ logger.error('Invalid user message state', { from, to });
26
+ return false;
27
+ }
28
+ return isValidUserTransition(from, to);
29
+ }
30
+ class MessageStateService {
31
+ sessionMessages = new Map();
32
+ sessionEvents = new Map();
33
+ getOrCreateSessionMap(sessionId) {
34
+ let messages = this.sessionMessages.get(sessionId);
35
+ if (!messages) {
36
+ messages = new Map();
37
+ this.sessionMessages.set(sessionId, messages);
38
+ }
39
+ return messages;
40
+ }
41
+ createUserMessage(sessionId, msg) {
42
+ const messages = this.getOrCreateSessionMap(sessionId);
43
+ const queuePosition = this.getQueuedMessageCount(sessionId);
44
+ const messageWithState = {
45
+ id: msg.id,
46
+ type: 'user',
47
+ state: MessageState.ACCEPTED,
48
+ timestamp: msg.timestamp,
49
+ text: msg.text,
50
+ attachments: msg.attachments,
51
+ queuePosition,
52
+ settings: msg.settings,
53
+ };
54
+ messages.set(msg.id, messageWithState);
55
+ logger.info('User message created', {
56
+ sessionId,
57
+ messageId: msg.id,
58
+ state: messageWithState.state,
59
+ queuePosition,
60
+ });
61
+ this.emitStateChange(sessionId, messageWithState);
62
+ return messageWithState;
63
+ }
64
+ createRejectedMessage(sessionId, messageId, errorMessage, text) {
65
+ const messages = this.getOrCreateSessionMap(sessionId);
66
+ const messageWithState = {
67
+ id: messageId,
68
+ type: 'user',
69
+ state: MessageState.REJECTED,
70
+ timestamp: new Date().toISOString(),
71
+ text: text ?? '',
72
+ errorMessage,
73
+ };
74
+ messages.set(messageId, messageWithState);
75
+ logger.info('User message rejected', {
76
+ sessionId,
77
+ messageId,
78
+ errorMessage,
79
+ });
80
+ this.emitStateChange(sessionId, messageWithState);
81
+ return messageWithState;
82
+ }
83
+ getQueuedMessageCount(sessionId) {
84
+ const messages = this.sessionMessages.get(sessionId);
85
+ if (!messages) {
86
+ return 0;
87
+ }
88
+ let count = 0;
89
+ for (const msg of messages.values()) {
90
+ if (msg.type === 'user' && msg.state === MessageState.ACCEPTED) {
91
+ count++;
92
+ }
93
+ }
94
+ return count;
95
+ }
96
+ updateState(sessionId, messageId, newState, metadata) {
97
+ const messages = this.sessionMessages.get(sessionId);
98
+ const message = messages?.get(messageId);
99
+ if (!message) {
100
+ logger.warn('Message not found for state update', { sessionId, messageId, newState });
101
+ return false;
102
+ }
103
+ if (!isValidTransition(message.type, message.state, newState)) {
104
+ logger.warn('Invalid state transition', {
105
+ sessionId,
106
+ messageId,
107
+ currentState: message.state,
108
+ newState,
109
+ messageType: message.type,
110
+ });
111
+ return false;
112
+ }
113
+ const oldState = message.state;
114
+ if (!isUserMessage(message)) {
115
+ logger.error('Unexpected state update for non-user message', {
116
+ sessionId,
117
+ messageId,
118
+ messageType: message.type,
119
+ });
120
+ return false;
121
+ }
122
+ message.state = newState;
123
+ if (metadata?.queuePosition !== undefined) {
124
+ message.queuePosition = metadata.queuePosition;
125
+ }
126
+ if (metadata?.errorMessage !== undefined) {
127
+ message.errorMessage = metadata.errorMessage;
128
+ }
129
+ logger.info('Message state updated', {
130
+ sessionId,
131
+ messageId,
132
+ oldState,
133
+ newState,
134
+ });
135
+ this.emitStateChange(sessionId, message);
136
+ return true;
137
+ }
138
+ getMessage(sessionId, messageId) {
139
+ return this.sessionMessages.get(sessionId)?.get(messageId);
140
+ }
141
+ getAllMessages(sessionId) {
142
+ const messages = this.sessionMessages.get(sessionId);
143
+ if (!messages) {
144
+ return [];
145
+ }
146
+ const terminalErrorStates = new Set(['REJECTED', 'FAILED', 'CANCELLED']);
147
+ return Array.from(messages.values())
148
+ .filter((msg) => !terminalErrorStates.has(msg.state))
149
+ .sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
150
+ }
151
+ removeMessage(sessionId, messageId) {
152
+ const messages = this.sessionMessages.get(sessionId);
153
+ if (!messages) {
154
+ return false;
155
+ }
156
+ const removed = messages.delete(messageId);
157
+ if (removed) {
158
+ logger.info('Message removed', { sessionId, messageId });
159
+ }
160
+ return removed;
161
+ }
162
+ clearSession(sessionId) {
163
+ const messages = this.sessionMessages.get(sessionId);
164
+ if (messages && messages.size > 0) {
165
+ logger.info('Session messages cleared', {
166
+ sessionId,
167
+ clearedCount: messages.size,
168
+ });
169
+ }
170
+ this.sessionMessages.delete(sessionId);
171
+ this.sessionEvents.delete(sessionId);
172
+ }
173
+ storeEvent(sessionId, event) {
174
+ let events = this.sessionEvents.get(sessionId);
175
+ if (!events) {
176
+ events = [];
177
+ this.sessionEvents.set(sessionId, events);
178
+ }
179
+ events.push(event);
180
+ }
181
+ getStoredEvents(sessionId) {
182
+ return this.sessionEvents.get(sessionId) ?? [];
183
+ }
184
+ clearStoredEvents(sessionId) {
185
+ this.sessionEvents.delete(sessionId);
186
+ }
187
+ clearAllSessions() {
188
+ const sessionCount = this.sessionMessages.size;
189
+ this.sessionMessages.clear();
190
+ this.sessionEvents.clear();
191
+ if (sessionCount > 0) {
192
+ logger.info('All sessions cleared', { clearedCount: sessionCount });
193
+ }
194
+ }
195
+ loadFromHistory(sessionId, history) {
196
+ const existingMessages = this.sessionMessages.get(sessionId);
197
+ if (existingMessages && existingMessages.size > 0) {
198
+ logger.info('Skipping history load - session already has messages', {
199
+ sessionId,
200
+ existingCount: existingMessages.size,
201
+ });
202
+ return;
203
+ }
204
+ this.sessionMessages.delete(sessionId);
205
+ const messages = this.getOrCreateSessionMap(sessionId);
206
+ for (const historyMsg of history) {
207
+ const messageId = historyMsg.uuid ||
208
+ `history-${historyMsg.timestamp}-${Math.random().toString(36).slice(2, 9)}`;
209
+ if (historyMsg.type === 'user') {
210
+ const messageWithState = {
211
+ id: messageId,
212
+ type: 'user',
213
+ state: MessageState.COMMITTED,
214
+ timestamp: historyMsg.timestamp,
215
+ text: historyMsg.content,
216
+ };
217
+ messages.set(messageId, messageWithState);
218
+ }
219
+ else if (historyMsg.type === 'assistant' ||
220
+ historyMsg.type === 'tool_use' ||
221
+ historyMsg.type === 'tool_result' ||
222
+ historyMsg.type === 'thinking') {
223
+ const claudeMessage = this.historyToClaudeMessage(historyMsg);
224
+ const messageWithState = {
225
+ id: messageId,
226
+ type: 'claude',
227
+ state: MessageState.COMPLETE,
228
+ timestamp: historyMsg.timestamp,
229
+ chatMessages: [
230
+ {
231
+ id: `${messageId}-0`,
232
+ source: 'claude',
233
+ message: claudeMessage,
234
+ timestamp: historyMsg.timestamp,
235
+ },
236
+ ],
237
+ };
238
+ messages.set(messageId, messageWithState);
239
+ }
240
+ }
241
+ logger.info('Loaded messages from history', {
242
+ sessionId,
243
+ messageCount: messages.size,
244
+ });
245
+ }
246
+ historyToClaudeMessage(msg) {
247
+ switch (msg.type) {
248
+ case 'tool_use':
249
+ if (msg.toolName && msg.toolId) {
250
+ return {
251
+ type: 'assistant',
252
+ message: {
253
+ role: 'assistant',
254
+ content: [
255
+ {
256
+ type: 'tool_use',
257
+ id: msg.toolId,
258
+ name: msg.toolName,
259
+ input: msg.toolInput ?? {},
260
+ },
261
+ ],
262
+ },
263
+ };
264
+ }
265
+ break;
266
+ case 'tool_result':
267
+ if (msg.toolId) {
268
+ return {
269
+ type: 'user',
270
+ message: {
271
+ role: 'user',
272
+ content: [
273
+ {
274
+ type: 'tool_result',
275
+ tool_use_id: msg.toolId,
276
+ content: msg.content,
277
+ is_error: msg.isError,
278
+ },
279
+ ],
280
+ },
281
+ };
282
+ }
283
+ break;
284
+ case 'thinking':
285
+ return {
286
+ type: 'assistant',
287
+ message: {
288
+ role: 'assistant',
289
+ content: [
290
+ {
291
+ type: 'thinking',
292
+ thinking: msg.content,
293
+ },
294
+ ],
295
+ },
296
+ };
297
+ }
298
+ return {
299
+ type: 'assistant',
300
+ message: {
301
+ role: 'assistant',
302
+ content: msg.content,
303
+ },
304
+ };
305
+ }
306
+ hasMessage(sessionId, messageId) {
307
+ return this.sessionMessages.get(sessionId)?.has(messageId) ?? false;
308
+ }
309
+ getMessageCount(sessionId) {
310
+ return this.sessionMessages.get(sessionId)?.size ?? 0;
311
+ }
312
+ sendSnapshot(sessionId, sessionStatus, pendingInteractiveRequest) {
313
+ const allMessages = this.getAllMessages(sessionId);
314
+ const chatMessages = [];
315
+ for (const msg of allMessages) {
316
+ if (isUserMessage(msg)) {
317
+ chatMessages.push({
318
+ id: msg.id,
319
+ source: 'user',
320
+ text: msg.text,
321
+ timestamp: msg.timestamp,
322
+ attachments: msg.attachments,
323
+ });
324
+ }
325
+ else {
326
+ chatMessages.push(...msg.chatMessages);
327
+ }
328
+ }
329
+ chatConnectionService.forwardToSession(sessionId, {
330
+ type: 'messages_snapshot',
331
+ messages: chatMessages,
332
+ sessionStatus,
333
+ pendingInteractiveRequest,
334
+ });
335
+ for (const msg of allMessages) {
336
+ if (isUserMessage(msg) && msg.state === MessageState.ACCEPTED) {
337
+ this.emitStateChange(sessionId, msg);
338
+ }
339
+ }
340
+ logger.info('Messages snapshot sent', {
341
+ sessionId,
342
+ messageCount: chatMessages.length,
343
+ });
344
+ }
345
+ computeSessionStatus(sessionId, isClientRunning) {
346
+ if (isClientRunning) {
347
+ return { phase: 'running' };
348
+ }
349
+ const queuedCount = this.getQueuedMessageCount(sessionId);
350
+ if (queuedCount > 0) {
351
+ return { phase: 'starting' };
352
+ }
353
+ return { phase: 'ready' };
354
+ }
355
+ emitStateChange(sessionId, message) {
356
+ const queuePosition = isUserMessage(message) ? message.queuePosition : undefined;
357
+ const errorMessage = isUserMessage(message) ? message.errorMessage : undefined;
358
+ const userMessage = isUserMessage(message) && message.state === MessageState.ACCEPTED
359
+ ? {
360
+ text: message.text,
361
+ timestamp: message.timestamp,
362
+ attachments: message.attachments,
363
+ settings: message.settings,
364
+ }
365
+ : undefined;
366
+ chatConnectionService.forwardToSession(sessionId, {
367
+ type: 'message_state_changed',
368
+ id: message.id,
369
+ newState: message.state,
370
+ queuePosition,
371
+ errorMessage,
372
+ userMessage,
373
+ });
374
+ }
375
+ }
376
+ export const messageStateService = new MessageStateService();
377
+ //# sourceMappingURL=message-state.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-state.service.js","sourceRoot":"","sources":["../../../../src/backend/services/message-state.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=message-state.service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-state.service.test.d.ts","sourceRoot":"","sources":["../../../../src/backend/services/message-state.service.test.ts"],"names":[],"mappings":""}