@jazzmind/busibox-app 3.0.38 → 3.0.40

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 (34) hide show
  1. package/dist/components/chat/ChatContainer.d.ts.map +1 -1
  2. package/dist/components/chat/ChatContainer.js +123 -603
  3. package/dist/components/chat/ChatContainer.js.map +1 -1
  4. package/dist/components/chat/ChatInterface.d.ts +0 -1
  5. package/dist/components/chat/ChatInterface.d.ts.map +1 -1
  6. package/dist/components/chat/ChatInterface.js +159 -302
  7. package/dist/components/chat/ChatInterface.js.map +1 -1
  8. package/dist/components/chat/MessageList.d.ts +2 -1
  9. package/dist/components/chat/MessageList.d.ts.map +1 -1
  10. package/dist/components/chat/MessageList.js +33 -17
  11. package/dist/components/chat/MessageList.js.map +1 -1
  12. package/dist/components/chat/ThinkingToggle.d.ts.map +1 -1
  13. package/dist/components/chat/ThinkingToggle.js +15 -1
  14. package/dist/components/chat/ThinkingToggle.js.map +1 -1
  15. package/dist/components/chat/chat-utils.js +2 -2
  16. package/dist/components/chat/chat-utils.js.map +1 -1
  17. package/dist/lib/agent/agent-api-base.d.ts.map +1 -1
  18. package/dist/lib/agent/agent-api-base.js +0 -1
  19. package/dist/lib/agent/agent-api-base.js.map +1 -1
  20. package/dist/lib/agent/chat-client.d.ts.map +1 -1
  21. package/dist/lib/agent/chat-client.js +0 -1
  22. package/dist/lib/agent/chat-client.js.map +1 -1
  23. package/dist/lib/agent/index.d.ts +2 -0
  24. package/dist/lib/agent/index.d.ts.map +1 -1
  25. package/dist/lib/agent/index.js +2 -0
  26. package/dist/lib/agent/index.js.map +1 -1
  27. package/dist/lib/agent/stream-event-processor.d.ts +37 -0
  28. package/dist/lib/agent/stream-event-processor.d.ts.map +1 -0
  29. package/dist/lib/agent/stream-event-processor.js +204 -0
  30. package/dist/lib/agent/stream-event-processor.js.map +1 -0
  31. package/dist/lib/hooks/useChatStream.d.ts.map +1 -1
  32. package/dist/lib/hooks/useChatStream.js +54 -187
  33. package/dist/lib/hooks/useChatStream.js.map +1 -1
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chat-client.js","sourceRoot":"","sources":["../../../src/lib/agent/chat-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-client.js","sourceRoot":"","sources":["../../../src/lib/agent/chat-client.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export type { AgentApiFetchOptions, } from './agent-api-base';
6
6
  export { createAgentClient } from './agent-service-client';
7
7
  export type { AgentClient, AgentClientConfig, AgentDefinition, AgentDefinitionInput, ToolDefinition, AgentSyncResult, AgentStatus, SyncStatus, } from './agent-service-client';
8
8
  export { syncAgentDefinitions, getAgentSyncStatus } from './sync';
9
+ export { createAccumulator, processStreamEvent, } from './stream-event-processor';
10
+ export type { StreamAccumulator, StreamEventResult, } from './stream-event-processor';
9
11
  export { sendChatMessage, streamChatMessage, getAvailableModels, getConversationHistory, generateInsights, getConversations, createConversation, updateConversation, deleteConversation, searchInsights, insertInsights, deleteConversationInsights, getInsightStats, initializeInsights, } from './chat-client';
