@kairos-computer/core 0.1.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.
Files changed (61) hide show
  1. package/dist/agent.d.ts +27 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +53 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/cleanup.d.ts +24 -0
  6. package/dist/cleanup.d.ts.map +1 -0
  7. package/dist/cleanup.js +146 -0
  8. package/dist/cleanup.js.map +1 -0
  9. package/dist/convert.d.ts +31 -0
  10. package/dist/convert.d.ts.map +1 -0
  11. package/dist/convert.js +235 -0
  12. package/dist/convert.js.map +1 -0
  13. package/dist/errors.d.ts +33 -0
  14. package/dist/errors.d.ts.map +1 -0
  15. package/dist/errors.js +10 -0
  16. package/dist/errors.js.map +1 -0
  17. package/dist/index.d.ts +8 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +6 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/loop.d.ts +25 -0
  22. package/dist/loop.d.ts.map +1 -0
  23. package/dist/loop.js +407 -0
  24. package/dist/loop.js.map +1 -0
  25. package/dist/prompt.d.ts +10 -0
  26. package/dist/prompt.d.ts.map +1 -0
  27. package/dist/prompt.js +21 -0
  28. package/dist/prompt.js.map +1 -0
  29. package/dist/services/MessageQueue.d.ts +13 -0
  30. package/dist/services/MessageQueue.d.ts.map +1 -0
  31. package/dist/services/MessageQueue.js +8 -0
  32. package/dist/services/MessageQueue.js.map +1 -0
  33. package/dist/services/Persistence.d.ts +12 -0
  34. package/dist/services/Persistence.d.ts.map +1 -0
  35. package/dist/services/Persistence.js +8 -0
  36. package/dist/services/Persistence.js.map +1 -0
  37. package/dist/services/StopSignal.d.ts +12 -0
  38. package/dist/services/StopSignal.d.ts.map +1 -0
  39. package/dist/services/StopSignal.js +8 -0
  40. package/dist/services/StopSignal.js.map +1 -0
  41. package/dist/services/Streaming.d.ts +11 -0
  42. package/dist/services/Streaming.d.ts.map +1 -0
  43. package/dist/services/Streaming.js +7 -0
  44. package/dist/services/Streaming.js.map +1 -0
  45. package/dist/services/index.d.ts +5 -0
  46. package/dist/services/index.d.ts.map +1 -0
  47. package/dist/services/index.js +5 -0
  48. package/dist/services/index.js.map +1 -0
  49. package/dist/stream.d.ts +8 -0
  50. package/dist/stream.d.ts.map +1 -0
  51. package/dist/stream.js +36 -0
  52. package/dist/stream.js.map +1 -0
  53. package/dist/tools.d.ts +14 -0
  54. package/dist/tools.d.ts.map +1 -0
  55. package/dist/tools.js +60 -0
  56. package/dist/tools.js.map +1 -0
  57. package/dist/types.d.ts +112 -0
  58. package/dist/types.d.ts.map +1 -0
  59. package/dist/types.js +2 -0
  60. package/dist/types.js.map +1 -0
  61. package/package.json +38 -0
