@fragno-dev/pi-fragment 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +39 -3
  2. package/dist/browser/client/react.d.ts +44 -36
  3. package/dist/browser/client/react.d.ts.map +1 -1
  4. package/dist/browser/client/react.js +105 -22
  5. package/dist/browser/client/react.js.map +1 -1
  6. package/dist/browser/client/solid.d.ts +42 -36
  7. package/dist/browser/client/solid.d.ts.map +1 -1
  8. package/dist/browser/client/solid.js +27 -13
  9. package/dist/browser/client/solid.js.map +1 -1
  10. package/dist/browser/client/svelte.d.ts +42 -36
  11. package/dist/browser/client/svelte.d.ts.map +1 -1
  12. package/dist/browser/client/svelte.js +14 -6
  13. package/dist/browser/client/svelte.js.map +1 -1
  14. package/dist/browser/client/vanilla.d.ts +99 -39
  15. package/dist/browser/client/vanilla.d.ts.map +1 -1
  16. package/dist/browser/client/vanilla.js +151 -3
  17. package/dist/browser/client/vanilla.js.map +1 -1
  18. package/dist/browser/client/vue.d.ts +54 -38
  19. package/dist/browser/client/vue.d.ts.map +1 -1
  20. package/dist/browser/client/vue.js +25 -17
  21. package/dist/browser/client/vue.js.map +1 -1
  22. package/dist/browser/{factory-DKoO_lRA.js → clients-BscY_HVe.js} +1051 -799
  23. package/dist/browser/clients-BscY_HVe.js.map +1 -0
  24. package/dist/browser/index.d.ts +3 -776
  25. package/dist/browser/index.js +801 -2
  26. package/dist/browser/index.js.map +1 -0
  27. package/dist/browser/routes-CpL_YGWK.d.ts +1560 -0
  28. package/dist/browser/routes-CpL_YGWK.d.ts.map +1 -0
  29. package/dist/cli/mod.d.ts.map +1 -1
  30. package/dist/cli/mod.js +245 -7
  31. package/dist/cli/mod.js.map +1 -1
  32. package/dist/node/{pi → client}/clients.d.ts +46 -36
  33. package/dist/node/client/clients.d.ts.map +1 -0
  34. package/dist/node/client/clients.js +54 -0
  35. package/dist/node/client/clients.js.map +1 -0
  36. package/dist/node/client/session-controller.d.ts +31 -0
  37. package/dist/node/client/session-controller.d.ts.map +1 -0
  38. package/dist/node/client/session-controller.js +33 -0
  39. package/dist/node/client/session-controller.js.map +1 -0
  40. package/dist/node/client/session-store.d.ts +71 -0
  41. package/dist/node/client/session-store.d.ts.map +1 -0
  42. package/dist/node/client/session-store.js +637 -0
  43. package/dist/node/client/session-store.js.map +1 -0
  44. package/dist/node/debug-log.d.ts +9 -0
  45. package/dist/node/debug-log.d.ts.map +1 -0
  46. package/dist/node/debug-log.js +58 -0
  47. package/dist/node/debug-log.js.map +1 -0
  48. package/dist/node/index.d.ts +5 -4
  49. package/dist/node/index.js +5 -3
  50. package/dist/node/pi/definition.d.ts +1 -1
  51. package/dist/node/pi/definition.d.ts.map +1 -1
  52. package/dist/node/pi/dsl.d.ts +5 -2
  53. package/dist/node/pi/dsl.d.ts.map +1 -1
  54. package/dist/node/pi/dsl.js +22 -3
  55. package/dist/node/pi/dsl.js.map +1 -1
  56. package/dist/node/pi/factory.d.ts +37 -34
  57. package/dist/node/pi/factory.d.ts.map +1 -1
  58. package/dist/node/pi/factory.js.map +1 -1
  59. package/dist/node/pi/mappers.js +0 -1
  60. package/dist/node/pi/mappers.js.map +1 -1
  61. package/dist/node/pi/route-schemas.js +42 -10
  62. package/dist/node/pi/route-schemas.js.map +1 -1
  63. package/dist/node/pi/types.d.ts +155 -7
  64. package/dist/node/pi/types.d.ts.map +1 -1
  65. package/dist/node/pi/types.js +6 -0
  66. package/dist/node/pi/types.js.map +1 -0
  67. package/dist/node/pi/workflow/active-session.d.ts +2 -0
  68. package/dist/node/pi/workflow/active-session.js +107 -0
  69. package/dist/node/pi/workflow/active-session.js.map +1 -0
  70. package/dist/node/pi/workflow/agent-runner.d.ts +13 -0
  71. package/dist/node/pi/workflow/agent-runner.d.ts.map +1 -0
  72. package/dist/node/pi/workflow/agent-runner.js +228 -0
  73. package/dist/node/pi/workflow/agent-runner.js.map +1 -0
  74. package/dist/node/pi/workflow/tool-journal.js +157 -0
  75. package/dist/node/pi/workflow/tool-journal.js.map +1 -0
  76. package/dist/node/pi/workflow/workflow.d.ts +29 -0
  77. package/dist/node/pi/workflow/workflow.d.ts.map +1 -0
  78. package/dist/node/pi/workflow/workflow.js +219 -0
  79. package/dist/node/pi/workflow/workflow.js.map +1 -0
  80. package/dist/node/routes.d.ts +38 -35
  81. package/dist/node/routes.d.ts.map +1 -1
  82. package/dist/node/routes.js +203 -132
  83. package/dist/node/routes.js.map +1 -1
  84. package/dist/node/schema.js +1 -1
  85. package/dist/node/schema.js.map +1 -1
  86. package/package.json +30 -29
  87. package/dist/browser/client-Bk-J98pf.d.ts +0 -679
  88. package/dist/browser/client-Bk-J98pf.d.ts.map +0 -1
  89. package/dist/browser/factory-DKoO_lRA.js.map +0 -1
  90. package/dist/browser/index.d.ts.map +0 -1
  91. package/dist/node/pi/clients.d.ts.map +0 -1
  92. package/dist/node/pi/clients.js +0 -18
  93. package/dist/node/pi/clients.js.map +0 -1
  94. package/dist/node/pi/workflow.d.ts +0 -31
  95. package/dist/node/pi/workflow.d.ts.map +0 -1
  96. package/dist/node/pi/workflow.js +0 -242
  97. package/dist/node/pi/workflow.js.map +0 -1
  98. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,219 @@
