@amodalai/react 0.2.0 → 0.2.1

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.
@@ -69,75 +69,7 @@ async function* h(s) {
69
69
  * Copyright 2025 Amodal Labs, Inc.
70
70
  * SPDX-License-Identifier: MIT
71
71
  */
72
- async function* w(s, e, t, i) {
73
- const r = `${s}/chat/stream`, n = {};
74
- i && (n.Authorization = `Bearer ${i}`);
75
- const o = { message: e.message };
76
- e.session_id && (o.session_id = e.session_id), e.role && (o.role = e.role), e.session_type && (o.session_type = e.session_type), e.deploy_id && (o.deploy_id = e.deploy_id), yield* m(r, o, {
77
- signal: t,
78
- headers: n
79
- });
80
- }
81
- async function S(s, e, t) {
82
- const i = `${s}/sessions`, r = {
83
- "Content-Type": "application/json"
84
- };
85
- t && (r.Authorization = `Bearer ${t}`);
86
- const n = { user_id: e.id };
87
- e.role && (n.role = e.role);
88
- const o = await fetch(i, {
89
- method: "POST",
90
- headers: r,
91
- body: JSON.stringify(n)
92
- });
93
- if (!o.ok)
94
- throw new Error(`Session creation failed: ${String(o.status)} ${o.statusText}`);
95
- return await o.json();
96
- }
97
- function c(s) {
98
- const e = {};
99
- return s && (e.Authorization = `Bearer ${s}`), e;
100
- }
101
- async function T(s, e, t) {
102
- const i = t && t.length > 0 ? `?tags=${t.join(",")}` : "", r = `${s}/sessions/history${i}`, n = await fetch(r, { headers: c(e) });
103
- if (!n.ok)
104
- throw new Error(`List sessions failed: ${String(n.status)} ${n.statusText}`);
105
- return await n.json();
106
- }
107
- async function E(s, e, t) {
108
- const i = `${s}/sessions/history/${e}`, r = await fetch(i, { headers: c(t) });
109
- if (!r.ok)
110
- throw new Error(`Get session failed: ${String(r.status)} ${r.statusText}`);
111
- return await r.json();
112
- }
113
- async function $(s, e, t, i) {
114
- const r = `${s}/sessions/history/${e}`, n = await fetch(r, {
115
- method: "PATCH",
116
- headers: {
117
- "Content-Type": "application/json",
118
- ...c(i)
119
- },
120
- body: JSON.stringify(t)
121
- });
122
- if (!n.ok)
123
- throw new Error(`Update session failed: ${String(n.status)} ${n.statusText}`);
124
- return await n.json();
125
- }
126
- function j(s, e) {
127
- return {
128
- stream: (t, i) => w(s, t, i, e),
129
- createSession: (t) => S(s, t, e),
130
- listSessions: (t) => T(s, e, t),
131
- getSessionHistory: (t) => E(s, t, e),
132
- updateSession: (t, i) => $(s, t, i, e)
133
- };
134
- }
135
- /**
136
- * @license
137
- * Copyright 2025 Amodal Labs, Inc.
138
- * SPDX-License-Identifier: MIT
139
- */
140
- class x {
72
+ class w {
141
73
  constructor() {
142
74
  a(this, "listeners", /* @__PURE__ */ new Map());
143
75
  }
@@ -164,11 +96,11 @@ class x {
164
96
  * Copyright 2025 Amodal Labs, Inc.
165
97
  * SPDX-License-Identifier: MIT
166
98
  */
167
- function _(s) {
99
+ function S(s) {
168
100
  const e = [];
169
- return s.type === "widget_rendered" && b(s.widgetType, s.data, e), s.type === "tool_executed" && z(s.parameters, e), e;
101
+ return s.type === "widget_rendered" && T(s.widgetType, s.data, e), s.type === "tool_executed" && E(s.parameters, e), e;
170
102
  }
171
- function b(s, e, t) {
103
+ function T(s, e, t) {
172
104
  switch (s) {
173
105
  case "entity-card": {
174
106
  typeof e.mac == "string" && t.push({
@@ -223,7 +155,7 @@ function b(s, e, t) {
223
155
  }
224
156
  }
225
157
  }
226
- function z(s, e) {
158
+ function E(s, e) {
227
159
  typeof s.zone == "string" && e.push({
228
160
  entityType: "zone",
229
161
  entityId: s.zone,
@@ -239,10 +171,10 @@ function z(s, e) {
239
171
  * Copyright 2025 Amodal Labs, Inc.
240
172
  * SPDX-License-Identifier: MIT
241
173
  */
242
- class k extends x {
174
+ class j extends w {
243
175
  constructor() {
244
176
  super(...arguments);
245
- a(this, "extractors", [_]);
177
+ a(this, "extractors", [S]);
246
178
  }
247
179
  /**
248
180
  * Process an agent-driven event: emit on its typed channel + '*',
@@ -280,18 +212,86 @@ class k extends x {
280
212
  this.extractors = [...t];
281
213
  }
282
214
  }
215
+ /**
216
+ * @license
217
+ * Copyright 2025 Amodal Labs, Inc.
218
+ * SPDX-License-Identifier: MIT
219
+ */
220
+ async function* $(s, e, t, i) {
221
+ const r = `${s}/chat/stream`, n = {};
222
+ i && (n.Authorization = `Bearer ${i}`);
223
+ const o = { message: e.message };
224
+ e.session_id && (o.session_id = e.session_id), e.role && (o.role = e.role), e.session_type && (o.session_type = e.session_type), e.deploy_id && (o.deploy_id = e.deploy_id), yield* m(r, o, {
225
+ signal: t,
226
+ headers: n
227
+ });
228
+ }
229
+ async function x(s, e, t) {
230
+ const i = `${s}/sessions`, r = {
231
+ "Content-Type": "application/json"
232
+ };
233
+ t && (r.Authorization = `Bearer ${t}`);
234
+ const n = { user_id: e.id };
235
+ e.role && (n.role = e.role);
236
+ const o = await fetch(i, {
237
+ method: "POST",
238
+ headers: r,
239
+ body: JSON.stringify(n)
240
+ });
241
+ if (!o.ok)
242
+ throw new Error(`Session creation failed: ${String(o.status)} ${o.statusText}`);
243
+ return await o.json();
244
+ }
245
+ function c(s) {
246
+ const e = {};
247
+ return s && (e.Authorization = `Bearer ${s}`), e;
248
+ }
249
+ async function _(s, e, t) {
250
+ const i = t && t.length > 0 ? `?tags=${t.join(",")}` : "", r = `${s}/sessions/history${i}`, n = await fetch(r, { headers: c(e) });
251
+ if (!n.ok)
252
+ throw new Error(`List sessions failed: ${String(n.status)} ${n.statusText}`);
253
+ return await n.json();
254
+ }
255
+ async function b(s, e, t) {
256
+ const i = `${s}/sessions/history/${e}`, r = await fetch(i, { headers: c(t) });
257
+ if (!r.ok)
258
+ throw new Error(`Get session failed: ${String(r.status)} ${r.statusText}`);
259
+ return await r.json();
260
+ }
261
+ async function z(s, e, t, i) {
262
+ const r = `${s}/sessions/history/${e}`, n = await fetch(r, {
263
+ method: "PATCH",
264
+ headers: {
265
+ "Content-Type": "application/json",
266
+ ...c(i)
267
+ },
268
+ body: JSON.stringify(t)
269
+ });
270
+ if (!n.ok)
271
+ throw new Error(`Update session failed: ${String(n.status)} ${n.statusText}`);
272
+ return await n.json();
273
+ }
274
+ function k(s, e) {
275
+ return {
276
+ stream: (t, i) => $(s, t, i, e),
277
+ createSession: (t) => x(s, t, e),
278
+ listSessions: (t) => _(s, e, t),
279
+ getSessionHistory: (t) => b(s, t, e),
280
+ updateSession: (t, i) => z(s, t, i, e)
281
+ };
282
+ }
283
283
  export {
284
- x as T,
285
- k as W,
286
- S as a,
284
+ w as T,
285
+ j as W,
286
+ x as a,
287
287
  m as b,
288
- j as c,
289
- _ as d,
288
+ k as c,
289
+ S as d,
290
290
  I as e,
291
- E as g,
292
- T as l,
291
+ b as g,
292
+ _ as l,
293
293
  l as p,
294
- w as s,
295
- $ as u
294
+ $ as s,
295
+ z as u
296
296
  };
297
- //# sourceMappingURL=event-bus-h26clqbZ.js.map
297
+ //# sourceMappingURL=chat-api-CqMQa8r3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-api-CqMQa8r3.js","sources":["../src/client/sse-client.ts","../src/client/EventEmitter.ts","../src/events/entity-extractor.ts","../src/events/event-bus.ts","../src/client/chat-api.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { SSEEvent } from '../types';\n\n/**\n * Parse a single SSE data line into a typed event.\n * Returns null for non-data lines or empty data.\n */\nexport function parseSSELine(line: string): SSEEvent | null {\n if (!line.startsWith('data: ')) return null;\n const json = line.slice(6).trim();\n if (json.length === 0) return null;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- SSE event from server\n return JSON.parse(json) as SSEEvent;\n}\n\nexport interface StreamSSEOptions {\n signal?: AbortSignal;\n headers?: Record<string, string>;\n}\n\n/**\n * Streams SSE events from a POST endpoint.\n * Uses fetch + ReadableStream (not EventSource, which only supports GET).\n */\nexport async function* streamSSE(\n url: string,\n body: Record<string, unknown>,\n options?: StreamSSEOptions,\n): AsyncGenerator<SSEEvent> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...options?.headers,\n };\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: options?.signal,\n });\n\n if (!response.ok) {\n throw new Error(`SSE request failed: ${String(response.status)} ${response.statusText}`);\n }\n\n yield* readSSEStream(response);\n}\n\n/**\n * Streams SSE events from a GET endpoint (e.g., task streaming).\n */\nexport async function* streamSSEGet(\n url: string,\n options?: StreamSSEOptions,\n): AsyncGenerator<SSEEvent> {\n const response = await fetch(url, {\n method: 'GET',\n headers: options?.headers,\n signal: options?.signal,\n });\n\n if (!response.ok) {\n throw new Error(`SSE request failed: ${String(response.status)} ${response.statusText}`);\n }\n\n yield* readSSEStream(response);\n}\n\n/**\n * Reads SSE events from a Response body stream.\n */\nasync function* readSSEStream(response: Response): AsyncGenerator<SSEEvent> {\n const body = response.body;\n if (!body) {\n throw new Error('Response body is null');\n }\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.length === 0) continue;\n const event = parseSSELine(trimmed);\n if (event) {\n yield event;\n }\n }\n }\n\n // Process any remaining buffer\n if (buffer.trim().length > 0) {\n const event = parseSSELine(buffer.trim());\n if (event) {\n yield event;\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * Minimal typed event emitter with no external dependencies.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- generic event map constraint\nexport class TypedEventEmitter<Events extends Record<string, any>> {\n private listeners = new Map<keyof Events, Set<(data: never) => void>>();\n\n on<K extends keyof Events>(event: K, listener: (data: Events[K]) => void): this {\n let set = this.listeners.get(event);\n if (!set) {\n set = new Set();\n this.listeners.set(event, set);\n }\n set.add(listener as (data: never) => void);\n return this;\n }\n\n off<K extends keyof Events>(event: K, listener: (data: Events[K]) => void): this {\n const set = this.listeners.get(event);\n if (set) {\n set.delete(listener as (data: never) => void);\n if (set.size === 0) {\n this.listeners.delete(event);\n }\n }\n return this;\n }\n\n protected emit<K extends keyof Events>(event: K, data: Events[K]): void {\n const set = this.listeners.get(event);\n if (set) {\n for (const listener of set) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- generic event dispatch\n (listener as (data: Events[K]) => void)(data);\n }\n }\n }\n\n removeAllListeners(): this {\n this.listeners.clear();\n return this;\n }\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { EntityReference, WidgetEvent } from './types';\n\n/**\n * Default entity extractor. Inspects agent-driven events and extracts entity\n * references from known widget data shapes and tool parameters.\n */\nexport function defaultEntityExtractor(event: WidgetEvent): EntityReference[] {\n const entities: EntityReference[] = [];\n\n if (event.type === 'widget_rendered') {\n extractFromWidget(event.widgetType, event.data, entities);\n }\n\n if (event.type === 'tool_executed') {\n extractFromToolParams(event.parameters, entities);\n }\n\n return entities;\n}\n\nfunction extractFromWidget(\n widgetType: string,\n data: Record<string, unknown>,\n entities: EntityReference[],\n): void {\n switch (widgetType) {\n case 'entity-card': {\n if (typeof data['mac'] === 'string') {\n entities.push({\n entityType: 'device',\n entityId: data['mac'],\n source: 'widget:entity-card',\n });\n }\n if (typeof data['zone'] === 'string') {\n entities.push({\n entityType: 'zone',\n entityId: data['zone'],\n source: 'widget:entity-card',\n });\n }\n break;\n }\n case 'entity-list': {\n const devices = data['devices'];\n if (Array.isArray(devices)) {\n for (const device of devices) {\n if (typeof device === 'object' && device !== null && 'mac' in device && typeof device['mac'] === 'string') {\n entities.push({\n entityType: 'device',\n entityId: device['mac'],\n source: 'widget:entity-list',\n });\n }\n }\n }\n break;\n }\n case 'scope-map': {\n const zones = data['highlight_zones'];\n if (Array.isArray(zones)) {\n for (const zone of zones) {\n if (typeof zone === 'string') {\n entities.push({\n entityType: 'zone',\n entityId: zone,\n source: 'widget:scope-map',\n });\n }\n }\n }\n const devices = data['highlight_devices'];\n if (Array.isArray(devices)) {\n for (const mac of devices) {\n if (typeof mac === 'string') {\n entities.push({\n entityType: 'device',\n entityId: mac,\n source: 'widget:scope-map',\n });\n }\n }\n }\n break;\n }\n case 'alert-card': {\n const alertId = data['alert_id'] ?? data['id'];\n if (typeof alertId === 'string') {\n entities.push({\n entityType: 'alert',\n entityId: alertId,\n source: 'widget:alert-card',\n });\n }\n break;\n }\n default:\n break;\n }\n}\n\nfunction extractFromToolParams(\n parameters: Record<string, unknown>,\n entities: EntityReference[],\n): void {\n if (typeof parameters['zone'] === 'string') {\n entities.push({\n entityType: 'zone',\n entityId: parameters['zone'],\n source: 'tool:parameter',\n });\n }\n if (typeof parameters['mac'] === 'string') {\n entities.push({\n entityType: 'device',\n entityId: parameters['mac'],\n source: 'tool:parameter',\n });\n }\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport { TypedEventEmitter } from '../client/EventEmitter';\nimport { defaultEntityExtractor } from './entity-extractor';\nimport type { WidgetEventMap, WidgetEvent, EntityExtractor, EntityReferencedEvent } from './types';\n\n/**\n * Event bus for widget events. Emits both agent-driven events (from SSE stream)\n * and user interaction events (hover/click on entities in the chat).\n *\n * Subscribing to `'*'` receives all events.\n */\nexport class WidgetEventBus extends TypedEventEmitter<WidgetEventMap> {\n private extractors: EntityExtractor[] = [defaultEntityExtractor];\n\n /**\n * Process an agent-driven event: emit on its typed channel + '*',\n * then run entity extractors and emit entity_referenced for each found entity.\n */\n processEvent(event: WidgetEvent): void {\n // Emit on the typed channel\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- event type matches map key\n this.emit(event.type as keyof WidgetEventMap, event as never);\n this.emit('*', event);\n\n // Run entity extractors only for agent-driven events (not interaction events, not entity_referenced)\n if (\n event.type === 'tool_executed' ||\n event.type === 'skill_activated' ||\n event.type === 'widget_rendered' ||\n event.type === 'kb_proposal'\n ) {\n for (const extractor of this.extractors) {\n const entities = extractor(event);\n for (const entity of entities) {\n const refEvent: EntityReferencedEvent = {\n type: 'entity_referenced',\n entity,\n sourceEvent: event,\n timestamp: new Date().toISOString(),\n };\n this.emit('entity_referenced', refEvent);\n this.emit('*', refEvent);\n }\n }\n }\n }\n\n /**\n * Emit an interaction event (entity_hovered, entity_unhovered, entity_clicked).\n * These are emitted on their typed channel + '*' without running extractors,\n * since interaction events already carry their EntityReference.\n */\n emitInteraction(event: WidgetEvent): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- event type matches map key\n this.emit(event.type as keyof WidgetEventMap, event as never);\n this.emit('*', event);\n }\n\n /** Add a custom entity extractor. */\n addExtractor(fn: EntityExtractor): void {\n this.extractors.push(fn);\n }\n\n /** Replace all entity extractors (including the default). */\n setExtractors(fns: EntityExtractor[]): void {\n this.extractors = [...fns];\n }\n}\n","/**\n * @license\n * Copyright 2025 Amodal Labs, Inc.\n * SPDX-License-Identifier: MIT\n */\n\nimport type { SSEEvent } from '../types';\nimport { streamSSE } from './sse-client';\n\nexport interface ChatStreamRequest {\n message: string;\n session_id?: string;\n role?: string;\n session_type?: string;\n deploy_id?: string;\n}\n\nexport interface SessionInfo {\n session_id: string;\n role: string;\n}\n\n/**\n * Streams chat responses from the API server's SSE endpoint.\n * Delegates to the shared streamSSE utility.\n */\nexport async function* streamChat(\n serverUrl: string,\n request: ChatStreamRequest,\n signal?: AbortSignal,\n token?: string,\n): AsyncGenerator<SSEEvent> {\n const url = `${serverUrl}/chat/stream`;\n\n const headers: Record<string, string> = {};\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n const body: Record<string, unknown> = { message: request.message };\n if (request.session_id) body['session_id'] = request.session_id;\n if (request.role) body['role'] = request.role;\n if (request.session_type) body['session_type'] = request.session_type;\n if (request.deploy_id) body['deploy_id'] = request.deploy_id;\n\n yield* streamSSE(url, body, {\n signal,\n headers,\n });\n}\n\n/**\n * Creates a new chat session on the server.\n */\nexport async function createSession(\n serverUrl: string,\n user: { id: string; role?: string },\n token?: string,\n): Promise<SessionInfo> {\n const url = `${serverUrl}/sessions`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n const body: Record<string, string> = { user_id: user.id };\n if (user.role) body['role'] = user.role;\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n throw new Error(`Session creation failed: ${String(response.status)} ${response.statusText}`);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Server response\n return (await response.json()) as SessionInfo;\n}\n\n// ---------------------------------------------------------------------------\n// Session history API\n// ---------------------------------------------------------------------------\n\nexport interface SessionHistoryItem {\n id: string;\n app_id: string;\n title?: string;\n tags: string[];\n status: string;\n session_type?: string;\n message_count: number;\n created_at: string;\n updated_at: string;\n}\n\nexport interface SessionDetail extends SessionHistoryItem {\n messages: Array<{\n type: string;\n id: string;\n text: string;\n timestamp: string;\n toolCalls?: Array<Record<string, unknown>>;\n skillActivations?: string[];\n widgets?: Array<Record<string, unknown>>;\n contentBlocks?: Array<Record<string, unknown>>;\n }>;\n}\n\nfunction authHeaders(token?: string | null): Record<string, string> {\n const headers: Record<string, string> = {};\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n return headers;\n}\n\n/**\n * List past sessions for the authenticated app.\n */\nexport async function listSessions(\n serverUrl: string,\n token?: string | null,\n tags?: string[],\n): Promise<SessionHistoryItem[]> {\n const qs = tags && tags.length > 0 ? `?tags=${tags.join(',')}` : '';\n const url = `${serverUrl}/sessions/history${qs}`;\n\n const response = await fetch(url, { headers: authHeaders(token) });\n if (!response.ok) {\n throw new Error(`List sessions failed: ${String(response.status)} ${response.statusText}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Server response\n return (await response.json()) as SessionHistoryItem[];\n}\n\n/**\n * Get a single session with full message history.\n */\nexport async function getSessionHistory(\n serverUrl: string,\n sessionId: string,\n token?: string | null,\n): Promise<SessionDetail> {\n const url = `${serverUrl}/sessions/history/${sessionId}`;\n\n const response = await fetch(url, { headers: authHeaders(token) });\n if (!response.ok) {\n throw new Error(`Get session failed: ${String(response.status)} ${response.statusText}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Server response\n return (await response.json()) as SessionDetail;\n}\n\n/**\n * Update session title and/or tags.\n */\nexport async function updateSession(\n serverUrl: string,\n sessionId: string,\n updates: { title?: string; tags?: string[] },\n token?: string | null,\n): Promise<SessionDetail> {\n const url = `${serverUrl}/sessions/history/${sessionId}`;\n\n const response = await fetch(url, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders(token),\n },\n body: JSON.stringify(updates),\n });\n if (!response.ok) {\n throw new Error(`Update session failed: ${String(response.status)} ${response.statusText}`);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- Server response\n return (await response.json()) as SessionDetail;\n}\n\n/**\n * Creates a configured chat client instance.\n */\nexport function createChatClient(serverUrl: string, token?: string) {\n return {\n stream: (request: ChatStreamRequest, signal?: AbortSignal) =>\n streamChat(serverUrl, request, signal, token),\n createSession: (user: { id: string; role?: string }) =>\n createSession(serverUrl, user, token),\n listSessions: (tags?: string[]) => listSessions(serverUrl, token, tags),\n getSessionHistory: (sessionId: string) => getSessionHistory(serverUrl, sessionId, token),\n updateSession: (sessionId: string, updates: { title?: string; tags?: string[] }) =>\n updateSession(serverUrl, sessionId, updates, token),\n };\n}\n"],"names":["parseSSELine","line","json","streamSSE","url","body","options","headers","response","readSSEStream","streamSSEGet","reader","decoder","buffer","done","value","lines","trimmed","event","TypedEventEmitter","__publicField","listener","set","data","defaultEntityExtractor","entities","extractFromWidget","extractFromToolParams","widgetType","devices","device","zones","zone","mac","alertId","parameters","WidgetEventBus","extractor","entity","refEvent","fn","fns","streamChat","serverUrl","request","signal","token","createSession","user","authHeaders","listSessions","tags","qs","getSessionHistory","sessionId","updateSession","updates","createChatClient"],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,8 +1,8 @@
1
1
  var f = Object.defineProperty;
2
2
  var k = (h, s, t) => s in h ? f(h, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : h[s] = t;
3
3
  var n = (h, s, t) => k(h, typeof s != "symbol" ? s + "" : s, t);
4
- import { b as p, e as w, s as g, T as y, W as S, a as b } from "./event-bus-h26clqbZ.js";
5
- import { c as A, g as T, l as B, p as H, u as P } from "./event-bus-h26clqbZ.js";
4
+ import { b as p, e as w, s as g, T as y, W as S, a as b } from "./chat-api-CqMQa8r3.js";
5
+ import { c as A, g as T, l as B, p as H, u as P } from "./chat-api-CqMQa8r3.js";
6
6
  /**
7
7
  * @license
8
8
  * Copyright 2025 Amodal Labs, Inc.
@@ -1,5 +1,5 @@
1
- import { ChatState, ChatAction, ChatMessage, ToolCallInfo, ConfirmationInfo } from '../types';
2
- export declare function chatReducer(state: ChatState, action: ChatAction): ChatState;
1
+ import { ChatMessage, ToolCallInfo, ConfirmationInfo } from '../types';
2
+ export { chatReducer } from './useChatStream';
3
3
  export interface UseAmodalChatOptions {
4
4
  /** Pre-seed session ID for resuming a previous session. */
5
5
  initialSessionId?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"useAmodalChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useAmodalChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,WAAW,EAEX,YAAY,EAEZ,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAoBlB,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CAmM3E;AAED,MAAM,WAAW,oBAAoB;IACnC,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,uCAAuC;IACvC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,8CAA8C;IAC9C,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAC,CAAC;IACnD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,qBAAqB,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAC3E;AAED,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,mBAAmB,CAoMjF"}
1
+ {"version":3,"file":"useAmodalChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useAmodalChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAEjB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAM9C,MAAM,WAAW,oBAAoB;IACnC,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,uCAAuC;IACvC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,8CAA8C;IAC9C,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,qBAAqB,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;CAC3E;AAMD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,mBAAmB,CAgDjF"}
@@ -1,7 +1,7 @@
1
- import { ChatState, ChatAction, ChatMessage, ToolCallInfo, KBProposalInfo, ChatUser } from '../types';
1
+ import { ChatMessage, ToolCallInfo, KBProposalInfo, ChatUser } from '../types';
2
2
  import { WidgetEventBus } from '../events/event-bus';
3
3
  import { WidgetEvent, EntityExtractor } from '../events/types';
4
- export declare function chatReducer(state: ChatState, action: ChatAction): ChatState;
4
+ export { chatReducer } from './useChatStream';
5
5
  export interface UseChatOptions {
6
6
  serverUrl: string;
7
7
  user: ChatUser;
@@ -1 +1 @@
1
- {"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,WAAW,EAEX,YAAY,EACZ,cAAc,EAGd,QAAQ,EACT,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAkBpE,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CA6Q3E;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,mEAAmE;IACnE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wGAAwG;IACxG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,wDAAwD;IACxD,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,kDAAkD;IAClD,QAAQ,EAAE,cAAc,CAAC;IACzB,mDAAmD;IACnD,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAChF,uDAAuD;IACvD,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,qDAAqD;IACrD,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAie9D"}
1
+ {"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EAEd,QAAQ,EAET,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAM9C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,mEAAmE;IACnE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wGAAwG;IACxG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,wDAAwD;IACxD,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,kDAAkD;IAClD,QAAQ,EAAE,cAAc,CAAC;IACzB,mDAAmD;IACnD,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAChF,uDAAuD;IACvD,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,qDAAqD;IACrD,YAAY,EAAE,OAAO,CAAC;CACvB;AAMD,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAwL9D"}
@@ -0,0 +1,47 @@
1
+ import { ChatState, ChatAction, ChatMessage, ToolCallInfo, KBProposalInfo, ConfirmationInfo, SSEEvent } from '../types';
2
+ import { WidgetEventBus } from '../events/event-bus';
3
+ import { WidgetEvent, EntityExtractor } from '../events/types';
4
+ export declare function chatReducer(state: ChatState, action: ChatAction): ChatState;
5
+ export interface UseChatStreamOptions {
6
+ /**
7
+ * Connect to the transport. Called on every `send()` invocation. The
8
+ * returned async iterable must yield `SSEEvent`s and complete (or throw)
9
+ * when the stream ends. `signal` is the hook-managed abort controller —
10
+ * the implementation should pass it to its underlying fetch/client call.
11
+ */
12
+ streamFn: (text: string, signal: AbortSignal) => AsyncIterable<SSEEvent>;
13
+ onToolCall?: (call: ToolCallInfo) => void;
14
+ onKBProposal?: (proposal: KBProposalInfo) => void;
15
+ onEvent?: (event: WidgetEvent) => void;
16
+ onStreamEnd?: () => void;
17
+ onSessionCreated?: (sessionId: string) => void;
18
+ onConfirmation?: (confirmation: ConfirmationInfo) => void;
19
+ /** Extractors registered on the internal event bus. */
20
+ entityExtractors?: EntityExtractor[];
21
+ }
22
+ export interface UseChatStreamReturn {
23
+ messages: ChatMessage[];
24
+ isStreaming: boolean;
25
+ activeToolCalls: ToolCallInfo[];
26
+ sessionId: string | null;
27
+ error: string | null;
28
+ usage: {
29
+ inputTokens: number;
30
+ outputTokens: number;
31
+ };
32
+ /** True when a loaded historical session is being viewed (read-only). */
33
+ isHistorical: boolean;
34
+ send: (text: string) => void;
35
+ stop: () => void;
36
+ reset: () => void;
37
+ respondToConfirmation: (correlationId: string, approved: boolean) => void;
38
+ /**
39
+ * Escape hatch for transport-specific actions (e.g. `LOAD_HISTORY` after
40
+ * fetching a session, `ASK_USER_SUBMITTED` after POSTing an answer).
41
+ */
42
+ dispatch: (action: ChatAction) => void;
43
+ /** Widget-event bus. External consumers subscribe to receive events. */
44
+ eventBus: WidgetEventBus;
45
+ }
46
+ export declare function useChatStream(options: UseChatStreamOptions): UseChatStreamReturn;
47
+ //# sourceMappingURL=useChatStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatStream.d.ts","sourceRoot":"","sources":["../../src/hooks/useChatStream.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,WAAW,EAEX,YAAY,EACZ,cAAc,EAGd,gBAAgB,EAChB,QAAQ,EACT,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AA0BpE,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CAmT3E;AAMD,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEzE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAE1D,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,YAAY,EAAE,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,yEAAyE;IACzE,YAAY,EAAE,OAAO,CAAC;IAEtB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,qBAAqB,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAE1E;;;OAGG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAEvC,wEAAwE;IACxE,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB,CAsIhF"}
package/dist/index.d.ts CHANGED
@@ -33,6 +33,8 @@ export { useNavigate, NavigateContext } from './hooks/useNavigate';
33
33
  export type { NavigateFn } from './hooks/useNavigate';
34
34
  export { useChat } from './hooks/useChat';
35
35
  export type { UseChatOptions, UseChatReturn } from './hooks/useChat';
36
+ export { useChatStream, chatReducer } from './hooks/useChatStream';
37
+ export type { UseChatStreamOptions, UseChatStreamReturn } from './hooks/useChatStream';
36
38
  export { useWidgetEvents } from './hooks/useWidgetEvents';
37
39
  export type { UseWidgetEventsReturn } from './hooks/useWidgetEvents';
38
40
  export { useSessionHistory } from './hooks/useSessionHistory';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}