@ekairos/story-react 1.21.56-beta.0

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/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # @ekairos/story-react
2
+
3
+ React primitives for Ekairos **Story** UIs.
4
+
5
+ This package ships the core client hook: **`useStory()`**.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pnpm add @ekairos/story-react
11
+ ```
12
+
13
+ ## What `useStory` does
14
+
15
+ - **Timeline DX**: merges **persisted events** (InstantDB) + **optimistic user events** + **streaming assistant overlay**
16
+ - **Streaming**: consumes `ai` UIMessage stream (SSE) and updates the timeline live
17
+ - **Resumable streams (optional)**: stores `runId` + `chunkIndex` in `localStorage` and can resume with GET `?runId=...&startIndex=...`
18
+
19
+ ## Usage
20
+
21
+ ```tsx
22
+ "use client";
23
+
24
+ import { useStory } from "@ekairos/story-react";
25
+
26
+ export function MyStoryUI({ db, apiUrl, contextId }: { db: any; apiUrl: string; contextId?: string }) {
27
+ const story = useStory(db, {
28
+ apiUrl,
29
+ initialContextId: contextId,
30
+ enableResumableStreams: true,
31
+ onContextUpdate: (id) => console.log("contextId:", id),
32
+ });
33
+
34
+ return (
35
+ <div>
36
+ <pre>status: {story.contextStatus}</pre>
37
+ <button
38
+ disabled={story.sendStatus === "submitting"}
39
+ onClick={() => story.append({ parts: [{ type: "text", text: "Hola" }] })}
40
+ >
41
+ Send
42
+ </button>
43
+ <pre>{JSON.stringify(story.events, null, 2)}</pre>
44
+ </div>
45
+ );
46
+ }
47
+ ```
48
+
49
+ ## Default InstantDB queries (overrideable)
50
+
51
+ By default, `useStory` expects these namespaces:
52
+
53
+ - `context_contexts` (by `id`)
54
+ - `context_events` (by `context.id`, ordered by `createdAt: "asc"`)
55
+
56
+ If your schema differs, pass overrides (they MUST be hooks):
57
+
58
+ ```ts
59
+ useStory(db, {
60
+ apiUrl,
61
+ context: (db, { contextId }) => {
62
+ const res = db.useQuery(/* your query */);
63
+ return { context: res.data?...., contextStatus: "open" };
64
+ },
65
+ events: (db, { contextId }) => {
66
+ const res = db.useQuery(/* your query */);
67
+ return { events: res.data?.... ?? [] };
68
+ },
69
+ });
70
+ ```
71
+
72
+ ## API contract (server)
73
+
74
+ `useStory` sends:
75
+
76
+ - `POST apiUrl` with JSON `{ messages: [uiMessage], webSearch, reasoningLevel, contextId }`
77
+ - `GET apiUrl?runId=...&startIndex=...` (only if `enableResumableStreams` is enabled)
78
+
79
+ The server must respond with an `ai` SSE stream (`createUIMessageStreamResponse`).
80
+
@@ -0,0 +1,3 @@
1
+ export * from "./types";
2
+ export * from "./useStory";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./useStory"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,6CAA2B"}
@@ -0,0 +1,59 @@
1
+ export type ContextStatus = "open" | "streaming" | "closed";
2
+ export type SendStatus = "idle" | "submitting" | "error";
3
+ export type ReasoningLevel = "off" | "low" | "medium" | "high";
4
+ export declare const USER_MESSAGE_TYPE = "user.message";
5
+ export declare const ASSISTANT_MESSAGE_TYPE = "assistant.message";
6
+ export type ContextEventForUI = {
7
+ id: string;
8
+ type: string;
9
+ channel: string;
10
+ createdAt: string | Date;
11
+ content: {
12
+ parts: any[];
13
+ };
14
+ status?: string;
15
+ emails?: unknown[];
16
+ whatsappMessages?: unknown[];
17
+ };
18
+ export type AppendArgs = {
19
+ parts: any[];
20
+ webSearch?: boolean;
21
+ reasoningLevel?: ReasoningLevel;
22
+ };
23
+ export type StoryValue = {
24
+ apiUrl: string;
25
+ contextId: string | null;
26
+ contextStatus: ContextStatus;
27
+ turnSubstateKey: string | null;
28
+ events: ContextEventForUI[];
29
+ sendStatus: SendStatus;
30
+ sendError: string | null;
31
+ stop: () => void;
32
+ append: (args: AppendArgs) => Promise<void>;
33
+ };
34
+ export type UseStoryArgs = {
35
+ contextId: string | null;
36
+ };
37
+ export type UseStoryContextHook = (db: any, args: UseStoryArgs) => {
38
+ context: any | null;
39
+ contextStatus: ContextStatus;
40
+ };
41
+ export type UseStoryEventsHook = (db: any, args: UseStoryArgs) => {
42
+ events: ContextEventForUI[];
43
+ };
44
+ export type UseStoryOptions = {
45
+ apiUrl: string;
46
+ initialContextId?: string;
47
+ onContextUpdate?: (contextId: string) => void;
48
+ enableResumableStreams?: boolean;
49
+ /**
50
+ * Optional hook overrides. These MUST be hooks (they call db.useQuery).
51
+ *
52
+ * If omitted, defaults are used:
53
+ * - context(): fetches `context_contexts` by id
54
+ * - events(): fetches `context_events` by context id (no emails/whatsapp relations)
55
+ */
56
+ context?: UseStoryContextHook;
57
+ events?: UseStoryEventsHook;
58
+ };
59
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAC5D,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/D,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE;QAAE,KAAK,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IAGf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAG/B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAG5B,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAChC,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,YAAY,KACf;IACH,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAC/B,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,YAAY,KACf;IACH,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ASSISTANT_MESSAGE_TYPE = exports.USER_MESSAGE_TYPE = void 0;
4
+ exports.USER_MESSAGE_TYPE = "user.message";
5
+ exports.ASSISTANT_MESSAGE_TYPE = "assistant.message";
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAKa,QAAA,iBAAiB,GAAG,cAAc,CAAC;AACnC,QAAA,sBAAsB,GAAG,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type StoryValue, type UseStoryOptions } from "./types";
2
+ export declare function useStory(db: any, opts: UseStoryOptions): StoryValue;
3
+ //# sourceMappingURL=useStory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStory.d.ts","sourceRoot":"","sources":["../src/useStory.ts"],"names":[],"mappings":"AAMA,OAAO,EAOL,KAAK,UAAU,EAGf,KAAK,eAAe,EACrB,MAAM,SAAS,CAAC;AA6LjB,wBAAgB,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,UAAU,CA2uBnE"}
@@ -0,0 +1,814 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useStory = useStory;
5
+ const react_1 = require("react");
6
+ const react_2 = require("@instantdb/react");
7
+ const partial_json_1 = require("partial-json");
8
+ const types_1 = require("./types");
9
+ function makeStorageKey(apiUrl) {
10
+ const prefix = `ekairos-story:context:${apiUrl}`;
11
+ return function keyFor(kind, contextId) {
12
+ return `${prefix}:${kind}:${contextId || "active"}`;
13
+ };
14
+ }
15
+ function mergeEvents(params) {
16
+ const persisted = params.persisted;
17
+ const byId = new Map();
18
+ for (const ev of persisted)
19
+ byId.set(String(ev?.id), ev);
20
+ const merged = [...persisted];
21
+ // 1) Optimistic user events — only for the active context; hide once persisted exists
22
+ for (const ev of params.optimistic) {
23
+ const belongsToActive = String(ev.__contextId) === String(params.currentContextId) ||
24
+ (ev.__contextId == null && params.currentContextId != null);
25
+ if (!belongsToActive)
26
+ continue;
27
+ const id = String(ev?.id);
28
+ if (!id)
29
+ continue;
30
+ if (byId.has(id))
31
+ continue;
32
+ merged.push(ev);
33
+ }
34
+ // 2) Streaming assistant overlay — only for the active context
35
+ const streaming = params.streamingAssistant;
36
+ const streamingBelongsToActive = streaming &&
37
+ (String(streaming.__contextId) === String(params.currentContextId) ||
38
+ (streaming.__contextId == null && params.currentContextId != null));
39
+ if (streaming && streamingBelongsToActive) {
40
+ const sid = String(streaming.id);
41
+ const persistedEvent = byId.get(sid);
42
+ if (!persistedEvent) {
43
+ merged.push(streaming);
44
+ }
45
+ else {
46
+ const status = persistedEvent?.status;
47
+ const shouldOverlay = status !== "completed";
48
+ if (shouldOverlay) {
49
+ const mergedParts = Array.isArray(persistedEvent.content?.parts)
50
+ ? [...persistedEvent.content.parts]
51
+ : [];
52
+ const streamingParts = Array.isArray(streaming.content?.parts)
53
+ ? streaming.content.parts
54
+ : [];
55
+ const streamingText = streamingParts.find((p) => p?.type === "text");
56
+ if (streamingText && typeof streamingText.text === "string") {
57
+ const persistedTextIdx = mergedParts.findIndex((p) => p?.type === "text");
58
+ if (persistedTextIdx === -1) {
59
+ mergedParts.push({ type: "text", text: streamingText.text });
60
+ }
61
+ else {
62
+ const persistedText = mergedParts[persistedTextIdx];
63
+ const persistedStr = persistedText && typeof persistedText.text === "string"
64
+ ? persistedText.text
65
+ : "";
66
+ if (streamingText.text.length >= persistedStr.length) {
67
+ mergedParts[persistedTextIdx] = {
68
+ ...persistedText,
69
+ type: "text",
70
+ text: streamingText.text,
71
+ };
72
+ }
73
+ }
74
+ }
75
+ const streamingReasoning = streamingParts.find((p) => p?.type === "reasoning");
76
+ if (streamingReasoning && typeof streamingReasoning.text === "string") {
77
+ const persistedReasonIdx = mergedParts.findIndex((p) => p?.type === "reasoning");
78
+ if (persistedReasonIdx === -1) {
79
+ mergedParts.unshift({ type: "reasoning", text: streamingReasoning.text });
80
+ }
81
+ else {
82
+ const persistedReason = mergedParts[persistedReasonIdx];
83
+ const persistedStr = persistedReason && typeof persistedReason.text === "string"
84
+ ? persistedReason.text
85
+ : "";
86
+ if (streamingReasoning.text.length >= persistedStr.length) {
87
+ mergedParts[persistedReasonIdx] = {
88
+ ...persistedReason,
89
+ type: "reasoning",
90
+ text: streamingReasoning.text,
91
+ };
92
+ }
93
+ }
94
+ }
95
+ const existingSourceUrls = new Set(mergedParts
96
+ .filter((p) => p?.type === "source-url" && typeof p?.url === "string")
97
+ .map((p) => String(p.url)));
98
+ for (const sp of streamingParts) {
99
+ if (sp?.type !== "source-url" || typeof sp?.url !== "string")
100
+ continue;
101
+ const url = String(sp.url);
102
+ if (existingSourceUrls.has(url))
103
+ continue;
104
+ mergedParts.push(sp);
105
+ existingSourceUrls.add(url);
106
+ }
107
+ const mergedEvent = {
108
+ ...persistedEvent,
109
+ content: { ...persistedEvent.content, parts: mergedParts },
110
+ };
111
+ const idx = merged.findIndex((m) => String(m?.id) === sid);
112
+ if (idx >= 0)
113
+ merged[idx] = mergedEvent;
114
+ }
115
+ }
116
+ }
117
+ return merged;
118
+ }
119
+ const useDefaultContext = (db, { contextId }) => {
120
+ const contextRes = db.useQuery((contextId
121
+ ? {
122
+ context_contexts: {
123
+ $: { where: { id: contextId }, limit: 1 },
124
+ },
125
+ }
126
+ : null));
127
+ const ctx = contextRes?.data?.context_contexts?.[0] ?? null;
128
+ const contextStatus = (ctx?.status || "open");
129
+ return { context: ctx, contextStatus };
130
+ };
131
+ const useDefaultEvents = (db, { contextId }) => {
132
+ const eventsRes = db.useQuery((contextId
133
+ ? {
134
+ context_events: {
135
+ $: {
136
+ where: { "context.id": contextId },
137
+ order: { createdAt: "asc" },
138
+ },
139
+ },
140
+ }
141
+ : null));
142
+ const raw = eventsRes?.data?.context_events ?? [];
143
+ return { events: Array.isArray(raw) ? raw : [] };
144
+ };
145
+ function useStory(db, opts) {
146
+ const { apiUrl, initialContextId, onContextUpdate, enableResumableStreams = false, context: useContextImpl = useDefaultContext, events: useEventsImpl = useDefaultEvents, } = opts;
147
+ const [contextId, setContextId] = (0, react_1.useState)(initialContextId || null);
148
+ const [turnSubstateKey, setTurnSubstateKey] = (0, react_1.useState)(null);
149
+ const [sendStatus, setSendStatus] = (0, react_1.useState)("idle");
150
+ const [sendError, setSendError] = (0, react_1.useState)(null);
151
+ const abortRef = (0, react_1.useRef)(null);
152
+ const [optimisticEvents, setOptimisticEvents] = (0, react_1.useState)([]);
153
+ const [streamingAssistantEvent, setStreamingAssistantEvent] = (0, react_1.useState)(null);
154
+ const streamingRef = (0, react_1.useRef)({
155
+ contextId: initialContextId || null,
156
+ messageId: null,
157
+ text: "",
158
+ reasoning: "",
159
+ sources: [],
160
+ toolCalls: {},
161
+ });
162
+ (0, react_1.useEffect)(() => {
163
+ setContextId(initialContextId || null);
164
+ }, [initialContextId]);
165
+ (0, react_1.useEffect)(() => {
166
+ streamingRef.current.contextId = contextId;
167
+ }, [contextId]);
168
+ const handleContextUpdate = (0, react_1.useCallback)((nextId) => {
169
+ setContextId(nextId);
170
+ onContextUpdate?.(nextId);
171
+ }, [onContextUpdate]);
172
+ // IMPORTANT: Both overrides are hooks (they call db.useQuery). We invoke them deterministically.
173
+ const { contextStatus } = useContextImpl(db, { contextId });
174
+ const { events: persistedEventsUnsorted } = useEventsImpl(db, { contextId });
175
+ // PERF: sorting and merging can be O(n log n) / O(n) with allocations.
176
+ // We use useMemo to avoid recomputing on unrelated renders (e.g., prompt input changes).
177
+ // Correctness does NOT depend on memoization (React may discard memoized values).
178
+ const persistedEvents = (0, react_1.useMemo)(() => {
179
+ const events = Array.isArray(persistedEventsUnsorted)
180
+ ? persistedEventsUnsorted
181
+ : [];
182
+ const parseTs = (raw) => {
183
+ if (raw instanceof Date)
184
+ return raw.getTime();
185
+ if (typeof raw === "number" && Number.isFinite(raw))
186
+ return raw;
187
+ if (typeof raw === "string") {
188
+ const n = new Date(raw).getTime();
189
+ return Number.isFinite(n) ? n : 0;
190
+ }
191
+ return 0;
192
+ };
193
+ return events
194
+ .slice()
195
+ .sort((a, b) => {
196
+ const aMs = parseTs(a?.createdAt);
197
+ const bMs = parseTs(b?.createdAt);
198
+ if (aMs !== bMs)
199
+ return aMs - bMs;
200
+ return String(a?.id).localeCompare(String(b?.id));
201
+ });
202
+ }, [persistedEventsUnsorted]);
203
+ const mergedEvents = (0, react_1.useMemo)(() => mergeEvents({
204
+ persisted: persistedEvents,
205
+ optimistic: optimisticEvents,
206
+ streamingAssistant: streamingAssistantEvent,
207
+ currentContextId: contextId,
208
+ }), [contextId, optimisticEvents, persistedEvents, streamingAssistantEvent]);
209
+ const keyFor = (0, react_1.useMemo)(() => makeStorageKey(apiUrl), [apiUrl]);
210
+ const assistantMessageIdKeyFor = (0, react_1.useCallback)((ctx) => keyFor("assistant-message-id", ctx), [keyFor]);
211
+ const runIdKeyFor = (0, react_1.useCallback)((ctx) => keyFor("run-id", ctx), [keyFor]);
212
+ const chunkIndexKeyFor = (0, react_1.useCallback)((ctx) => keyFor("chunk-index", ctx), [keyFor]);
213
+ const readChunkIndex = (0, react_1.useCallback)((ctx) => {
214
+ if (typeof window === "undefined")
215
+ return -1;
216
+ const raw = window.localStorage.getItem(chunkIndexKeyFor(ctx)) ??
217
+ window.localStorage.getItem(chunkIndexKeyFor("active"));
218
+ const n = raw ? parseInt(raw, 10) : -1;
219
+ return Number.isFinite(n) ? n : -1;
220
+ }, [chunkIndexKeyFor]);
221
+ const writeChunkIndex = (0, react_1.useCallback)((ctx, idx) => {
222
+ if (typeof window === "undefined")
223
+ return;
224
+ try {
225
+ window.localStorage.setItem(chunkIndexKeyFor("active"), String(idx));
226
+ if (ctx)
227
+ window.localStorage.setItem(chunkIndexKeyFor(ctx), String(idx));
228
+ }
229
+ catch {
230
+ // ignore
231
+ }
232
+ }, [chunkIndexKeyFor]);
233
+ const stop = (0, react_1.useCallback)(() => {
234
+ try {
235
+ abortRef.current?.abort();
236
+ }
237
+ catch {
238
+ // ignore
239
+ }
240
+ abortRef.current = null;
241
+ setSendStatus("idle");
242
+ }, []);
243
+ const readSseAndCaptureContext = (0, react_1.useCallback)(async (res, opts) => {
244
+ const body = res.body;
245
+ if (!body)
246
+ return;
247
+ const decoder = new TextDecoder();
248
+ const reader = body.getReader();
249
+ let buffer = "";
250
+ let shouldStop = false;
251
+ let currentCtx = contextId;
252
+ let idx = typeof opts?.startIndex === "number"
253
+ ? opts.startIndex - 1
254
+ : readChunkIndex(currentCtx);
255
+ const buildStreamingAssistantEvent = (assistantMessageId, ctx) => {
256
+ const acc = streamingRef.current;
257
+ const parts = [];
258
+ if (acc.reasoning && acc.reasoning.trim().length > 0) {
259
+ parts.push({ type: "reasoning", text: acc.reasoning });
260
+ }
261
+ if (acc.text && acc.text.length > 0) {
262
+ parts.push({ type: "text", text: acc.text });
263
+ }
264
+ for (const s of acc.sources) {
265
+ parts.push({
266
+ type: "source-url",
267
+ sourceId: s.sourceId,
268
+ url: s.url,
269
+ ...(s.title ? { title: s.title } : {}),
270
+ });
271
+ }
272
+ // Tool input/output streaming (best-effort).
273
+ // We materialize these as `tool-*` parts so Agent rendering can show them,
274
+ // and so `createMessage` can render as a message while its args stream in.
275
+ for (const tc of Object.values(acc.toolCalls || {})) {
276
+ parts.push({
277
+ type: `tool-${tc.toolName}`,
278
+ toolCallId: tc.toolCallId,
279
+ input: tc.input,
280
+ // some tool renderers also look at `args`
281
+ args: tc.input,
282
+ output: tc.output,
283
+ errorText: tc.errorText,
284
+ state: tc.state,
285
+ inputText: tc.inputText,
286
+ });
287
+ }
288
+ return {
289
+ __contextId: ctx,
290
+ id: assistantMessageId,
291
+ type: types_1.ASSISTANT_MESSAGE_TYPE,
292
+ channel: "web",
293
+ createdAt: new Date().toISOString(),
294
+ content: { parts },
295
+ };
296
+ };
297
+ const getActiveAssistantMessageId = () => {
298
+ const current = streamingRef.current.messageId;
299
+ if (current)
300
+ return current;
301
+ if (!enableResumableStreams)
302
+ return null;
303
+ if (typeof window === "undefined")
304
+ return null;
305
+ try {
306
+ const stored = window.localStorage.getItem(assistantMessageIdKeyFor(currentCtx)) ??
307
+ window.localStorage.getItem(assistantMessageIdKeyFor("active"));
308
+ if (stored && stored.length > 0) {
309
+ streamingRef.current.messageId = stored;
310
+ return stored;
311
+ }
312
+ }
313
+ catch {
314
+ // ignore
315
+ }
316
+ return null;
317
+ };
318
+ const setActiveAssistantMessageId = (assistantMessageId) => {
319
+ if (!assistantMessageId)
320
+ return;
321
+ if (streamingRef.current.messageId !== assistantMessageId) {
322
+ streamingRef.current = {
323
+ contextId: streamingRef.current.contextId,
324
+ messageId: assistantMessageId,
325
+ text: "",
326
+ reasoning: "",
327
+ sources: [],
328
+ toolCalls: {},
329
+ };
330
+ }
331
+ if (enableResumableStreams && typeof window !== "undefined") {
332
+ try {
333
+ window.localStorage.setItem(assistantMessageIdKeyFor("active"), assistantMessageId);
334
+ if (currentCtx) {
335
+ window.localStorage.setItem(assistantMessageIdKeyFor(currentCtx), assistantMessageId);
336
+ }
337
+ }
338
+ catch {
339
+ // ignore
340
+ }
341
+ }
342
+ };
343
+ const setActiveContextForEphemeral = (cid) => {
344
+ streamingRef.current.contextId = cid;
345
+ setOptimisticEvents((prev) => prev.map((ev) => (ev.__contextId === null ? { ...ev, __contextId: cid } : ev)));
346
+ setStreamingAssistantEvent((prev) => prev && prev.__contextId === null ? { ...prev, __contextId: cid } : prev);
347
+ };
348
+ const processLine = (line) => {
349
+ const trimmed = line.trim();
350
+ if (!trimmed.startsWith("data:"))
351
+ return;
352
+ const payload = trimmed.slice("data:".length).trim();
353
+ if (!payload)
354
+ return;
355
+ if (payload === "[DONE]") {
356
+ // The AI stream signaled completion; don't wait for the server to close the socket.
357
+ shouldStop = true;
358
+ return;
359
+ }
360
+ try {
361
+ const parsed = JSON.parse(payload);
362
+ // Workflow durable streams may serialize chunks in a compact "table" form:
363
+ // [ { type: 1, ... }, "finish", ... ]
364
+ // where numeric values point into the surrounding array.
365
+ // Normalize those payloads back into the plain `{ type: "..." }` object shape
366
+ // expected by the rest of this parser.
367
+ const normalizeChunk = (value) => {
368
+ // Sometimes the chunk may be a string with a leading NUL marker.
369
+ if (typeof value === "string" && value.startsWith("\u0000[")) {
370
+ try {
371
+ value = JSON.parse(value.slice(1));
372
+ }
373
+ catch {
374
+ // ignore
375
+ }
376
+ }
377
+ if (!Array.isArray(value))
378
+ return value;
379
+ const table = value;
380
+ const root = table[0];
381
+ if (!root || typeof root !== "object" || Array.isArray(root))
382
+ return value;
383
+ const decodeNode = (node) => {
384
+ if (typeof node === "number" && Number.isInteger(node)) {
385
+ if (node >= 0 && node < table.length)
386
+ return decodeNode(table[node]);
387
+ return node;
388
+ }
389
+ if (!node || typeof node !== "object")
390
+ return node;
391
+ if (Array.isArray(node))
392
+ return node.map(decodeNode);
393
+ const out = {};
394
+ for (const [k, v] of Object.entries(node)) {
395
+ out[k] = decodeNode(v);
396
+ }
397
+ return out;
398
+ };
399
+ return decodeNode(root);
400
+ };
401
+ const obj = normalizeChunk(parsed);
402
+ if (!obj || typeof obj !== "object" || Array.isArray(obj))
403
+ return;
404
+ // Track chunk index for resumable streams
405
+ idx += 1;
406
+ if (enableResumableStreams)
407
+ writeChunkIndex(currentCtx, idx);
408
+ // Capture assistant message id (eventId) for local streaming UX
409
+ if (obj.type === "start" ||
410
+ obj.type === "finish" ||
411
+ obj.type === "message-metadata") {
412
+ const mid = typeof obj.messageId === "string" ? obj.messageId : null;
413
+ const meta = obj.messageMetadata;
414
+ const metaEventId = meta &&
415
+ typeof meta === "object" &&
416
+ typeof meta.eventId === "string"
417
+ ? String(meta.eventId)
418
+ : null;
419
+ const nextAssistantMessageId = metaEventId || mid;
420
+ if (typeof nextAssistantMessageId === "string") {
421
+ setActiveAssistantMessageId(nextAssistantMessageId);
422
+ }
423
+ }
424
+ // Streaming text/reasoning/sources
425
+ if (obj.type === "text-delta" && typeof obj.delta === "string") {
426
+ const assistantId = getActiveAssistantMessageId();
427
+ if (assistantId) {
428
+ streamingRef.current.text += obj.delta;
429
+ setStreamingAssistantEvent(buildStreamingAssistantEvent(assistantId, streamingRef.current.contextId));
430
+ }
431
+ }
432
+ if (obj.type === "reasoning-delta" && typeof obj.delta === "string") {
433
+ const assistantId = getActiveAssistantMessageId();
434
+ if (assistantId) {
435
+ streamingRef.current.reasoning += obj.delta;
436
+ setStreamingAssistantEvent(buildStreamingAssistantEvent(assistantId, streamingRef.current.contextId));
437
+ }
438
+ }
439
+ if (obj.type === "source-url" && typeof obj.url === "string") {
440
+ const assistantId = getActiveAssistantMessageId();
441
+ if (assistantId) {
442
+ const url = String(obj.url);
443
+ const exists = streamingRef.current.sources.some((s) => s.url === url);
444
+ if (!exists) {
445
+ streamingRef.current.sources.push({
446
+ sourceId: typeof obj.sourceId === "string" ? String(obj.sourceId) : url,
447
+ url,
448
+ ...(typeof obj.title === "string" ? { title: obj.title } : {}),
449
+ });
450
+ }
451
+ setStreamingAssistantEvent(buildStreamingAssistantEvent(assistantId, streamingRef.current.contextId));
452
+ }
453
+ }
454
+ // Tool argument streaming (AI SDK emits tool-input-* chunks when the model is "calling" a tool).
455
+ // This is what we need to show progressive output when the model uses tools instead of `text-delta`.
456
+ if (obj.type === "tool-input-start") {
457
+ const toolCallId = typeof obj.toolCallId === "string" ? obj.toolCallId : "";
458
+ const toolName = typeof obj.toolName === "string" ? obj.toolName : "";
459
+ if (toolCallId && toolName) {
460
+ streamingRef.current.toolCalls[toolCallId] = {
461
+ toolCallId,
462
+ toolName,
463
+ inputText: "",
464
+ state: "input-streaming",
465
+ };
466
+ }
467
+ }
468
+ if (obj.type === "tool-input-delta") {
469
+ const toolCallId = typeof obj.toolCallId === "string" ? obj.toolCallId : "";
470
+ const delta = typeof obj.inputTextDelta === "string" ? obj.inputTextDelta : "";
471
+ const existing = toolCallId ? streamingRef.current.toolCalls[toolCallId] : null;
472
+ if (existing && delta) {
473
+ existing.inputText += delta;
474
+ // Best-effort partial JSON parsing for streaming tool args.
475
+ // (User asked explicitly to use a library for this.)
476
+ try {
477
+ const parsedInput = (0, partial_json_1.parse)(existing.inputText, partial_json_1.Allow.OBJ |
478
+ partial_json_1.Allow.ARR |
479
+ partial_json_1.Allow.STR |
480
+ partial_json_1.Allow.NUM |
481
+ partial_json_1.Allow.BOOL |
482
+ partial_json_1.Allow.NULL);
483
+ existing.input = parsedInput;
484
+ }
485
+ catch {
486
+ // Keep raw text until we can parse.
487
+ existing.input = existing.inputText;
488
+ }
489
+ const assistantId = getActiveAssistantMessageId();
490
+ if (assistantId) {
491
+ setStreamingAssistantEvent(buildStreamingAssistantEvent(assistantId, streamingRef.current.contextId));
492
+ }
493
+ }
494
+ }
495
+ if (obj.type === "tool-input-available") {
496
+ const toolCallId = typeof obj.toolCallId === "string" ? obj.toolCallId : "";
497
+ const toolName = typeof obj.toolName === "string" ? obj.toolName : "";
498
+ if (toolCallId && toolName) {
499
+ const entry = streamingRef.current.toolCalls[toolCallId] ??
500
+ (streamingRef.current.toolCalls[toolCallId] = {
501
+ toolCallId,
502
+ toolName,
503
+ inputText: "",
504
+ });
505
+ entry.toolName = toolName;
506
+ entry.input = obj.input;
507
+ entry.state = "input-available";
508
+ try {
509
+ entry.inputText =
510
+ entry.inputText || (obj.input ? JSON.stringify(obj.input) : "");
511
+ }
512
+ catch {
513
+ // ignore
514
+ }
515
+ const assistantId = getActiveAssistantMessageId();
516
+ if (assistantId) {
517
+ setStreamingAssistantEvent(buildStreamingAssistantEvent(assistantId, streamingRef.current.contextId));
518
+ }
519
+ }
520
+ }
521
+ if (obj.type === "tool-output-available") {
522
+ const toolCallId = typeof obj.toolCallId === "string" ? obj.toolCallId : "";
523
+ const existing = toolCallId ? streamingRef.current.toolCalls[toolCallId] : null;
524
+ if (existing) {
525
+ existing.output = obj.output;
526
+ existing.state = "output-available";
527
+ const assistantId = getActiveAssistantMessageId();
528
+ if (assistantId) {
529
+ setStreamingAssistantEvent(buildStreamingAssistantEvent(assistantId, streamingRef.current.contextId));
530
+ }
531
+ }
532
+ }
533
+ if (obj.type === "tool-output-error") {
534
+ const toolCallId = typeof obj.toolCallId === "string" ? obj.toolCallId : "";
535
+ const existing = toolCallId ? streamingRef.current.toolCalls[toolCallId] : null;
536
+ if (existing) {
537
+ existing.errorText =
538
+ typeof obj.errorText === "string" ? obj.errorText : "Tool error";
539
+ existing.state = "output-error";
540
+ const assistantId = getActiveAssistantMessageId();
541
+ if (assistantId) {
542
+ setStreamingAssistantEvent(buildStreamingAssistantEvent(assistantId, streamingRef.current.contextId));
543
+ }
544
+ }
545
+ }
546
+ if (obj.type === "error" && typeof obj.errorText === "string") {
547
+ setSendStatus("error");
548
+ setSendError(String(obj.errorText));
549
+ }
550
+ // Finish chunk clears resumable state
551
+ if ((obj.type === "finish" || obj.type === "finish-step") &&
552
+ enableResumableStreams &&
553
+ typeof window !== "undefined") {
554
+ try {
555
+ window.localStorage.removeItem(runIdKeyFor("active"));
556
+ window.localStorage.removeItem(chunkIndexKeyFor("active"));
557
+ window.localStorage.removeItem(assistantMessageIdKeyFor("active"));
558
+ if (currentCtx) {
559
+ window.localStorage.removeItem(runIdKeyFor(currentCtx));
560
+ window.localStorage.removeItem(chunkIndexKeyFor(currentCtx));
561
+ window.localStorage.removeItem(assistantMessageIdKeyFor(currentCtx));
562
+ }
563
+ }
564
+ catch {
565
+ // ignore
566
+ }
567
+ }
568
+ if (obj.type === "finish" || obj.type === "finish-step") {
569
+ // The stream is logically complete; stop reading so UI can exit "submitting/streaming".
570
+ shouldStop = true;
571
+ }
572
+ if (obj.type === "data-context-id") {
573
+ const cid = obj?.data?.contextId;
574
+ if (typeof cid === "string" && cid.length > 0) {
575
+ setActiveContextForEphemeral(cid);
576
+ handleContextUpdate(cid);
577
+ if (enableResumableStreams && typeof window !== "undefined") {
578
+ try {
579
+ const activeRunId = window.localStorage.getItem(runIdKeyFor("active"));
580
+ if (activeRunId)
581
+ window.localStorage.setItem(runIdKeyFor(cid), activeRunId);
582
+ const activeChunk = window.localStorage.getItem(chunkIndexKeyFor("active"));
583
+ if (activeChunk)
584
+ window.localStorage.setItem(chunkIndexKeyFor(cid), activeChunk);
585
+ const activeAssistantId = window.localStorage.getItem(assistantMessageIdKeyFor("active"));
586
+ if (activeAssistantId)
587
+ window.localStorage.setItem(assistantMessageIdKeyFor(cid), activeAssistantId);
588
+ }
589
+ catch {
590
+ // ignore
591
+ }
592
+ }
593
+ currentCtx = cid;
594
+ }
595
+ }
596
+ if (obj.type === "data-context-substate") {
597
+ const key = obj?.data?.key;
598
+ setTurnSubstateKey(typeof key === "string" ? key : null);
599
+ }
600
+ }
601
+ catch {
602
+ // ignore
603
+ }
604
+ };
605
+ const splitLines = (rawEvent) => rawEvent.split(/\r?\n/);
606
+ const findSeparator = (s) => {
607
+ const a = s.indexOf("\n\n");
608
+ const b = s.indexOf("\r\n\r\n");
609
+ if (a === -1 && b === -1)
610
+ return null;
611
+ if (a === -1)
612
+ return { idx: b, len: 4 };
613
+ if (b === -1)
614
+ return { idx: a, len: 2 };
615
+ return a < b ? { idx: a, len: 2 } : { idx: b, len: 4 };
616
+ };
617
+ while (true) {
618
+ const { done, value } = await reader.read();
619
+ if (done)
620
+ break;
621
+ buffer += decoder.decode(value, { stream: true });
622
+ while (true) {
623
+ const sep = findSeparator(buffer);
624
+ if (!sep)
625
+ break;
626
+ const event = buffer.slice(0, sep.idx);
627
+ buffer = buffer.slice(sep.idx + sep.len);
628
+ for (const line of splitLines(event))
629
+ processLine(line);
630
+ if (shouldStop)
631
+ break;
632
+ }
633
+ if (shouldStop) {
634
+ try {
635
+ await reader.cancel();
636
+ }
637
+ catch {
638
+ // ignore
639
+ }
640
+ break;
641
+ }
642
+ }
643
+ // If the underlying stream ends without a final separator, still process
644
+ // any buffered lines so we can observe `finish` or `[DONE]`.
645
+ if (!shouldStop && buffer.length > 0) {
646
+ for (const line of splitLines(buffer))
647
+ processLine(line);
648
+ }
649
+ }, [
650
+ assistantMessageIdKeyFor,
651
+ chunkIndexKeyFor,
652
+ contextId,
653
+ enableResumableStreams,
654
+ handleContextUpdate,
655
+ readChunkIndex,
656
+ runIdKeyFor,
657
+ writeChunkIndex,
658
+ ]);
659
+ const append = (0, react_1.useCallback)(async ({ parts, webSearch = false, reasoningLevel = "low" }) => {
660
+ if (!Array.isArray(parts) || parts.length === 0)
661
+ return;
662
+ // Abort previous if any
663
+ if (abortRef.current) {
664
+ try {
665
+ abortRef.current.abort();
666
+ }
667
+ catch {
668
+ // ignore
669
+ }
670
+ }
671
+ const controller = new AbortController();
672
+ abortRef.current = controller;
673
+ setSendError(null);
674
+ setSendStatus("submitting");
675
+ const messageId = (0, react_2.id)(); // UUID (Instant)
676
+ // Optimistic event for UI timeline (context may be null until backend emits it)
677
+ const optimisticEvent = {
678
+ __contextId: contextId,
679
+ id: messageId,
680
+ type: types_1.USER_MESSAGE_TYPE,
681
+ channel: "web",
682
+ createdAt: new Date().toISOString(),
683
+ content: { parts },
684
+ };
685
+ setOptimisticEvents((prev) => [...prev, optimisticEvent]);
686
+ // Backend expects UIMessage[] (it will derive ContextEvent from last message.parts)
687
+ const uiMessage = {
688
+ id: messageId,
689
+ role: "user",
690
+ parts,
691
+ metadata: { eventId: messageId, clientCreatedAt: Date.now() },
692
+ };
693
+ try {
694
+ const res = await fetch(apiUrl, {
695
+ method: "POST",
696
+ credentials: "include",
697
+ headers: { "Content-Type": "application/json" },
698
+ body: JSON.stringify({
699
+ messages: [uiMessage],
700
+ webSearch,
701
+ reasoningLevel,
702
+ contextId: contextId || undefined,
703
+ }),
704
+ signal: controller.signal,
705
+ });
706
+ if (!res.ok) {
707
+ const txt = await res.text().catch(() => "");
708
+ setSendStatus("error");
709
+ setSendError(txt || `HTTP ${res.status}`);
710
+ return;
711
+ }
712
+ if (enableResumableStreams && typeof window !== "undefined") {
713
+ try {
714
+ const runId = res.headers.get("x-workflow-run-id");
715
+ if (runId) {
716
+ window.localStorage.setItem(runIdKeyFor("active"), runId);
717
+ if (contextId)
718
+ window.localStorage.setItem(runIdKeyFor(contextId), runId);
719
+ window.localStorage.setItem(chunkIndexKeyFor("active"), "-1");
720
+ if (contextId)
721
+ window.localStorage.setItem(chunkIndexKeyFor(contextId), "-1");
722
+ }
723
+ }
724
+ catch {
725
+ // ignore
726
+ }
727
+ }
728
+ await readSseAndCaptureContext(res, { startIndex: 0 });
729
+ setSendStatus("idle");
730
+ }
731
+ catch (e) {
732
+ if (e?.name === "AbortError") {
733
+ setSendStatus("idle");
734
+ return;
735
+ }
736
+ setSendStatus("error");
737
+ setSendError(String(e?.message || e || "Request failed"));
738
+ }
739
+ finally {
740
+ abortRef.current = null;
741
+ }
742
+ }, [
743
+ apiUrl,
744
+ chunkIndexKeyFor,
745
+ contextId,
746
+ enableResumableStreams,
747
+ readSseAndCaptureContext,
748
+ runIdKeyFor,
749
+ ]);
750
+ const resumeStreamIfNeeded = (0, react_1.useCallback)(async () => {
751
+ if (!enableResumableStreams)
752
+ return;
753
+ if (typeof window === "undefined")
754
+ return;
755
+ if (abortRef.current)
756
+ return;
757
+ const ctx = contextId;
758
+ const runId = window.localStorage.getItem(runIdKeyFor(ctx)) ??
759
+ window.localStorage.getItem(runIdKeyFor("active"));
760
+ if (!runId)
761
+ return;
762
+ const lastIdx = readChunkIndex(ctx);
763
+ const startIndex = lastIdx + 1;
764
+ const params = new URLSearchParams();
765
+ params.set("runId", runId);
766
+ if (Number.isFinite(startIndex) && startIndex > 0) {
767
+ params.set("startIndex", String(startIndex));
768
+ }
769
+ const controller = new AbortController();
770
+ abortRef.current = controller;
771
+ try {
772
+ const res = await fetch(`${apiUrl}?${params.toString()}`, {
773
+ method: "GET",
774
+ credentials: "include",
775
+ signal: controller.signal,
776
+ });
777
+ if (!res.ok)
778
+ return;
779
+ await readSseAndCaptureContext(res, { startIndex });
780
+ }
781
+ catch {
782
+ // ignore
783
+ }
784
+ finally {
785
+ abortRef.current = null;
786
+ }
787
+ }, [
788
+ apiUrl,
789
+ contextId,
790
+ enableResumableStreams,
791
+ readChunkIndex,
792
+ readSseAndCaptureContext,
793
+ runIdKeyFor,
794
+ ]);
795
+ (0, react_1.useEffect)(() => {
796
+ if (!enableResumableStreams)
797
+ return;
798
+ if (contextStatus !== "streaming")
799
+ return;
800
+ void resumeStreamIfNeeded();
801
+ }, [contextStatus, enableResumableStreams, resumeStreamIfNeeded]);
802
+ return {
803
+ apiUrl,
804
+ contextId,
805
+ contextStatus,
806
+ turnSubstateKey,
807
+ events: mergedEvents,
808
+ sendStatus,
809
+ sendError,
810
+ stop,
811
+ append,
812
+ };
813
+ }
814
+ //# sourceMappingURL=useStory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStory.js","sourceRoot":"","sources":["../src/useStory.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@ekairos/story-react",
3
+ "version": "1.21.56-beta.0",
4
+ "description": "Ekairos Story React - useStory hook",
5
+ "type": "commonjs",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "license": "MIT",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/pulz-ar/pulzar-lib-core.git",
18
+ "directory": "packages/story-react"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js",
24
+ "require": "./dist/index.js",
25
+ "default": "./dist/index.js"
26
+ }
27
+ },
28
+ "scripts": {
29
+ "build": "tsc -p tsconfig.json",
30
+ "dev": "tsc -p tsconfig.json --watch",
31
+ "clean": "node -e \"require('fs').rmSync('dist', {recursive:true, force:true})\"",
32
+ "typecheck": "tsc --noEmit"
33
+ },
34
+ "dependencies": {
35
+ "@instantdb/react": "latest",
36
+ "partial-json": "^0.1.7"
37
+ },
38
+ "peerDependencies": {
39
+ "react": ">=18"
40
+ },
41
+ "devDependencies": {
42
+ "@ekairos/tsconfig": "workspace:*",
43
+ "@types/node": "catalog:",
44
+ "@types/react": "^19.0.0",
45
+ "react": "^19.2.1",
46
+ "typescript": "catalog:"
47
+ }
48
+ }