1
+ import { piSchema } from "../../schema.js";
2
+ import { PiLogger } from "../../debug-log.js";
3
+ import { extractAssistantTextFromMessage, normalizeSteeringMode } from "../mappers.js";
4
+ import { createInitialPiAgentLoopState, createPiActiveSessionState, ensurePiActiveSessionState } from "./active-session.js";
5
+ import { createReplayContext, hydrateReplayCache, parsePersistedToolJournal } from "./tool-journal.js";
6
+ import { runAgentTurn } from "./agent-runner.js";
7
+ import { z } from "zod";
8
+ import { NonRetryableError, defineWorkflow } from "@fragno-dev/workflows";
9
+
10
+ //#region src/pi/workflow/workflow.ts
11
+ const PI_WORKFLOW_NAME = "agent-loop-workflow";
12
+ const WAIT_FOR_USER_TIMEOUT = "1 hour";
13
+ const WAIT_FOR_USER_TIMEOUT_MS = 3600 * 1e3;
14
+ const agentLoopParamsSchema = z.object({
15
+ sessionId: z.string(),
16
+ agentName: z.string(),
17
+ systemPrompt: z.string().optional(),
18
+ initialMessages: z.array(z.custom()).optional()
19
+ });
20
+ const userMessageSchema = z.object({
21
+ text: z.string().optional(),
22
+ done: z.boolean().optional(),
23
+ steeringMode: z.enum(["all", "one-at-a-time"]).optional()
24
+ });
25
+ const buildWaitingForUser = (turn) => ({
26
+ type: "user_message",
27
+ turn,
28
+ stepKey: `waitForEvent:wait-user-${turn}`,
29
+ timeoutMs: WAIT_FOR_USER_TIMEOUT_MS
30
+ });
31
+ const initLoopState = (params, existingState) => {
32
+ const activeSession = existingState ? ensurePiActiveSessionState(existingState) : createPiActiveSessionState();
33
+ return {
34
+ messages: Array.isArray(params.initialMessages) ? params.initialMessages : [],
35
+ events: [],
36
+ trace: [],
37
+ summaries: [],
38
+ turn: 0,
39
+ phase: "waiting-for-user",
40
+ waitingFor: buildWaitingForUser(0),
41
+ replayCache: /* @__PURE__ */ new Map(),
42
+ activeSession
43
+ };
44
+ };
45
+ const setPhase = (loop, phase) => {
46
+ loop.phase = phase;
47
+ switch (phase) {
48
+ case "waiting-for-user":
49
+ loop.waitingFor = buildWaitingForUser(loop.turn);
50
+ break;
51
+ case "running-agent":
52
+ loop.waitingFor = {
53
+ type: "assistant",
54
+ turn: loop.turn,
55
+ stepKey: `do:assistant-${loop.turn}`
56
+ };
57
+ break;
58
+ case "complete":
59
+ loop.waitingFor = null;
60
+ break;
61
+ }
62
+ };
63
+ const emitState = (ctx, loop) => {
64
+ ctx?.setState({
65
+ messages: loop.messages,
66
+ events: loop.events,
67
+ trace: loop.trace,
68
+ summaries: loop.summaries,
69
+ turn: loop.turn,
70
+ phase: loop.phase,
71
+ waitingFor: loop.waitingFor,
72
+ activeSession: loop.activeSession,
73
+ activeSessionUpdatesByTurn: loop.activeSession.exportReplayBuffer()
74
+ });
75
+ };
76
+ const mutateSessionStatus = (forSchema, sessionId, status) => {
77
+ try {
78
+ forSchema(piSchema).update("session", sessionId, (builder) => builder.set({ status }));
79
+ } catch {}
80
+ };
81
+ const projectSessionStatus = (tx, sessionId, status) => {
82
+ tx.mutate(({ forSchema }) => {
83
+ mutateSessionStatus(forSchema, sessionId, status);
84
+ });
85
+ };
86
+ const buildDetailEvent = (turn, event) => {
87
+ const timestamp = event.timestamp instanceof Date ? event.timestamp : new Date(event.timestamp);
88
+ return {
89
+ id: `${event.type}:${turn}:${timestamp.getTime()}`,
90
+ type: event.type,
91
+ payload: event.payload ?? null,
92
+ createdAt: timestamp,
93
+ deliveredAt: timestamp,
94
+ consumedByStepKey: `waitForEvent:wait-user-${turn}`
95
+ };
96
+ };
97
+ const buildTurnSummary = (turn, assistant) => {
98
+ if (!assistant) return null;
99
+ return {
100
+ turn,
101
+ assistant,
102
+ summary: extractAssistantTextFromMessage(assistant) || null
103
+ };
104
+ };
105
+ const parseAssistantStepResult = (value, stepName) => {
106
+ if (typeof value !== "object" || value === null || Array.isArray(value)) throw new NonRetryableError(`Assistant step ${stepName} returned an invalid result.`);
107
+ const result = value;
108
+ if (!Array.isArray(result.messages)) throw new NonRetryableError(`Assistant step ${stepName} is missing messages.`);
109
+ const messages = result.messages;
110
+ return {
111
+ messages,
112
+ trace: Array.isArray(result.trace) ? result.trace : [],
113
+ assistant: (result.assistant && typeof result.assistant === "object" ? result.assistant : null) ?? messages.findLast((m) => m.role === "assistant") ?? null,
114
+ toolJournal: parsePersistedToolJournal(value, stepName)
115
+ };
116
+ };
117
+ const createPiAgentLoopWorkflow = (options) => defineWorkflow({
118
+ name: PI_WORKFLOW_NAME,
119
+ schema: agentLoopParamsSchema,
120
+ initialState: createInitialPiAgentLoopState()
121
+ }, async function(event, step) {
122
+ const params = agentLoopParamsSchema.parse(event.payload ?? {});
123
+ const agentDefinition = options.agents[params.agentName];
124
+ if (!agentDefinition) throw new NonRetryableError(`Agent ${params.agentName} not found.`);
125
+ const loop = initLoopState(params, this?.getState());
126
+ emitState(this, loop);
127
+ while (true) {
128
+ setPhase(loop, "waiting-for-user");
129
+ emitState(this, loop);
130
+ const userEvent = await step.waitForEvent(`wait-user-${loop.turn}`, {
131
+ type: "user_message",
132
+ timeout: WAIT_FOR_USER_TIMEOUT
133
+ });
134
+ const userPayload = userMessageSchema.parse(userEvent.payload ?? {});
135
+ const userText = userPayload.text ?? "";
136
+ const isDone = userPayload.done ?? false;
137
+ const steeringMode = normalizeSteeringMode(userPayload.steeringMode);
138
+ loop.events = [...loop.events, buildDetailEvent(loop.turn, userEvent)];
139
+ loop.messages = (await step.do(`user-${loop.turn}`, async (tx) => {
140
+ projectSessionStatus(tx, event.instanceId, "active");
141
+ const userMessage = {
142
+ role: "user",
143
+ content: [{
144
+ type: "text",
145
+ text: userText
146
+ }],
147
+ timestamp: Date.now()
148
+ };
149
+ return { messages: [...loop.messages, userMessage] };
150
+ })).messages;
151
+ setPhase(loop, "running-agent");
152
+ emitState(this, loop);
153
+ const replay = createReplayContext({
154
+ cache: loop.replayCache,
155
+ reducers: options.toolSideEffectReducers
156
+ });
157
+ const assistantStepName = `assistant-${loop.turn}`;
158
+ const traceLengthBeforeTurn = loop.trace.length;
159
+ const turnId = `${event.instanceId}:${loop.turn}`;
160
+ let assistantResult;
161
+ try {
162
+ assistantResult = await step.do(assistantStepName, { retries: {
163
+ limit: 1,
164
+ delay: "0 ms",
165
+ backoff: "constant"
166
+ } }, async (tx) => {
167
+ tx.onTerminalError.mutate(({ forSchema }) => {
168
+ mutateSessionStatus(forSchema, event.instanceId, "errored");
169
+ });
170
+ const result = await runAgentTurn({
171
+ params,
172
+ agent: agentDefinition,
173
+ tools: options.tools,
174
+ messages: loop.messages,
175
+ steeringMode,
176
+ turnId,
177
+ replay,
178
+ onEvent: (agentEvent) => {
179
+ loop.trace = [...loop.trace, agentEvent];
180
+ loop.activeSession.publishEvent(loop.turn, agentEvent);
181
+ emitState(this, loop);
182
+ }
183
+ });
184
+ projectSessionStatus(tx, event.instanceId, isDone ? "complete" : "waiting");
185
+ return result;
186
+ });
187
+ } catch (error) {
188
+ if (!(error instanceof Error && error.name === "RunnerStepSuspended")) {
189
+ loop.activeSession.settleTurn(loop.turn, "errored");
190
+ emitState(this, loop);
191
+ }
192
+ throw error;
193
+ }
194
+ const parsed = parseAssistantStepResult(assistantResult, assistantStepName);
195
+ loop.messages = parsed.messages;
196
+ loop.trace = [...loop.trace.slice(0, traceLengthBeforeTurn), ...parsed.trace];
197
+ const summary = buildTurnSummary(loop.turn, parsed.assistant);
198
+ if (summary) loop.summaries = [...loop.summaries, summary];
199
+ hydrateReplayCache(loop.replayCache, parsed.toolJournal);
200
+ if (isDone) {
201
+ setPhase(loop, "complete");
202
+ loop.activeSession.settleTurn(loop.turn, "complete");
203
+ emitState(this, loop);
204
+ return { messages: loop.messages };
205
+ }
206
+ loop.activeSession.settleTurn(loop.turn, "waiting-for-user");
207
+ loop.turn += 1;
208
+ emitState(this, loop);
209
+ }
210
+ });
211
+ const createPiWorkflows = (options) => {
212
+ PiLogger.reset();
213
+ if (options.logging) PiLogger.configure(options.logging);
214
+ return { agentLoop: createPiAgentLoopWorkflow(options) };
215
+ };
216
+
217
+ //#endregion
218
+ export { PI_WORKFLOW_NAME, createPiWorkflows };
219
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","names":[],"sources":["../../../../src/pi/workflow/workflow.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport type { HandlerTxContext, HooksMap } from \"@fragno-dev/db\";\nimport {\n defineWorkflow,\n NonRetryableError,\n type WorkflowEvent,\n type WorkflowStep,\n type WorkflowStepTx,\n type WorkflowsRegistry,\n} from \"@fragno-dev/workflows\";\n\nimport type { AgentEvent, AgentMessage } from \"@mariozechner/pi-agent-core\";\n\nimport { PiLogger } from \"../../debug-log\";\nimport { piSchema } from \"../../schema\";\nimport type { PiSessionStatus } from \"../constants\";\nimport { extractAssistantTextFromMessage, normalizeSteeringMode } from \"../mappers\";\nimport type {\n PiActiveSessionState,\n PiAgentLoopPhase,\n PiAgentLoopState,\n PiAgentLoopWaitingFor,\n PiAgentRegistry,\n PiFragmentConfig,\n PiSessionDetailEvent,\n PiToolReplayContext,\n PiToolRegistry,\n PiToolSideEffectReducerRegistry,\n PiTurnSummary,\n} from \"../types\";\nimport {\n createPiActiveSessionState,\n createInitialPiAgentLoopState,\n ensurePiActiveSessionState,\n} from \"./active-session\";\nimport { runAgentTurn, type AgentLoopParams } from \"./agent-runner\";\nimport { createReplayContext, hydrateReplayCache, parsePersistedToolJournal } from \"./tool-journal\";\n\nexport { createInitialPiAgentLoopState, ensurePiActiveSessionState };\n\nexport const PI_WORKFLOW_NAME = \"agent-loop-workflow\";\n\ntype WorkflowsOptions = {\n agents: PiAgentRegistry;\n tools: PiToolRegistry;\n toolSideEffectReducers?: PiToolSideEffectReducerRegistry;\n logging?: PiFragmentConfig[\"logging\"];\n};\n\nconst WAIT_FOR_USER_TIMEOUT = \"1 hour\" as const;\nconst WAIT_FOR_USER_TIMEOUT_MS = 60 * 60 * 1000;\n\nconst agentLoopParamsSchema: z.ZodType<AgentLoopParams> = z.object({\n sessionId: z.string(),\n agentName: z.string(),\n systemPrompt: z.string().optional(),\n initialMessages: z.array(z.custom<AgentMessage>()).optional(),\n});\n\nconst userMessageSchema = z.object({\n text: z.string().optional(),\n done: z.boolean().optional(),\n steeringMode: z.enum([\"all\", \"one-at-a-time\"]).optional(),\n});\n\n// --- Loop state ---\n\ntype LoopState = {\n messages: AgentMessage[];\n events: PiSessionDetailEvent[];\n trace: AgentEvent[];\n summaries: PiTurnSummary[];\n turn: number;\n phase: PiAgentLoopPhase;\n waitingFor: PiAgentLoopWaitingFor;\n replayCache: PiToolReplayContext[\"cache\"];\n activeSession: PiActiveSessionState;\n};\n\nconst buildWaitingForUser = (turn: number): NonNullable<PiAgentLoopWaitingFor> => ({\n type: \"user_message\",\n turn,\n stepKey: `waitForEvent:wait-user-${turn}`,\n timeoutMs: WAIT_FOR_USER_TIMEOUT_MS,\n});\n\nconst initLoopState = (\n params: AgentLoopParams,\n existingState: PiAgentLoopState | undefined,\n): LoopState => {\n const activeSession = existingState\n ? ensurePiActiveSessionState(existingState)\n : createPiActiveSessionState();\n\n return {\n messages: Array.isArray(params.initialMessages) ? params.initialMessages : [],\n events: [],\n trace: [],\n summaries: [],\n turn: 0,\n phase: \"waiting-for-user\",\n waitingFor: buildWaitingForUser(0),\n replayCache: new Map(),\n activeSession,\n };\n};\n\nconst setPhase = (loop: LoopState, phase: PiAgentLoopPhase) => {\n loop.phase = phase;\n switch (phase) {\n case \"waiting-for-user\":\n loop.waitingFor = buildWaitingForUser(loop.turn);\n break;\n case \"running-agent\":\n loop.waitingFor = {\n type: \"assistant\",\n turn: loop.turn,\n stepKey: `do:assistant-${loop.turn}`,\n };\n break;\n case \"complete\":\n loop.waitingFor = null;\n break;\n }\n};\n\ntype WorkflowContext =\n | { getState(): PiAgentLoopState; setState(state: Partial<PiAgentLoopState>): void }\n | undefined;\n\nconst emitState = (ctx: WorkflowContext, loop: LoopState) => {\n ctx?.setState({\n messages: loop.messages,\n events: loop.events,\n trace: loop.trace,\n summaries: loop.summaries,\n turn: loop.turn,\n phase: loop.phase,\n waitingFor: loop.waitingFor,\n activeSession: loop.activeSession,\n activeSessionUpdatesByTurn: loop.activeSession.exportReplayBuffer(),\n });\n};\n\n// --- DB status projection ---\n\nconst mutateSessionStatus = (\n forSchema: HandlerTxContext<HooksMap>[\"forSchema\"],\n sessionId: string,\n status: PiSessionStatus,\n): void => {\n try {\n const uow = forSchema(piSchema);\n uow.update(\"session\", sessionId, (builder) => builder.set({ status }));\n } catch {\n // Some workflow-only tests run without the pi fragment schema mounted. Status projection is a\n // best-effort integration concern, so those environments can safely skip this mutation.\n }\n};\n\nconst projectSessionStatus = (\n tx: WorkflowStepTx,\n sessionId: string,\n status: PiSessionStatus,\n): void => {\n tx.mutate(({ forSchema }) => {\n mutateSessionStatus(forSchema, sessionId, status);\n });\n};\n\n// --- Turn helpers ---\n\nconst buildDetailEvent = (\n turn: number,\n event: { type: string; payload: unknown; timestamp: Date | string | number },\n): PiSessionDetailEvent => {\n const timestamp = event.timestamp instanceof Date ? event.timestamp : new Date(event.timestamp);\n return {\n id: `${event.type}:${turn}:${timestamp.getTime()}`,\n type: event.type,\n payload: event.payload ?? null,\n createdAt: timestamp,\n deliveredAt: timestamp,\n consumedByStepKey: `waitForEvent:wait-user-${turn}`,\n };\n};\n\nconst buildTurnSummary = (turn: number, assistant: AgentMessage | null): PiTurnSummary | null => {\n if (!assistant) {\n return null;\n }\n return {\n turn,\n assistant,\n summary: extractAssistantTextFromMessage(assistant) || null,\n };\n};\n\nconst parseAssistantStepResult = (value: unknown, stepName: string) => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new NonRetryableError(`Assistant step ${stepName} returned an invalid result.`);\n }\n const result = value as { messages?: unknown; trace?: unknown; assistant?: unknown };\n if (!Array.isArray(result.messages)) {\n throw new NonRetryableError(`Assistant step ${stepName} is missing messages.`);\n }\n const messages = result.messages as AgentMessage[];\n const trace = Array.isArray(result.trace) ? (result.trace as AgentEvent[]) : [];\n const assistant =\n (result.assistant && typeof result.assistant === \"object\"\n ? (result.assistant as AgentMessage)\n : null) ??\n messages.findLast((m) => m.role === \"assistant\") ??\n null;\n\n return {\n messages,\n trace,\n assistant,\n toolJournal: parsePersistedToolJournal(value, stepName),\n };\n};\n\n// --- Workflow definition ---\n\nconst createPiAgentLoopWorkflow = (options: WorkflowsOptions) =>\n defineWorkflow(\n {\n name: PI_WORKFLOW_NAME,\n schema: agentLoopParamsSchema,\n initialState: createInitialPiAgentLoopState(),\n },\n async function (event: WorkflowEvent<AgentLoopParams>, step: WorkflowStep) {\n const params = agentLoopParamsSchema.parse(event.payload ?? {});\n const agentDefinition = options.agents[params.agentName];\n if (!agentDefinition) {\n throw new NonRetryableError(`Agent ${params.agentName} not found.`);\n }\n\n const loop = initLoopState(params, this?.getState());\n emitState(this, loop);\n\n while (true) {\n setPhase(loop, \"waiting-for-user\");\n emitState(this, loop);\n\n // Wait for the user to send a message (or signal done).\n const userEvent = await step.waitForEvent(`wait-user-${loop.turn}`, {\n type: \"user_message\",\n timeout: WAIT_FOR_USER_TIMEOUT,\n });\n const userPayload = userMessageSchema.parse(userEvent.payload ?? {});\n const userText = userPayload.text ?? \"\";\n const isDone = userPayload.done ?? false;\n const steeringMode = normalizeSteeringMode(userPayload.steeringMode);\n\n // Persist the user message as a durable step.\n loop.events = [...loop.events, buildDetailEvent(loop.turn, userEvent)];\n const userResult = await step.do(`user-${loop.turn}`, async (tx) => {\n projectSessionStatus(tx, event.instanceId, \"active\");\n const userMessage: AgentMessage = {\n role: \"user\",\n content: [{ type: \"text\", text: userText }],\n timestamp: Date.now(),\n };\n return { messages: [...loop.messages, userMessage] };\n });\n loop.messages = userResult.messages;\n\n setPhase(loop, \"running-agent\");\n emitState(this, loop);\n\n // Run the AI agent turn as a retryable durable step.\n const replay = createReplayContext({\n cache: loop.replayCache,\n reducers: options.toolSideEffectReducers,\n });\n const assistantStepName = `assistant-${loop.turn}`;\n const traceLengthBeforeTurn = loop.trace.length;\n const turnId = `${event.instanceId}:${loop.turn}`;\n\n let assistantResult: Awaited<ReturnType<typeof runAgentTurn>>;\n try {\n assistantResult = await step.do(\n assistantStepName,\n { retries: { limit: 1, delay: \"0 ms\", backoff: \"constant\" } },\n async (tx) => {\n tx.onTerminalError.mutate(({ forSchema }) => {\n mutateSessionStatus(forSchema, event.instanceId, \"errored\");\n });\n\n const result = await runAgentTurn({\n params,\n agent: agentDefinition,\n tools: options.tools,\n messages: loop.messages,\n steeringMode,\n turnId,\n replay,\n onEvent: (agentEvent) => {\n loop.trace = [...loop.trace, agentEvent];\n loop.activeSession.publishEvent(loop.turn, agentEvent);\n emitState(this, loop);\n },\n });\n\n projectSessionStatus(tx, event.instanceId, isDone ? \"complete\" : \"waiting\");\n return result;\n },\n );\n } catch (error) {\n if (!(error instanceof Error && error.name === \"RunnerStepSuspended\")) {\n loop.activeSession.settleTurn(loop.turn, \"errored\");\n emitState(this, loop);\n }\n throw error;\n }\n\n const parsed = parseAssistantStepResult(assistantResult, assistantStepName);\n loop.messages = parsed.messages;\n loop.trace = [...loop.trace.slice(0, traceLengthBeforeTurn), ...parsed.trace];\n const summary = buildTurnSummary(loop.turn, parsed.assistant);\n if (summary) {\n loop.summaries = [...loop.summaries, summary];\n }\n hydrateReplayCache(loop.replayCache, parsed.toolJournal);\n\n if (isDone) {\n setPhase(loop, \"complete\");\n loop.activeSession.settleTurn(loop.turn, \"complete\");\n emitState(this, loop);\n return { messages: loop.messages };\n }\n\n loop.activeSession.settleTurn(loop.turn, \"waiting-for-user\");\n loop.turn += 1;\n emitState(this, loop);\n }\n },\n );\n\nexport type PiWorkflowsRegistry = {\n agentLoop: ReturnType<typeof createPiAgentLoopWorkflow>;\n};\n\nexport const createPiWorkflows = (options: WorkflowsOptions) => {\n PiLogger.reset();\n if (options.logging) {\n PiLogger.configure(options.logging);\n }\n\n return {\n agentLoop: createPiAgentLoopWorkflow(options),\n } satisfies WorkflowsRegistry;\n};\n"],"mappings":"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"}
@@ -1,17 +1,19 @@
1
- import { PiFragmentConfig, PiWorkflowsService } from "./pi/types.js";
1
+ import { PiActiveSessionProtocolMessage, PiFragmentConfig, PiWorkflowsService } from "./pi/types.js";
2
2
  import "./index.js";
