@amodalai/react 0.1.26 → 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.
- package/dist/{event-bus-h26clqbZ.js → chat-api-CqMQa8r3.js} +85 -85
- package/dist/chat-api-CqMQa8r3.js.map +1 -0
- package/dist/client.js +2 -2
- package/dist/hooks/useAmodalChat.d.ts +2 -2
- package/dist/hooks/useAmodalChat.d.ts.map +1 -1
- package/dist/hooks/useChat.d.ts +2 -2
- package/dist/hooks/useChat.d.ts.map +1 -1
- package/dist/hooks/useChatStream.d.ts +47 -0
- package/dist/hooks/useChatStream.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/react.js +373 -638
- package/dist/react.js.map +1 -1
- package/dist/theme-C051UgQ1.js +801 -0
- package/dist/theme-C051UgQ1.js.map +1 -0
- package/dist/types.d.ts +19 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/widget.js +3 -3
- package/package.json +1 -1
- package/dist/event-bus-h26clqbZ.js.map +0 -1
- package/dist/theme-VAUsolBG.js +0 -693
- package/dist/theme-VAUsolBG.js.map +0 -1
|
@@ -69,75 +69,7 @@ async function* h(s) {
|
|
|
69
69
|
* Copyright 2025 Amodal Labs, Inc.
|
|
70
70
|
* SPDX-License-Identifier: MIT
|
|
71
71
|
*/
|
|
72
|
-
|
|
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
|
|
99
|
+
function S(s) {
|
|
168
100
|
const e = [];
|
|
169
|
-
return s.type === "widget_rendered" &&
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
285
|
-
|
|
286
|
-
|
|
284
|
+
w as T,
|
|
285
|
+
j as W,
|
|
286
|
+
x as a,
|
|
287
287
|
m as b,
|
|
288
|
-
|
|
289
|
-
|
|
288
|
+
k as c,
|
|
289
|
+
S as d,
|
|
290
290
|
I as e,
|
|
291
|
-
|
|
292
|
-
|
|
291
|
+
b as g,
|
|
292
|
+
_ as l,
|
|
293
293
|
l as p,
|
|
294
|
-
|
|
295
|
-
|
|
294
|
+
$ as s,
|
|
295
|
+
z as u
|
|
296
296
|
};
|
|
297
|
-
//# sourceMappingURL=
|
|
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 "./
|
|
5
|
-
import { c as A, g as T, l as B, p as H, u as P } from "./
|
|
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 {
|
|
2
|
-
export
|
|
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;
|
|
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"}
|
package/dist/hooks/useChat.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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;
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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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"}
|