10
12
  export type { ChatClientOptions, } from './chat-client';
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,WAAW,EACX,UAAU,GACX,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAGlE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,iBAAiB,GAClB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,WAAW,EACX,UAAU,GACX,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAGlE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,iBAAiB,GAClB,MAAM,eAAe,CAAC"}
@@ -7,6 +7,8 @@ export { getAgentApiUrl, buildAuthHeaders, getAgentApiToken, agentApiFetch, agen
7
7
  export { createAgentClient } from './agent-service-client';
8
8
  // Standalone agent sync helpers (no client factory needed)
9
9
  export { syncAgentDefinitions, getAgentSyncStatus } from './sync';
10
+ // Stream event processor (shared between ChatInterface and useChatStream)
11
+ export { createAccumulator, processStreamEvent, } from './stream-event-processor';
10
12
  // Enhanced chat client (browser-side)
11
13
  export { sendChatMessage, streamChatMessage, getAvailableModels, getConversationHistory, generateInsights, getConversations, createConversation, updateConversation, deleteConversation, searchInsights, insertInsights, deleteConversationInsights, getInsightStats, initializeInsights, } from './chat-client';
12
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kEAAkE;AAClE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAM1B,qDAAqD;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAY3D,2DAA2D;AAC3D,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAElE,sCAAsC;AACtC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/agent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kEAAkE;AAClE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAM1B,qDAAqD;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAY3D,2DAA2D;AAC3D,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAElE,0EAA0E;AAC1E,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAOlC,sCAAsC;AACtC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,0BAA0B,EAC1B,eAAe,EACf,kBAAkB,GACnB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { ThoughtEvent } from '../../components/chat/ThinkingToggle';
2
+ import type { MessagePart } from '../../types/chat';
3
+ export interface StreamAccumulator {
4
+ fullContent: string;
5
+ thoughts: ThoughtEvent[];
6
+ parts: MessagePart[];
7
+ pendingTools: Map<string, number>;
8
+ agentName?: string;
9
+ interimMessages: string[];
10
+ }
11
+ export interface StreamEventResult {
12
+ content?: string;
13
+ thoughts?: ThoughtEvent[];
14
+ parts?: MessagePart[];
15
+ agentName?: string;
16
+ interimMessages?: string[];
17
+ quickReplies?: string[];
18
+ promptActive?: boolean;
19
+ conversationId?: string;
20
+ title?: string;
21
+ titleUpdate?: {
22
+ id: string;
23
+ title: string;
24
+ };
25
+ complete?: boolean;
26
+ error?: string;
27
+ }
28
+ export declare function createAccumulator(): StreamAccumulator;
29
+ /**
30
+ * Pure function that processes a single SSE stream event, mutating the
31
+ * accumulator in place and returning a result object describing what changed.
32
+ *
33
+ * Both ChatInterface and useChatStream call this so streaming behaviour
34
+ * (including live thinking extraction) is defined in exactly one place.
35
+ */
36
+ export declare function processStreamEvent(eventType: string, parsed: any, accumulated: StreamAccumulator): StreamEventResult;
37
+ //# sourceMappingURL=stream-event-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-event-processor.d.ts","sourceRoot":"","sources":["../../../src/lib/agent/stream-event-processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,IAAI,iBAAiB,CASrD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,GAAG,EACX,WAAW,EAAE,iBAAiB,GAC7B,iBAAiB,CA6MnB"}
@@ -0,0 +1,204 @@
1
+ import { stripThinkTags, extractThinkContent } from '../../components/chat/chat-utils';
2
+ export function createAccumulator() {
3
+ return {
4
+ fullContent: '',
5
+ thoughts: [],
6
+ parts: [],
7
+ pendingTools: new Map(),
8
+ agentName: undefined,
9
+ interimMessages: [],
10
+ };
11
+ }
12
+ /**
13
+ * Pure function that processes a single SSE stream event, mutating the
14
+ * accumulator in place and returning a result object describing what changed.
15
+ *
16
+ * Both ChatInterface and useChatStream call this so streaming behaviour
17
+ * (including live thinking extraction) is defined in exactly one place.
18
+ */
19
+ export function processStreamEvent(eventType, parsed, accumulated) {
20
+ const newThought = {
21
+ type: eventType,
22
+ source: parsed.source,
23
+ message: parsed.message,
24
+ data: parsed.data || parsed,
25
+ timestamp: new Date(),
26
+ };
27
+ if (parsed.source && !parsed.source.includes('dispatcher')) {
28
+ accumulated.agentName = parsed.source;
29
+ }
30
+ switch (eventType) {
31
+ case 'conversation_created':
32
+ return { conversationId: parsed.conversation_id, title: parsed.title };
33
+ case 'title_update':
34
+ return { titleUpdate: { id: parsed.conversation_id, title: parsed.title } };
35
+ case 'thought':
36
+ case 'plan':
37
+ case 'progress':
38
+ accumulated.thoughts = [...accumulated.thoughts, newThought];
39
+ return { thoughts: accumulated.thoughts };
40
+ case 'tool_start': {
41
+ accumulated.thoughts = [...accumulated.thoughts, newThought];
42
+ const toolSource = parsed.source || 'tool';
43
+ const toolName = String(parsed.data?.tool_name || parsed.data?.display_name || toolSource);
44
+ const toolPart = {
45
+ type: 'tool_call',
46
+ id: `tool-${Date.now()}-${toolName}`,
47
+ name: toolName,
48
+ displayName: String(parsed.data?.display_name || parsed.message || toolName),
49
+ status: 'running',
50
+ input: (parsed.data || undefined),
51
+ startedAt: new Date(),
52
+ };
53
+ accumulated.pendingTools.set(toolSource, accumulated.parts.length);
54
+ accumulated.parts = [...accumulated.parts, toolPart];
55
+ return { thoughts: accumulated.thoughts, parts: accumulated.parts };
56
+ }
57
+ case 'tool_result': {
58
+ accumulated.thoughts = [...accumulated.thoughts, newThought];
59
+ const resultSource = parsed.source || 'tool';
60
+ const idx = accumulated.pendingTools.get(resultSource);
61
+ if (idx !== undefined && accumulated.parts[idx]?.type === 'tool_call') {
62
+ const existing = accumulated.parts[idx];
63
+ accumulated.parts = [...accumulated.parts];
64
+ accumulated.parts[idx] = {
65
+ ...existing,
66
+ status: parsed.data?.success === false ? 'error' : 'completed',
67
+ output: parsed.message || undefined,
68
+ error: parsed.data?.success === false ? String(parsed.message || 'Failed') : undefined,
69
+ completedAt: new Date(),
70
+ };
71
+ accumulated.pendingTools.delete(resultSource);
72
+ }
73
+ else {
74
+ const toolName = String(parsed.data?.tool_name || parsed.data?.display_name || resultSource);
75
+ accumulated.parts = [...accumulated.parts, {
76
+ type: 'tool_call',
77
+ id: `tool-${Date.now()}-${toolName}`,
78
+ name: toolName,
79
+ displayName: String(parsed.data?.display_name || toolName),
80
+ status: parsed.data?.success === false ? 'error' : 'completed',
81
+ output: parsed.message || undefined,
82
+ completedAt: new Date(),
83
+ }];
84
+ }
85
+ return { thoughts: accumulated.thoughts, parts: accumulated.parts };
86
+ }
87
+ case 'content': {
88
+ const contentData = parsed.data || {};
89
+ const msgText = parsed.message || '';
90
+ if (contentData.streaming && contentData.partial) {
91
+ accumulated.fullContent += msgText;
92
+ }
93
+ else if (contentData.complete) {
94
+ // Final marker — no content change
95
+ }
96
+ else if (msgText) {
97
+ accumulated.fullContent = msgText;
98
+ }
99
+ const thinkTexts = extractThinkContent(accumulated.fullContent);
100
+ if (thinkTexts.length > 0) {
101
+ const thinkThought = {
102
+ type: 'thought',
103
+ source: 'model',
104
+ message: thinkTexts.join('\n\n'),
105
+ data: parsed.data || parsed,
106
+ timestamp: new Date(),
107
+ };
108
+ const hasModelThought = accumulated.thoughts.some(t => t.source === 'model' && t.type === 'thought');
109
+ if (hasModelThought) {
110
+ accumulated.thoughts = accumulated.thoughts.map(t => t.source === 'model' && t.type === 'thought' ? thinkThought : t);
111
+ }
112
+ else {
113
+ accumulated.thoughts = [...accumulated.thoughts, thinkThought];
114
+ }
115
+ }
116
+ return {
117
+ content: stripThinkTags(accumulated.fullContent),
118
+ thoughts: accumulated.thoughts,
119
+ };
120
+ }
121
+ case 'content_chunk': {
122
+ accumulated.fullContent += parsed.chunk || parsed.content || '';
123
+ const thinkTexts = extractThinkContent(accumulated.fullContent);
124
+ if (thinkTexts.length > 0) {
125
+ const thinkThought = {
126
+ type: 'thought',
127
+ source: 'model',
128
+ message: thinkTexts.join('\n\n'),
129
+ data: parsed.data || parsed,
130
+ timestamp: new Date(),
131
+ };
132
+ const hasModelThought = accumulated.thoughts.some(t => t.source === 'model' && t.type === 'thought');
133
+ if (hasModelThought) {
134
+ accumulated.thoughts = accumulated.thoughts.map(t => t.source === 'model' && t.type === 'thought' ? thinkThought : t);
135
+ }
136
+ else {
137
+ accumulated.thoughts = [...accumulated.thoughts, thinkThought];
138
+ }
139
+ }
140
+ return {
141
+ content: stripThinkTags(accumulated.fullContent),
142
+ thoughts: accumulated.thoughts,
143
+ };
144
+ }
145
+ case 'interim': {
146
+ const nested = parsed.data || {};
147
+ const interimMsg = String(parsed.message || '').trim();
148
+ const audioUrl = typeof nested.audio_url === 'string' ? nested.audio_url : '';
149
+ const rendered = audioUrl
150
+ ? `${interimMsg || 'Voice output ready'} (${audioUrl})`
151
+ : interimMsg;
152
+ if (rendered) {
153
+ accumulated.interimMessages = [...accumulated.interimMessages, rendered];
154
+ return { interimMessages: accumulated.interimMessages };
155
+ }
156
+ return {};
157
+ }
158
+ case 'clarify_parallel': {
159
+ const bgStatus = parsed.data?.background_status;
160
+ const clarifyMsg = parsed.message || '';
161
+ if (clarifyMsg) {
162
+ accumulated.fullContent += clarifyMsg + '\n\n';
163
+ }
164
+ if (bgStatus) {
165
+ accumulated.thoughts = [...accumulated.thoughts, {
166
+ type: 'progress',
167
+ source: parsed.source,
168
+ message: String(bgStatus),
169
+ data: { phase: 'background_work' },
170
+ timestamp: new Date(),
171
+ }];
172
+ }
173
+ const clarifyOptions = parsed.data?.options || parsed.options;
174
+ return {
175
+ content: stripThinkTags(accumulated.fullContent),
176
+ thoughts: accumulated.thoughts,
177
+ ...(clarifyOptions && Array.isArray(clarifyOptions) && clarifyOptions.length > 0
178
+ ? { quickReplies: clarifyOptions, promptActive: true }
179
+ : {}),
180
+ };
181
+ }
182
+ case 'prompt': {
183
+ const promptOptions = parsed.options || parsed.data?.options;
184
+ if (promptOptions && Array.isArray(promptOptions)) {
185
+ const promptType = (parsed.data?.prompt_type || 'choice');
186
+ accumulated.parts = [...accumulated.parts, { type: 'prompt', options: promptOptions, promptType }];
187
+ return {
188
+ parts: accumulated.parts,
189
+ quickReplies: promptOptions,
190
+ promptActive: true,
191
+ };
192
+ }
193
+ return {};
194
+ }
195
+ case 'complete':
196
+ case 'message_complete':
197
+ return { complete: true, conversationId: parsed.conversation_id };
198
+ case 'error':
199
+ return { error: parsed.error || parsed.message || 'An error occurred' };
200
+ default:
201
+ return {};
202
+ }
203
+ }
204
+ //# sourceMappingURL=stream-event-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-event-processor.js","sourceRoot":"","sources":["../../../src/lib/agent/stream-event-processor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useChatStream.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks/useChatStream.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEtF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAcD,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,aAAa,EAAE,EAAE,oBAAoB;;2BA4KhG,kBAAkB,KAC1B,OAAO,CAAC,YAAY,CAAC;;;EAoGzB"}
1
+ {"version":3,"file":"useChatStream.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks/useChatStream.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEtF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAcD,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,qBAAqB,EAAE,aAAa,EAAE,EAAE,oBAAoB;;2BAKhG,kBAAkB,KAC1B,OAAO,CAAC,YAAY,CAAC;;;EA4GzB"}
@@ -1,7 +1,9 @@
1
1
  'use client';
2
2
  import { useState, useRef, useCallback } from 'react';
3
- import { stripThinkTags, extractThinkContent } from '../../components/chat/chat-utils';
3
+ import { flushSync } from 'react-dom';
4
+ import { stripThinkTags } from '../../components/chat/chat-utils';
4
5
  import { streamChatMessageAgentic } from '../agent/chat-client';
6
+ import { createAccumulator, processStreamEvent } from '../agent/stream-event-processor';
5
7
  const INITIAL_STATE = {
6
8
  content: '',
7
9
  thoughts: [],
@@ -16,165 +18,27 @@ const INITIAL_STATE = {
16
18
  export function useChatStream({ token, agentUrl, onConversationCreated, onTitleUpdate }) {
17
19
  const [state, setState] = useState(INITIAL_STATE);
18
20
  const abortControllerRef = useRef(null);
19
- const processEvent = useCallback((eventType, parsed, accumulated) => {
20
- const newThought = {
21
- type: eventType,
22
- source: parsed.source,
23
- message: parsed.message,
24
- data: parsed.data || parsed,
25
- timestamp: new Date(),
26
- };
27
- if (parsed.source && !parsed.source.includes('dispatcher')) {
28
- accumulated.agentName = parsed.source;
29
- }
30
- switch (eventType) {
31
- case 'conversation_created':
32
- return { conversationId: parsed.conversation_id, title: parsed.title };
33
- case 'title_update':
34
- return { titleUpdate: { id: parsed.conversation_id, title: parsed.title } };
35
- case 'thought':
36
- case 'plan':
37
- case 'progress':
38
- accumulated.thoughts = [...accumulated.thoughts, newThought];
39
- return { thoughts: accumulated.thoughts };
40
- case 'tool_start': {
41
- accumulated.thoughts = [...accumulated.thoughts, newThought];
42
- const toolSource = parsed.source || 'tool';
43
- const toolName = String(parsed.data?.tool_name || parsed.data?.display_name || toolSource);
44
- const toolPart = {
45
- type: 'tool_call',
46
- id: `tool-${Date.now()}-${toolName}`,
47
- name: toolName,
48
- displayName: String(parsed.data?.display_name || parsed.message || toolName),
49
- status: 'running',
50
- input: (parsed.data || undefined),
51
- startedAt: new Date(),
52
- };
53
- accumulated.pendingTools.set(toolSource, accumulated.parts.length);
54
- accumulated.parts = [...accumulated.parts, toolPart];
55
- return { thoughts: accumulated.thoughts, parts: accumulated.parts };
56
- }
57
- case 'tool_result': {
58
- accumulated.thoughts = [...accumulated.thoughts, newThought];
59
- const resultSource = parsed.source || 'tool';
60
- const idx = accumulated.pendingTools.get(resultSource);
61
- if (idx !== undefined && accumulated.parts[idx]?.type === 'tool_call') {
62
- const existing = accumulated.parts[idx];
63
- accumulated.parts = [...accumulated.parts];
64
- accumulated.parts[idx] = {
65
- ...existing,
66
- status: parsed.data?.success === false ? 'error' : 'completed',
67
- output: parsed.message || undefined,
68
- error: parsed.data?.success === false ? String(parsed.message || 'Failed') : undefined,
69
- completedAt: new Date(),
70
- };
71
- accumulated.pendingTools.delete(resultSource);
72
- }
73
- else {
74
- const toolName = String(parsed.data?.tool_name || parsed.data?.display_name || resultSource);
75
- accumulated.parts = [...accumulated.parts, {
76
- type: 'tool_call',
77
- id: `tool-${Date.now()}-${toolName}`,
78
- name: toolName,
79
- displayName: String(parsed.data?.display_name || toolName),
80
- status: parsed.data?.success === false ? 'error' : 'completed',
81
- output: parsed.message || undefined,
82
- completedAt: new Date(),
83
- }];
84
- }
85
- return { thoughts: accumulated.thoughts, parts: accumulated.parts };
86
- }
87
- case 'content': {
88
- const contentData = parsed.data || {};
89
- const msgText = parsed.message || '';
90
- if (contentData.streaming && contentData.partial) {
91
- accumulated.fullContent += msgText;
92
- }
93
- else if (contentData.complete) {
94
- // Final marker
95
- }
96
- else if (msgText) {
97
- accumulated.fullContent = msgText;
98
- }
99
- return { content: stripThinkTags(accumulated.fullContent) };
100
- }
101
- case 'content_chunk':
102
- accumulated.fullContent += parsed.chunk || parsed.content || '';
103
- return { content: stripThinkTags(accumulated.fullContent) };
104
- case 'interim': {
105
- const nested = parsed.data || {};
106
- const interimMsg = String(parsed.message || '').trim();
107
- const audioUrl = typeof nested.audio_url === 'string' ? nested.audio_url : '';
108
- const rendered = audioUrl
109
- ? `${interimMsg || 'Voice output ready'} (${audioUrl})`
110
- : interimMsg;
111
- if (rendered) {
112
- accumulated.interimMessages = [...accumulated.interimMessages, rendered];
113
- return { interimMessages: accumulated.interimMessages };
114
- }
115
- return {};
116
- }
117
- case 'clarify_parallel': {
118
- const bgStatus = parsed.data?.background_status;
119
- const clarifyMsg = parsed.message || '';
120
- if (clarifyMsg) {
121
- accumulated.fullContent += clarifyMsg + '\n\n';
122
- }
123
- if (bgStatus) {
124
- accumulated.thoughts = [...accumulated.thoughts, {
125
- type: 'progress',
126
- source: parsed.source,
127
- message: String(bgStatus),
128
- data: { phase: 'background_work' },
129
- timestamp: new Date(),
130
- }];
131
- }
132
- const clarifyOptions = parsed.data?.options || parsed.options;
133
- return {
134
- content: stripThinkTags(accumulated.fullContent),
135
- thoughts: accumulated.thoughts,
136
- ...(clarifyOptions && Array.isArray(clarifyOptions) && clarifyOptions.length > 0
137
- ? { quickReplies: clarifyOptions, promptActive: true }
138
- : {}),
139
- };
140
- }
141
- case 'prompt': {
142
- const promptOptions = parsed.options || parsed.data?.options;
143
- if (promptOptions && Array.isArray(promptOptions)) {
144
- const promptType = (parsed.data?.prompt_type || 'choice');
145
- accumulated.parts = [...accumulated.parts, { type: 'prompt', options: promptOptions, promptType }];
146
- return {
147
- parts: accumulated.parts,
148
- quickReplies: promptOptions,
149
- promptActive: true,
150
- };
151
- }
152
- return {};
153
- }
154
- case 'complete':
155
- case 'message_complete':
156
- return { complete: true, conversationId: parsed.conversation_id };
157
- case 'error':
158
- return { error: parsed.error || parsed.message || 'An error occurred' };
159
- default:
160
- return {};
161
- }
162
- }, []);
163
21
  const sendMessage = useCallback(async (request) => {
22
+ if (abortControllerRef.current) {
23
+ abortControllerRef.current.abort();
24
+ abortControllerRef.current = null;
25
+ }
164
26
  const controller = new AbortController();
165
27
  abortControllerRef.current = controller;
166
- const accumulated = {
167
- fullContent: '',
168
- thoughts: [],
169
- parts: [],
170
- pendingTools: new Map(),
171
- agentName: undefined,
172
- interimMessages: [],
173
- };
174
- setState({
175
- ...INITIAL_STATE,
176
- isStreaming: true,
177
- conversationId: request.conversation_id,
28
+ const accumulated = createAccumulator();
29
+ // Use flushSync for the initial state reset so the UI clears immediately.
30
+ flushSync(() => {
31
+ setState(prev => ({
32
+ ...prev,
33
+ content: '',
34
+ thoughts: [],
35
+ parts: [],
36
+ interimMessages: [],
37
+ quickReplies: [],
38
+ promptActive: false,
39
+ isStreaming: true,
40
+ conversationId: request.conversation_id || prev.conversationId,
41
+ }));
178
42
  });
179
43
  let resultConversationId = request.conversation_id;
180
44
  try {
@@ -183,8 +47,8 @@ export function useChatStream({ token, agentUrl, onConversationCreated, onTitleU
183
47
  agentUrl,
184
48
  signal: controller.signal,
185
49
  })) {
186
- let parsed = event.data;
187
- const result = processEvent(event.type, parsed, accumulated);
50
+ const parsed = event.data;
51
+ const result = processStreamEvent(event.type, parsed, accumulated);
188
52
  if (result.conversationId && !result.titleUpdate) {
189
53
  resultConversationId = result.conversationId;
190
54
  onConversationCreated?.(result.conversationId, result.title);
@@ -192,49 +56,52 @@ export function useChatStream({ token, agentUrl, onConversationCreated, onTitleU
192
56
  if (result.titleUpdate) {
193
57
  onTitleUpdate?.(result.titleUpdate.id, result.titleUpdate.title);
194
58
  }
195
- setState(prev => ({
196
- ...prev,
197
- content: result.content ?? prev.content,
198
- thoughts: result.thoughts ?? prev.thoughts,
199
- parts: result.parts ?? prev.parts,
200
- agentName: accumulated.agentName ?? prev.agentName,
201
- interimMessages: result.interimMessages ?? prev.interimMessages,
202
- quickReplies: result.quickReplies ?? prev.quickReplies,
203
- promptActive: result.promptActive ?? prev.promptActive,
204
- conversationId: resultConversationId,
205
- }));
59
+ // flushSync forces React to commit this state update to the DOM
60
+ // immediately rather than batching it. Without this, React 18's
61
+ // automatic batching delays all setState calls inside the async
62
+ // generator until the promise resolves, so the parent component
63
+ // never sees intermediate streaming updates.
64
+ flushSync(() => {
65
+ setState(prev => ({
66
+ ...prev,
67
+ content: result.content ?? prev.content,
68
+ thoughts: result.thoughts ?? prev.thoughts,
69
+ parts: result.parts ?? prev.parts,
70
+ agentName: accumulated.agentName ?? prev.agentName,
71
+ interimMessages: result.interimMessages ?? prev.interimMessages,
72
+ quickReplies: result.quickReplies ?? prev.quickReplies,
73
+ promptActive: result.promptActive ?? prev.promptActive,
74
+ conversationId: resultConversationId,
75
+ }));
76
+ });
206
77
  if (result.error) {
207
78
  throw new Error(result.error);
208
79
  }
209
80
  }
210
81
  }
211
82
  finally {
212
- setState(prev => ({ ...prev, isStreaming: false }));
83
+ flushSync(() => {
84
+ setState(prev => ({
85
+ ...prev,
86
+ isStreaming: false,
87
+ content: '',
88
+ thoughts: [],
89
+ parts: [],
90
+ agentName: undefined,
91
+ interimMessages: [],
92
+ }));
93
+ });
213
94
  abortControllerRef.current = null;
214
95
  }
215
- const finalContent = stripThinkTags(accumulated.fullContent);
216
- // Extract any thinking content from the raw text that wasn't caught as events
217
- const textThoughts = extractThinkContent(accumulated.fullContent);
218
- if (textThoughts.length > 0) {
219
- for (const t of textThoughts) {
220
- accumulated.thoughts.push({
221
- type: 'thought',
222
- source: accumulated.agentName,
223
- message: t,
224
- data: { phase: 'model_reasoning' },
225
- timestamp: new Date(),
226
- });
227
- }
228
- }
229
96
  return {
230
- content: finalContent,
97
+ content: stripThinkTags(accumulated.fullContent),
231
98
  thoughts: accumulated.thoughts,
232
99
  parts: accumulated.parts,
233
100
  agentName: accumulated.agentName,
234
101
  interimMessages: accumulated.interimMessages,
235
102
  conversationId: resultConversationId,
236
103
  };
237
- }, [token, agentUrl, processEvent, onConversationCreated, onTitleUpdate]);
104
+ }, [token, agentUrl, onConversationCreated, onTitleUpdate]);
238
105
  const cancel = useCallback(() => {
239
106
  abortControllerRef.current?.abort();
240
107
  }, []);