3
3
  import * as _fragno_dev_core0 from "@fragno-dev/core";
4
4
  import * as _fragno_dev_db0 from "@fragno-dev/db";
5
5
  import * as _fragno_dev_db_schema0 from "@fragno-dev/db/schema";
6
6
  import { z } from "zod";
7
+ import * as _mariozechner_pi_agent_core0 from "@mariozechner/pi-agent-core";
7
8
  import * as _standard_schema_spec0 from "@standard-schema/spec";
8
9
 
9
10
  //#region src/routes.d.ts
10
- declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig, _fragno_dev_db0.ImplicitDatabaseDependencies<_fragno_dev_db_schema0.Schema<Record<"session", _fragno_dev_db_schema0.Table<Record<string, _fragno_dev_db_schema0.AnyColumn> & Record<"id", _fragno_dev_db_schema0.IdColumn<"varchar(128)", string | _fragno_dev_db_schema0.FragnoId | null, _fragno_dev_db_schema0.FragnoId>> & Record<"name", _fragno_dev_db_schema0.Column<"string", string | null, string | null>> & Record<"agent", _fragno_dev_db_schema0.Column<"string", string, string>> & Record<"status", _fragno_dev_db_schema0.Column<"string", string, string>> & Record<"workflowInstanceId", _fragno_dev_db_schema0.Column<"string", string | null, string | null>> & Record<"steeringMode", _fragno_dev_db_schema0.Column<"string", string, string>> & Record<"metadata", _fragno_dev_db_schema0.Column<"json", unknown, unknown>> & Record<"tags", _fragno_dev_db_schema0.Column<"json", unknown, unknown>> & Record<"createdAt", _fragno_dev_db_schema0.Column<"timestamp", (_fragno_dev_db0.DbNow | Date) | null, Date>> & Record<"updatedAt", _fragno_dev_db_schema0.Column<"timestamp", (_fragno_dev_db0.DbNow | Date) | null, Date>>, Record<string, _fragno_dev_db_schema0.AnyRelation>, Record<string, _fragno_dev_db_schema0.Index<_fragno_dev_db_schema0.AnyColumn[], readonly string[]>> & Record<"idx_session_status", _fragno_dev_db_schema0.Index<readonly [_fragno_dev_db_schema0.Column<"string", string, string>] & _fragno_dev_db_schema0.AnyColumn[], readonly ["status"]>> & Record<"idx_session_created", _fragno_dev_db_schema0.Index<readonly [_fragno_dev_db_schema0.Column<"timestamp", (_fragno_dev_db0.DbNow | Date) | null, Date>] & _fragno_dev_db_schema0.AnyColumn[], readonly ["createdAt"]>>>>>>, _fragno_dev_core0.BoundServices<{}>, {
11
+ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig, _fragno_dev_db0.ImplicitDatabaseDependencies<_fragno_dev_db_schema0.Schema<Record<"session", _fragno_dev_db_schema0.Table<Record<"id", _fragno_dev_db_schema0.IdColumn<"varchar(128)", string | _fragno_dev_db_schema0.FragnoId | null, _fragno_dev_db_schema0.FragnoId>> & Record<"name", _fragno_dev_db_schema0.Column<"string", string | null, string | null>> & Record<"agent", _fragno_dev_db_schema0.Column<"string", string, string>> & Record<"status", _fragno_dev_db_schema0.Column<"string", string, string>> & Record<"steeringMode", _fragno_dev_db_schema0.Column<"string", string, string>> & Record<"metadata", _fragno_dev_db_schema0.Column<"json", unknown, unknown>> & Record<"tags", _fragno_dev_db_schema0.Column<"json", unknown, unknown>> & Record<"createdAt", _fragno_dev_db_schema0.Column<"timestamp", (_fragno_dev_db0.DbNow | Date) | null, Date>> & Record<"updatedAt", _fragno_dev_db_schema0.Column<"timestamp", (_fragno_dev_db0.DbNow | Date) | null, Date>>, Record<string, _fragno_dev_db_schema0.AnyRelation>, Record<string, _fragno_dev_db_schema0.Index<_fragno_dev_db_schema0.AnyColumn[], readonly string[]>> & Record<"idx_session_status", _fragno_dev_db_schema0.Index<readonly [_fragno_dev_db_schema0.Column<"string", string, string>] & _fragno_dev_db_schema0.AnyColumn[], readonly ["status"]>> & Record<"idx_session_created", _fragno_dev_db_schema0.Index<readonly [_fragno_dev_db_schema0.Column<"timestamp", (_fragno_dev_db0.DbNow | Date) | null, Date>] & _fragno_dev_db_schema0.AnyColumn[], readonly ["createdAt"]>>>>>>, _fragno_dev_core0.BoundServices<{}>, {
11
12
  workflows: PiWorkflowsService;
12
13
  }, readonly [_fragno_dev_core0.FragnoRouteConfig<"POST", "/sessions", z.ZodObject<{
13
14
  agent: z.ZodString;
14
15
  name: z.ZodOptional<z.ZodString>;
16
+ systemMessage: z.ZodOptional<z.ZodString>;
15
17
  metadata: z.ZodOptional<z.ZodAny>;
16
18
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
17
19
  steeringMode: z.ZodOptional<z.ZodEnum<{
@@ -30,7 +32,6 @@ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig,
30
32
  waiting: "waiting";
31
33
  }>;
32
34
  agent: z.ZodString;
33
- workflowInstanceId: z.ZodNullable<z.ZodString>;
34
35
  steeringMode: z.ZodEnum<{
35
36
  all: "all";
36
37
  "one-at-a-time": "one-at-a-time";
@@ -39,7 +40,7 @@ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig,
39
40
  tags: z.ZodArray<z.ZodString>;
40
41
  createdAt: z.ZodDate;
41
42
  updatedAt: z.ZodDate;
42
- }, z.core.$strip>, "AGENT_NOT_FOUND" | "WORKFLOWS_REQUIRED" | "WORKFLOW_CREATE_FAILED", string, _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>>, _fragno_dev_core0.FragnoRouteConfig<"GET", "/sessions", _standard_schema_spec0.StandardSchemaV1<unknown, unknown> | undefined, z.ZodArray<z.ZodObject<{
43
+ }, z.core.$strip>, "AGENT_NOT_FOUND" | "WORKFLOW_CREATE_FAILED", string, _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>>, _fragno_dev_core0.FragnoRouteConfig<"GET", "/sessions", _standard_schema_spec0.StandardSchemaV1<unknown, unknown> | undefined, z.ZodArray<z.ZodObject<{
43
44
  id: z.ZodString;
44
45
  name: z.ZodNullable<z.ZodString>;
45
46
  status: z.ZodEnum<{
@@ -51,7 +52,6 @@ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig,
51
52
  waiting: "waiting";
52
53
  }>;
53
54
  agent: z.ZodString;
54
- workflowInstanceId: z.ZodNullable<z.ZodString>;
55
55
  steeringMode: z.ZodEnum<{
56
56
  all: "all";
57
57
  "one-at-a-time": "one-at-a-time";
@@ -72,7 +72,6 @@ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig,
72
72
  waiting: "waiting";
73
73
  }>;
74
74
  agent: z.ZodString;
75
- workflowInstanceId: z.ZodNullable<z.ZodString>;
76
75
  steeringMode: z.ZodEnum<{
77
76
  all: "all";
78
77
  "one-at-a-time": "one-at-a-time";
@@ -102,20 +101,10 @@ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig,
102
101
  type: z.ZodLiteral<"text">;
103
102
  text: z.ZodString;
104
103
  textSignature: z.ZodOptional<z.ZodString>;
105
- }, z.core.$strip>, z.ZodObject<{
106
- type: z.ZodLiteral<"thinking">;
107
- thinking: z.ZodString;
108
- thinkingSignature: z.ZodOptional<z.ZodString>;
109
104
  }, z.core.$strip>, z.ZodObject<{
110
105
  type: z.ZodLiteral<"image">;
111
106
  data: z.ZodString;
112
107
  mimeType: z.ZodString;
113
- }, z.core.$strip>, z.ZodObject<{
114
- type: z.ZodLiteral<"toolCall">;
115
- id: z.ZodString;
116
- name: z.ZodString;
117
- arguments: z.ZodRecord<z.ZodString, z.ZodUnknown>;
118
- thoughtSignature: z.ZodOptional<z.ZodString>;
119
108
  }, z.core.$strip>]>>]>;
120
109
  timestamp: z.ZodNumber;
121
110
  }, z.core.$strip>, z.ZodObject<{
@@ -128,10 +117,6 @@ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig,
128
117
  type: z.ZodLiteral<"thinking">;
129
118
  thinking: z.ZodString;
130
119
  thinkingSignature: z.ZodOptional<z.ZodString>;
131
- }, z.core.$strip>, z.ZodObject<{
132
- type: z.ZodLiteral<"image">;
133
- data: z.ZodString;
134
- mimeType: z.ZodString;
135
120
  }, z.core.$strip>, z.ZodObject<{
136
121
  type: z.ZodLiteral<"toolCall">;
137
122
  id: z.ZodString;
@@ -156,7 +141,13 @@ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig,
156
141
  total: z.ZodNumber;
157
142
  }, z.core.$strip>;
158
143
  }, z.core.$strip>;