package/dist/loop.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import type { LanguageModelV3 } from "@ai-sdk/provider";
2
+ import type { ToolSet, UIMessage } from "ai";
3
+ import { Effect } from "effect";
4
+ import { ContextOverflowError, StreamError } from "./errors.js";
5
+ import { MessageQueue } from "./services/MessageQueue.js";
6
+ import { StopSignal } from "./services/StopSignal.js";
7
+ import { Streaming } from "./services/Streaming.js";
8
+ import type { AgentHooks, CallSettings, ExecuteToolsFn, LoopResult, PrepareStepFn } from "./types.js";
9
+ export interface LoopConfig {
10
+ model: LanguageModelV3;
11
+ /** Identifies the conversation. Included in every StreamChunk. */
12
+ conversationId: string;
13
+ /** Correlates streaming chunks with the persisted message. Auto-generated if omitted. */
14
+ responseId?: string;
15
+ system?: string;
16
+ tools?: ToolSet;
17
+ executeTools?: boolean | ExecuteToolsFn;
18
+ initialMessages: UIMessage[];
19
+ callSettings?: CallSettings;
20
+ prepareStep?: PrepareStepFn;
21
+ onContextOverflow?: (messages: UIMessage[]) => Effect.Effect<UIMessage[]>;
22
+ hooks?: AgentHooks;
23
+ }
24
+ export declare function runLoop(config: LoopConfig): Effect.Effect<LoopResult, StreamError | ContextOverflowError, Streaming | MessageQueue | StopSignal>;
25
+ //# sourceMappingURL=loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAGV,OAAO,EACP,SAAS,EAEV,MAAM,IAAI,CAAA;AACX,OAAO,EAAY,MAAM,EAA6B,MAAM,QAAQ,CAAA;AAapE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGnD,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EAEd,UAAU,EACV,aAAa,EAId,MAAM,YAAY,CAAA;AAMnB,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,eAAe,CAAA;IACtB,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAA;IACtB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,GAAG,cAAc,CAAA;IACvC,eAAe,EAAE,SAAS,EAAE,CAAA;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,WAAW,CAAC,EAAE,aAAa,CAAA;IAC3B,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;IACzE,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB;AA4BD,wBAAgB,OAAO,CACrB,MAAM,EAAE,UAAU,GACjB,MAAM,CAAC,MAAM,CACd,UAAU,EACV,WAAW,GAAG,oBAAoB,EAClC,SAAS,GAAG,YAAY,GAAG,UAAU,CACtC,CA2WA"}
package/dist/loop.js ADDED
@@ -0,0 +1,407 @@
1
+ import { Deferred, Effect, Option, pipe, Ref, Stream } from "effect";
2
+ import { cleanupPrompt } from "./cleanup.js";
3
+ import { addUsage, buildAssistantMessage, EMPTY_USAGE, extractText, extractToolCalls, prepareTools, toFinishReason, toUIChunk, v3UsageToUsage, } from "./convert.js";
4
+ import { ContextOverflowError, StreamError } from "./errors.js";
5
+ import { toLanguageModelPrompt } from "./prompt.js";
6
+ import { MessageQueue } from "./services/MessageQueue.js";
7
+ import { StopSignal } from "./services/StopSignal.js";
8
+ import { Streaming } from "./services/Streaming.js";
9
+ import { fromReadableStream } from "./stream.js";
10
+ import { executeToolCalls } from "./tools.js";
11
+ // ---------------------------------------------------------------------------
12
+ // The tool loop
13
+ // ---------------------------------------------------------------------------
14
+ export function runLoop(config) {
15
+ return Effect.gen(function* () {
16
+ const streamingService = yield* Effect.serviceOption(Streaming);
17
+ const messageQueue = yield* Effect.serviceOption(MessageQueue);
18
+ const stopSignal = yield* Effect.serviceOption(StopSignal);
19
+ let responseId = config.responseId ??
20
+ `kai_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
21
+ let seq = 0;
22
+ function newResponseId() {
23
+ responseId = `kai_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
24
+ seq = 0;
25
+ return responseId;
26
+ }
27
+ // Build a publisher that wraps each UIMessageChunk in a StreamChunk
28
+ const publisher = Option.isSome(streamingService)
29
+ ? {
30
+ publish: (chunk) => streamingService.value.publish({
31
+ conversationId: config.conversationId,
32
+ responseId,
33
+ chunk,
34
+ seq: seq++,
35
+ }),
36
+ }
37
+ : null;
38
+ const state = yield* Ref.make({
39
+ messages: config.initialMessages,
40
+ steps: [],
41
+ totalUsage: EMPTY_USAGE,
42
+ });
43
+ // Abort controller shared across streaming + tool execution per turn.
44
+ // When the stop signal fires, this aborts both the model stream AND any running tools.
45
+ const turnAbort = new AbortController();
46
+ // Wire stop signal to the turn abort controller.
47
+ // Fire-and-forget: the fiber lives for the duration of the loop.
48
+ if (Option.isSome(stopSignal)) {
49
+ yield* pipe(stopSignal.value.wait(), Effect.tap(() => Effect.sync(() => turnAbort.abort())), Effect.fork);
50
+ }
51
+ let loopFinishReason = "stop";
52
+ let running = true;
53
+ let lastToolCallIds = new Set(); // stall detection
54
+ let streamErrored = false; // track if any step had a stream error
55
+ let nudgeAttempts = 0; // max 1 nudge for premature stops
56
+ const MAX_NUDGE_ATTEMPTS = 1;
57
+ while (running) {
58
+ const currentState = yield* Ref.get(state);
59
+ const stepNumber = currentState.steps.length;
60
+ // Check stop signal (persistent check between turns)
61
+ if (Option.isSome(stopSignal)) {
62
+ const stopped = yield* stopSignal.value.check();
63
+ if (stopped) {
64
+ loopFinishReason = "aborted";
65
+ break;
66
+ }
67
+ }
68
+ // Check if abort was triggered during a previous tool execution
69
+ if (turnAbort.signal.aborted) {
70
+ loopFinishReason = "aborted";
71
+ break;
72
+ }
73
+ // Resolve per-step config
74
+ const stepConfig = config.prepareStep
75
+ ? yield* resolveStepConfig(config.prepareStep, {
76
+ stepNumber,
77
+ steps: currentState.steps,
78
+ messages: currentState.messages,
79
+ })
80
+ : undefined;
81
+ const stepModel = stepConfig?.model ?? config.model;
82
+ const tools = stepConfig?.tools ?? config.tools ?? {};
83
+ const system = stepConfig?.system ?? config.system;
84
+ if (config.hooks?.onStepStart)
85
+ yield* config.hooks.onStepStart(stepNumber);
86
+ // Stream one LLM call
87
+ const stepStart = Date.now();
88
+ const response = yield* streamStep(stepModel, system, tools, currentState.messages, config.callSettings, turnAbort, publisher);
89
+ const stepDuration = Date.now() - stepStart;
90
+ yield* Ref.update(state, (s) => ({
91
+ ...s,
92
+ totalUsage: addUsage(s.totalUsage, response.usage),
93
+ }));
94
+ if (response.aborted) {
95
+ loopFinishReason = "aborted";
96
+ break;
97
+ }
98
+ // Track if any step had errors (for watchdog nudge)
99
+ if (response.parts.some((p) => p.type === "error")) {
100
+ streamErrored = true;
101
+ }
102
+ const text = extractText(response.parts);
103
+ const toolCalls = extractToolCalls(response.parts);
104
+ const { finishReason } = response;
105
+ // -- Tool calls ---------------------------------------------------------
106
+ if (finishReason === "tool-calls" || toolCalls.length > 0) {
107
+ // Stall detection: if the model returns the exact same tool call IDs
108
+ // as the previous step, it's stuck in an infinite loop
109
+ const currentIds = new Set(toolCalls.map((tc) => tc.toolCallId));
110
+ if (stepNumber > 0 &&
111
+ currentIds.size > 0 &&
112
+ currentIds.size === lastToolCallIds.size &&
113
+ [...currentIds].every((id) => lastToolCallIds.has(id))) {
114
+ loopFinishReason = "error";
115
+ break;
116
+ }
117
+ lastToolCallIds = currentIds;
118
+ const mode = config.executeTools ?? true;
119
+ if (mode === false) {
120
+ const step = makeStep(stepNumber, finishReason, text, [], response.usage, stepDuration);
121
+ yield* finishStepAndUpdate(state, step, config.hooks);
122
+ // Append assistant message with pending tool calls so the
123
+ // handoff receiver has the full conversation history
124
+ yield* Ref.update(state, (s) => ({
125
+ ...s,
126
+ messages: [
127
+ ...s.messages,
128
+ buildAssistantMessage(text, toolCalls, undefined, responseId),
129
+ ],
130
+ }));
131
+ loopFinishReason = "tool-calls";
132
+ break;
133
+ }
134
+ // Execute tools with the shared abort signal so stop cancels tools too
135
+ let toolResults = typeof mode === "function"
136
+ ? yield* mode(toolCalls, tools, turnAbort.signal)
137
+ : yield* executeToolCalls(tools, toolCalls, currentState.messages, turnAbort.signal);
138
+ // If abort fired during tool execution, normalize abort errors
139
+ // so the model sees "Stopped by user" instead of raw DOMException
140
+ if (turnAbort.signal.aborted) {
141
+ toolResults = toolResults.map((tr) => tr.isError && isAbortError(tr.output)
142
+ ? { ...tr, output: "Stopped by user" }
143
+ : tr);
144
+ }
145
+ // Publish tool results so frontend sees them in real-time
146
+ if (publisher) {
147
+ for (const tr of toolResults) {
148
+ yield* publisher.publish(tr.isError
149
+ ? {
150
+ type: "tool-output-error",
151
+ toolCallId: tr.toolCallId,
152
+ errorText: String(tr.output),
153
+ }
154
+ : {
155
+ type: "tool-output-available",
156
+ toolCallId: tr.toolCallId,
157
+ output: tr.output,
158
+ });
159
+ }
160
+ }
161
+ if (config.hooks) {
162
+ for (const tc of toolCalls) {
163
+ if (config.hooks.onToolCall)
164
+ yield* config.hooks.onToolCall(tc);
165
+ }
166
+ for (const tr of toolResults) {
167
+ if (config.hooks.onToolResult)
168
+ yield* config.hooks.onToolResult(tr);
169
+ }
170
+ }
171
+ const step = makeStep(stepNumber, finishReason, text, toolResults, response.usage, stepDuration);
172
+ yield* finishStepAndUpdate(state, step, config.hooks);
173
+ yield* Ref.update(state, (s) => ({
174
+ ...s,
175
+ messages: [
176
+ ...s.messages,
177
+ buildAssistantMessage(text, toolCalls, toolResults, responseId),
178
+ ],
179
+ }));
180
+ // If aborted during tools, stop the loop
181
+ if (turnAbort.signal.aborted) {
182
+ loopFinishReason = "aborted";
183
+ break;
184
+ }
185
+ yield* drainQueuedMessages(messageQueue, state);
186
+ continue;
187
+ }
188
+ // -- Stop ---------------------------------------------------------------
189
+ if (finishReason === "stop") {
190
+ const step = makeStep(stepNumber, finishReason, text, [], response.usage, stepDuration);
191
+ yield* finishStepAndUpdate(state, step, config.hooks);
192
+ yield* Ref.update(state, (s) => ({
193
+ ...s,
194
+ messages: [
195
+ ...s.messages,
196
+ buildAssistantMessage(text, [], undefined, responseId),
197
+ ],
198
+ }));
199
+ if (Option.isSome(messageQueue)) {
200
+ const queued = yield* messageQueue.value.drain();
201
+ if (queued.length > 0) {
202
+ // Finish the current response before starting the next
203
+ if (publisher) {
204
+ yield* publisher.publish({ type: "finish", finishReason: "stop" });
205
+ }
206
+ // New responseId for the next assistant message
207
+ newResponseId();
208
+ yield* Ref.update(state, (s) => ({
209
+ ...s,
210
+ messages: [...s.messages, ...queued],
211
+ }));
212
+ continue;
213
+ }
214
+ }
215
+ // Watchdog nudge: if a previous step had errors and the model
216
+ // stopped without tool calls, it may have given up prematurely.
217
+ // Inject a nudge message and retry once.
218
+ if (streamErrored &&
219
+ toolCalls.length === 0 &&
220
+ nudgeAttempts < MAX_NUDGE_ATTEMPTS) {
221
+ nudgeAttempts++;
222
+ yield* Ref.update(state, (s) => ({
223
+ ...s,
224
+ messages: [
225
+ ...s.messages,
226
+ {
227
+ id: `kai_nudge_${Date.now()}`,
228
+ role: "user",
229
+ parts: [
230
+ {
231
+ type: "text",
232
+ text: "You were interrupted and may have stopped prematurely. If the task is not complete, continue working. If you have genuinely finished, confirm the result.",
233
+ },
234
+ ],
235
+ },
236
+ ],
237
+ }));
238
+ continue;
239
+ }
240
+ loopFinishReason = "stop";
241
+ running = false;
242
+ // -- Context overflow ---------------------------------------------------
243
+ }
244
+ else if (finishReason === "length") {
245
+ if (config.onContextOverflow) {
246
+ const s = yield* Ref.get(state);
247
+ const compacted = yield* config.onContextOverflow(s.messages);
248
+ yield* Ref.update(state, (s) => ({ ...s, messages: compacted }));
249
+ continue;
250
+ }
251
+ yield* Effect.fail(new ContextOverflowError({ usage: response.usage }));
252
+ // -- Error / other ------------------------------------------------------
253
+ }
254
+ else {
255
+ const step = makeStep(stepNumber, finishReason, text, [], response.usage, stepDuration);
256
+ yield* finishStepAndUpdate(state, step, config.hooks);
257
+ if (text) {
258
+ yield* Ref.update(state, (s) => ({
259
+ ...s,
260
+ messages: [
261
+ ...s.messages,
262
+ buildAssistantMessage(text, [], undefined, responseId),
263
+ ],
264
+ }));
265
+ }
266
+ loopFinishReason = "error";
267
+ running = false;
268
+ }
269
+ }
270
+ // Emit finish chunk so frontend knows the stream is done and can
271
+ // expect the persisted message in Convex with this responseId.
272
+ if (publisher && loopFinishReason !== "aborted") {
273
+ yield* publisher.publish({
274
+ type: "finish",
275
+ finishReason: loopFinishReason,
276
+ });
277
+ }
278
+ const final = yield* Ref.get(state);
279
+ return {
280
+ responseId,
281
+ messages: final.messages,
282
+ steps: final.steps,
283
+ totalUsage: final.totalUsage,
284
+ finishReason: loopFinishReason,
285
+ };
286
+ });
287
+ }
288
+ // ---------------------------------------------------------------------------
289
+ // Stream a single LLM call with stop signal support
290
+ // ---------------------------------------------------------------------------
291
+ /**
292
+ * Stream a single LLM call. Aborts immediately when `abortController` is signaled.
293
+ * The same AbortController is shared with tool execution at the loop level,
294
+ * so a stop signal cancels both streaming and tools.
295
+ */
296
+ function streamStep(model, system, tools, messages, callSettings, abortController, publisher) {
297
+ return Effect.gen(function* () {
298
+ const prompt = yield* Effect.promise(() => toLanguageModelPrompt(system, messages));
299
+ // Fix corrupted history before sending to model
300
+ cleanupPrompt(prompt);
301
+ const { tools: modelTools, toolChoice } = yield* Effect.promise(() => prepareTools(tools));
302
+ // If abort fires during the HTTP request setup, doStream rejects.
303
+ // Treat that as an abort, not an error.
304
+ const streamResult = yield* Effect.tryPromise({
305
+ try: () => model.doStream({
306
+ prompt,
307
+ tools: modelTools,
308
+ toolChoice,
309
+ abortSignal: abortController.signal,
310
+ maxOutputTokens: callSettings?.maxOutputTokens,
311
+ temperature: callSettings?.temperature,
312
+ topP: callSettings?.topP,
313
+ topK: callSettings?.topK,
314
+ stopSequences: callSettings?.stopSequences,
315
+ }),
316
+ catch: (e) => new StreamError({ cause: e }),
317
+ }).pipe(Effect.catchAll((err) => {
318
+ if (abortController.signal.aborted) {
319
+ return Effect.succeed(null);
320
+ }
321
+ return Effect.fail(err);
322
+ }));
323
+ if (streamResult === null) {
324
+ return {
325
+ parts: [],
326
+ finishReason: toFinishReason("other"),
327
+ usage: EMPTY_USAGE,
328
+ aborted: true,
329
+ };
330
+ }
331
+ const { stream } = streamResult;
332
+ // Use a Deferred that resolves when the abort signal fires.
333
+ // Stream.interruptWhen will stop consuming the stream.
334
+ const abortDeferred = yield* Deferred.make();
335
+ if (abortController.signal.aborted) {
336
+ yield* Deferred.succeed(abortDeferred, undefined);
337
+ }
338
+ else {
339
+ abortController.signal.addEventListener("abort", () => {
340
+ Effect.runSync(Deferred.succeed(abortDeferred, undefined));
341
+ }, { once: true });
342
+ }
343
+ const parts = [];
344
+ let finishReason = "other";
345
+ let usage = EMPTY_USAGE;
346
+ const consume = pipe(fromReadableStream(stream), Stream.tap((part) => Effect.gen(function* () {
347
+ parts.push(part);
348
+ if (part.type === "finish") {
349
+ finishReason = toFinishReason(part.finishReason.unified);
350
+ usage = v3UsageToUsage(part.usage);
351
+ }
352
+ if (publisher) {
353
+ const chunk = toUIChunk(part);
354
+ if (chunk)
355
+ yield* publisher.publish(chunk);
356
+ }
357
+ })), Stream.interruptWhen(Deferred.await(abortDeferred)), Stream.runDrain);
358
+ yield* pipe(consume, Effect.catchAllCause(() => Effect.void));
359
+ const wasAborted = abortController.signal.aborted;
360
+ return {
361
+ parts,
362
+ finishReason: wasAborted ? toFinishReason("other") : finishReason,
363
+ usage,
364
+ aborted: wasAborted,
365
+ };
366
+ });
367
+ }
368
+ // ---------------------------------------------------------------------------
369
+ // Small helpers
370
+ // ---------------------------------------------------------------------------
371
+ function resolveStepConfig(prepareStep, ctx) {
372
+ const result = prepareStep(ctx);
373
+ return Effect.isEffect(result) ? result : Effect.succeed(result);
374
+ }
375
+ function makeStep(stepNumber, finishReason, text, toolCalls, usage, durationMs) {
376
+ return { stepNumber, finishReason, text, toolCalls, usage, durationMs };
377
+ }
378
+ function finishStepAndUpdate(state, step, hooks) {
379
+ return Effect.gen(function* () {
380
+ if (hooks?.onStepFinish)
381
+ yield* hooks.onStepFinish(step);
382
+ yield* Ref.update(state, (s) => ({ ...s, steps: [...s.steps, step] }));
383
+ });
384
+ }
385
+ function isAbortError(value) {
386
+ if (value instanceof DOMException && value.name === "AbortError")
387
+ return true;
388
+ if (value instanceof Error && value.name === "AbortError")
389
+ return true;
390
+ if (value instanceof Error && value.message.includes("aborted"))
391
+ return true;
392
+ return false;
393
+ }
394
+ function drainQueuedMessages(messageQueue, state) {
395
+ return Effect.gen(function* () {
396
+ if (Option.isNone(messageQueue))
397
+ return;
398
+ const queued = yield* messageQueue.value.drain();
399
+ if (queued.length === 0)
400
+ return;
401
+ yield* Ref.update(state, (s) => ({
402
+ ...s,
403
+ messages: [...s.messages, ...queued],
404
+ }));
405
+ });
406
+ }
407
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../src/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { LanguageModelV3Prompt } from "@ai-sdk/provider";
2
+ import type { UIMessage } from "ai";
3
+ /**
4
+ * Convert UIMessage[] → LanguageModelV3Prompt using the AI SDK's own
5
+ * conversion chain. This is the same path that streamText() uses internally:
6
+ *
7
+ * UIMessage[] → ModelMessage[] → StandardizedPrompt → LanguageModelV3Prompt
8
+ */
9
+ export declare function toLanguageModelPrompt(system: string | undefined, messages: UIMessage[]): Promise<LanguageModelV3Prompt>;
10
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAInC;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,SAAS,EAAE,GACpB,OAAO,CAAC,qBAAqB,CAAC,CAWhC"}
package/dist/prompt.js ADDED
@@ -0,0 +1,21 @@
1
+ import { convertToModelMessages } from "ai";
2
+ import { convertToLanguageModelPrompt, standardizePrompt } from "ai/internal";
3
+ /**
4
+ * Convert UIMessage[] → LanguageModelV3Prompt using the AI SDK's own
5
+ * conversion chain. This is the same path that streamText() uses internally:
6
+ *
7
+ * UIMessage[] → ModelMessage[] → StandardizedPrompt → LanguageModelV3Prompt
8
+ */
9
+ export async function toLanguageModelPrompt(system, messages) {
10
+ const modelMessages = await convertToModelMessages(messages);
11
+ const standardized = await standardizePrompt({
12
+ system,
13
+ messages: modelMessages,
14
+ });
15
+ return convertToLanguageModelPrompt({
16
+ prompt: standardized,
17
+ supportedUrls: {},
18
+ download: undefined,
19
+ });
20
+ }
21
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,IAAI,CAAA;AAC3C,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE7E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAA0B,EAC1B,QAAqB;IAErB,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAA;IAC5D,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC;QAC3C,MAAM;QACN,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAA;IACF,OAAO,4BAA4B,CAAC;QAClC,MAAM,EAAE,YAAY;QACpB,aAAa,EAAE,EAAE;QACjB,QAAQ,EAAE,SAAS;KACpB,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { UIMessage } from "ai";
2
+ import { Context, Effect, Layer } from "effect";
3
+ declare const MessageQueue_base: Context.TagClass<MessageQueue, "kai/MessageQueue", {
4
+ /** Non-blocking: return all queued messages (empty array if none). */
5
+ readonly drain: () => Effect.Effect<UIMessage[]>;
6
+ /** Blocking: wait for the next message. */
7
+ readonly wait: () => Effect.Effect<UIMessage>;
8
+ }>;
9
+ export declare class MessageQueue extends MessageQueue_base {
10
+ }
11
+ export declare const NoopMessageQueueLayer: Layer.Layer<MessageQueue, never, never>;
12
+ export {};
13
+ //# sourceMappingURL=MessageQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageQueue.d.ts","sourceRoot":"","sources":["../../src/services/MessageQueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;;IAK3C,sEAAsE;oBACtD,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IAChD,2CAA2C;mBAC5B,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;;AANjD,qBAAa,YAAa,SAAQ,iBAQ/B;CAAG;AAEN,eAAO,MAAM,qBAAqB,yCAGhC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ export class MessageQueue extends Context.Tag("kai/MessageQueue")() {
3
+ }
4
+ export const NoopMessageQueueLayer = Layer.succeed(MessageQueue, {
5
+ drain: () => Effect.succeed([]),
6
+ wait: () => Effect.never, // blocks forever (no messages)
7
+ });
8
+ //# sourceMappingURL=MessageQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageQueue.js","sourceRoot":"","sources":["../../src/services/MessageQueue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE/C,MAAM,OAAO,YAAa,SAAQ,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAQ9D;CAAG;AAEN,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE;IAC/D,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,+BAA+B;CAC1D,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { UIMessage } from "ai";
2
+ import { Context, Effect, Layer } from "effect";
3
+ import type { PersistenceError } from "../errors.js";
4
+ declare const Persistence_base: Context.TagClass<Persistence, "kai/Persistence", {
5
+ readonly saveMessages: (conversationId: string, messages: UIMessage[]) => Effect.Effect<void, PersistenceError>;
6
+ readonly loadMessages: (conversationId: string) => Effect.Effect<UIMessage[], PersistenceError>;
7
+ }>;
8
+ export declare class Persistence extends Persistence_base {
9
+ }
10
+ export declare const NoopPersistenceLayer: Layer.Layer<Persistence, never, never>;
11
+ export {};
12
+ //# sourceMappingURL=Persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Persistence.d.ts","sourceRoot":"","sources":["../../src/services/Persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;;2BAKzB,CACrB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,SAAS,EAAE,KAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC;2BACnB,CACrB,cAAc,EAAE,MAAM,KACnB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,gBAAgB,CAAC;;AATrD,qBAAa,WAAY,SAAQ,gBAW9B;CAAG;AAEN,eAAO,MAAM,oBAAoB,wCAG/B,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ export class Persistence extends Context.Tag("kai/Persistence")() {
3
+ }
4
+ export const NoopPersistenceLayer = Layer.succeed(Persistence, {
5
+ saveMessages: () => Effect.void,
6
+ loadMessages: () => Effect.succeed([]),
7
+ });
8
+ //# sourceMappingURL=Persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Persistence.js","sourceRoot":"","sources":["../../src/services/Persistence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAG/C,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAW5D;CAAG;AAEN,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE;IAC7D,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;IAC/B,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;CACvC,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ declare const StopSignal_base: Context.TagClass<StopSignal, "kai/StopSignal", {
3
+ /** Poll once: true if stop has been requested. */
4
+ readonly check: () => Effect.Effect<boolean>;
5
+ /** Block until a stop signal is received. */
6
+ readonly wait: () => Effect.Effect<void>;
7
+ }>;
8
+ export declare class StopSignal extends StopSignal_base {
9
+ }
10
+ export declare const NoopStopSignalLayer: Layer.Layer<StopSignal, never, never>;
11
+ export {};
12
+ //# sourceMappingURL=StopSignal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StopSignal.d.ts","sourceRoot":"","sources":["../../src/services/StopSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;;IAK3C,kDAAkD;oBAClC,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;IAC5C,6CAA6C;mBAC9B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;AAN5C,qBAAa,UAAW,SAAQ,eAQ7B;CAAG;AAEN,eAAO,MAAM,mBAAmB,uCAG9B,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ export class StopSignal extends Context.Tag("kai/StopSignal")() {
3
+ }
4
+ export const NoopStopSignalLayer = Layer.succeed(StopSignal, {
5
+ check: () => Effect.succeed(false),
6
+ wait: () => Effect.never, // never stops
7
+ });
8
+ //# sourceMappingURL=StopSignal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StopSignal.js","sourceRoot":"","sources":["../../src/services/StopSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE/C,MAAM,OAAO,UAAW,SAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAQ1D;CAAG;AAEN,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE;IAC3D,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc;CACzC,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ import type { StreamError } from "../errors.js";
3
+ import type { StreamChunk } from "../types.js";
4
+ declare const Streaming_base: Context.TagClass<Streaming, "kai/Streaming", {
5
+ readonly publish: (chunk: StreamChunk) => Effect.Effect<void, StreamError>;
6
+ }>;
7
+ export declare class Streaming extends Streaming_base {
8
+ }
9
+ export declare const NoopStreamingLayer: Layer.Layer<Streaming, never, never>;
10
+ export {};
11
+ //# sourceMappingURL=Streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../src/services/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;;sBAKxB,CAAC,KAAK,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC;;AAH9E,qBAAa,SAAU,SAAQ,cAK5B;CAAG;AAEN,eAAO,MAAM,kBAAkB,sCAE7B,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { Context, Effect, Layer } from "effect";
2
+ export class Streaming extends Context.Tag("kai/Streaming")() {
3
+ }
4
+ export const NoopStreamingLayer = Layer.succeed(Streaming, {
5
+ publish: () => Effect.void,
6
+ });
7
+ //# sourceMappingURL=Streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Streaming.js","sourceRoot":"","sources":["../../src/services/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAI/C,MAAM,OAAO,SAAU,SAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAKxD;CAAG;AAEN,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE;IACzD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;CAC3B,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { MessageQueue, NoopMessageQueueLayer } from "./MessageQueue.js";
2
+ export { NoopPersistenceLayer, Persistence } from "./Persistence.js";
3
+ export { NoopStopSignalLayer, StopSignal } from "./StopSignal.js";
4
+ export { NoopStreamingLayer, Streaming } from "./Streaming.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA"}