@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.
- package/README.md +39 -3
- package/dist/browser/client/react.d.ts +44 -36
- package/dist/browser/client/react.d.ts.map +1 -1
- package/dist/browser/client/react.js +105 -22
- package/dist/browser/client/react.js.map +1 -1
- package/dist/browser/client/solid.d.ts +42 -36
- package/dist/browser/client/solid.d.ts.map +1 -1
- package/dist/browser/client/solid.js +27 -13
- package/dist/browser/client/solid.js.map +1 -1
- package/dist/browser/client/svelte.d.ts +42 -36
- package/dist/browser/client/svelte.d.ts.map +1 -1
- package/dist/browser/client/svelte.js +14 -6
- package/dist/browser/client/svelte.js.map +1 -1
- package/dist/browser/client/vanilla.d.ts +99 -39
- package/dist/browser/client/vanilla.d.ts.map +1 -1
- package/dist/browser/client/vanilla.js +151 -3
- package/dist/browser/client/vanilla.js.map +1 -1
- package/dist/browser/client/vue.d.ts +54 -38
- package/dist/browser/client/vue.d.ts.map +1 -1
- package/dist/browser/client/vue.js +25 -17
- package/dist/browser/client/vue.js.map +1 -1
- package/dist/browser/{factory-DKoO_lRA.js → clients-BscY_HVe.js} +1051 -799
- package/dist/browser/clients-BscY_HVe.js.map +1 -0
- package/dist/browser/index.d.ts +3 -776
- package/dist/browser/index.js +801 -2
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/routes-CpL_YGWK.d.ts +1560 -0
- package/dist/browser/routes-CpL_YGWK.d.ts.map +1 -0
- package/dist/cli/mod.d.ts.map +1 -1
- package/dist/cli/mod.js +245 -7
- package/dist/cli/mod.js.map +1 -1
- package/dist/node/{pi → client}/clients.d.ts +46 -36
- package/dist/node/client/clients.d.ts.map +1 -0
- package/dist/node/client/clients.js +54 -0
- package/dist/node/client/clients.js.map +1 -0
- package/dist/node/client/session-controller.d.ts +31 -0
- package/dist/node/client/session-controller.d.ts.map +1 -0
- package/dist/node/client/session-controller.js +33 -0
- package/dist/node/client/session-controller.js.map +1 -0
- package/dist/node/client/session-store.d.ts +71 -0
- package/dist/node/client/session-store.d.ts.map +1 -0
- package/dist/node/client/session-store.js +637 -0
- package/dist/node/client/session-store.js.map +1 -0
- package/dist/node/debug-log.d.ts +9 -0
- package/dist/node/debug-log.d.ts.map +1 -0
- package/dist/node/debug-log.js +58 -0
- package/dist/node/debug-log.js.map +1 -0
- package/dist/node/index.d.ts +5 -4
- package/dist/node/index.js +5 -3
- package/dist/node/pi/definition.d.ts +1 -1
- package/dist/node/pi/definition.d.ts.map +1 -1
- package/dist/node/pi/dsl.d.ts +5 -2
- package/dist/node/pi/dsl.d.ts.map +1 -1
- package/dist/node/pi/dsl.js +22 -3
- package/dist/node/pi/dsl.js.map +1 -1
- package/dist/node/pi/factory.d.ts +37 -34
- package/dist/node/pi/factory.d.ts.map +1 -1
- package/dist/node/pi/factory.js.map +1 -1
- package/dist/node/pi/mappers.js +0 -1
- package/dist/node/pi/mappers.js.map +1 -1
- package/dist/node/pi/route-schemas.js +42 -10
- package/dist/node/pi/route-schemas.js.map +1 -1
- package/dist/node/pi/types.d.ts +155 -7
- package/dist/node/pi/types.d.ts.map +1 -1
- package/dist/node/pi/types.js +6 -0
- package/dist/node/pi/types.js.map +1 -0
- package/dist/node/pi/workflow/active-session.d.ts +2 -0
- package/dist/node/pi/workflow/active-session.js +107 -0
- package/dist/node/pi/workflow/active-session.js.map +1 -0
- package/dist/node/pi/workflow/agent-runner.d.ts +13 -0
- package/dist/node/pi/workflow/agent-runner.d.ts.map +1 -0
- package/dist/node/pi/workflow/agent-runner.js +228 -0
- package/dist/node/pi/workflow/agent-runner.js.map +1 -0
- package/dist/node/pi/workflow/tool-journal.js +157 -0
- package/dist/node/pi/workflow/tool-journal.js.map +1 -0
- package/dist/node/pi/workflow/workflow.d.ts +29 -0
- package/dist/node/pi/workflow/workflow.d.ts.map +1 -0
- package/dist/node/pi/workflow/workflow.js +219 -0
- package/dist/node/pi/workflow/workflow.js.map +1 -0
- package/dist/node/routes.d.ts +38 -35
- package/dist/node/routes.d.ts.map +1 -1
- package/dist/node/routes.js +203 -132
- package/dist/node/routes.js.map +1 -1
- package/dist/node/schema.js +1 -1
- package/dist/node/schema.js.map +1 -1
- package/package.json +30 -29
- package/dist/browser/client-Bk-J98pf.d.ts +0 -679
- package/dist/browser/client-Bk-J98pf.d.ts.map +0 -1
- package/dist/browser/factory-DKoO_lRA.js.map +0 -1
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/node/pi/clients.d.ts.map +0 -1
- package/dist/node/pi/clients.js +0 -18
- package/dist/node/pi/clients.js.map +0 -1
- package/dist/node/pi/workflow.d.ts +0 -31
- package/dist/node/pi/workflow.d.ts.map +0 -1
- package/dist/node/pi/workflow.js +0 -242
- package/dist/node/pi/workflow.js.map +0 -1
- 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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"}
|
package/dist/node/routes.d.ts
CHANGED
|
@@ -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<
|
|
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" | "
|
|
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.
|
|
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
|
-
|
|
170
|
+
events: z.ZodArray<z.ZodObject<{
|
|
171
|
+
id: z.ZodString;
|
|
172
|
+
runNumber: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
190
173
|
type: z.ZodString;
|
|
191
|
-
|
|
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>, "
|
|
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>, "
|
|
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":"
|
|
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"}
|