159
- stopReason: z.ZodString;
144
+ stopReason: z.ZodEnum<{
145
+ length: "length";
146
+ error: "error";
147
+ stop: "stop";
148
+ toolUse: "toolUse";
149
+ aborted: "aborted";
150
+ }>;
160
151
  errorMessage: z.ZodOptional<z.ZodString>;
161
152
  timestamp: z.ZodNumber;
162
153
  }, z.core.$strip>, z.ZodObject<{
@@ -167,35 +158,47 @@ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig,
167
158
  type: z.ZodLiteral<"text">;
168
159
  text: z.ZodString;
169
160
  textSignature: z.ZodOptional<z.ZodString>;
170
- }, z.core.$strip>, z.ZodObject<{
171
- type: z.ZodLiteral<"thinking">;
172
- thinking: z.ZodString;
173
- thinkingSignature: z.ZodOptional<z.ZodString>;
174
161
  }, z.core.$strip>, z.ZodObject<{
175
162
  type: z.ZodLiteral<"image">;
176
163
  data: z.ZodString;
177
164
  mimeType: z.ZodString;
178
- }, z.core.$strip>, z.ZodObject<{
179
- type: z.ZodLiteral<"toolCall">;
180
- id: z.ZodString;
181
- name: z.ZodString;
182
- arguments: z.ZodRecord<z.ZodString, z.ZodUnknown>;
183
- thoughtSignature: z.ZodOptional<z.ZodString>;
184
165
  }, z.core.$strip>]>>;
