@ekairos/story 1.21.0 → 1.21.4-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/dist/agent.d.ts +5 -5
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +6 -6
- package/dist/agent.js.map +1 -1
- package/dist/document-parser.d.ts.map +1 -1
- package/dist/document-parser.js +8 -6
- package/dist/document-parser.js.map +1 -1
- package/dist/events.d.ts +5 -3
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +7 -6
- package/dist/events.js.map +1 -1
- package/dist/schema-document.d.ts +3 -0
- package/dist/schema-document.d.ts.map +1 -0
- package/dist/schema-document.js +37 -0
- package/dist/schema-document.js.map +1 -0
- package/dist/schema.d.ts +2 -83
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +52 -48
- package/dist/schema.js.map +1 -1
- package/dist/service.d.ts +3 -2
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +6 -1
- package/dist/service.js.map +1 -1
- package/dist/steps-context.d.ts +1 -1
- package/dist/steps-context.js +1 -1
- package/dist/steps-context.js.map +1 -1
- package/dist/story.d.ts +1 -1
- package/dist/storyRunner.d.ts +1 -1
- package/package.json +2 -2
package/dist/agent.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InstantAdminDatabase } from "@instantdb/admin";
|
|
2
2
|
import { Tool, UIMessageStreamWriter } from "ai";
|
|
3
3
|
import { UIMessage } from 'ai';
|
|
4
4
|
import { AgentService, ContextEvent, ContextIdentifier, StoredContext } from "./service";
|
|
@@ -36,9 +36,9 @@ export interface ProgressStreamOptions {
|
|
|
36
36
|
export type DataStreamWriter = UIMessageStreamWriter<AgentMessage>;
|
|
37
37
|
export declare abstract class Story<Context> {
|
|
38
38
|
private opts;
|
|
39
|
-
protected db:
|
|
39
|
+
protected db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>;
|
|
40
40
|
protected agentService: AgentService;
|
|
41
|
-
constructor(db:
|
|
41
|
+
constructor(db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>, opts?: AgentOptions);
|
|
42
42
|
protected abstract buildSystemPrompt(context: StoredContext<Context>, ...args: any[]): Promise<string> | string;
|
|
43
43
|
protected abstract buildTools(context: StoredContext<Context>, dataStream: DataStreamWriter): Promise<Record<string, Tool>>;
|
|
44
44
|
protected abstract initialize(context: StoredContext<Context>): Promise<Context>;
|
|
@@ -63,7 +63,7 @@ export declare abstract class Story<Context> {
|
|
|
63
63
|
urgency: "low" | "medium" | "high";
|
|
64
64
|
}, threadId: string, _dataStream?: DataStreamWriter): Promise<any>;
|
|
65
65
|
progressStream(incomingEvent: ContextEvent, contextIdentifier: ContextIdentifier | null, options?: ProgressStreamOptions): Promise<{
|
|
66
|
-
contextId:
|
|
66
|
+
contextId: unknown;
|
|
67
67
|
triggerEventId: string;
|
|
68
68
|
reactionEventId: string;
|
|
69
69
|
stream: ReadableStream<any>;
|
|
@@ -73,7 +73,7 @@ export declare abstract class Story<Context> {
|
|
|
73
73
|
private callOnEnd;
|
|
74
74
|
}
|
|
75
75
|
export interface AgentConfig<Context> {
|
|
76
|
-
db:
|
|
76
|
+
db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>;
|
|
77
77
|
context: (context: StoredContext<Context>) => Promise<Context> | Context;
|
|
78
78
|
systemPrompt: (context: StoredContext<Context>) => Promise<string> | string;
|
|
79
79
|
tools: (context: StoredContext<Context>, dataStream: DataStreamWriter) => Promise<Record<string, Tool>> | Record<string, Tool>;
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -83,10 +83,10 @@ class Story {
|
|
|
83
83
|
// get or create context
|
|
84
84
|
const currentContext = await this.agentService.getOrCreateContext(contextIdentifier);
|
|
85
85
|
const contextSelector = contextIdentifier?.id
|
|
86
|
-
? { id: contextIdentifier.id }
|
|
86
|
+
? { id: String(contextIdentifier.id) }
|
|
87
87
|
: contextIdentifier?.key
|
|
88
88
|
? { key: contextIdentifier.key }
|
|
89
|
-
: { id: currentContext.id };
|
|
89
|
+
: { id: String(currentContext.id) };
|
|
90
90
|
// save incoming event
|
|
91
91
|
const triggerEvent = await this.agentService.saveEvent(contextSelector, incomingEvent);
|
|
92
92
|
const triggerEventId = triggerEvent.id; // trigger event id
|
|
@@ -155,11 +155,11 @@ class Story {
|
|
|
155
155
|
// Initialize on each loop and get new context data
|
|
156
156
|
const contextContent = await this.initialize(currentContext);
|
|
157
157
|
// Update context
|
|
158
|
-
const updatedContext = await this.agentService.updateContextContent({ id: currentContext.id }, contextContent);
|
|
158
|
+
const updatedContext = await this.agentService.updateContextContent({ id: String(currentContext.id) }, contextContent);
|
|
159
159
|
// Build tools
|
|
160
160
|
const subclassToolsAll = await this.buildTools(updatedContext, dataStream);
|
|
161
161
|
// Build base tools for agent loop control
|
|
162
|
-
const baseTools = this.getBaseTools(dataStream, updatedContext.id);
|
|
162
|
+
const baseTools = this.getBaseTools(dataStream, String(updatedContext.id));
|
|
163
163
|
const tools = { ...subclassToolsAll, ...baseTools };
|
|
164
164
|
// Add web search if enabled
|
|
165
165
|
if (options?.webSearch) {
|
|
@@ -174,10 +174,10 @@ class Story {
|
|
|
174
174
|
}
|
|
175
175
|
const include = this.includeBaseTools();
|
|
176
176
|
if (include.createMessage) {
|
|
177
|
-
executeMap["createMessage"] = (args) => this.executeCreateMessage(eventId, args, updatedContext.id, dataStream);
|
|
177
|
+
executeMap["createMessage"] = (args) => this.executeCreateMessage(eventId, args, String(updatedContext.id), dataStream);
|
|
178
178
|
}
|
|
179
179
|
if (include.requestDirection) {
|
|
180
|
-
executeMap["requestDirection"] = (args) => this.executeRequestDirection(eventId, args, updatedContext.id, dataStream);
|
|
180
|
+
executeMap["requestDirection"] = (args) => this.executeRequestDirection(eventId, args, String(updatedContext.id), dataStream);
|
|
181
181
|
}
|
|
182
182
|
for (const [, t] of Object.entries(tools)) {
|
|
183
183
|
delete t.execute;
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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","sourcesContent":["import { init, id, tx, lookup, InstaQLEntity,InstantAdminDatabase } from \"@instantdb/admin\"\nimport { convertToModelMessages, createUIMessageStream, generateText, ModelMessage, smoothStream, stepCountIs, streamText, Tool, tool, UIMessageStreamWriter } from \"ai\"\nimport { openai } from \"@ai-sdk/openai\"\nimport { z } from \"zod\"\n\nimport { UIMessage } from 'ai';\nimport { initLogger } from \"braintrust\";\nimport { AgentService, ContextEvent, ContextIdentifier, StoredContext } from \"./service\";\nimport { ASSISTANT_MESSAGE_TYPE, convertEventsToModelMessages, convertEventToModelMessages, convertModelMessageToEvent, createAssistantEventFromUIMessages, createUserEventFromUIMessages, ResponseMessage, SYSTEM_MESSAGE_TYPE } from \"./events\";\n\nimport { storyDomain } from \"./schema\";\nimport { SchemaOf } from \"@ekairos/domain\";\n\n// Inicializar Braintrust logger\nconst logger = initLogger({\n projectName: \"pulzar platform\",\n apiKey: process.env.BRAINTRUST_API_KEY,\n});\n\n// Define your custom message type with data part schemas\nexport type AgentMessage = UIMessage<\n never, // metadata type\n {\n weather: {\n city: string;\n weather?: string;\n status: 'loading' | 'success';\n };\n notification: {\n message: string;\n level: 'info' | 'warning' | 'error';\n };\n } // data parts type\n>;\n\nexport interface AgentOptions {\n onEventCreated?: (event: any) => void | Promise<void>\n evaluateToolCalls?: (toolCalls: any[]) => Promise<{ success: boolean; message?: string }>\n onToolCallExecuted?: (executionEvent: any) => void | Promise<void>\n onEnd?: (lastEvent: ContextEvent) => void | { end?: boolean } | Promise<void | { end?: boolean }>\n}\n\nexport interface ProgressStreamOptions {\n reasoningEffort?: \"off\" | \"low\" | \"medium\" | \"high\"\n webSearch?: boolean\n}\n\nexport type DataStreamWriter = UIMessageStreamWriter<AgentMessage>\nconst createDataStream = createUIMessageStream;\n\n\nexport abstract class Story<Context> {\n protected db: ReturnType<typeof init>\n protected agentService: AgentService\n\n constructor(db: ReturnType<typeof init>, private opts: AgentOptions = {}) {\n this.db = db\n this.agentService = new AgentService(db)\n }\n\n protected abstract buildSystemPrompt(context: StoredContext<Context>, ...args: any[]): Promise<string> | string\n protected abstract buildTools(context: StoredContext<Context>, dataStream: DataStreamWriter): Promise<Record<string, Tool>>\n protected abstract initialize(context: StoredContext<Context>): Promise<Context>\n\n protected getModel(context: StoredContext<Context>) {\n return \"openai/gpt-5\"\n }\n\n protected includeBaseTools(): { createMessage: boolean; requestDirection: boolean; end: boolean } {\n return { createMessage: true, requestDirection: true, end: true }\n }\n\n protected async getFinalizationToolNames(): Promise<string[]> {\n return []\n }\n\n private static readonly FINAL_TOOL_NAMES = [\"createMessage\", \"requestDirection\", \"end\"]\n\n protected getBaseTools(dataStream: DataStreamWriter, threadId: string): Record<string, Tool> {\n const include = this.includeBaseTools()\n const baseTools: Record<string, Tool> = {}\n\n if (include.createMessage) {\n baseTools.createMessage = tool({\n description: \"Send a message to the user. Use for final confirmations or information.\",\n inputSchema: z.object({\n message: z.string().describe(\"Message for the user in markdown format\")\n }),\n })\n }\n\n if (include.requestDirection) {\n baseTools.requestDirection = tool({\n description: \"Ask a human for guidance when blocked or unsure.\",\n inputSchema: z.object({\n issue: z.string(),\n context: z.string(),\n suggestedActions: z.array(z.string()).optional(),\n urgency: z.enum([\"low\", \"medium\", \"high\"]).default(\"medium\"),\n }),\n })\n }\n\n if (include.end) {\n baseTools.end = tool({\n description: \"End the current interaction loop.\",\n inputSchema: z.object({}).strict(),\n execute: async () => {\n return { success: true, message: \"Ended\" }\n },\n })\n }\n\n return baseTools\n }\n\n protected async executeCreateMessage(\n eventId: string,\n args: { message: string; type: \"info\" | \"confirmation\" | \"warning\" | \"error\" | \"success\"; includeContext?: boolean },\n threadId: string,\n dataStream?: DataStreamWriter,\n ): Promise<any> {\n const assistantMessage = { id: eventId, role: \"assistant\" as const, content: args.message, createdAt: new Date() } as any\n try {\n await this.saveMessagesToThread(threadId, [assistantMessage])\n } catch { }\n if (dataStream) {\n //dataStream.writeData({ type: \"user-response\", message: args.message, responseType: args.type, includeContext: Boolean(args.includeContext), timestamp: new Date().toISOString() } as any)\n }\n return { success: true, message: args.message, data: { messageId: assistantMessage.id, threadId } }\n }\n\n protected async executeRequestDirection(\n eventId: string,\n args: { issue: string; context: string; suggestedActions?: string[]; urgency: \"low\" | \"medium\" | \"high\" },\n threadId: string,\n _dataStream?: DataStreamWriter,\n ): Promise<any> {\n const systemMessage = { id: eventId, role: \"assistant\" as const, content: `Direction requested: ${args.issue}\\nContext: ${args.context}`, createdAt: new Date() } as any\n return { success: true, message: \"Direction requested\", data: { messageId: systemMessage.id, threadId } }\n }\n\n public async progressStream(\n incomingEvent: ContextEvent,\n contextIdentifier: ContextIdentifier | null,\n options?: ProgressStreamOptions\n ) {\n\n // get or create context\n const currentContext = await this.agentService.getOrCreateContext<Context>(contextIdentifier)\n\n const contextSelector: ContextIdentifier = contextIdentifier?.id\n ? { id: contextIdentifier.id }\n : contextIdentifier?.key\n ? { key: contextIdentifier.key }\n : { id: currentContext.id }\n\n // save incoming event\n const triggerEvent = await this.agentService.saveEvent(contextSelector, incomingEvent)\n\n const triggerEventId = triggerEvent.id // trigger event id\n const eventId = id() // reaction event id\n\n // Set context status to \"streaming\" before creating execution\n await this.agentService.updateContextStatus(contextSelector, \"streaming\")\n\n // create execution and set context status\n const execution = await this.agentService.createExecution(contextSelector, triggerEventId, eventId)\n const executionId = execution.id\n\n let latestReactionEvent: ContextEvent | null = null\n let executionStatus: \"executing\" | \"completed\" | \"failed\" = \"executing\"\n\n const markFailure = async () => {\n if (latestReactionEvent && latestReactionEvent.status !== \"failed\") {\n try {\n latestReactionEvent = await this.agentService.updateEvent(latestReactionEvent.id, {\n ...latestReactionEvent,\n status: \"failed\",\n })\n }\n catch (eventError) {\n console.error(\"Failed to mark reaction event as failed\", eventError)\n }\n }\n\n if (executionStatus === \"executing\") {\n try {\n await this.agentService.completeExecution(contextSelector, executionId, \"failed\")\n executionStatus = \"failed\"\n }\n catch (executionError) {\n console.error(\"Failed to mark execution as failed\", executionError)\n }\n }\n }\n\n const dataStreamResult = createDataStream({\n execute: async ({ writer: dataStream }: { writer: DataStreamWriter }) => {\n let loopSafety = 0\n const MAX_LOOPS = 20\n\n // load previous events (already in chronological order from InstantDB)\n const events: ContextEvent[] = await this.agentService.getEvents(contextSelector)\n const contextId = currentContext.id\n \n console.log(\"[agent] Loaded events from InstantDB:\", {\n contextId,\n eventsCount: events.length,\n eventsPreview: events.slice(-3).map((e: any) => ({\n id: e.id,\n type: e.type,\n createdAt: e.createdAt\n }))\n })\n\n let reactionEvent = await this.agentService.saveEvent(contextSelector, {\n id: eventId,\n type: \"assistant\",\n channel: \"agent\",\n createdAt: new Date().toISOString(),\n content: { parts: [] },\n status: \"pending\",\n })\n latestReactionEvent = reactionEvent\n\n dataStream.write({ type: \"event-start\", data: { eventId: eventId } } as any)\n while (loopSafety < MAX_LOOPS) {\n\n dataStream.write({ type: \"start-step\" })\n\n loopSafety++\n\n // Read context\n const currentContext = await this.agentService.getContext<Context>(contextSelector)\n dataStream.write({ type: \"data-context-id\", data: { contextId: currentContext.id } } as any)\n\n // Initialize on each loop and get new context data\n const contextContent = await this.initialize(currentContext)\n\n // Update context\n const updatedContext = await this.agentService.updateContextContent({ id: currentContext.id }, contextContent)\n\n // Build tools\n const subclassToolsAll = await this.buildTools(updatedContext, dataStream)\n\n // Build base tools for agent loop control\n const baseTools = this.getBaseTools(dataStream, updatedContext.id)\n const tools: Record<string, Tool> = { ...subclassToolsAll, ...baseTools }\n\n // Add web search if enabled\n if (options?.webSearch) {\n tools.web_search = openai.tools.webSearch() as any\n }\n\n // Extract execute functions from tools\n const executeMap: Record<string, (args: any) => Promise<any>> = {}\n for (const [name, t] of Object.entries(subclassToolsAll)) {\n if ((t as any).execute) {\n executeMap[name] = (t as any).execute as (args: any) => Promise<any>\n }\n }\n\n const include = this.includeBaseTools()\n if (include.createMessage) {\n executeMap[\"createMessage\"] = (args: any) => this.executeCreateMessage(eventId, args, updatedContext.id, dataStream)\n }\n if (include.requestDirection) {\n executeMap[\"requestDirection\"] = (args: any) => this.executeRequestDirection(eventId, args, updatedContext.id, dataStream)\n }\n\n for (const [, t] of Object.entries(tools)) {\n delete (t as any).execute\n }\n\n const messagesForModel: ModelMessage[] = await convertEventsToModelMessages(\n reactionEvent.status !== \"pending\"\n ? [...events, reactionEvent]\n : [...events],\n this.db\n )\n\n const systemPrompt = await this.buildSystemPrompt(updatedContext)\n\n const providerOptions: any = {}\n const hasReasoning = options?.reasoningEffort && options.reasoningEffort !== \"off\"\n \n if (hasReasoning) {\n providerOptions.openai = {\n reasoningEffort: options.reasoningEffort,\n reasoningSummary: 'detailed',\n }\n console.log(\"[agent] Reasoning enabled:\", {\n reasoningEffort: options.reasoningEffort,\n model: this.getModel(updatedContext),\n providerOptions\n })\n } else {\n console.log(\"[agent] Reasoning disabled or off\")\n }\n\n // Allow more steps when using reasoning to give the model time to think\n const maxSteps = hasReasoning ? 5 : 1\n\n const result = streamText({\n model: this.getModel(updatedContext),\n system: systemPrompt,\n messages: messagesForModel,\n tools,\n toolChoice: \"required\",\n onStepFinish: (step) => {\n console.log(\"onStepFinish\", step)\n },\n stopWhen: stepCountIs(maxSteps),\n experimental_transform: smoothStream({\n delayInMs: 30,\n chunking: 'word',\n }),\n ...(Object.keys(providerOptions).length > 0 && { providerOptions }),\n })\n\n result.consumeStream()\n\n // create promise\n let resolveFinish!: (value: ContextEvent) => void\n let rejectFinish!: (reason?: unknown) => void\n const finishPromise = new Promise<ContextEvent>((resolve, reject) => {\n resolveFinish = resolve\n rejectFinish = reject\n })\n\n dataStream.merge(result.toUIMessageStream({\n sendStart: false,\n generateMessageId: () => {\n return eventId\n },\n messageMetadata(options) {\n return {\n eventId: eventId,\n }\n },\n onFinish: ({ messages }) => {\n console.log(\"[agent] Messages finished:\", messages.map((m: any) => ({\n role: m.role,\n parts: m.parts?.map((p: any) => ({\n type: p.type,\n text: p.text?.substring(0, 100),\n hasReasoning: p.type === \"reasoning\"\n }))\n })))\n const lastEvent = createAssistantEventFromUIMessages(eventId, messages)\n resolveFinish(lastEvent)\n },\n onError: (e: unknown) => {\n console.error(\"Agent error:\", e)\n rejectFinish(e)\n const message = e instanceof Error ? e.message : String(e)\n return message\n }\n }).pipeThrough(new TransformStream({\n transform(chunk: any, controller: any) {\n\n if (chunk.type === \"start\") {\n return;\n }\n\n if (chunk.type === \"finish-step\") {\n return;\n }\n\n if (chunk.type === \"start-step\") {\n return\n }\n\n if (chunk.type === \"finish\") {\n return;\n }\n\n controller.enqueue(chunk as any)\n }\n })))\n\n // wait for the on finish here\n const lastEvent = await finishPromise\n\n const toolCalls = lastEvent.content.parts.reduce((acc: any[], p: any) => {\n if (typeof p.type === \"string\" && p.type.startsWith(\"tool-\")) {\n const toolName = p.type.split(\"-\")[1]\n acc.push({ toolCallId: p.toolCallId, toolName: toolName, args: p.input });\n }\n return acc;\n }, []);\n\n console.log(\"agent.toolCalls.detected\", {\n eventId,\n toolCalls: toolCalls.map((call: any) => ({ toolCallId: call.toolCallId, toolName: call.toolName }))\n });\n\n if (!toolCalls.length) {\n const shouldEndInteraction = await this.callOnEnd(lastEvent)\n if (shouldEndInteraction) {\n break\n }\n continue\n }\n const reactionEventWithParts = {\n ...reactionEvent,\n content: { parts: [...reactionEvent.content.parts, ...lastEvent.content.parts] },\n }\n\n let currentEventState = await this.agentService.updateEvent(reactionEvent.id, reactionEventWithParts)\n latestReactionEvent = currentEventState\n\n const executionResults = await Promise.all(toolCalls.map(async (tc: any) => {\n console.log(\"agent.toolCall.selected\", {\n eventId,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName\n })\n\n let execSuccess = true\n let execMessage = \"Executed\"\n let execResult: any = null\n try {\n const execFn = executeMap[tc.toolName]\n if (execFn) {\n console.log(\"agent.toolCall.execute.start\", { toolCallId: tc.toolCallId, toolName: tc.toolName })\n execResult = await execFn(tc.args)\n execSuccess = execResult?.success !== false\n execMessage = execResult?.message || execMessage\n console.log(\"agent.toolCall.execute.success\", {\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n success: execSuccess\n })\n console.log(\"agent.toolCall.execute.result\", {\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n result: execResult\n })\n }\n }\n catch (err: any) {\n execSuccess = false\n execMessage = err.message\n console.error(\"agent.toolCall.execute.error\", {\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n error: err\n })\n }\n\n return { tc, execSuccess, execMessage, execResult }\n }))\n\n let exitOuterLoop = false\n const customFinalizationTools = await this.getFinalizationToolNames()\n const allFinalToolNames = [...Story.FINAL_TOOL_NAMES, ...customFinalizationTools]\n\n for (const { tc, execSuccess, execMessage, execResult } of executionResults) {\n try {\n if (execSuccess) {\n dataStream.write({\n type: \"tool-output-available\",\n toolCallId: tc.toolCallId,\n output: execResult,\n } as any)\n }\n else {\n dataStream.write({\n type: \"tool-output-error\",\n toolCallId: tc.toolCallId,\n errorText: String(execMessage || \"Error\"),\n } as any)\n }\n }\n catch (e) {\n console.error(\"Failed to write tool result to stream\", e)\n }\n\n const existingParts = currentEventState?.content?.parts || []\n const mergedParts = existingParts.map((p: any) => {\n if (p.type === `tool-${tc.toolName}` && p.toolCallId === tc.toolCallId) {\n if (execSuccess) {\n return {\n ...p,\n state: \"output-available\",\n output: execResult,\n }\n }\n return {\n ...p,\n state: \"output-error\",\n errorText: String(execMessage || \"Error\"),\n }\n }\n return p\n })\n\n currentEventState = await this.agentService.updateEvent(currentEventState.id, {\n id: currentEventState.id,\n type: currentEventState.type,\n channel: \"agent\",\n createdAt: currentEventState.createdAt,\n content: { parts: mergedParts },\n })\n\n dataStream.write({ type: \"finish-step\" })\n\n await this.opts.onToolCallExecuted?.({\n id: currentEventState.id,\n toolCall: tc,\n event: currentEventState.id,\n success: execSuccess,\n message: execMessage,\n result: execResult,\n })\n\n let shouldEnd = false\n if (!execSuccess) {\n const shouldEndInteraction = await this.callOnEnd(lastEvent)\n if (shouldEndInteraction) {\n shouldEnd = true\n }\n }\n\n if (!shouldEnd) {\n if (allFinalToolNames.includes(tc.toolName)) {\n const shouldEndInteraction = await this.callOnEnd(lastEvent)\n if (shouldEndInteraction) {\n shouldEnd = true\n }\n }\n }\n\n if (shouldEnd) {\n dataStream.write({ type: \"finish\", override: true } as any)\n exitOuterLoop = true\n break\n }\n }\n\n reactionEvent = currentEventState\n\n if (exitOuterLoop) {\n break\n }\n }\n reactionEvent = await this.agentService.updateEvent(reactionEvent.id, {\n ...reactionEvent,\n status: \"completed\",\n })\n latestReactionEvent = reactionEvent\n try {\n await this.agentService.completeExecution(contextSelector, executionId, \"completed\")\n executionStatus = \"completed\"\n }\n catch (error) {\n console.error(\"Failed to mark execution as completed\", error)\n }\n },\n onError: (error) => {\n console.error(\"Agent error:\", error)\n void markFailure()\n return error instanceof Error ? error.message : String(error)\n },\n onFinish: async () => {\n if (executionStatus === \"executing\") {\n try {\n await this.agentService.completeExecution(contextSelector, executionId, \"completed\")\n executionStatus = \"completed\"\n }\n catch (executionError) {\n console.error(\"Failed to finalize execution on finish\", executionError)\n }\n }\n console.log(\"Agent finished\")\n }\n })\n\n // start the stream\n\n const dataStreamFilteredResult = dataStreamResult.pipeThrough(new TransformStream({\n transform(chunk: any, controller: any) {\n if (chunk.type === \"start\") {\n console.log(\"start\", chunk.data)\n return;\n }\n\n if (chunk.type === \"event-start\") {\n controller.enqueue({ type: \"start\", messageId: chunk.data.eventId })\n return;\n }\n\n controller.enqueue(chunk as any)\n }\n }))\n\n return {\n contextId: currentContext.id,\n triggerEventId,\n reactionEventId: eventId,\n stream: dataStreamFilteredResult,\n executionId,\n }\n }\n\n private async saveMessagesToThread(threadId: string, messages: Array<any>) {\n // Placeholder for persistence hook. Not implemented in current scope.\n return\n }\n\n private async callOnEnd(lastEvent: ContextEvent): Promise<boolean> {\n if (!this.opts.onEnd) {\n return true\n }\n\n try {\n const result = await this.opts.onEnd(lastEvent)\n if (typeof result === \"boolean\") {\n return result\n }\n if (result && typeof result === \"object\") {\n if (Object.prototype.hasOwnProperty.call(result, \"end\")) {\n return Boolean(result.end)\n }\n }\n return true\n } catch (error) {\n console.error(\"onEnd callback failed\", error)\n return true\n }\n }\n\n\n\n\n}\n\nexport interface AgentConfig<Context> {\n db: ReturnType<typeof init>\n context: (context: StoredContext<Context>) => Promise<Context> | Context\n systemPrompt: (context: StoredContext<Context>) => Promise<string> | string\n tools: (context: StoredContext<Context>, dataStream: DataStreamWriter) => Promise<Record<string, Tool>> | Record<string, Tool>\n model?: string | ((context: StoredContext<Context>) => string)\n opts?: AgentOptions\n includeBaseTools?: { createMessage?: boolean; requestDirection?: boolean; end?: boolean }\n}\n\nexport type AgentInstance<Context> = Story<Context> & {\n readonly __config: AgentConfig<Context>\n}\n\nexport function agent<Context>(config: AgentConfig<Context>): AgentInstance<Context> {\n class FunctionalAgent extends Story<Context> {\n public readonly __config = config\n\n constructor() {\n super(config.db, config.opts)\n }\n\n protected includeBaseTools(): { createMessage: boolean; requestDirection: boolean; end: boolean } {\n if (config.includeBaseTools) {\n return {\n createMessage: config.includeBaseTools.createMessage ?? true,\n requestDirection: config.includeBaseTools.requestDirection ?? true,\n end: config.includeBaseTools.end ?? true,\n }\n }\n return super.includeBaseTools()\n }\n\n protected async buildSystemPrompt(context: StoredContext<Context>) {\n return config.systemPrompt(context)\n }\n\n protected async buildTools(context: StoredContext<Context>, dataStream: DataStreamWriter) {\n return config.tools(context, dataStream)\n }\n\n protected async initialize(context: StoredContext<Context>) {\n return config.context(context)\n }\n\n protected getModel(context: StoredContext<Context>) {\n if (typeof config.model === 'function') {\n return config.model(context)\n }\n return config.model || super.getModel(context)\n }\n }\n const instance = new FunctionalAgent()\n return Object.assign(instance, { __config: config })\n}\n\n// Alias para retrocompatibilidad\nexport { Story as Agent }\n\ntype InitializedStoredContext<Context> = StoredContext<Context> & { content: Context }\n\ntype BuilderSystemPrompt<Context> = (\n context: InitializedStoredContext<Context>\n) => Promise<string> | string\n\ntype BuilderTools<Context> = (\n context: InitializedStoredContext<Context>,\n dataStream: DataStreamWriter\n) => Promise<Record<string, Tool>> | Record<string, Tool>\n\ntype BuilderModel<Context> =\n | string\n | ((context: InitializedStoredContext<Context>) => string)\n\ntype BuilderIncludeBaseTools = { createMessage?: boolean; requestDirection?: boolean; end?: boolean }\n\ntype FluentAgentBuilder<Context> = {\n systemPrompt(fn: BuilderSystemPrompt<Context>): FluentAgentBuilder<Context>\n tools(fn: BuilderTools<Context>): FluentAgentBuilder<Context>\n model(model: BuilderModel<Context>): FluentAgentBuilder<Context>\n opts(opts: AgentOptions): FluentAgentBuilder<Context>\n includeBaseTools(baseTools: BuilderIncludeBaseTools): FluentAgentBuilder<Context>\n config(): AgentConfig<Context>\n build(): AgentInstance<Context>\n}\n\ntype AnyContextInitializer = (context: StoredContext<any>) => Promise<any> | any\n\ntype InferContextFromInitializer<I extends AnyContextInitializer> = Awaited<ReturnType<I>>\n\ntype CreateAgentEntry = {\n context<Initializer extends AnyContextInitializer>(\n initializer: Initializer\n ): FluentAgentBuilder<InferContextFromInitializer<Initializer>>\n initialize<Initializer extends AnyContextInitializer>(\n initializer: Initializer\n ): FluentAgentBuilder<InferContextFromInitializer<Initializer>>\n}\n\nfunction assertConfigComplete<Context>(\n config: Partial<AgentConfig<Context>>\n): asserts config is AgentConfig<Context> {\n if (!config.db) {\n throw new Error(\"createAgent: Debes proporcionar db como parámetro.\")\n }\n\n if (!config.context) {\n throw new Error(\"createAgent: Debes definir context() antes de construir el agente.\")\n }\n\n if (!config.systemPrompt) {\n throw new Error(\"createAgent: Debes definir systemPrompt() antes de construir el agente.\")\n }\n\n if (!config.tools) {\n throw new Error(\"createAgent: Debes definir tools() antes de construir el agente.\")\n }\n}\n\nfunction ensureInitializedContext<Context>(\n context: StoredContext<Context>\n): InitializedStoredContext<Context> {\n if (!context.content) {\n throw new Error(\n \"createAgent: context() debe devolver datos antes de usar systemPrompt/tools.\"\n )\n }\n return context as InitializedStoredContext<Context>\n}\n\nexport function createAgent(db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>): CreateAgentEntry {\n const initializeBuilder = <Initializer extends AnyContextInitializer>(initializer: Initializer) => {\n type Context = InferContextFromInitializer<Initializer>\n\n const typedInitializer: AgentConfig<Context>[\"context\"] = (context) =>\n initializer(context as StoredContext<Context>)\n\n const fluentState: Partial<AgentConfig<Context>> = {\n db,\n context: typedInitializer,\n }\n\n const builder: FluentAgentBuilder<Context> = {\n systemPrompt(systemPrompt) {\n fluentState.systemPrompt = (context) =>\n systemPrompt(ensureInitializedContext(context))\n return builder\n },\n tools(toolsFactory) {\n fluentState.tools = (context, dataStream) =>\n toolsFactory(ensureInitializedContext(context), dataStream)\n return builder\n },\n model(model) {\n if (typeof model === \"function\") {\n fluentState.model = (context) =>\n model(ensureInitializedContext(context))\n } else {\n fluentState.model = model\n }\n return builder\n },\n opts(options) {\n fluentState.opts = options\n return builder\n },\n includeBaseTools(baseTools) {\n fluentState.includeBaseTools = baseTools\n return builder\n },\n config() {\n assertConfigComplete(fluentState)\n return fluentState\n },\n build() {\n assertConfigComplete(fluentState)\n return agent(fluentState)\n },\n }\n\n return builder\n }\n\n return {\n context: initializeBuilder,\n initialize: initializeBuilder,\n }\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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","sourcesContent":["import { init, id, tx, lookup, InstaQLEntity,InstantAdminDatabase } from \"@instantdb/admin\"\nimport { convertToModelMessages, createUIMessageStream, generateText, ModelMessage, smoothStream, stepCountIs, streamText, Tool, tool, UIMessageStreamWriter } from \"ai\"\nimport { openai } from \"@ai-sdk/openai\"\nimport { z } from \"zod\"\n\nimport { UIMessage } from 'ai';\nimport { initLogger } from \"braintrust\";\nimport { AgentService, ContextEvent, ContextIdentifier, StoredContext } from \"./service\";\nimport { ASSISTANT_MESSAGE_TYPE, convertEventsToModelMessages, convertEventToModelMessages, convertModelMessageToEvent, createAssistantEventFromUIMessages, createUserEventFromUIMessages, ResponseMessage, SYSTEM_MESSAGE_TYPE } from \"./events\";\n\nimport { storyDomain } from \"./schema\";\nimport { SchemaOf } from \"@ekairos/domain\";\n\n// Inicializar Braintrust logger\nconst logger = initLogger({\n projectName: \"pulzar platform\",\n apiKey: process.env.BRAINTRUST_API_KEY,\n});\n\n// Define your custom message type with data part schemas\nexport type AgentMessage = UIMessage<\n never, // metadata type\n {\n weather: {\n city: string;\n weather?: string;\n status: 'loading' | 'success';\n };\n notification: {\n message: string;\n level: 'info' | 'warning' | 'error';\n };\n } // data parts type\n>;\n\nexport interface AgentOptions {\n onEventCreated?: (event: any) => void | Promise<void>\n evaluateToolCalls?: (toolCalls: any[]) => Promise<{ success: boolean; message?: string }>\n onToolCallExecuted?: (executionEvent: any) => void | Promise<void>\n onEnd?: (lastEvent: ContextEvent) => void | { end?: boolean } | Promise<void | { end?: boolean }>\n}\n\nexport interface ProgressStreamOptions {\n reasoningEffort?: \"off\" | \"low\" | \"medium\" | \"high\"\n webSearch?: boolean\n}\n\nexport type DataStreamWriter = UIMessageStreamWriter<AgentMessage>\nconst createDataStream = createUIMessageStream;\n\n\nexport abstract class Story<Context> {\n protected db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>\n protected agentService: AgentService\n\n constructor(db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>, private opts: AgentOptions = {}) {\n this.db = db\n this.agentService = new AgentService(db)\n }\n\n protected abstract buildSystemPrompt(context: StoredContext<Context>, ...args: any[]): Promise<string> | string\n protected abstract buildTools(context: StoredContext<Context>, dataStream: DataStreamWriter): Promise<Record<string, Tool>>\n protected abstract initialize(context: StoredContext<Context>): Promise<Context>\n\n protected getModel(context: StoredContext<Context>) {\n return \"openai/gpt-5\"\n }\n\n protected includeBaseTools(): { createMessage: boolean; requestDirection: boolean; end: boolean } {\n return { createMessage: true, requestDirection: true, end: true }\n }\n\n protected async getFinalizationToolNames(): Promise<string[]> {\n return []\n }\n\n private static readonly FINAL_TOOL_NAMES = [\"createMessage\", \"requestDirection\", \"end\"]\n\n protected getBaseTools(dataStream: DataStreamWriter, threadId: string): Record<string, Tool> {\n const include = this.includeBaseTools()\n const baseTools: Record<string, Tool> = {}\n\n if (include.createMessage) {\n baseTools.createMessage = tool({\n description: \"Send a message to the user. Use for final confirmations or information.\",\n inputSchema: z.object({\n message: z.string().describe(\"Message for the user in markdown format\")\n }),\n })\n }\n\n if (include.requestDirection) {\n baseTools.requestDirection = tool({\n description: \"Ask a human for guidance when blocked or unsure.\",\n inputSchema: z.object({\n issue: z.string(),\n context: z.string(),\n suggestedActions: z.array(z.string()).optional(),\n urgency: z.enum([\"low\", \"medium\", \"high\"]).default(\"medium\"),\n }),\n })\n }\n\n if (include.end) {\n baseTools.end = tool({\n description: \"End the current interaction loop.\",\n inputSchema: z.object({}).strict(),\n execute: async () => {\n return { success: true, message: \"Ended\" }\n },\n })\n }\n\n return baseTools\n }\n\n protected async executeCreateMessage(\n eventId: string,\n args: { message: string; type: \"info\" | \"confirmation\" | \"warning\" | \"error\" | \"success\"; includeContext?: boolean },\n threadId: string,\n dataStream?: DataStreamWriter,\n ): Promise<any> {\n const assistantMessage = { id: eventId, role: \"assistant\" as const, content: args.message, createdAt: new Date() } as any\n try {\n await this.saveMessagesToThread(threadId, [assistantMessage])\n } catch { }\n if (dataStream) {\n //dataStream.writeData({ type: \"user-response\", message: args.message, responseType: args.type, includeContext: Boolean(args.includeContext), timestamp: new Date().toISOString() } as any)\n }\n return { success: true, message: args.message, data: { messageId: assistantMessage.id, threadId } }\n }\n\n protected async executeRequestDirection(\n eventId: string,\n args: { issue: string; context: string; suggestedActions?: string[]; urgency: \"low\" | \"medium\" | \"high\" },\n threadId: string,\n _dataStream?: DataStreamWriter,\n ): Promise<any> {\n const systemMessage = { id: eventId, role: \"assistant\" as const, content: `Direction requested: ${args.issue}\\nContext: ${args.context}`, createdAt: new Date() } as any\n return { success: true, message: \"Direction requested\", data: { messageId: systemMessage.id, threadId } }\n }\n\n public async progressStream(\n incomingEvent: ContextEvent,\n contextIdentifier: ContextIdentifier | null,\n options?: ProgressStreamOptions\n ) {\n\n // get or create context\n const currentContext = await this.agentService.getOrCreateContext<Context>(contextIdentifier)\n\n const contextSelector: ContextIdentifier = contextIdentifier?.id\n ? { id: String(contextIdentifier.id) }\n : contextIdentifier?.key\n ? { key: contextIdentifier.key }\n : { id: String(currentContext.id) }\n\n // save incoming event\n const triggerEvent = await this.agentService.saveEvent(contextSelector, incomingEvent)\n\n const triggerEventId = triggerEvent.id // trigger event id\n const eventId = id() // reaction event id\n\n // Set context status to \"streaming\" before creating execution\n await this.agentService.updateContextStatus(contextSelector, \"streaming\")\n\n // create execution and set context status\n const execution = await this.agentService.createExecution(contextSelector, triggerEventId, eventId)\n const executionId = execution.id\n\n let latestReactionEvent: ContextEvent | null = null\n let executionStatus: \"executing\" | \"completed\" | \"failed\" = \"executing\"\n\n const markFailure = async () => {\n if (latestReactionEvent && latestReactionEvent.status !== \"failed\") {\n try {\n latestReactionEvent = await this.agentService.updateEvent(latestReactionEvent.id, {\n ...latestReactionEvent,\n status: \"failed\",\n })\n }\n catch (eventError) {\n console.error(\"Failed to mark reaction event as failed\", eventError)\n }\n }\n\n if (executionStatus === \"executing\") {\n try {\n await this.agentService.completeExecution(contextSelector, executionId, \"failed\")\n executionStatus = \"failed\"\n }\n catch (executionError) {\n console.error(\"Failed to mark execution as failed\", executionError)\n }\n }\n }\n\n const dataStreamResult = createDataStream({\n execute: async ({ writer: dataStream }: { writer: DataStreamWriter }) => {\n let loopSafety = 0\n const MAX_LOOPS = 20\n\n // load previous events (already in chronological order from InstantDB)\n const events: ContextEvent[] = await this.agentService.getEvents(contextSelector)\n const contextId = currentContext.id\n \n console.log(\"[agent] Loaded events from InstantDB:\", {\n contextId,\n eventsCount: events.length,\n eventsPreview: events.slice(-3).map((e: any) => ({\n id: e.id,\n type: e.type,\n createdAt: e.createdAt\n }))\n })\n\n let reactionEvent = await this.agentService.saveEvent(contextSelector, {\n id: eventId,\n type: \"assistant\",\n channel: \"agent\",\n createdAt: new Date().toISOString(),\n content: { parts: [] },\n status: \"pending\",\n })\n latestReactionEvent = reactionEvent\n\n dataStream.write({ type: \"event-start\", data: { eventId: eventId } } as any)\n while (loopSafety < MAX_LOOPS) {\n\n dataStream.write({ type: \"start-step\" })\n\n loopSafety++\n\n // Read context\n const currentContext = await this.agentService.getContext<Context>(contextSelector)\n dataStream.write({ type: \"data-context-id\", data: { contextId: currentContext.id } } as any)\n\n // Initialize on each loop and get new context data\n const contextContent = await this.initialize(currentContext)\n\n // Update context\n const updatedContext = await this.agentService.updateContextContent({ id: String(currentContext.id) }, contextContent)\n\n // Build tools\n const subclassToolsAll = await this.buildTools(updatedContext, dataStream)\n\n // Build base tools for agent loop control\n const baseTools = this.getBaseTools(dataStream, String(updatedContext.id))\n const tools: Record<string, Tool> = { ...subclassToolsAll, ...baseTools }\n\n // Add web search if enabled\n if (options?.webSearch) {\n tools.web_search = openai.tools.webSearch() as any\n }\n\n // Extract execute functions from tools\n const executeMap: Record<string, (args: any) => Promise<any>> = {}\n for (const [name, t] of Object.entries(subclassToolsAll)) {\n if ((t as any).execute) {\n executeMap[name] = (t as any).execute as (args: any) => Promise<any>\n }\n }\n\n const include = this.includeBaseTools()\n if (include.createMessage) {\n executeMap[\"createMessage\"] = (args: any) => this.executeCreateMessage(eventId, args, String(updatedContext.id), dataStream)\n }\n if (include.requestDirection) {\n executeMap[\"requestDirection\"] = (args: any) => this.executeRequestDirection(eventId, args, String(updatedContext.id), dataStream)\n }\n\n for (const [, t] of Object.entries(tools)) {\n delete (t as any).execute\n }\n\n const messagesForModel: ModelMessage[] = await convertEventsToModelMessages(\n reactionEvent.status !== \"pending\"\n ? [...events, reactionEvent]\n : [...events],\n this.db\n )\n\n const systemPrompt = await this.buildSystemPrompt(updatedContext)\n\n const providerOptions: any = {}\n const hasReasoning = options?.reasoningEffort && options.reasoningEffort !== \"off\"\n \n if (hasReasoning) {\n providerOptions.openai = {\n reasoningEffort: options.reasoningEffort,\n reasoningSummary: 'detailed',\n }\n console.log(\"[agent] Reasoning enabled:\", {\n reasoningEffort: options.reasoningEffort,\n model: this.getModel(updatedContext),\n providerOptions\n })\n } else {\n console.log(\"[agent] Reasoning disabled or off\")\n }\n\n // Allow more steps when using reasoning to give the model time to think\n const maxSteps = hasReasoning ? 5 : 1\n\n const result = streamText({\n model: this.getModel(updatedContext),\n system: systemPrompt,\n messages: messagesForModel,\n tools,\n toolChoice: \"required\",\n onStepFinish: (step) => {\n console.log(\"onStepFinish\", step)\n },\n stopWhen: stepCountIs(maxSteps),\n experimental_transform: smoothStream({\n delayInMs: 30,\n chunking: 'word',\n }),\n ...(Object.keys(providerOptions).length > 0 && { providerOptions }),\n })\n\n result.consumeStream()\n\n // create promise\n let resolveFinish!: (value: ContextEvent) => void\n let rejectFinish!: (reason?: unknown) => void\n const finishPromise = new Promise<ContextEvent>((resolve, reject) => {\n resolveFinish = resolve\n rejectFinish = reject\n })\n\n dataStream.merge(result.toUIMessageStream({\n sendStart: false,\n generateMessageId: () => {\n return eventId\n },\n messageMetadata(options) {\n return {\n eventId: eventId,\n }\n },\n onFinish: ({ messages }) => {\n console.log(\"[agent] Messages finished:\", messages.map((m: any) => ({\n role: m.role,\n parts: m.parts?.map((p: any) => ({\n type: p.type,\n text: p.text?.substring(0, 100),\n hasReasoning: p.type === \"reasoning\"\n }))\n })))\n const lastEvent = createAssistantEventFromUIMessages(eventId, messages)\n resolveFinish(lastEvent)\n },\n onError: (e: unknown) => {\n console.error(\"Agent error:\", e)\n rejectFinish(e)\n const message = e instanceof Error ? e.message : String(e)\n return message\n }\n }).pipeThrough(new TransformStream({\n transform(chunk: any, controller: any) {\n\n if (chunk.type === \"start\") {\n return;\n }\n\n if (chunk.type === \"finish-step\") {\n return;\n }\n\n if (chunk.type === \"start-step\") {\n return\n }\n\n if (chunk.type === \"finish\") {\n return;\n }\n\n controller.enqueue(chunk as any)\n }\n })))\n\n // wait for the on finish here\n const lastEvent = await finishPromise\n\n const toolCalls = lastEvent.content.parts.reduce((acc: any[], p: any) => {\n if (typeof p.type === \"string\" && p.type.startsWith(\"tool-\")) {\n const toolName = p.type.split(\"-\")[1]\n acc.push({ toolCallId: p.toolCallId, toolName: toolName, args: p.input });\n }\n return acc;\n }, []);\n\n console.log(\"agent.toolCalls.detected\", {\n eventId,\n toolCalls: toolCalls.map((call: any) => ({ toolCallId: call.toolCallId, toolName: call.toolName }))\n });\n\n if (!toolCalls.length) {\n const shouldEndInteraction = await this.callOnEnd(lastEvent)\n if (shouldEndInteraction) {\n break\n }\n continue\n }\n const reactionEventWithParts = {\n ...reactionEvent,\n content: { parts: [...reactionEvent.content.parts, ...lastEvent.content.parts] },\n }\n\n let currentEventState = await this.agentService.updateEvent(reactionEvent.id, reactionEventWithParts)\n latestReactionEvent = currentEventState\n\n const executionResults = await Promise.all(toolCalls.map(async (tc: any) => {\n console.log(\"agent.toolCall.selected\", {\n eventId,\n toolCallId: tc.toolCallId,\n toolName: tc.toolName\n })\n\n let execSuccess = true\n let execMessage = \"Executed\"\n let execResult: any = null\n try {\n const execFn = executeMap[tc.toolName]\n if (execFn) {\n console.log(\"agent.toolCall.execute.start\", { toolCallId: tc.toolCallId, toolName: tc.toolName })\n execResult = await execFn(tc.args)\n execSuccess = execResult?.success !== false\n execMessage = execResult?.message || execMessage\n console.log(\"agent.toolCall.execute.success\", {\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n success: execSuccess\n })\n console.log(\"agent.toolCall.execute.result\", {\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n result: execResult\n })\n }\n }\n catch (err: any) {\n execSuccess = false\n execMessage = err.message\n console.error(\"agent.toolCall.execute.error\", {\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n error: err\n })\n }\n\n return { tc, execSuccess, execMessage, execResult }\n }))\n\n let exitOuterLoop = false\n const customFinalizationTools = await this.getFinalizationToolNames()\n const allFinalToolNames = [...Story.FINAL_TOOL_NAMES, ...customFinalizationTools]\n\n for (const { tc, execSuccess, execMessage, execResult } of executionResults) {\n try {\n if (execSuccess) {\n dataStream.write({\n type: \"tool-output-available\",\n toolCallId: tc.toolCallId,\n output: execResult,\n } as any)\n }\n else {\n dataStream.write({\n type: \"tool-output-error\",\n toolCallId: tc.toolCallId,\n errorText: String(execMessage || \"Error\"),\n } as any)\n }\n }\n catch (e) {\n console.error(\"Failed to write tool result to stream\", e)\n }\n\n const existingParts = currentEventState?.content?.parts || []\n const mergedParts = existingParts.map((p: any) => {\n if (p.type === `tool-${tc.toolName}` && p.toolCallId === tc.toolCallId) {\n if (execSuccess) {\n return {\n ...p,\n state: \"output-available\",\n output: execResult,\n }\n }\n return {\n ...p,\n state: \"output-error\",\n errorText: String(execMessage || \"Error\"),\n }\n }\n return p\n })\n\n currentEventState = await this.agentService.updateEvent(currentEventState.id, {\n id: currentEventState.id,\n type: currentEventState.type,\n channel: \"agent\",\n createdAt: currentEventState.createdAt,\n content: { parts: mergedParts },\n })\n\n dataStream.write({ type: \"finish-step\" })\n\n await this.opts.onToolCallExecuted?.({\n id: currentEventState.id,\n toolCall: tc,\n event: currentEventState.id,\n success: execSuccess,\n message: execMessage,\n result: execResult,\n })\n\n let shouldEnd = false\n if (!execSuccess) {\n const shouldEndInteraction = await this.callOnEnd(lastEvent)\n if (shouldEndInteraction) {\n shouldEnd = true\n }\n }\n\n if (!shouldEnd) {\n if (allFinalToolNames.includes(tc.toolName)) {\n const shouldEndInteraction = await this.callOnEnd(lastEvent)\n if (shouldEndInteraction) {\n shouldEnd = true\n }\n }\n }\n\n if (shouldEnd) {\n dataStream.write({ type: \"finish\", override: true } as any)\n exitOuterLoop = true\n break\n }\n }\n\n reactionEvent = currentEventState\n\n if (exitOuterLoop) {\n break\n }\n }\n reactionEvent = await this.agentService.updateEvent(reactionEvent.id, {\n ...reactionEvent,\n status: \"completed\",\n })\n latestReactionEvent = reactionEvent\n try {\n await this.agentService.completeExecution(contextSelector, executionId, \"completed\")\n executionStatus = \"completed\"\n }\n catch (error) {\n console.error(\"Failed to mark execution as completed\", error)\n }\n },\n onError: (error) => {\n console.error(\"Agent error:\", error)\n void markFailure()\n return error instanceof Error ? error.message : String(error)\n },\n onFinish: async () => {\n if (executionStatus === \"executing\") {\n try {\n await this.agentService.completeExecution(contextSelector, executionId, \"completed\")\n executionStatus = \"completed\"\n }\n catch (executionError) {\n console.error(\"Failed to finalize execution on finish\", executionError)\n }\n }\n console.log(\"Agent finished\")\n }\n })\n\n // start the stream\n\n const dataStreamFilteredResult = dataStreamResult.pipeThrough(new TransformStream({\n transform(chunk: any, controller: any) {\n if (chunk.type === \"start\") {\n console.log(\"start\", chunk.data)\n return;\n }\n\n if (chunk.type === \"event-start\") {\n controller.enqueue({ type: \"start\", messageId: chunk.data.eventId })\n return;\n }\n\n controller.enqueue(chunk as any)\n }\n }))\n\n return {\n contextId: currentContext.id,\n triggerEventId,\n reactionEventId: eventId,\n stream: dataStreamFilteredResult,\n executionId,\n }\n }\n\n private async saveMessagesToThread(threadId: string, messages: Array<any>) {\n // Placeholder for persistence hook. Not implemented in current scope.\n return\n }\n\n private async callOnEnd(lastEvent: ContextEvent): Promise<boolean> {\n if (!this.opts.onEnd) {\n return true\n }\n\n try {\n const result = await this.opts.onEnd(lastEvent)\n if (typeof result === \"boolean\") {\n return result\n }\n if (result && typeof result === \"object\") {\n if (Object.prototype.hasOwnProperty.call(result, \"end\")) {\n return Boolean(result.end)\n }\n }\n return true\n } catch (error) {\n console.error(\"onEnd callback failed\", error)\n return true\n }\n }\n\n\n\n\n}\n\nexport interface AgentConfig<Context> {\n db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>\n context: (context: StoredContext<Context>) => Promise<Context> | Context\n systemPrompt: (context: StoredContext<Context>) => Promise<string> | string\n tools: (context: StoredContext<Context>, dataStream: DataStreamWriter) => Promise<Record<string, Tool>> | Record<string, Tool>\n model?: string | ((context: StoredContext<Context>) => string)\n opts?: AgentOptions\n includeBaseTools?: { createMessage?: boolean; requestDirection?: boolean; end?: boolean }\n}\n\nexport type AgentInstance<Context> = Story<Context> & {\n readonly __config: AgentConfig<Context>\n}\n\nexport function agent<Context>(config: AgentConfig<Context>): AgentInstance<Context> {\n class FunctionalAgent extends Story<Context> {\n public readonly __config = config\n\n constructor() {\n super(config.db, config.opts)\n }\n\n protected includeBaseTools(): { createMessage: boolean; requestDirection: boolean; end: boolean } {\n if (config.includeBaseTools) {\n return {\n createMessage: config.includeBaseTools.createMessage ?? true,\n requestDirection: config.includeBaseTools.requestDirection ?? true,\n end: config.includeBaseTools.end ?? true,\n }\n }\n return super.includeBaseTools()\n }\n\n protected async buildSystemPrompt(context: StoredContext<Context>) {\n return config.systemPrompt(context)\n }\n\n protected async buildTools(context: StoredContext<Context>, dataStream: DataStreamWriter) {\n return config.tools(context, dataStream)\n }\n\n protected async initialize(context: StoredContext<Context>) {\n return config.context(context)\n }\n\n protected getModel(context: StoredContext<Context>) {\n if (typeof config.model === 'function') {\n return config.model(context)\n }\n return config.model || super.getModel(context)\n }\n }\n const instance = new FunctionalAgent()\n return Object.assign(instance, { __config: config })\n}\n\n// Alias para retrocompatibilidad\nexport { Story as Agent }\n\ntype InitializedStoredContext<Context> = StoredContext<Context> & { content: Context }\n\ntype BuilderSystemPrompt<Context> = (\n context: InitializedStoredContext<Context>\n) => Promise<string> | string\n\ntype BuilderTools<Context> = (\n context: InitializedStoredContext<Context>,\n dataStream: DataStreamWriter\n) => Promise<Record<string, Tool>> | Record<string, Tool>\n\ntype BuilderModel<Context> =\n | string\n | ((context: InitializedStoredContext<Context>) => string)\n\ntype BuilderIncludeBaseTools = { createMessage?: boolean; requestDirection?: boolean; end?: boolean }\n\ntype FluentAgentBuilder<Context> = {\n systemPrompt(fn: BuilderSystemPrompt<Context>): FluentAgentBuilder<Context>\n tools(fn: BuilderTools<Context>): FluentAgentBuilder<Context>\n model(model: BuilderModel<Context>): FluentAgentBuilder<Context>\n opts(opts: AgentOptions): FluentAgentBuilder<Context>\n includeBaseTools(baseTools: BuilderIncludeBaseTools): FluentAgentBuilder<Context>\n config(): AgentConfig<Context>\n build(): AgentInstance<Context>\n}\n\ntype AnyContextInitializer = (context: StoredContext<any>) => Promise<any> | any\n\ntype InferContextFromInitializer<I extends AnyContextInitializer> = Awaited<ReturnType<I>>\n\ntype CreateAgentEntry = {\n context<Initializer extends AnyContextInitializer>(\n initializer: Initializer\n ): FluentAgentBuilder<InferContextFromInitializer<Initializer>>\n initialize<Initializer extends AnyContextInitializer>(\n initializer: Initializer\n ): FluentAgentBuilder<InferContextFromInitializer<Initializer>>\n}\n\nfunction assertConfigComplete<Context>(\n config: Partial<AgentConfig<Context>>\n): asserts config is AgentConfig<Context> {\n if (!config.db) {\n throw new Error(\"createAgent: Debes proporcionar db como parámetro.\")\n }\n\n if (!config.context) {\n throw new Error(\"createAgent: Debes definir context() antes de construir el agente.\")\n }\n\n if (!config.systemPrompt) {\n throw new Error(\"createAgent: Debes definir systemPrompt() antes de construir el agente.\")\n }\n\n if (!config.tools) {\n throw new Error(\"createAgent: Debes definir tools() antes de construir el agente.\")\n }\n}\n\nfunction ensureInitializedContext<Context>(\n context: StoredContext<Context>\n): InitializedStoredContext<Context> {\n if (!context.content) {\n throw new Error(\n \"createAgent: context() debe devolver datos antes de usar systemPrompt/tools.\"\n )\n }\n return context as InitializedStoredContext<Context>\n}\n\nexport function createAgent(db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>): CreateAgentEntry {\n const initializeBuilder = <Initializer extends AnyContextInitializer>(initializer: Initializer) => {\n type Context = InferContextFromInitializer<Initializer>\n\n const typedInitializer: AgentConfig<Context>[\"context\"] = (context) =>\n initializer(context as StoredContext<Context>)\n\n const fluentState: Partial<AgentConfig<Context>> = {\n db,\n context: typedInitializer,\n }\n\n const builder: FluentAgentBuilder<Context> = {\n systemPrompt(systemPrompt) {\n fluentState.systemPrompt = (context) =>\n systemPrompt(ensureInitializedContext(context))\n return builder\n },\n tools(toolsFactory) {\n fluentState.tools = (context, dataStream) =>\n toolsFactory(ensureInitializedContext(context), dataStream)\n return builder\n },\n model(model) {\n if (typeof model === \"function\") {\n fluentState.model = (context) =>\n model(ensureInitializedContext(context))\n } else {\n fluentState.model = model\n }\n return builder\n },\n opts(options) {\n fluentState.opts = options\n return builder\n },\n includeBaseTools(baseTools) {\n fluentState.includeBaseTools = baseTools\n return builder\n },\n config() {\n assertConfigComplete(fluentState)\n return fluentState\n },\n build() {\n assertConfigComplete(fluentState)\n return agent(fluentState)\n },\n }\n\n return builder\n }\n\n return {\n context: initializeBuilder,\n initialize: initializeBuilder,\n }\n}\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-parser.d.ts","sourceRoot":"","sources":["../src/document-parser.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AA6GD;;GAEG;AACH,wBAAsB,qBAAqB,CACvC,EAAE,EAAE,GAAG,EACP,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"document-parser.d.ts","sourceRoot":"","sources":["../src/document-parser.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AA6GD;;GAEG;AACH,wBAAsB,qBAAqB,CACvC,EAAE,EAAE,GAAG,EACP,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAiEjB;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAatG"}
|
package/dist/document-parser.js
CHANGED
|
@@ -86,15 +86,15 @@ async function waitForProcessing(jobId, maxAttempts = 60) {
|
|
|
86
86
|
async function parseAndStoreDocument(db, buffer, fileName, path, fileId) {
|
|
87
87
|
try {
|
|
88
88
|
const existingDocument = await db.query({
|
|
89
|
-
|
|
89
|
+
document_documents: {
|
|
90
90
|
$: {
|
|
91
91
|
where: { 'file.id': fileId }
|
|
92
92
|
},
|
|
93
93
|
file: {}
|
|
94
94
|
}
|
|
95
95
|
});
|
|
96
|
-
if (existingDocument.
|
|
97
|
-
const docId = existingDocument.
|
|
96
|
+
if (existingDocument.document_documents && existingDocument.document_documents.length > 0) {
|
|
97
|
+
const docId = existingDocument.document_documents[0].id;
|
|
98
98
|
console.log(`Documento ya existe para el archivo ${fileName}: ${docId}`);
|
|
99
99
|
return docId;
|
|
100
100
|
}
|
|
@@ -122,11 +122,13 @@ async function parseAndStoreDocument(db, buffer, fileName, path, fileId) {
|
|
|
122
122
|
}
|
|
123
123
|
const documentId = (0, admin_1.id)();
|
|
124
124
|
await db.transact([
|
|
125
|
-
db.tx.
|
|
125
|
+
db.tx.document_documents[documentId].update({
|
|
126
126
|
content: { pages },
|
|
127
|
-
|
|
127
|
+
name: fileName,
|
|
128
|
+
mimeType: 'application/pdf',
|
|
129
|
+
createdAt: new Date(),
|
|
128
130
|
}),
|
|
129
|
-
db.tx.
|
|
131
|
+
db.tx.document_documents[documentId].link({
|
|
130
132
|
file: fileId
|
|
131
133
|
})
|
|
132
134
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-parser.js","sourceRoot":"","sources":["../src/document-parser.ts"],"names":[],"mappings":"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","sourcesContent":["\r\nimport { id, init } from '@instantdb/admin';\r\n\r\n\r\nconst LLAMA_CLOUD_BASE_URL = 'https://api.cloud.llamaindex.ai/api/v1';\r\n\r\ninterface DocumentPage {\r\n id: string;\r\n text: string;\r\n}\r\n\r\nexport interface DocumentToProcess {\r\n buffer: Buffer;\r\n fileName: string;\r\n path: string;\r\n fileId: string;\r\n}\r\n\r\ninterface LlamaParseUploadResponse {\r\n id: string;\r\n status: string;\r\n}\r\n\r\ninterface LlamaParseStatusResponse {\r\n status: string;\r\n}\r\n\r\ninterface LlamaParseResultResponse {\r\n markdown?: string;\r\n pages?: Array<{ page: number; text: string; }>;\r\n}\r\n\r\n/**\r\n * Sube un archivo a LlamaCloud para procesamiento\r\n */\r\nasync function uploadToLlamaCloud(buffer: Buffer, fileName: string): Promise<string> {\r\n const formData = new FormData();\r\n \r\n const uint8Array = new Uint8Array(buffer);\r\n const blob = new Blob([uint8Array], { type: 'application/pdf' });\r\n formData.append('file', blob, fileName);\r\n formData.append('parse_mode', 'parse_page_with_llm');\r\n formData.append('high_res_ocr', 'true');\r\n formData.append('adaptive_long_table', 'true');\r\n formData.append('outlined_table_extraction', 'true');\r\n formData.append('output_tables_as_HTML', 'true');\r\n\r\n const response = await fetch(`${LLAMA_CLOUD_BASE_URL}/parsing/upload`, {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${process.env.LLAMA_CLOUD_API_KEY}`,\r\n },\r\n body: formData\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(`LlamaCloud upload failed: ${response.status} ${errorText}`);\r\n }\r\n\r\n const result = await response.json() as unknown as LlamaParseUploadResponse;\r\n return result.id;\r\n}\r\n\r\n/**\r\n * Obtiene el estado del job de procesamiento\r\n */\r\nasync function getJobStatus(jobId: string): Promise<LlamaParseStatusResponse> {\r\n const response = await fetch(`${LLAMA_CLOUD_BASE_URL}/parsing/job/${jobId}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${process.env.LLAMA_CLOUD_API_KEY}`,\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(`LlamaCloud status fetch failed: ${response.status} ${errorText}`);\r\n }\r\n\r\n return await response.json() as unknown as LlamaParseStatusResponse;\r\n}\r\n\r\n/**\r\n * Obtiene el resultado del procesamiento de LlamaCloud\r\n */\r\nasync function getParseResult(jobId: string): Promise<LlamaParseResultResponse> {\r\n const response = await fetch(`${LLAMA_CLOUD_BASE_URL}/parsing/job/${jobId}/result/markdown`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${process.env.LLAMA_CLOUD_API_KEY}`,\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(`LlamaCloud result fetch failed: ${response.status} ${errorText}`);\r\n }\r\n\r\n return await response.json() as unknown as LlamaParseResultResponse;\r\n}\r\n\r\n/**\r\n * Espera hasta que el procesamiento esté completo\r\n */\r\nasync function waitForProcessing(jobId: string, maxAttempts: number = 60): Promise<LlamaParseResultResponse> {\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n const statusResponse = await getJobStatus(jobId);\r\n \r\n console.log(`Job ${jobId} status: ${statusResponse.status} (attempt ${attempt + 1}/${maxAttempts})`);\r\n \r\n if (statusResponse.status === 'SUCCESS' || statusResponse.status === 'COMPLETED') {\r\n return await getParseResult(jobId);\r\n }\r\n \r\n if (statusResponse.status === 'ERROR' || statusResponse.status === 'FAILED') {\r\n throw new Error(`LlamaCloud processing failed with status: ${statusResponse.status}`);\r\n }\r\n \r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n }\r\n \r\n throw new Error('LlamaCloud processing timeout');\r\n}\r\n\r\n/**\r\n * Procesa un documento utilizando LlamaParse y almacena el resultado en la base de datos\r\n */\r\nexport async function parseAndStoreDocument(\r\n db: any,\r\n buffer: Buffer,\r\n fileName: string,\r\n path: string,\r\n fileId: string\r\n): Promise<string> {\r\n try {\r\n const existingDocument = await db.query({\r\n documents: {\r\n $: {\r\n where: { 'file.id': fileId }\r\n },\r\n file: {}\r\n }\r\n });\r\n\r\n if (existingDocument.documents && existingDocument.documents.length > 0) {\r\n const docId = existingDocument.documents[0].id;\r\n console.log(`Documento ya existe para el archivo ${fileName}: ${docId}`);\r\n return docId;\r\n }\r\n\r\n console.log(`Procesando nuevo documento: ${fileName}`);\r\n\r\n const jobId = await uploadToLlamaCloud(buffer, fileName);\r\n console.log(`Documento subido a LlamaCloud con job ID: ${jobId}`);\r\n\r\n const result = await waitForProcessing(jobId);\r\n \r\n const pages: DocumentPage[] = [];\r\n \r\n if (result.markdown) {\r\n pages.push({\r\n id: id(),\r\n text: result.markdown\r\n });\r\n }\r\n \r\n if (result.pages && result.pages.length > 0) {\r\n for (const page of result.pages) {\r\n pages.push({\r\n id: id(),\r\n text: page.text\r\n });\r\n }\r\n }\r\n\r\n if (pages.length === 0) {\r\n throw new Error('No se pudo extraer contenido del documento');\r\n }\r\n\r\n const documentId = id();\r\n await db.transact([\r\n db.tx.documents[documentId].update({\r\n content: { pages },\r\n processedAt: new Date().toISOString()\r\n }),\r\n db.tx.documents[documentId].link({\r\n file: fileId\r\n })\r\n ]);\r\n\r\n console.log(`Documento procesado con éxito: ${fileName} -> ${documentId}`);\r\n return documentId;\r\n } catch (error) {\r\n console.error(`Error al procesar el documento ${fileName}:`, error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Procesa un conjunto de documentos en segundo plano\r\n * Puede ser utilizado con after() en Next.js o en cualquier contexto de procesamiento asíncrono\r\n */\r\nexport async function processBatchDocuments(db: any, documents: DocumentToProcess[]): Promise<string[]> {\r\n try {\r\n const promises = documents.map(doc =>\r\n parseAndStoreDocument(db, doc.buffer, doc.fileName, doc.path, doc.fileId)\r\n );\r\n\r\n const results = await Promise.all(promises);\r\n console.log('Todos los documentos procesados correctamente');\r\n return results;\r\n } catch (error) {\r\n console.error('Error en el procesamiento por lotes de documentos:', error);\r\n throw error;\r\n }\r\n} "]}
|
|
1
|
+
{"version":3,"file":"document-parser.js","sourceRoot":"","sources":["../src/document-parser.ts"],"names":[],"mappings":"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","sourcesContent":["\r\nimport { id, init } from '@instantdb/admin';\r\n\r\n\r\nconst LLAMA_CLOUD_BASE_URL = 'https://api.cloud.llamaindex.ai/api/v1';\r\n\r\ninterface DocumentPage {\r\n id: string;\r\n text: string;\r\n}\r\n\r\nexport interface DocumentToProcess {\r\n buffer: Buffer;\r\n fileName: string;\r\n path: string;\r\n fileId: string;\r\n}\r\n\r\ninterface LlamaParseUploadResponse {\r\n id: string;\r\n status: string;\r\n}\r\n\r\ninterface LlamaParseStatusResponse {\r\n status: string;\r\n}\r\n\r\ninterface LlamaParseResultResponse {\r\n markdown?: string;\r\n pages?: Array<{ page: number; text: string; }>;\r\n}\r\n\r\n/**\r\n * Sube un archivo a LlamaCloud para procesamiento\r\n */\r\nasync function uploadToLlamaCloud(buffer: Buffer, fileName: string): Promise<string> {\r\n const formData = new FormData();\r\n \r\n const uint8Array = new Uint8Array(buffer);\r\n const blob = new Blob([uint8Array], { type: 'application/pdf' });\r\n formData.append('file', blob, fileName);\r\n formData.append('parse_mode', 'parse_page_with_llm');\r\n formData.append('high_res_ocr', 'true');\r\n formData.append('adaptive_long_table', 'true');\r\n formData.append('outlined_table_extraction', 'true');\r\n formData.append('output_tables_as_HTML', 'true');\r\n\r\n const response = await fetch(`${LLAMA_CLOUD_BASE_URL}/parsing/upload`, {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Bearer ${process.env.LLAMA_CLOUD_API_KEY}`,\r\n },\r\n body: formData\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(`LlamaCloud upload failed: ${response.status} ${errorText}`);\r\n }\r\n\r\n const result = await response.json() as unknown as LlamaParseUploadResponse;\r\n return result.id;\r\n}\r\n\r\n/**\r\n * Obtiene el estado del job de procesamiento\r\n */\r\nasync function getJobStatus(jobId: string): Promise<LlamaParseStatusResponse> {\r\n const response = await fetch(`${LLAMA_CLOUD_BASE_URL}/parsing/job/${jobId}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${process.env.LLAMA_CLOUD_API_KEY}`,\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(`LlamaCloud status fetch failed: ${response.status} ${errorText}`);\r\n }\r\n\r\n return await response.json() as unknown as LlamaParseStatusResponse;\r\n}\r\n\r\n/**\r\n * Obtiene el resultado del procesamiento de LlamaCloud\r\n */\r\nasync function getParseResult(jobId: string): Promise<LlamaParseResultResponse> {\r\n const response = await fetch(`${LLAMA_CLOUD_BASE_URL}/parsing/job/${jobId}/result/markdown`, {\r\n method: 'GET',\r\n headers: {\r\n 'Authorization': `Bearer ${process.env.LLAMA_CLOUD_API_KEY}`,\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n const errorText = await response.text();\r\n throw new Error(`LlamaCloud result fetch failed: ${response.status} ${errorText}`);\r\n }\r\n\r\n return await response.json() as unknown as LlamaParseResultResponse;\r\n}\r\n\r\n/**\r\n * Espera hasta que el procesamiento esté completo\r\n */\r\nasync function waitForProcessing(jobId: string, maxAttempts: number = 60): Promise<LlamaParseResultResponse> {\r\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\r\n const statusResponse = await getJobStatus(jobId);\r\n \r\n console.log(`Job ${jobId} status: ${statusResponse.status} (attempt ${attempt + 1}/${maxAttempts})`);\r\n \r\n if (statusResponse.status === 'SUCCESS' || statusResponse.status === 'COMPLETED') {\r\n return await getParseResult(jobId);\r\n }\r\n \r\n if (statusResponse.status === 'ERROR' || statusResponse.status === 'FAILED') {\r\n throw new Error(`LlamaCloud processing failed with status: ${statusResponse.status}`);\r\n }\r\n \r\n await new Promise(resolve => setTimeout(resolve, 2000));\r\n }\r\n \r\n throw new Error('LlamaCloud processing timeout');\r\n}\r\n\r\n/**\r\n * Procesa un documento utilizando LlamaParse y almacena el resultado en la base de datos\r\n */\r\nexport async function parseAndStoreDocument(\r\n db: any,\r\n buffer: Buffer,\r\n fileName: string,\r\n path: string,\r\n fileId: string\r\n): Promise<string> {\r\n try {\r\n const existingDocument = await db.query({\r\n document_documents: {\r\n $: {\r\n where: { 'file.id': fileId }\r\n },\r\n file: {}\r\n }\r\n });\r\n\r\n if (existingDocument.document_documents && existingDocument.document_documents.length > 0) {\r\n const docId = existingDocument.document_documents[0].id;\r\n console.log(`Documento ya existe para el archivo ${fileName}: ${docId}`);\r\n return docId;\r\n }\r\n\r\n console.log(`Procesando nuevo documento: ${fileName}`);\r\n\r\n const jobId = await uploadToLlamaCloud(buffer, fileName);\r\n console.log(`Documento subido a LlamaCloud con job ID: ${jobId}`);\r\n\r\n const result = await waitForProcessing(jobId);\r\n \r\n const pages: DocumentPage[] = [];\r\n \r\n if (result.markdown) {\r\n pages.push({\r\n id: id(),\r\n text: result.markdown\r\n });\r\n }\r\n \r\n if (result.pages && result.pages.length > 0) {\r\n for (const page of result.pages) {\r\n pages.push({\r\n id: id(),\r\n text: page.text\r\n });\r\n }\r\n }\r\n\r\n if (pages.length === 0) {\r\n throw new Error('No se pudo extraer contenido del documento');\r\n }\r\n\r\n const documentId = id();\r\n await db.transact([\r\n db.tx.document_documents[documentId].update({\r\n content: { pages },\r\n name: fileName,\r\n mimeType: 'application/pdf',\r\n createdAt: new Date(),\r\n }),\r\n db.tx.document_documents[documentId].link({\r\n file: fileId\r\n })\r\n ]);\r\n\r\n console.log(`Documento procesado con éxito: ${fileName} -> ${documentId}`);\r\n return documentId;\r\n } catch (error) {\r\n console.error(`Error al procesar el documento ${fileName}:`, error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Procesa un conjunto de documentos en segundo plano\r\n * Puede ser utilizado con after() en Next.js o en cualquier contexto de procesamiento asíncrono\r\n */\r\nexport async function processBatchDocuments(db: any, documents: DocumentToProcess[]): Promise<string[]> {\r\n try {\r\n const promises = documents.map(doc =>\r\n parseAndStoreDocument(db, doc.buffer, doc.fileName, doc.path, doc.fileId)\r\n );\r\n\r\n const results = await Promise.all(promises);\r\n console.log('Todos los documentos procesados correctamente');\r\n return results;\r\n } catch (error) {\r\n console.error('Error en el procesamiento por lotes de documentos:', error);\r\n throw error;\r\n }\r\n} "]}
|
package/dist/events.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type InstantAdminDatabase } from "@instantdb/admin";
|
|
2
2
|
import { type ModelMessage, type UIMessage } from "ai";
|
|
3
3
|
import type { ContextEvent } from "./service";
|
|
4
|
+
import { SchemaOf } from "@ekairos/domain";
|
|
5
|
+
import { storyDomain } from "./schema";
|
|
4
6
|
export declare const USER_MESSAGE_TYPE = "user.message";
|
|
5
7
|
export declare const ASSISTANT_MESSAGE_TYPE = "assistant.message";
|
|
6
8
|
export declare const SYSTEM_MESSAGE_TYPE = "system.message";
|
|
@@ -10,8 +12,8 @@ export declare const EMAIL_CHANNEL = "email";
|
|
|
10
12
|
export declare function createUserEventFromUIMessages(messages: UIMessage[]): ContextEvent;
|
|
11
13
|
export declare function createAssistantEventFromUIMessages(eventId: string, messages: UIMessage[]): ContextEvent;
|
|
12
14
|
export declare function convertToUIMessage(event: ContextEvent): UIMessage;
|
|
13
|
-
export declare function convertEventsToModelMessages(events: ContextEvent[], db:
|
|
14
|
-
export declare function convertEventToModelMessages(event: ContextEvent, db:
|
|
15
|
+
export declare function convertEventsToModelMessages(events: ContextEvent[], db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>): Promise<ModelMessage[]>;
|
|
16
|
+
export declare function convertEventToModelMessages(event: ContextEvent, db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>): Promise<ModelMessage[]>;
|
|
15
17
|
export type AIMessage = {
|
|
16
18
|
id: string;
|
|
17
19
|
role: "user" | "assistant" | "system";
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAA0B,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,IAAI,CAAA;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,eAAO,MAAM,iBAAiB,iBAAiB,CAAA;AAC/C,eAAO,MAAM,sBAAsB,sBAAsB,CAAA;AACzD,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD,eAAO,MAAM,WAAW,QAAQ,CAAA;AAChC,eAAO,MAAM,aAAa,aAAa,CAAA;AACvC,eAAO,MAAM,aAAa,UAAU,CAAA;AAEpC,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,YAAY,CAgBjF;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,YAAY,CAgBvG;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,CAkBjE;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,YAAY,EAAE,EACtB,EAAE,EAAE,oBAAoB,CAAC,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC,GACrD,OAAO,CAAC,YAAY,EAAE,CAAC,CAOzB;AAED,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,YAAY,EACnB,EAAE,EAAE,oBAAoB,CAAC,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC,GACrD,OAAO,CAAC,YAAY,EAAE,CAAC,CA8BzB;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,YAAY,CAAA;CACtB,CAAA;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,YAAY,CAwBlG"}
|
package/dist/events.js
CHANGED
|
@@ -138,7 +138,6 @@ async function convertFilePart(part, db) {
|
|
|
138
138
|
},
|
|
139
139
|
limit: 1,
|
|
140
140
|
},
|
|
141
|
-
document: {},
|
|
142
141
|
},
|
|
143
142
|
});
|
|
144
143
|
fileRecord = Array.isArray(fileQuery.$files) ? fileQuery.$files[0] : undefined;
|
|
@@ -185,22 +184,23 @@ async function convertFilePart(part, db) {
|
|
|
185
184
|
const tempPath = filePath || `/temp/${Date.now()}-${fileName}`;
|
|
186
185
|
const documentId = await (0, document_parser_1.parseAndStoreDocument)(db, Buffer.from(buffer), tempPath, fileName, (0, admin_1.id)());
|
|
187
186
|
const documentQuery = await db.query({
|
|
188
|
-
|
|
187
|
+
document_documents: {
|
|
189
188
|
$: {
|
|
190
189
|
where: {
|
|
191
190
|
id: documentId,
|
|
192
191
|
},
|
|
193
192
|
limit: 1,
|
|
194
193
|
},
|
|
194
|
+
file: {},
|
|
195
195
|
},
|
|
196
196
|
});
|
|
197
|
-
const documentRecord = Array.isArray(documentQuery.
|
|
197
|
+
const documentRecord = Array.isArray(documentQuery.document_documents) ? documentQuery.document_documents[0] : undefined;
|
|
198
198
|
const parts = [];
|
|
199
199
|
parts.push({
|
|
200
200
|
type: "text",
|
|
201
201
|
text: `User attached a file.\nFile Name: "${fileName}"\nMedia Type: ${contentType}`,
|
|
202
202
|
});
|
|
203
|
-
if (documentRecord?.content && Array.isArray(documentRecord.content.pages)) {
|
|
203
|
+
if (documentRecord?.content && typeof documentRecord.content === 'object' && documentRecord.content !== null && 'pages' in documentRecord.content && Array.isArray(documentRecord.content.pages)) {
|
|
204
204
|
const pages = documentRecord.content.pages;
|
|
205
205
|
const pageTexts = pages
|
|
206
206
|
.map((page, index) => {
|
|
@@ -230,16 +230,17 @@ async function convertFilePart(part, db) {
|
|
|
230
230
|
const buffer = await fileResponse.arrayBuffer();
|
|
231
231
|
const documentId = await (0, document_parser_1.parseAndStoreDocument)(db, Buffer.from(buffer), fileRecord.path, fileRecord.path, fileRecord.id);
|
|
232
232
|
const documentQuery = await db.query({
|
|
233
|
-
|
|
233
|
+
document_documents: {
|
|
234
234
|
$: {
|
|
235
235
|
where: {
|
|
236
236
|
id: documentId,
|
|
237
237
|
},
|
|
238
238
|
limit: 1,
|
|
239
239
|
},
|
|
240
|
+
file: {},
|
|
240
241
|
},
|
|
241
242
|
});
|
|
242
|
-
documentRecord = Array.isArray(documentQuery.
|
|
243
|
+
documentRecord = Array.isArray(documentQuery.document_documents) ? documentQuery.document_documents[0] : undefined;
|
|
243
244
|
}
|
|
244
245
|
const parts = [];
|
|
245
246
|
const fileName = documentRecord && typeof documentRecord === "object" && "fileName" in documentRecord
|
package/dist/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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","sourcesContent":["import { id, init, type InstantAdminDatabase } from \"@instantdb/admin\"\nimport { convertToModelMessages, type ModelMessage, type UIMessage } from \"ai\"\nimport type { ContextEvent } from \"./service\"\nimport { parseAndStoreDocument } from \"./document-parser\"\n\nexport const USER_MESSAGE_TYPE = \"user.message\"\nexport const ASSISTANT_MESSAGE_TYPE = \"assistant.message\"\nexport const SYSTEM_MESSAGE_TYPE = \"system.message\"\n\nexport const WEB_CHANNEL = \"web\"\nexport const AGENT_CHANNEL = \"whatsapp\"\nexport const EMAIL_CHANNEL = \"email\"\n\nexport function createUserEventFromUIMessages(messages: UIMessage[]): ContextEvent {\n if (!Array.isArray(messages) || messages.length === 0) {\n throw new Error(\"Missing messages to create event\")\n }\n\n const lastMessage = messages[messages.length - 1]\n\n return {\n id: lastMessage.id,\n type: USER_MESSAGE_TYPE,\n channel: WEB_CHANNEL,\n content: {\n parts: lastMessage.parts,\n },\n createdAt: new Date().toISOString(),\n }\n}\n\nexport function createAssistantEventFromUIMessages(eventId: string, messages: UIMessage[]): ContextEvent {\n if (!Array.isArray(messages) || messages.length === 0) {\n throw new Error(\"Missing messages to create event\")\n }\n\n const lastMessage = messages[messages.length - 1]\n\n return {\n id: eventId,\n type: ASSISTANT_MESSAGE_TYPE,\n channel: WEB_CHANNEL,\n content: {\n parts: lastMessage.parts,\n },\n createdAt: new Date().toISOString(),\n }\n}\n\nexport function convertToUIMessage(event: ContextEvent): UIMessage {\n let role: \"user\" | \"assistant\"\n if (event.type === USER_MESSAGE_TYPE) {\n role = \"user\"\n } else {\n role = \"assistant\"\n }\n\n return {\n id: event.id,\n role: role,\n parts: event.content.parts,\n metadata: {\n channel: event.channel,\n type: event.type,\n createdAt: event.createdAt,\n }\n }\n}\n\nexport async function convertEventsToModelMessages(\n events: ContextEvent[],\n db: ReturnType<typeof init>\n): Promise<ModelMessage[]> {\n const results: ModelMessage[][] = []\n for (const event of events) {\n const messages = await convertEventToModelMessages(event, db)\n results.push(messages)\n }\n return results.flat()\n}\n\nexport async function convertEventToModelMessages(\n event: ContextEvent,\n db: ReturnType<typeof init>\n): Promise<ModelMessage[]> {\n\n // convert files in message\n // const files = event.content.parts.filter(part => part.type === \"file\")\n // 1. copy event to new . we will manipulate the parts\n // 2. each file part will be converted using convertFilePart\n\n const convertedParts = await Promise.all(\n (event.content?.parts || []).map(async (part: any) => {\n // Process file parts - check for type === \"file\" OR presence of url/mimeType (which indicates a file)\n if (part?.type === \"file\" || (part?.url && typeof part.url === \"string\") || part?.mimeType || part?.mediaType) {\n return await convertFilePart(part, db)\n }\n return [part]\n }),\n )\n\n const newEvent: ContextEvent = {\n ...event,\n content: {\n ...event.content,\n parts: convertedParts.flat(),\n },\n }\n\n // convert event to convertToModelMessages compatible\n let message = convertToUIMessage(newEvent)\n\n // use ai sdk helper\n return convertToModelMessages([message])\n}\n\nexport type AIMessage = {\n id: string;\n role: \"user\" | \"assistant\" | \"system\";\n content: string;\n createdAt: Date;\n}\n\nexport type ResponseMessage = {\n id: string;\n timestamp: Date;\n modelId: string;\n headers?: Record<string, string>;\n message: ModelMessage\n}\n\nexport function convertModelMessageToEvent(eventId: string, message: ResponseMessage): ContextEvent {\n\n let type;\n switch (message.message.role) {\n case \"user\":\n type = USER_MESSAGE_TYPE;\n break;\n case \"assistant\":\n type = ASSISTANT_MESSAGE_TYPE;\n break;\n case \"system\":\n type = SYSTEM_MESSAGE_TYPE;\n break;\n }\n\n return {\n id: eventId,\n type: type,\n channel: WEB_CHANNEL,\n content: {\n parts: message.message.content,\n },\n createdAt: message.timestamp.toISOString(),\n }\n}\n\n\nasync function convertFilePart(\n part: any,\n db: ReturnType<typeof init>\n): Promise<any[]> {\n // Convert file parts to text using parseAndStoreDocument\n // Uses providerMetadata.instant.fileId if available, otherwise falls back to URL lookup\n \n // Get fileId and filePath from providerMetadata\n const fileId = part.providerMetadata?.instant?.fileId || null\n const filePath = part.providerMetadata?.instant?.path || null\n\n // If we have a fileId, query by ID. Otherwise, try by path or URL\n let fileRecord: any = undefined\n\n try {\n if (fileId) {\n const fileQuery: any = await db.query({\n $files: {\n $: {\n where: {\n id: fileId,\n },\n limit: 1,\n },\n document: {},\n },\n } as any)\n fileRecord = Array.isArray(fileQuery.$files) ? fileQuery.$files[0] : undefined\n } else if (filePath) {\n // Try to find by path\n const fileQuery: any = await db.query({\n $files: {\n $: {\n where: {\n path: filePath,\n },\n limit: 1,\n },\n document: {},\n },\n } as any)\n fileRecord = Array.isArray(fileQuery.$files) ? fileQuery.$files[0] : undefined\n } else if (part.url.startsWith(\"http://\") || part.url.startsWith(\"https://\")) {\n // For HTTP/HTTPS URLs, try to find by URL\n const fileQuery: any = await db.query({\n $files: {\n $: {\n where: {\n url: part.url,\n },\n limit: 1,\n },\n document: {},\n },\n } as any)\n fileRecord = Array.isArray(fileQuery.$files) ? fileQuery.$files[0] : undefined\n }\n\n // If we still don't have a file record and have a URL, fetch and process it\n if (!fileRecord && (part.url.startsWith(\"http://\") || part.url.startsWith(\"https://\"))) {\n // Try to fetch the file directly and process it\n const fileResponse = await fetch(part.url)\n if (fileResponse.ok) {\n const buffer = await fileResponse.arrayBuffer()\n const contentType = part.mediaType || fileResponse.headers.get(\"content-type\") || \"application/octet-stream\"\n const fileName = part.filename || \"file\"\n \n // Use a temporary path if we don't have one\n const tempPath = filePath || `/temp/${Date.now()}-${fileName}`\n \n const documentId = await parseAndStoreDocument(\n db,\n Buffer.from(buffer),\n tempPath,\n fileName,\n id(), // Generate a temporary ID\n )\n\n const documentQuery: any = await db.query({\n documents: {\n $: {\n where: {\n id: documentId,\n },\n limit: 1,\n },\n },\n } as any)\n\n const documentRecord = Array.isArray(documentQuery.documents) ? documentQuery.documents[0] : undefined\n\n const parts: any[] = []\n parts.push({\n type: \"text\",\n text: `User attached a file.\\nFile Name: \"${fileName}\"\\nMedia Type: ${contentType}`,\n })\n\n if (documentRecord?.content && Array.isArray(documentRecord.content.pages)) {\n const pages = documentRecord.content.pages\n const pageTexts = pages\n .map((page: Record<string, unknown>, index: number) => {\n const text = typeof page.text === \"string\" ? page.text : \"\"\n return `\\n\\n--- Page ${index + 1} ---\\n\\n${text}`\n })\n .join(\"\")\n\n if (pageTexts.length > 0) {\n parts.push({\n type: \"text\",\n text: `Document transcription for \"${fileName}\":${pageTexts}`,\n })\n }\n }\n\n return parts\n }\n }\n\n if (!fileRecord) {\n throw new Error(`File not found: ${fileId || filePath || part.url}`)\n }\n\n let documentRecord = fileRecord.document as any\n if (!documentRecord || (Array.isArray(documentRecord) && documentRecord.length === 0)) {\n const fileResponse = await fetch(fileRecord.url as string)\n if (!fileResponse.ok) {\n throw new Error(`Failed to fetch file: HTTP ${fileResponse.status} ${fileResponse.statusText}`)\n }\n\n const buffer = await fileResponse.arrayBuffer()\n const documentId = await parseAndStoreDocument(\n db,\n Buffer.from(buffer),\n fileRecord.path as string,\n fileRecord.path as string,\n fileRecord.id as string,\n )\n\n const documentQuery: any = await db.query({\n documents: {\n $: {\n where: {\n id: documentId,\n },\n limit: 1,\n },\n },\n } as any)\n\n documentRecord = Array.isArray(documentQuery.documents) ? documentQuery.documents[0] : undefined\n }\n\n const parts: any[] = []\n\n const fileName = documentRecord && typeof documentRecord === \"object\" && \"fileName\" in documentRecord\n ? String(documentRecord.fileName)\n : String(fileRecord.path || \"Unknown\")\n\n parts.push({\n type: \"text\",\n text: `User attached a file.\\nFile ID: ${fileRecord.id}\\nFile Name: \"${fileName}\"\\nMedia Type: ${part.mediaType || \"unknown\"}`,\n })\n\n if (documentRecord?.content && Array.isArray(documentRecord.content.pages)) {\n const pages = documentRecord.content.pages\n const pageTexts = pages\n .map((page: Record<string, unknown>, index: number) => {\n const text = typeof page.text === \"string\" ? page.text : \"\"\n return `\\n\\n--- Page ${index + 1} ---\\n\\n${text}`\n })\n .join(\"\")\n\n if (pageTexts.length > 0) {\n parts.push({\n type: \"text\",\n text: `Document transcription for File ID ${fileRecord.id}:${pageTexts}`,\n })\n }\n }\n\n return parts\n } catch (error) {\n console.error(\"convertFilePart error\", error)\n throw error\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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","sourcesContent":["import { id, init, type InstantAdminDatabase } from \"@instantdb/admin\"\nimport { convertToModelMessages, type ModelMessage, type UIMessage } from \"ai\"\nimport type { ContextEvent } from \"./service\"\nimport { parseAndStoreDocument } from \"./document-parser\"\nimport { SchemaOf } from \"@ekairos/domain\"\nimport { storyDomain } from \"./schema\"\n\nexport const USER_MESSAGE_TYPE = \"user.message\"\nexport const ASSISTANT_MESSAGE_TYPE = \"assistant.message\"\nexport const SYSTEM_MESSAGE_TYPE = \"system.message\"\n\nexport const WEB_CHANNEL = \"web\"\nexport const AGENT_CHANNEL = \"whatsapp\"\nexport const EMAIL_CHANNEL = \"email\"\n\nexport function createUserEventFromUIMessages(messages: UIMessage[]): ContextEvent {\n if (!Array.isArray(messages) || messages.length === 0) {\n throw new Error(\"Missing messages to create event\")\n }\n\n const lastMessage = messages[messages.length - 1]\n\n return {\n id: lastMessage.id,\n type: USER_MESSAGE_TYPE,\n channel: WEB_CHANNEL,\n content: {\n parts: lastMessage.parts,\n },\n createdAt: new Date().toISOString(),\n }\n}\n\nexport function createAssistantEventFromUIMessages(eventId: string, messages: UIMessage[]): ContextEvent {\n if (!Array.isArray(messages) || messages.length === 0) {\n throw new Error(\"Missing messages to create event\")\n }\n\n const lastMessage = messages[messages.length - 1]\n\n return {\n id: eventId,\n type: ASSISTANT_MESSAGE_TYPE,\n channel: WEB_CHANNEL,\n content: {\n parts: lastMessage.parts,\n },\n createdAt: new Date().toISOString(),\n }\n}\n\nexport function convertToUIMessage(event: ContextEvent): UIMessage {\n let role: \"user\" | \"assistant\"\n if (event.type === USER_MESSAGE_TYPE) {\n role = \"user\"\n } else {\n role = \"assistant\"\n }\n\n return {\n id: event.id,\n role: role,\n parts: event.content.parts,\n metadata: {\n channel: event.channel,\n type: event.type,\n createdAt: event.createdAt,\n }\n }\n}\n\nexport async function convertEventsToModelMessages(\n events: ContextEvent[],\n db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>\n): Promise<ModelMessage[]> {\n const results: ModelMessage[][] = []\n for (const event of events) {\n const messages = await convertEventToModelMessages(event, db)\n results.push(messages)\n }\n return results.flat()\n}\n\nexport async function convertEventToModelMessages(\n event: ContextEvent,\n db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>\n): Promise<ModelMessage[]> {\n\n // convert files in message\n // const files = event.content.parts.filter(part => part.type === \"file\")\n // 1. copy event to new . we will manipulate the parts\n // 2. each file part will be converted using convertFilePart\n\n const convertedParts = await Promise.all(\n (event.content?.parts || []).map(async (part: any) => {\n // Process file parts - check for type === \"file\" OR presence of url/mimeType (which indicates a file)\n if (part?.type === \"file\" || (part?.url && typeof part.url === \"string\") || part?.mimeType || part?.mediaType) {\n return await convertFilePart(part, db)\n }\n return [part]\n }),\n )\n\n const newEvent: ContextEvent = {\n ...event,\n content: {\n ...event.content,\n parts: convertedParts.flat(),\n },\n }\n\n // convert event to convertToModelMessages compatible\n let message = convertToUIMessage(newEvent)\n\n // use ai sdk helper\n return convertToModelMessages([message])\n}\n\nexport type AIMessage = {\n id: string;\n role: \"user\" | \"assistant\" | \"system\";\n content: string;\n createdAt: Date;\n}\n\nexport type ResponseMessage = {\n id: string;\n timestamp: Date;\n modelId: string;\n headers?: Record<string, string>;\n message: ModelMessage\n}\n\nexport function convertModelMessageToEvent(eventId: string, message: ResponseMessage): ContextEvent {\n\n let type;\n switch (message.message.role) {\n case \"user\":\n type = USER_MESSAGE_TYPE;\n break;\n case \"assistant\":\n type = ASSISTANT_MESSAGE_TYPE;\n break;\n case \"system\":\n type = SYSTEM_MESSAGE_TYPE;\n break;\n }\n\n return {\n id: eventId,\n type: type,\n channel: WEB_CHANNEL,\n content: {\n parts: message.message.content,\n },\n createdAt: message.timestamp.toISOString(),\n }\n}\n\n\nasync function convertFilePart(\n part: any,\n db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>\n): Promise<any[]> {\n // Convert file parts to text using parseAndStoreDocument\n // Uses providerMetadata.instant.fileId if available, otherwise falls back to URL lookup\n \n // Get fileId and filePath from providerMetadata\n const fileId = part.providerMetadata?.instant?.fileId || null\n const filePath = part.providerMetadata?.instant?.path || null\n\n // If we have a fileId, query by ID. Otherwise, try by path or URL\n let fileRecord: any = undefined\n\n try {\n if (fileId) {\n const fileQuery = await db.query({\n $files: {\n $: {\n where: {\n id: fileId,\n },\n limit: 1,\n },\n },\n })\n fileRecord = Array.isArray(fileQuery.$files) ? fileQuery.$files[0] : undefined\n } else if (filePath) {\n // Try to find by path\n const fileQuery = await db.query({\n $files: {\n $: {\n where: {\n path: filePath,\n },\n limit: 1,\n },\n document: {},\n },\n })\n fileRecord = Array.isArray(fileQuery.$files) ? fileQuery.$files[0] : undefined\n } else if (part.url.startsWith(\"http://\") || part.url.startsWith(\"https://\")) {\n // For HTTP/HTTPS URLs, try to find by URL\n const fileQuery = await db.query({\n $files: {\n $: {\n where: {\n url: part.url,\n },\n limit: 1,\n },\n document: {},\n },\n })\n fileRecord = Array.isArray(fileQuery.$files) ? fileQuery.$files[0] : undefined\n }\n\n // If we still don't have a file record and have a URL, fetch and process it\n if (!fileRecord && (part.url.startsWith(\"http://\") || part.url.startsWith(\"https://\"))) {\n // Try to fetch the file directly and process it\n const fileResponse = await fetch(part.url)\n if (fileResponse.ok) {\n const buffer = await fileResponse.arrayBuffer()\n const contentType = part.mediaType || fileResponse.headers.get(\"content-type\") || \"application/octet-stream\"\n const fileName = part.filename || \"file\"\n \n // Use a temporary path if we don't have one\n const tempPath = filePath || `/temp/${Date.now()}-${fileName}`\n \n const documentId = await parseAndStoreDocument(\n db,\n Buffer.from(buffer),\n tempPath,\n fileName,\n id(), // Generate a temporary ID\n )\n\n const documentQuery = await db.query({\n document_documents: {\n $: {\n where: {\n id: documentId,\n } as Parameters<typeof db.query>[0]['document_documents']['$']['where'],\n limit: 1,\n },\n file: {},\n },\n })\n\n const documentRecord = Array.isArray(documentQuery.document_documents) ? documentQuery.document_documents[0] : undefined\n\n const parts: any[] = []\n parts.push({\n type: \"text\",\n text: `User attached a file.\\nFile Name: \"${fileName}\"\\nMedia Type: ${contentType}`,\n })\n\n if (documentRecord?.content && typeof documentRecord.content === 'object' && documentRecord.content !== null && 'pages' in documentRecord.content && Array.isArray(documentRecord.content.pages)) {\n const pages = documentRecord.content.pages\n const pageTexts = pages\n .map((page: Record<string, unknown>, index: number) => {\n const text = typeof page.text === \"string\" ? page.text : \"\"\n return `\\n\\n--- Page ${index + 1} ---\\n\\n${text}`\n })\n .join(\"\")\n\n if (pageTexts.length > 0) {\n parts.push({\n type: \"text\",\n text: `Document transcription for \"${fileName}\":${pageTexts}`,\n })\n }\n }\n\n return parts\n }\n }\n\n if (!fileRecord) {\n throw new Error(`File not found: ${fileId || filePath || part.url}`)\n }\n\n let documentRecord = fileRecord.document as any\n if (!documentRecord || (Array.isArray(documentRecord) && documentRecord.length === 0)) {\n const fileResponse = await fetch(fileRecord.url as string)\n if (!fileResponse.ok) {\n throw new Error(`Failed to fetch file: HTTP ${fileResponse.status} ${fileResponse.statusText}`)\n }\n\n const buffer = await fileResponse.arrayBuffer()\n const documentId = await parseAndStoreDocument(\n db,\n Buffer.from(buffer),\n fileRecord.path as string,\n fileRecord.path as string,\n fileRecord.id as string,\n )\n\n const documentQuery = await db.query({\n document_documents: {\n $: {\n where: {\n id: documentId,\n } as Parameters<typeof db.query>[0]['document_documents']['$']['where'],\n limit: 1,\n },\n file: {},\n },\n })\n\n documentRecord = Array.isArray(documentQuery.document_documents) ? documentQuery.document_documents[0] : undefined\n }\n\n const parts: any[] = []\n\n const fileName = documentRecord && typeof documentRecord === \"object\" && \"fileName\" in documentRecord\n ? String(documentRecord.fileName)\n : String(fileRecord.path || \"Unknown\")\n\n parts.push({\n type: \"text\",\n text: `User attached a file.\\nFile ID: ${fileRecord.id}\\nFile Name: \"${fileName}\"\\nMedia Type: ${part.mediaType || \"unknown\"}`,\n })\n\n if (documentRecord?.content && Array.isArray(documentRecord.content.pages)) {\n const pages = documentRecord.content.pages\n const pageTexts = pages\n .map((page: Record<string, unknown>, index: number) => {\n const text = typeof page.text === \"string\" ? page.text : \"\"\n return `\\n\\n--- Page ${index + 1} ---\\n\\n${text}`\n })\n .join(\"\")\n\n if (pageTexts.length > 0) {\n parts.push({\n type: \"text\",\n text: `Document transcription for File ID ${fileRecord.id}:${pageTexts}`,\n })\n }\n }\n\n return parts\n } catch (error) {\n console.error(\"convertFilePart error\", error)\n throw error\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-document.d.ts","sourceRoot":"","sources":["../src/schema-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAElE,eAAO,MAAM,cAAc,EAAE,kBA8BvB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.documentDomain = void 0;
|
|
4
|
+
const core_1 = require("@instantdb/core");
|
|
5
|
+
const domain_1 = require("@ekairos/domain");
|
|
6
|
+
exports.documentDomain = (0, domain_1.domain)("document")
|
|
7
|
+
.schema({
|
|
8
|
+
entities: {
|
|
9
|
+
document_documents: core_1.i.entity({
|
|
10
|
+
name: core_1.i.string().optional().indexed(),
|
|
11
|
+
mimeType: core_1.i.string().optional(),
|
|
12
|
+
size: core_1.i.number().optional(),
|
|
13
|
+
ownerId: core_1.i.string().optional().indexed(),
|
|
14
|
+
orgId: core_1.i.string().optional().indexed(),
|
|
15
|
+
createdAt: core_1.i.date().optional().indexed(),
|
|
16
|
+
updatedAt: core_1.i.date().optional(),
|
|
17
|
+
lastJobId: core_1.i.string().optional(),
|
|
18
|
+
content: core_1.i.json().optional(), // Store parsed content (pages, text, etc.)
|
|
19
|
+
}),
|
|
20
|
+
},
|
|
21
|
+
links: {
|
|
22
|
+
documentFile: {
|
|
23
|
+
forward: {
|
|
24
|
+
on: "document_documents",
|
|
25
|
+
has: "one",
|
|
26
|
+
label: "file",
|
|
27
|
+
},
|
|
28
|
+
reverse: {
|
|
29
|
+
on: "$files",
|
|
30
|
+
has: "one",
|
|
31
|
+
label: "document",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
rooms: {},
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=schema-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-document.js","sourceRoot":"","sources":["../src/schema-document.ts"],"names":[],"mappings":";;;AAAA,0CAAoC;AACpC,4CAAkE;AAErD,QAAA,cAAc,GAAuB,IAAA,eAAM,EAAC,UAAU,CAAC;KAC/D,MAAM,CAAC;IACJ,QAAQ,EAAE;QACN,kBAAkB,EAAE,QAAC,CAAC,MAAM,CAAC;YACzB,IAAI,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;YACrC,QAAQ,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,IAAI,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC3B,OAAO,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;YACxC,KAAK,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;YACtC,SAAS,EAAE,QAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE;YACxC,SAAS,EAAE,QAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;YAC9B,SAAS,EAAE,QAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,OAAO,EAAE,QAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,2CAA2C;SAC5E,CAAC;KACL;IACD,KAAK,EAAE;QACH,YAAY,EAAE;YACV,OAAO,EAAE;gBACL,EAAE,EAAE,oBAAoB;gBACxB,GAAG,EAAE,KAAK;gBACV,KAAK,EAAE,MAAM;aAChB;YACD,OAAO,EAAE;gBACL,EAAE,EAAE,QAAQ;gBACZ,GAAG,EAAE,KAAK;gBACV,KAAK,EAAE,UAAU;aACpB;SACJ;KACJ;IACD,KAAK,EAAE,EAAE;CACZ,CAAC,CAAC","sourcesContent":["import { i } from \"@instantdb/core\";\r\nimport { domain, type DomainSchemaResult } from \"@ekairos/domain\";\r\n\r\nexport const documentDomain: DomainSchemaResult = domain(\"document\")\r\n .schema({\r\n entities: {\r\n document_documents: i.entity({\r\n name: i.string().optional().indexed(),\r\n mimeType: i.string().optional(),\r\n size: i.number().optional(),\r\n ownerId: i.string().optional().indexed(),\r\n orgId: i.string().optional().indexed(),\r\n createdAt: i.date().optional().indexed(),\r\n updatedAt: i.date().optional(),\r\n lastJobId: i.string().optional(),\r\n content: i.json().optional(), // Store parsed content (pages, text, etc.)\r\n }),\r\n },\r\n links: {\r\n documentFile: {\r\n forward: {\r\n on: \"document_documents\",\r\n has: \"one\",\r\n label: \"file\",\r\n },\r\n reverse: {\r\n on: \"$files\",\r\n has: \"one\",\r\n label: \"document\",\r\n },\r\n },\r\n },\r\n rooms: {},\r\n });\r\n"]}
|
package/dist/schema.d.ts
CHANGED
|
@@ -1,84 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
createdAt: import("@instantdb/core").DataAttrDef<Date, true, false>;
|
|
4
|
-
updatedAt: import("@instantdb/core").DataAttrDef<Date, false, false>;
|
|
5
|
-
type: import("@instantdb/core").DataAttrDef<string, false, false>;
|
|
6
|
-
key: import("@instantdb/core").DataAttrDef<string, false, true>;
|
|
7
|
-
status: import("@instantdb/core").DataAttrDef<string, false, true>;
|
|
8
|
-
content: import("@instantdb/core").DataAttrDef<any, false, false>;
|
|
9
|
-
}, {}, void>;
|
|
10
|
-
readonly context_events: import("@instantdb/core").EntityDef<{
|
|
11
|
-
channel: import("@instantdb/core").DataAttrDef<string, true, true>;
|
|
12
|
-
createdAt: import("@instantdb/core").DataAttrDef<Date, true, true>;
|
|
13
|
-
type: import("@instantdb/core").DataAttrDef<string, false, true>;
|
|
14
|
-
content: import("@instantdb/core").DataAttrDef<any, false, false>;
|
|
15
|
-
status: import("@instantdb/core").DataAttrDef<string, false, true>;
|
|
16
|
-
}, {}, void>;
|
|
17
|
-
readonly story_executions: import("@instantdb/core").EntityDef<{
|
|
18
|
-
createdAt: import("@instantdb/core").DataAttrDef<Date, true, false>;
|
|
19
|
-
updatedAt: import("@instantdb/core").DataAttrDef<Date, false, false>;
|
|
20
|
-
status: import("@instantdb/core").DataAttrDef<string, false, true>;
|
|
21
|
-
}, {}, void>;
|
|
22
|
-
}, {
|
|
23
|
-
readonly storyEventsContext: {
|
|
24
|
-
readonly forward: {
|
|
25
|
-
readonly on: "context_events";
|
|
26
|
-
readonly has: "one";
|
|
27
|
-
readonly label: "context";
|
|
28
|
-
};
|
|
29
|
-
readonly reverse: {
|
|
30
|
-
readonly on: "context_contexts";
|
|
31
|
-
readonly has: "many";
|
|
32
|
-
readonly label: "events";
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
readonly storyExecutionsContext: {
|
|
36
|
-
readonly forward: {
|
|
37
|
-
readonly on: "story_executions";
|
|
38
|
-
readonly has: "one";
|
|
39
|
-
readonly label: "context";
|
|
40
|
-
};
|
|
41
|
-
readonly reverse: {
|
|
42
|
-
readonly on: "context_contexts";
|
|
43
|
-
readonly has: "many";
|
|
44
|
-
readonly label: "executions";
|
|
45
|
-
};
|
|
46
|
-
};
|
|
47
|
-
readonly storyContextsCurrentExecution: {
|
|
48
|
-
readonly forward: {
|
|
49
|
-
readonly on: "context_contexts";
|
|
50
|
-
readonly has: "one";
|
|
51
|
-
readonly label: "currentExecution";
|
|
52
|
-
};
|
|
53
|
-
readonly reverse: {
|
|
54
|
-
readonly on: "story_executions";
|
|
55
|
-
readonly has: "one";
|
|
56
|
-
readonly label: "currentOf";
|
|
57
|
-
};
|
|
58
|
-
};
|
|
59
|
-
readonly storyExecutionsTrigger: {
|
|
60
|
-
readonly forward: {
|
|
61
|
-
readonly on: "story_executions";
|
|
62
|
-
readonly has: "one";
|
|
63
|
-
readonly label: "trigger";
|
|
64
|
-
};
|
|
65
|
-
readonly reverse: {
|
|
66
|
-
readonly on: "context_events";
|
|
67
|
-
readonly has: "many";
|
|
68
|
-
readonly label: "executionsAsTrigger";
|
|
69
|
-
};
|
|
70
|
-
};
|
|
71
|
-
readonly storyExecutionsReaction: {
|
|
72
|
-
readonly forward: {
|
|
73
|
-
readonly on: "story_executions";
|
|
74
|
-
readonly has: "one";
|
|
75
|
-
readonly label: "reaction";
|
|
76
|
-
};
|
|
77
|
-
readonly reverse: {
|
|
78
|
-
readonly on: "context_events";
|
|
79
|
-
readonly has: "many";
|
|
80
|
-
readonly label: "executionsAsReaction";
|
|
81
|
-
};
|
|
82
|
-
};
|
|
83
|
-
}, {}>;
|
|
1
|
+
import { type DomainSchemaResult } from "@ekairos/domain";
|
|
2
|
+
export declare const storyDomain: DomainSchemaResult;
|
|
84
3
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGlE,eAAO,MAAM,WAAW,EAAE,kBAoDpB,CAAC"}
|
package/dist/schema.js
CHANGED
|
@@ -3,54 +3,58 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.storyDomain = void 0;
|
|
4
4
|
const core_1 = require("@instantdb/core");
|
|
5
5
|
const domain_1 = require("@ekairos/domain");
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
reverse: { on: "context_contexts", has: "many", label: "events" },
|
|
6
|
+
const schema_document_1 = require("./schema-document");
|
|
7
|
+
exports.storyDomain = (0, domain_1.domain)("story")
|
|
8
|
+
.includes(schema_document_1.documentDomain)
|
|
9
|
+
.schema({
|
|
10
|
+
entities: {
|
|
11
|
+
context_contexts: core_1.i.entity({
|
|
12
|
+
createdAt: core_1.i.date(),
|
|
13
|
+
updatedAt: core_1.i.date().optional(),
|
|
14
|
+
type: core_1.i.string().optional(),
|
|
15
|
+
key: core_1.i.string().optional().indexed().unique(),
|
|
16
|
+
status: core_1.i.string().optional().indexed(), // open | streaming | closed
|
|
17
|
+
content: core_1.i.any().optional(),
|
|
18
|
+
}),
|
|
19
|
+
context_events: core_1.i.entity({
|
|
20
|
+
channel: core_1.i.string().indexed(),
|
|
21
|
+
createdAt: core_1.i.date().indexed(),
|
|
22
|
+
type: core_1.i.string().optional().indexed(),
|
|
23
|
+
content: core_1.i.any().optional(),
|
|
24
|
+
status: core_1.i.string().optional().indexed(),
|
|
25
|
+
}),
|
|
26
|
+
story_executions: core_1.i.entity({
|
|
27
|
+
createdAt: core_1.i.date(),
|
|
28
|
+
updatedAt: core_1.i.date().optional(),
|
|
29
|
+
status: core_1.i.string().optional().indexed(), // executing | completed | failed
|
|
30
|
+
}),
|
|
32
31
|
},
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
links: {
|
|
33
|
+
storyEventsContext: {
|
|
34
|
+
forward: { on: "context_events", has: "one", label: "context" },
|
|
35
|
+
reverse: { on: "context_contexts", has: "many", label: "events" },
|
|
36
|
+
},
|
|
37
|
+
// Executions belong to a context
|
|
38
|
+
storyExecutionsContext: {
|
|
39
|
+
forward: { on: "story_executions", has: "one", label: "context" },
|
|
40
|
+
reverse: { on: "context_contexts", has: "many", label: "executions" },
|
|
41
|
+
},
|
|
42
|
+
// Current execution pointer on a context
|
|
43
|
+
storyContextsCurrentExecution: {
|
|
44
|
+
forward: { on: "context_contexts", has: "one", label: "currentExecution" },
|
|
45
|
+
reverse: { on: "story_executions", has: "one", label: "currentOf" },
|
|
46
|
+
},
|
|
47
|
+
// Link execution to its trigger event
|
|
48
|
+
storyExecutionsTrigger: {
|
|
49
|
+
forward: { on: "story_executions", has: "one", label: "trigger" },
|
|
50
|
+
reverse: { on: "context_events", has: "many", label: "executionsAsTrigger" },
|
|
51
|
+
},
|
|
52
|
+
// Link execution to its reaction event
|
|
53
|
+
storyExecutionsReaction: {
|
|
54
|
+
forward: { on: "story_executions", has: "one", label: "reaction" },
|
|
55
|
+
reverse: { on: "context_events", has: "many", label: "executionsAsReaction" },
|
|
56
|
+
},
|
|
37
57
|
},
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
forward: { on: "context_contexts", has: "one", label: "currentExecution" },
|
|
41
|
-
reverse: { on: "story_executions", has: "one", label: "currentOf" },
|
|
42
|
-
},
|
|
43
|
-
// Link execution to its trigger event
|
|
44
|
-
storyExecutionsTrigger: {
|
|
45
|
-
forward: { on: "story_executions", has: "one", label: "trigger" },
|
|
46
|
-
reverse: { on: "context_events", has: "many", label: "executionsAsTrigger" },
|
|
47
|
-
},
|
|
48
|
-
// Link execution to its reaction event
|
|
49
|
-
storyExecutionsReaction: {
|
|
50
|
-
forward: { on: "story_executions", has: "one", label: "reaction" },
|
|
51
|
-
reverse: { on: "context_events", has: "many", label: "executionsAsReaction" },
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
const rooms = {};
|
|
55
|
-
exports.storyDomain = (0, domain_1.domain)({ entities, links, rooms });
|
|
58
|
+
rooms: {},
|
|
59
|
+
});
|
|
56
60
|
//# sourceMappingURL=schema.js.map
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":";;;AAAA,0CAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { i } from \"@instantdb/core\";\nimport { domain, type DomainSchemaResult } from \"@ekairos/domain\";\nimport { documentDomain } from \"./schema-document\";\n\nexport const storyDomain: DomainSchemaResult = domain(\"story\")\n .includes(documentDomain)\n .schema({\n entities: {\n context_contexts: i.entity({\n createdAt: i.date(),\n updatedAt: i.date().optional(),\n type: i.string().optional(),\n key: i.string().optional().indexed().unique(),\n status: i.string().optional().indexed(), // open | streaming | closed\n content: i.any().optional(),\n }),\n context_events: i.entity({\n channel: i.string().indexed(),\n createdAt: i.date().indexed(),\n type: i.string().optional().indexed(),\n content: i.any().optional(),\n status: i.string().optional().indexed(),\n }),\n story_executions: i.entity({\n createdAt: i.date(),\n updatedAt: i.date().optional(),\n status: i.string().optional().indexed(), // executing | completed | failed\n }),\n },\n links: {\n storyEventsContext: {\n forward: { on: \"context_events\", has: \"one\", label: \"context\" },\n reverse: { on: \"context_contexts\", has: \"many\", label: \"events\" },\n },\n // Executions belong to a context\n storyExecutionsContext: {\n forward: { on: \"story_executions\", has: \"one\", label: \"context\" },\n reverse: { on: \"context_contexts\", has: \"many\", label: \"executions\" },\n },\n // Current execution pointer on a context\n storyContextsCurrentExecution: {\n forward: { on: \"context_contexts\", has: \"one\", label: \"currentExecution\" },\n reverse: { on: \"story_executions\", has: \"one\", label: \"currentOf\" },\n },\n // Link execution to its trigger event\n storyExecutionsTrigger: {\n forward: { on: \"story_executions\", has: \"one\", label: \"trigger\" },\n reverse: { on: \"context_events\", has: \"many\", label: \"executionsAsTrigger\" },\n },\n // Link execution to its reaction event\n storyExecutionsReaction: {\n forward: { on: \"story_executions\", has: \"one\", label: \"reaction\" },\n reverse: { on: \"context_events\", has: \"many\", label: \"executionsAsReaction\" },\n },\n },\n rooms: {},\n });\n\n\n\n"]}
|
package/dist/service.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InstaQLEntity, type InstantAdminDatabase } from "@instantdb/admin";
|
|
2
2
|
import { storyDomain } from "./schema";
|
|
3
|
+
import { SchemaOf } from "@ekairos/domain";
|
|
3
4
|
export type StoredContext<Context> = Omit<InstaQLEntity<typeof storyDomain, 'context_contexts'>, 'content'> & {
|
|
4
5
|
content: Context | null;
|
|
5
6
|
};
|
|
@@ -21,7 +22,7 @@ export type StreamChunk = {
|
|
|
21
22
|
};
|
|
22
23
|
export declare class AgentService {
|
|
23
24
|
private db;
|
|
24
|
-
constructor(db:
|
|
25
|
+
constructor(db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>);
|
|
25
26
|
getOrCreateContext<C>(contextIdentifier: ContextIdentifier | null): Promise<StoredContext<C>>;
|
|
26
27
|
createContext<C>(contextKey?: {
|
|
27
28
|
key: string;
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
CHANGED
|
@@ -142,7 +142,9 @@ class AgentService {
|
|
|
142
142
|
async getEvent(eventId) {
|
|
143
143
|
const event = await this.db.query({
|
|
144
144
|
context_events: {
|
|
145
|
-
$: {
|
|
145
|
+
$: {
|
|
146
|
+
where: { id: eventId }
|
|
147
|
+
}
|
|
146
148
|
}
|
|
147
149
|
});
|
|
148
150
|
return event.context_events?.[0];
|
|
@@ -187,6 +189,9 @@ class AgentService {
|
|
|
187
189
|
throw new Error("No chunks received from stream");
|
|
188
190
|
}
|
|
189
191
|
const eventId = firstChunk.messageId;
|
|
192
|
+
if (!eventId || typeof eventId !== 'string') {
|
|
193
|
+
throw new Error("Event ID not found in stream chunks");
|
|
194
|
+
}
|
|
190
195
|
const query = await this.db.query({
|
|
191
196
|
context_events: {
|
|
192
197
|
$: {
|
package/dist/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":";;;AAAA,4CAAkE;AAelE,MAAa,YAAY;IAIrB,YAAY,EAA2B;QACnC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IAChB,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAI,iBAA2C;QAC1E,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,EAAK,CAAA;QAClC,CAAC;QAED,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAI,iBAAiB,CAAC,CAAA;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,aAAa,CAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAA;QACrH,CAAC;aAAM,CAAC;YACJ,OAAO,OAAO,CAAA;QAClB,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,aAAa,CAAI,UAAmC,EAAE,SAAkB;QACjF,IAAI,WAAW,GAA8F;YACzG,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,OAAO,EAAE,EAAE;YACX,GAAG,EAAE,IAAI;YACT,MAAM,EAAE,MAAM;SACjB,CAAA;QAED,MAAM,YAAY,GAAG,SAAS,IAAI,IAAA,UAAE,GAAE,CAAA;QACtC,IAAI,UAAU,EAAE,GAAG,EAAE,CAAC;YAClB,WAAW,GAAG;gBACV,GAAG,WAAW;gBACd,GAAG,EAAE,UAAU,CAAC,GAAG;aACtB,CAAA;QACL,CAAC;QAED,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;SAChE,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,UAAU,CAAI,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAA;IACnD,CAAC;IAEM,KAAK,CAAC,UAAU,CAAI,iBAAoC;QAC3D,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACD,IAAI,iBAAiB,CAAC,EAAE,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;oBAC7B,gBAAgB,EAAE;wBACd,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;qBACvD;iBACJ,CAAC,CAAA;gBACF,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAA;YACxC,CAAC;YAED,IAAI,iBAAiB,CAAC,GAAG,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;oBAC7B,gBAAgB,EAAE;wBACd,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE;qBAC/C;iBACJ,CAAC,CAAA;gBACF,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAA;YACxC,CAAC;YAED,OAAO,OAAsC,CAAA;QACjD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAA;YAC7C,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;QAC9D,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAI,iBAAoC,EAAE,OAAU;QAEjF,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,EAAE,IAAI,IAAA,cAAM,EAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAExF,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC;gBACpD,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC;SACL,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,UAAU,CAAI,iBAAiB,CAAC,CAAA;IAChD,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,iBAAoC,EAAE,KAAmB;QAC5E,MAAM,GAAG,GAAG;YACR,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;gBACvC,GAAG,KAAK;gBACR,MAAM,EAAE,QAAQ;aACnB,CAAC;SACL,CAAA;QAED,IAAI,iBAAiB,CAAC,EAAE,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACzF,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAA,cAAM,EAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACzG,CAAC;QAED,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAE3B,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACxC,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,iBAAoC,EAAE,cAAsB,EAAE,eAAuB;QAC9G,MAAM,WAAW,GAAG,IAAA,UAAE,GAAE,CAAA;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;YAC/D,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,MAAM,EAAE,WAAW;SACtB,CAAC,CAAA;QAEF,MAAM,GAAG,GAAU,CAAC,UAAU,CAAC,CAAA;QAE/B,IAAI,iBAAiB,CAAC,EAAE,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;YAC1F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QACvG,CAAC;aAAM,CAAC;YACJ,MAAM,SAAS,GAAG,IAAA,cAAM,EAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAA;YACtD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;YAC/E,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QAC5F,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;QACpF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAAA;QAEtF,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAE3B,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAA;IAC9B,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,iBAAoC,EAAE,MAAuC;QAC1G,MAAM,GAAG,GAAU,EAAE,CAAA;QAErB,IAAI,iBAAiB,CAAC,EAAE,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QACzG,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAA,cAAM,EAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QACzH,CAAC;QAED,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,iBAAoC,EAAE,WAAmB,EAAE,MAA8B;QACpH,MAAM,GAAG,GAAU,EAAE,CAAA;QACrB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QAE5F,2DAA2D;QAC3D,IAAI,iBAAiB,CAAC,EAAE,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;YAC7G,gDAAgD;QACpD,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAA,cAAM,EAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;QACjI,CAAC;QAED,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,KAAmB;QACzD,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;YACnB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACnD,CAAC,CAAA;QACF,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,OAAe;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9B,cAAc,EAAE;gBACZ,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;aAChC;SACJ,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAiB,CAAA;IACpD,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,iBAAoC;QAEvD,IAAI,YAAY,CAAC;QACjB,IAAI,iBAAiB,CAAC,EAAE,EAAE,CAAC;YACvB,YAAY,GAAG,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAA;QACpD,CAAC;aAAM,CAAC;YACJ,YAAY,GAAG,EAAE,OAAO,EAAE,IAAA,cAAM,EAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAA;QACpE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAC/B,cAAc,EAAE;gBACZ,CAAC,EAAE;oBACC,KAAK,EAAE,YAAY;oBACnB,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE;wBACH,SAAS,EAAE,KAAK;qBACnB;iBACJ;aACJ;SACJ,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,cAAgC,CAAA;IAClD,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,MAAsB;QAK/C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;QACjC,MAAM,MAAM,GAAkB,EAAE,CAAA;QAChC,IAAI,UAAmC,CAAA;QAEvC,OAAO,IAAI,EAAE,CAAC;YACV,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,IAAI,EAAE,CAAC;gBACP,MAAK;YACT,CAAC;YACD,MAAM,YAAY,GAAG,KAAoB,CAAA;YACzC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,UAAU,GAAG,YAAY,CAAA;YAC7B,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC7B,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACrD,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAA;QAEpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YAC9B,cAAc,EAAE;gBACZ,CAAC,EAAE;oBACC,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;oBACtB,KAAK,EAAE,CAAC;oBACR,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC;iBACtE;aACJ;SACJ,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAEhG,OAAO;YACH,OAAO;YACP,MAAM;YACN,cAAc;SACjB,CAAA;IACL,CAAC;CACJ;AAjPD,oCAiPC","sourcesContent":["import { id, init, InstaQLEntity, lookup } from \"@instantdb/admin\"\nimport { storyDomain } from \"./schema\"\n\nexport type StoredContext<Context> = Omit<InstaQLEntity<typeof storyDomain, 'context_contexts'>, 'content'> & { content: Context | null }\nexport type ContextIdentifier = { id: string; key?: never } | { key: string; id?: never }\n\nexport type ContextEvent = InstaQLEntity<typeof storyDomain, 'context_events'> & { content: any }\n\nexport type StreamChunk = {\n type: string\n messageId?: string\n content?: string\n [key: string]: unknown\n}\n\nexport class AgentService {\n\n private db: ReturnType<typeof init>\n\n constructor(db: ReturnType<typeof init>) {\n this.db = db\n }\n\n public async getOrCreateContext<C>(contextIdentifier: ContextIdentifier | null): Promise<StoredContext<C>> {\n if (!contextIdentifier) {\n return this.createContext<C>()\n }\n\n let context = await this.getContext<C>(contextIdentifier)\n if (!context) {\n return this.createContext<C>(contextIdentifier.key ? { key: contextIdentifier.key } : null, contextIdentifier.id)\n } else {\n return context\n }\n }\n\n public async createContext<C>(contextKey?: { key: string } | null, contextId?: string): Promise<StoredContext<C>> {\n let contextData: { createdAt: Date; content: Record<string, unknown>; key: string | null; status: \"open\" } = {\n createdAt: new Date(),\n content: {},\n key: null,\n status: \"open\"\n }\n\n const newContextId = contextId ?? id()\n if (contextKey?.key) {\n contextData = {\n ...contextData,\n key: contextKey.key\n }\n }\n\n await this.db.transact([\n this.db.tx.context_contexts[newContextId].create(contextData)\n ])\n return this.getContext<C>({ id: newContextId })\n }\n\n public async getContext<C>(contextIdentifier: ContextIdentifier): Promise<StoredContext<C>> {\n let context;\n try {\n if (contextIdentifier.id) {\n const tRes = await this.db.query({\n context_contexts: {\n $: { where: { id: contextIdentifier.id }, limit: 1 }\n }\n })\n context = tRes.context_contexts?.[0]\n }\n\n if (contextIdentifier.key) {\n const tRes = await this.db.query({\n context_contexts: {\n $: { where: { key: contextIdentifier.key } }\n }\n })\n context = tRes.context_contexts?.[0]\n }\n\n return context as unknown as StoredContext<C>\n } catch (error: any) {\n console.error(\"Error getting context\", error)\n throw new Error(\"Error getting context: \" + error.message)\n }\n }\n\n public async updateContextContent<C>(contextIdentifier: ContextIdentifier, content: C): Promise<StoredContext<C>> {\n\n const contextDBIdentifier = contextIdentifier.id ?? lookup(\"key\", contextIdentifier.key)\n\n await this.db.transact([\n this.db.tx.context_contexts[contextDBIdentifier].update({\n content: content,\n updatedAt: new Date()\n })\n ])\n\n return this.getContext<C>(contextIdentifier)\n }\n\n public async saveEvent(contextIdentifier: ContextIdentifier, event: ContextEvent): Promise<ContextEvent> {\n const txs = [\n this.db.tx.context_events[event.id].create({\n ...event,\n status: \"stored\"\n })\n ]\n\n if (contextIdentifier.id) {\n txs.push(this.db.tx.context_events[event.id].link({ context: contextIdentifier.id }))\n } else {\n txs.push(this.db.tx.context_events[event.id].link({ context: lookup(\"key\", contextIdentifier.key) }))\n }\n\n await this.db.transact(txs)\n\n return await this.getEvent(event.id)\n }\n\n public async createExecution(contextIdentifier: ContextIdentifier, triggerEventId: string, reactionEventId: string): Promise<{ id: string }> {\n const executionId = id()\n const execCreate = this.db.tx.story_executions[executionId].create({\n createdAt: new Date(),\n status: \"executing\",\n })\n\n const txs: any[] = [execCreate]\n\n if (contextIdentifier.id) {\n txs.push(this.db.tx.story_executions[executionId].link({ context: contextIdentifier.id }))\n txs.push(this.db.tx.context_contexts[contextIdentifier.id].link({ currentExecution: executionId }))\n } else {\n const ctxLookup = lookup(\"key\", contextIdentifier.key)\n txs.push(this.db.tx.story_executions[executionId].link({ context: ctxLookup }))\n txs.push(this.db.tx.context_contexts[ctxLookup].link({ currentExecution: executionId }))\n }\n\n txs.push(this.db.tx.story_executions[executionId].link({ trigger: triggerEventId }))\n txs.push(this.db.tx.story_executions[executionId].link({ reaction: reactionEventId }))\n\n await this.db.transact(txs)\n\n return { id: executionId }\n }\n\n public async updateContextStatus(contextIdentifier: ContextIdentifier, status: \"open\" | \"streaming\" | \"closed\"): Promise<void> {\n const txs: any[] = []\n \n if (contextIdentifier.id) {\n txs.push(this.db.tx.context_contexts[contextIdentifier.id].update({ status, updatedAt: new Date() }))\n } else {\n txs.push(this.db.tx.context_contexts[lookup(\"key\", contextIdentifier.key)].update({ status, updatedAt: new Date() }))\n }\n\n await this.db.transact(txs)\n }\n\n public async completeExecution(contextIdentifier: ContextIdentifier, executionId: string, status: \"completed\" | \"failed\"): Promise<void> {\n const txs: any[] = []\n txs.push(this.db.tx.story_executions[executionId].update({ status, updatedAt: new Date() }))\n\n // Update context status to \"open\" when execution completes\n if (contextIdentifier.id) {\n txs.push(this.db.tx.context_contexts[contextIdentifier.id].update({ status: \"open\", updatedAt: new Date() }))\n // optionally unlink currentExecution if desired\n } else {\n txs.push(this.db.tx.context_contexts[lookup(\"key\", contextIdentifier.key)].update({ status: \"open\", updatedAt: new Date() }))\n }\n\n await this.db.transact(txs)\n }\n\n public async updateEvent(eventId: string, event: ContextEvent): Promise<ContextEvent> {\n await this.db.transact([\n this.db.tx.context_events[eventId].update(event)\n ])\n return await this.getEvent(eventId)\n }\n\n public async getEvent(eventId: string): Promise<ContextEvent> {\n const event = await this.db.query({\n context_events: {\n $: { where: { id: eventId } }\n }\n })\n return event.context_events?.[0] as ContextEvent\n }\n\n public async getEvents(contextIdentifier: ContextIdentifier): Promise<ContextEvent[]> {\n\n let contextWhere;\n if (contextIdentifier.id) {\n contextWhere = { context: contextIdentifier.id }\n } else {\n contextWhere = { context: lookup(\"key\", contextIdentifier.key) }\n }\n\n const events = await this.db.query({\n context_events: {\n $: {\n where: contextWhere,\n limit: 30,\n order: {\n createdAt: 'asc',\n },\n }\n }\n })\n return events.context_events as ContextEvent[]\n }\n\n public async readEventStream(stream: ReadableStream): Promise<{\n eventId: string | undefined\n chunks: StreamChunk[]\n persistedEvent: any\n }> {\n const reader = stream.getReader()\n const chunks: StreamChunk[] = []\n let firstChunk: StreamChunk | undefined\n\n while (true) {\n const { value, done } = await reader.read()\n if (done) {\n break\n }\n const currentChunk = value as StreamChunk\n if (!firstChunk) {\n firstChunk = currentChunk\n }\n chunks.push(currentChunk)\n }\n\n if (!firstChunk) {\n throw new Error(\"No chunks received from stream\")\n }\n\n const eventId = firstChunk.messageId\n\n const query = await this.db.query({\n context_events: {\n $: {\n where: { id: eventId },\n limit: 1,\n fields: [\"id\", \"channel\", \"type\", \"status\", \"createdAt\", \"content\"],\n },\n },\n })\n\n const persistedEvent = Array.isArray(query.context_events) ? query.context_events[0] : undefined\n\n return {\n eventId,\n chunks,\n persistedEvent,\n }\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { id, init, InstaQLEntity, lookup, type InstantAdminDatabase } from \"@instantdb/admin\"\nimport { storyDomain } from \"./schema\"\nimport { SchemaOf } from \"@ekairos/domain\"\n\nexport type StoredContext<Context> = Omit<InstaQLEntity<typeof storyDomain, 'context_contexts'>, 'content'> & { content: Context | null }\nexport type ContextIdentifier = { id: string; key?: never } | { key: string; id?: never }\n\nexport type ContextEvent = InstaQLEntity<typeof storyDomain, 'context_events'> & { content: any }\n\nexport type StreamChunk = {\n type: string\n messageId?: string\n content?: string\n [key: string]: unknown\n}\n\nexport class AgentService {\n\n private db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>\n\n constructor(db: InstantAdminDatabase<SchemaOf<typeof storyDomain>>) {\n this.db = db\n }\n\n public async getOrCreateContext<C>(contextIdentifier: ContextIdentifier | null): Promise<StoredContext<C>> {\n if (!contextIdentifier) {\n return this.createContext<C>()\n }\n\n let context = await this.getContext<C>(contextIdentifier)\n if (!context) {\n return this.createContext<C>(contextIdentifier.key ? { key: contextIdentifier.key } : null, contextIdentifier.id)\n } else {\n return context\n }\n }\n\n public async createContext<C>(contextKey?: { key: string } | null, contextId?: string): Promise<StoredContext<C>> {\n let contextData: { createdAt: Date; content: Record<string, unknown>; key: string | null; status: \"open\" } = {\n createdAt: new Date(),\n content: {},\n key: null,\n status: \"open\"\n }\n\n const newContextId = contextId ?? id()\n if (contextKey?.key) {\n contextData = {\n ...contextData,\n key: contextKey.key\n }\n }\n\n await this.db.transact([\n this.db.tx.context_contexts[newContextId].create(contextData)\n ])\n return this.getContext<C>({ id: newContextId })\n }\n\n public async getContext<C>(contextIdentifier: ContextIdentifier): Promise<StoredContext<C>> {\n let context;\n try {\n if (contextIdentifier.id) {\n const tRes = await this.db.query({\n context_contexts: {\n $: { where: { id: contextIdentifier.id as any }, limit: 1 }\n }\n })\n context = tRes.context_contexts?.[0]\n }\n\n if (contextIdentifier.key) {\n const tRes = await this.db.query({\n context_contexts: {\n $: { where: { key: contextIdentifier.key } }\n }\n })\n context = tRes.context_contexts?.[0]\n }\n\n return context as unknown as StoredContext<C>\n } catch (error: any) {\n console.error(\"Error getting context\", error)\n throw new Error(\"Error getting context: \" + error.message)\n }\n }\n\n public async updateContextContent<C>(contextIdentifier: ContextIdentifier, content: C): Promise<StoredContext<C>> {\n\n const contextDBIdentifier = contextIdentifier.id ?? lookup(\"key\", contextIdentifier.key)\n\n await this.db.transact([\n this.db.tx.context_contexts[contextDBIdentifier].update({\n content: content,\n updatedAt: new Date()\n })\n ])\n\n return this.getContext<C>(contextIdentifier)\n }\n\n public async saveEvent(contextIdentifier: ContextIdentifier, event: ContextEvent): Promise<ContextEvent> {\n const txs = [\n this.db.tx.context_events[event.id].create({\n ...event,\n status: \"stored\"\n })\n ]\n\n if (contextIdentifier.id) {\n txs.push(this.db.tx.context_events[event.id].link({ context: contextIdentifier.id }))\n } else {\n txs.push(this.db.tx.context_events[event.id].link({ context: lookup(\"key\", contextIdentifier.key) }))\n }\n\n await this.db.transact(txs)\n\n return await this.getEvent(event.id)\n }\n\n public async createExecution(contextIdentifier: ContextIdentifier, triggerEventId: string, reactionEventId: string): Promise<{ id: string }> {\n const executionId = id()\n const execCreate = this.db.tx.story_executions[executionId].create({\n createdAt: new Date(),\n status: \"executing\",\n })\n\n const txs: any[] = [execCreate]\n\n if (contextIdentifier.id) {\n txs.push(this.db.tx.story_executions[executionId].link({ context: contextIdentifier.id }))\n txs.push(this.db.tx.context_contexts[contextIdentifier.id].link({ currentExecution: executionId }))\n } else {\n const ctxLookup = lookup(\"key\", contextIdentifier.key)\n txs.push(this.db.tx.story_executions[executionId].link({ context: ctxLookup }))\n txs.push(this.db.tx.context_contexts[ctxLookup].link({ currentExecution: executionId }))\n }\n\n txs.push(this.db.tx.story_executions[executionId].link({ trigger: triggerEventId }))\n txs.push(this.db.tx.story_executions[executionId].link({ reaction: reactionEventId }))\n\n await this.db.transact(txs)\n\n return { id: executionId }\n }\n\n public async updateContextStatus(contextIdentifier: ContextIdentifier, status: \"open\" | \"streaming\" | \"closed\"): Promise<void> {\n const txs: any[] = []\n \n if (contextIdentifier.id) {\n txs.push(this.db.tx.context_contexts[contextIdentifier.id].update({ status, updatedAt: new Date() }))\n } else {\n txs.push(this.db.tx.context_contexts[lookup(\"key\", contextIdentifier.key)].update({ status, updatedAt: new Date() }))\n }\n\n await this.db.transact(txs)\n }\n\n public async completeExecution(contextIdentifier: ContextIdentifier, executionId: string, status: \"completed\" | \"failed\"): Promise<void> {\n const txs: any[] = []\n txs.push(this.db.tx.story_executions[executionId].update({ status, updatedAt: new Date() }))\n\n // Update context status to \"open\" when execution completes\n if (contextIdentifier.id) {\n txs.push(this.db.tx.context_contexts[contextIdentifier.id].update({ status: \"open\", updatedAt: new Date() }))\n // optionally unlink currentExecution if desired\n } else {\n txs.push(this.db.tx.context_contexts[lookup(\"key\", contextIdentifier.key)].update({ status: \"open\", updatedAt: new Date() }))\n }\n\n await this.db.transact(txs)\n }\n\n public async updateEvent(eventId: string, event: ContextEvent): Promise<ContextEvent> {\n await this.db.transact([\n this.db.tx.context_events[eventId].update(event)\n ])\n return await this.getEvent(eventId)\n }\n\n public async getEvent(eventId: string): Promise<ContextEvent> {\n const event = await this.db.query({\n context_events: {\n $: { \n where: { id: eventId as any }\n }\n }\n })\n return event.context_events?.[0] as ContextEvent\n }\n\n public async getEvents(contextIdentifier: ContextIdentifier): Promise<ContextEvent[]> {\n\n let contextWhere: { context: string } | { context: ReturnType<typeof lookup> };\n if (contextIdentifier.id) {\n contextWhere = { context: contextIdentifier.id }\n } else {\n contextWhere = { context: lookup(\"key\", contextIdentifier.key) }\n }\n\n const events = await this.db.query({\n context_events: {\n $: {\n where: contextWhere as any,\n limit: 30,\n order: {\n createdAt: 'asc',\n },\n }\n }\n })\n return events.context_events as ContextEvent[]\n }\n\n public async readEventStream(stream: ReadableStream): Promise<{\n eventId: string | undefined\n chunks: StreamChunk[]\n persistedEvent: any\n }> {\n const reader = stream.getReader()\n const chunks: StreamChunk[] = []\n let firstChunk: StreamChunk | undefined\n\n while (true) {\n const { value, done } = await reader.read()\n if (done) {\n break\n }\n const currentChunk = value as StreamChunk\n if (!firstChunk) {\n firstChunk = currentChunk\n }\n chunks.push(currentChunk)\n }\n\n if (!firstChunk) {\n throw new Error(\"No chunks received from stream\")\n }\n\n const eventId = firstChunk.messageId\n\n if (!eventId || typeof eventId !== 'string') {\n throw new Error(\"Event ID not found in stream chunks\")\n }\n\n const query = await this.db.query({\n context_events: {\n $: {\n where: { id: eventId as any },\n limit: 1,\n fields: [\"id\", \"channel\", \"type\", \"status\", \"createdAt\", \"content\"],\n },\n },\n })\n\n const persistedEvent = Array.isArray(query.context_events) ? query.context_events[0] : undefined\n\n return {\n eventId,\n chunks,\n persistedEvent,\n }\n }\n}"]}
|
package/dist/steps-context.d.ts
CHANGED
package/dist/steps-context.js
CHANGED
|
@@ -12,7 +12,7 @@ async function ensureContextStep(params) {
|
|
|
12
12
|
const db = (0, admin_1.init)({
|
|
13
13
|
appId: process.env.NEXT_PUBLIC_INSTANT_APP_ID,
|
|
14
14
|
adminToken: process.env.INSTANT_APP_ADMIN_TOKEN,
|
|
15
|
-
schema: schema_1.storyDomain.
|
|
15
|
+
schema: schema_1.storyDomain.toInstantSchema()
|
|
16
16
|
});
|
|
17
17
|
const service = new service_1.AgentService(db);
|
|
18
18
|
const selector = params.context;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps-context.js","sourceRoot":"","sources":["../src/steps-context.ts"],"names":[],"mappings":";;AAIA,8CAcC;AAED,sDAMC;AA1BD,uCAA2D;AAC3D,4CAAuC;AACvC,qCAAsC;AAE/B,KAAK,UAAU,iBAAiB,CAAC,MAA0D;IAChG,UAAU,CAAA;IACV,mEAAmE;IACnE,sEAAsE;IACtE,MAAM,EAAE,GAAG,IAAA,YAAI,EAAC;QACd,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,0BAAoC;QACvD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAiC;QACzD,MAAM,EAAE,oBAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"steps-context.js","sourceRoot":"","sources":["../src/steps-context.ts"],"names":[],"mappings":";;AAIA,8CAcC;AAED,sDAMC;AA1BD,uCAA2D;AAC3D,4CAAuC;AACvC,qCAAsC;AAE/B,KAAK,UAAU,iBAAiB,CAAC,MAA0D;IAChG,UAAU,CAAA;IACV,mEAAmE;IACnE,sEAAsE;IACtE,MAAM,EAAE,GAAG,IAAA,YAAI,EAAC;QACd,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,0BAAoC;QACvD,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAiC;QACzD,MAAM,EAAE,oBAAW,CAAC,eAAe,EAAE;KACtC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,IAAI,sBAAY,CAAC,EAAE,CAAC,CAAA;IAEpC,MAAM,QAAQ,GAA6B,MAAM,CAAC,OAAO,CAAA;IACzD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAM,QAAQ,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;IAClF,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,CAAA;AAC9B,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,MAAgD;IAC1F,UAAU,CAAA;IACV,uFAAuF;IACvF,kFAAkF;IAClF,MAAM,YAAY,GAAG,GAAG,MAAM,CAAC,SAAS,6BAA6B,MAAM,CAAC,SAAS,EAAE,CAAA;IACvF,OAAO,YAAY,CAAA;AACrB,CAAC","sourcesContent":["import { AgentService, ContextIdentifier } from \"./service\"\nimport { init } from \"@instantdb/admin\"\nimport { storyDomain } from \"./schema\"\n\nexport async function ensureContextStep(params: { key: string; context: ContextIdentifier | null }) {\n \"use step\"\n // Note: This function should receive db as parameter in the future\n // For now, we create a temporary instance (this is a legacy function)\n const db = init({\n appId: process.env.NEXT_PUBLIC_INSTANT_APP_ID as string,\n adminToken: process.env.INSTANT_APP_ADMIN_TOKEN as string,\n schema: storyDomain.toInstantSchema()\n })\n const service = new AgentService(db)\n\n const selector: ContextIdentifier | null = params.context\n const ctx = await service.getOrCreateContext<any>(selector ?? { key: params.key })\n return { contextId: ctx.id }\n}\n\nexport async function buildSystemPromptStep(params: { contextId: string; narrative: string }) {\n \"use step\"\n // Por ahora el prompt es plano, concatenando narrativa y metadatos básicos de contexto\n // No modificar prompts de negocio existentes; este es un prompt genérico de Story\n const systemPrompt = `${params.narrative}\\n\\n[context]\\ncontextId: ${params.contextId}`\n return systemPrompt\n}\n\n\n"]}
|
package/dist/story.d.ts
CHANGED
|
@@ -43,7 +43,7 @@ export type StoryStartArgs = {
|
|
|
43
43
|
trigger?: any | null;
|
|
44
44
|
};
|
|
45
45
|
export declare function story(key: string, config: StoryConfig): (args?: StoryStartArgs) => Promise<{
|
|
46
|
-
contextId:
|
|
46
|
+
contextId: unknown;
|
|
47
47
|
status: "completed";
|
|
48
48
|
}>;
|
|
49
49
|
export type { StoryActionSpec as StoryAction, StoryOptions as StoryConfigOptions };
|
package/dist/storyRunner.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ekairos/story",
|
|
3
|
-
"version": "1.21.0",
|
|
3
|
+
"version": "1.21.4-beta.0",
|
|
4
4
|
"description": "Pulzar Story - Workflow-based AI Stories",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@ai-sdk/openai": "^2.0.52",
|
|
36
|
-
"@ekairos/domain": "^1.21.0",
|
|
36
|
+
"@ekairos/domain": "^1.21.4-beta.0",
|
|
37
37
|
"@instantdb/admin": "^0.22.13",
|
|
38
38
|
"@instantdb/core": "^0.22.13",
|
|
39
39
|
"@vercel/sandbox": "^0.0.23",
|