185
166
  details: z.ZodOptional<z.ZodUnknown>;
186
167
  isError: z.ZodBoolean;
187
168
  timestamp: z.ZodNumber;
188
169
  }, z.core.$strip>]>>;
189
- trace: z.ZodArray<z.ZodObject<{
170
+ events: z.ZodArray<z.ZodObject<{
171
+ id: z.ZodString;
172
+ runNumber: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
190
173
  type: z.ZodString;
191
- timestamp: z.ZodOptional<z.ZodNumber>;
174
+ payload: z.ZodNullable<z.ZodUnknown>;
175
+ createdAt: z.ZodDate;
176
+ deliveredAt: z.ZodNullable<z.ZodDate>;
177
+ consumedByStepKey: z.ZodNullable<z.ZodString>;
192
178
  }, z.core.$strip>>;
179
+ trace: z.ZodArray<z.ZodType<_mariozechner_pi_agent_core0.AgentEvent, unknown, z.core.$ZodTypeInternals<_mariozechner_pi_agent_core0.AgentEvent, unknown>>>;
180
+ turn: z.ZodNumber;
181
+ phase: z.ZodEnum<{
182
+ complete: "complete";
183
+ "waiting-for-user": "waiting-for-user";
184
+ "running-agent": "running-agent";
185
+ }>;
186
+ waitingFor: z.ZodNullable<z.ZodUnion<readonly [z.ZodObject<{
187
+ type: z.ZodLiteral<"user_message">;
188
+ turn: z.ZodNumber;
189
+ stepKey: z.ZodString;
190
+ timeoutMs: z.ZodNullable<z.ZodNumber>;
191
+ }, z.core.$strip>, z.ZodObject<{
192
+ type: z.ZodLiteral<"assistant">;
193
+ turn: z.ZodNumber;
194
+ stepKey: z.ZodString;
195
+ }, z.core.$strip>]>>;
193
196
  summaries: z.ZodArray<z.ZodObject<{
194
197
  turn: z.ZodNumber;
195
198
  assistant: z.ZodNullable<z.ZodAny>;
196
199
  summary: z.ZodNullable<z.ZodString>;
197
200
  }, z.core.$strip>>;
198
- }, z.core.$strip>, "WORKFLOWS_REQUIRED" | "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING", string, _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>>, _fragno_dev_core0.FragnoRouteConfig<"POST", "/sessions/:sessionId/messages", z.ZodObject<{
201
+ }, z.core.$strip>, "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING", "events" | "trace" | "summaries", _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>>, _fragno_dev_core0.FragnoRouteConfig<"GET", "/sessions/:sessionId/active", _standard_schema_spec0.StandardSchemaV1<unknown, unknown> | undefined, z.ZodArray<z.ZodType<PiActiveSessionProtocolMessage, unknown, z.core.$ZodTypeInternals<PiActiveSessionProtocolMessage, unknown>>>, "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING", string, _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>>, _fragno_dev_core0.FragnoRouteConfig<"POST", "/sessions/:sessionId/messages", z.ZodObject<{
199
202
  text: z.ZodString;
200
203
  done: z.ZodOptional<z.ZodBoolean>;
201
204
  steeringMode: z.ZodOptional<z.ZodEnum<{
@@ -211,7 +214,7 @@ declare const piRoutesFactory: _fragno_dev_core0.RouteFactory<PiFragmentConfig,
211
214
  complete: "complete";
212
215
  waiting: "waiting";
213
216
  }>;
214
- }, z.core.$strip>, "WORKFLOWS_REQUIRED" | "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING", string, _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>>]>;
217
+ }, z.core.$strip>, "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING" | "SESSION_NOT_READY", string, _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>>]>;
215
218
  //#endregion
216
219
  export { piRoutesFactory };
217
220
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","names":[],"sources":["../../src/routes.ts"],"mappings":";;;;;;;;;cA4Ha,eAAA,oBAAe,YAAA,CAwX3B,gBAAA,EAxX2B,eAAA,CAAA,4BAAA,CAAA,sBAAA,CAAA,MAAA,CAAA,MAAA,YAAA,sBAAA,CAAA,KAAA,CAAA,MAAA,SAAA,sBAAA,CAAA,SAAA,IAAA,MAAA,OAAA,sBAAA,CAAA,QAAA,0BAAA,sBAAA,CAAA,QAAA,SAAA,sBAAA,CAAA,QAAA,KAAA,MAAA,SAAA,sBAAA,CAAA,MAAA,4CAAA,MAAA,UAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,WAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,uBAAA,sBAAA,CAAA,MAAA,4CAAA,MAAA,iBAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,aAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,SAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,cAAA,sBAAA,CAAA,MAAA,eAAA,eAAA,CAAA,KAAA,GAAA,IAAA,UAAA,IAAA,KAAA,MAAA,cAAA,sBAAA,CAAA,MAAA,eAAA,eAAA,CAAA,KAAA,GAAA,IAAA,UAAA,IAAA,IAAA,MAAA,SAAA,sBAAA,CAAA,WAAA,GAAA,MAAA,SAAA,sBAAA,CAAA,KAAA,CAAA,sBAAA,CAAA,SAAA,0BAAA,MAAA,uBAAA,sBAAA,CAAA,KAAA,WAAA,sBAAA,CAAA,MAAA,8BAAA,sBAAA,CAAA,SAAA,4BAAA,MAAA,wBAAA,sBAAA,CAAA,KAAA,WAAA,sBAAA,CAAA,MAAA,eAAA,eAAA,CAAA,KAAA,GAAA,IAAA,UAAA,IAAA,KAAA,sBAAA,CAAA,SAAA,kCAAA,iBAAA,CAAA,aAAA;aAAA,kBAAA;AAAA"}
1
+ {"version":3,"file":"routes.d.ts","names":[],"sources":["../../src/routes.ts"],"mappings":";;;;;;;;;;cAsGa,eAAA,oBAAe,YAAA,CA4f3B,gBAAA,EA5f2B,eAAA,CAAA,4BAAA,CAAA,sBAAA,CAAA,MAAA,CAAA,MAAA,YAAA,sBAAA,CAAA,KAAA,CAAA,MAAA,OAAA,sBAAA,CAAA,QAAA,0BAAA,sBAAA,CAAA,QAAA,SAAA,sBAAA,CAAA,QAAA,KAAA,MAAA,SAAA,sBAAA,CAAA,MAAA,4CAAA,MAAA,UAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,WAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,iBAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,aAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,SAAA,sBAAA,CAAA,MAAA,8BAAA,MAAA,cAAA,sBAAA,CAAA,MAAA,eAAA,eAAA,CAAA,KAAA,GAAA,IAAA,UAAA,IAAA,KAAA,MAAA,cAAA,sBAAA,CAAA,MAAA,eAAA,eAAA,CAAA,KAAA,GAAA,IAAA,UAAA,IAAA,IAAA,MAAA,SAAA,sBAAA,CAAA,WAAA,GAAA,MAAA,SAAA,sBAAA,CAAA,KAAA,CAAA,sBAAA,CAAA,SAAA,0BAAA,MAAA,uBAAA,sBAAA,CAAA,KAAA,WAAA,sBAAA,CAAA,MAAA,8BAAA,sBAAA,CAAA,SAAA,4BAAA,MAAA,wBAAA,sBAAA,CAAA,KAAA,WAAA,sBAAA,CAAA,MAAA,eAAA,eAAA,CAAA,KAAA,GAAA,IAAA,UAAA,IAAA,KAAA,sBAAA,CAAA,SAAA,kCAAA,iBAAA,CAAA,aAAA;aAAA,kBAAA;AAAA"}