@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 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.js","names":[],"sources":["../../../src/client/session-store.ts"],"sourcesContent":["import { atom, computed, onMount, type ReadableAtom } from \"nanostores\";\n\nimport type { AgentEvent, AgentMessage } from \"@mariozechner/pi-agent-core\";\n\nimport type { PiSessionStatus } from \"../pi/constants\";\nimport type {\n PiActiveSessionProtocolMessage,\n PiAgentLoopPhase,\n PiAgentLoopWaitingFor,\n PiSessionDetail,\n} from \"../pi/types\";\n\ntype QueryStoreValue<T> = {\n loading: boolean;\n data?: T;\n error?: { message?: string };\n};\n\ntype QueryStore<T> = ReadableAtom<QueryStoreValue<T>> & {\n revalidate: () => void;\n};\n\ntype ToolResultContent = Extract<AgentMessage, { role: \"toolResult\" }>[\"content\"];\n\ntype OptimisticMessage = {\n clientId: string;\n message: AgentMessage;\n};\n\ntype LiveActivity =\n | { kind: \"none\" }\n | { kind: \"sending-message\" }\n | { kind: \"assistant-responding\" }\n | { kind: \"assistant-ready\" }\n | { kind: \"tool-running\"; toolName: string }\n | { kind: \"tool-updating\"; toolName: string }\n | { kind: \"tool-finished\"; toolName: string }\n | { kind: \"agent-started\" }\n | { kind: \"agent-finished\" }\n | { kind: \"turn-started\" }\n | { kind: \"turn-finished\" };\n\nexport type PiLiveToolExecution = {\n toolCallId: string;\n toolName: string;\n args: unknown;\n partialResult: unknown | null;\n};\n\nexport type PiSessionConnectionState =\n | \"idle\"\n | \"connecting\"\n | \"listening\"\n | \"reconnecting\"\n | \"error\";\n\ntype OverlayState = {\n sessionId: string;\n connection: PiSessionConnectionState;\n error: string | null;\n sendError: string | null;\n sending: boolean;\n activity: LiveActivity;\n pendingTurn: boolean;\n pendingSnapshotReconcile: boolean;\n readyForInputOverride: boolean | null;\n optimisticMessages: OptimisticMessage[];\n streamedMessages: AgentMessage[];\n draftAssistant: AgentMessage | null;\n runningTools: PiLiveToolExecution[];\n trace: AgentEvent[];\n};\n\ntype OverlayAction =\n | { type: \"snapshot-updated\"; sessionId: string }\n | { type: \"send-started\"; clientId: string; text: string }\n | { type: \"send-failed\"; clientId: string; message: string }\n | { type: \"send-acknowledged\" }\n | { type: \"stream-connecting\"; reconnecting: boolean }\n | { type: \"stream-open\" }\n | { type: \"stream-message\"; message: PiActiveSessionProtocolMessage }\n | { type: \"stream-settled\" }\n | { type: \"stream-inactive\" }\n | { type: \"stream-error\"; message: string }\n | { type: \"stream-idle\" };\n\nexport type PiSessionStoreState = {\n loading: boolean;\n session: PiSessionDetail | null;\n messages: AgentMessage[];\n traceEvents: AgentEvent[];\n runningTools: PiLiveToolExecution[];\n connection: PiSessionConnectionState;\n statusText: string | null;\n readyForInput: boolean;\n sending: boolean;\n error: string | null;\n sendError: string | null;\n};\n\nexport type CreatePiSessionStoreArgs = {\n sessionId: string;\n initialData?: PiSessionDetail | null;\n};\n\nexport type PiSessionStoreController = {\n store: ReadableAtom<PiSessionStoreState>;\n sendMessage: (input: {\n text: string;\n done?: boolean;\n steeringMode?: \"all\" | \"one-at-a-time\";\n }) => boolean;\n refetch: () => void;\n deactivate: () => void;\n destroy: () => void;\n};\n\nexport type CreatePiSessionStoreDependencies = {\n createDetailStore: (sessionId: string) => QueryStore<PiSessionDetail>;\n sendMessage: (options: {\n sessionId: string;\n text: string;\n done?: boolean;\n steeringMode?: \"all\" | \"one-at-a-time\";\n }) => Promise<{ status: PiSessionStatus }>;\n buildActiveUrl: (sessionId: string) => string;\n fetcher: typeof fetch;\n defaultOptions?: RequestInit;\n enableActiveStream?: boolean;\n activeLogger?: (event: string, details?: Record<string, unknown>) => void;\n};\n\nconst createOverlayState = (sessionId: string): OverlayState => ({\n sessionId,\n connection: \"idle\" as const,\n error: null,\n sendError: null,\n sending: false,\n activity: { kind: \"none\" as const },\n pendingTurn: false,\n pendingSnapshotReconcile: false,\n readyForInputOverride: null,\n optimisticMessages: [],\n streamedMessages: [],\n draftAssistant: null,\n runningTools: [],\n trace: [],\n});\n\nconst buildOptimisticUserMessage = (text: string): AgentMessage => ({\n role: \"user\",\n content: [{ type: \"text\", text }],\n timestamp: Date.now(),\n});\n\nconst formatJson = (value: unknown) => {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n};\n\nconst buildLiveToolResultMessage = (\n message: Extract<PiActiveSessionProtocolMessage, { layer: \"pi\"; type: \"event\" }>[\"event\"] & {\n type: \"tool_execution_end\";\n },\n): AgentMessage => {\n const result = message.result as {\n content?: ToolResultContent;\n details?: unknown;\n } | null;\n const content: ToolResultContent =\n result && Array.isArray(result.content)\n ? result.content\n : [{ type: \"text\", text: formatJson(message.result) }];\n\n return {\n role: \"toolResult\",\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n content,\n details: result?.details,\n isError: message.isError,\n timestamp: Date.now(),\n };\n};\n\nconst appendOrReplaceLiveMessage = (messages: AgentMessage[], nextMessage: AgentMessage) => {\n if (nextMessage.role === \"assistant\") {\n const existingIndex = messages.findIndex(\n (message) => message.role === \"assistant\" && message.timestamp === nextMessage.timestamp,\n );\n if (existingIndex >= 0) {\n return [\n ...messages.slice(0, existingIndex),\n nextMessage,\n ...messages.slice(existingIndex + 1),\n ];\n }\n }\n\n if (nextMessage.role === \"toolResult\") {\n const existingIndex = messages.findIndex(\n (message) => message.role === \"toolResult\" && message.toolCallId === nextMessage.toolCallId,\n );\n if (existingIndex >= 0) {\n return [\n ...messages.slice(0, existingIndex),\n nextMessage,\n ...messages.slice(existingIndex + 1),\n ];\n }\n }\n\n return [...messages, nextMessage];\n};\n\nconst mergeMessages = (\n snapshotMessages: AgentMessage[],\n optimisticMessages: AgentMessage[],\n streamedMessages: AgentMessage[],\n draftAssistant: AgentMessage | null,\n) => {\n let messages = [...snapshotMessages];\n\n for (const optimisticMessage of optimisticMessages) {\n messages = appendOrReplaceLiveMessage(messages, optimisticMessage);\n }\n\n for (const streamedMessage of streamedMessages) {\n messages = appendOrReplaceLiveMessage(messages, streamedMessage);\n }\n\n if (draftAssistant) {\n messages = appendOrReplaceLiveMessage(messages, draftAssistant);\n }\n\n return messages;\n};\n\nconst hasActiveOverlay = (\n state: Pick<OverlayState, \"draftAssistant\" | \"runningTools\" | \"streamedMessages\">,\n) =>\n state.draftAssistant !== null ||\n state.runningTools.length > 0 ||\n state.streamedMessages.length > 0;\n\nconst activityLabel = (activity: LiveActivity): string | null => {\n switch (activity.kind) {\n case \"none\":\n return null;\n case \"sending-message\":\n return \"Sending message\";\n case \"assistant-responding\":\n return \"Assistant responding\";\n case \"assistant-ready\":\n return \"Assistant response ready\";\n case \"tool-running\":\n return `Running ${activity.toolName}`;\n case \"tool-updating\":\n return `Updating ${activity.toolName}`;\n case \"tool-finished\":\n return `${activity.toolName} finished`;\n case \"agent-started\":\n return \"Agent started\";\n case \"agent-finished\":\n return \"Agent finished\";\n case \"turn-started\":\n return \"Turn started\";\n case \"turn-finished\":\n return \"Turn finished\";\n default:\n return null;\n }\n};\n\nconst connectionStatusText = (connection: PiSessionConnectionState): string | null => {\n switch (connection) {\n case \"connecting\":\n return \"Connecting to live updates\";\n case \"reconnecting\":\n return \"Reconnecting to live updates\";\n default:\n return null;\n }\n};\n\nconst reduceProtocolMessage = (state: OverlayState, message: PiActiveSessionProtocolMessage) => {\n if (message.layer === \"system\") {\n switch (message.type) {\n case \"snapshot\": {\n const readyForInput = isSessionReadyForInput(message.phase, message.waitingFor);\n return {\n ...state,\n error: null,\n activity: readyForInput ? { kind: \"none\" as const } : state.activity,\n pendingTurn: !readyForInput,\n readyForInputOverride: readyForInput,\n };\n }\n case \"inactive\":\n return {\n ...state,\n connection: \"idle\" as const,\n error: null,\n readyForInputOverride: false,\n };\n case \"settled\":\n return {\n ...state,\n connection: \"reconnecting\" as const,\n activity: { kind: \"turn-finished\" as const },\n pendingTurn: true,\n pendingSnapshotReconcile: true,\n readyForInputOverride: false,\n error: null,\n };\n default:\n return state;\n }\n }\n\n const event = message.event;\n const trace = [...state.trace, event];\n\n switch (event.type) {\n case \"message_start\":\n case \"message_update\":\n return {\n ...state,\n trace,\n draftAssistant: event.message,\n activity: { kind: \"assistant-responding\" as const },\n pendingTurn: true,\n error: null,\n };\n case \"message_end\":\n return {\n ...state,\n trace,\n streamedMessages: appendOrReplaceLiveMessage(state.streamedMessages, event.message),\n draftAssistant: null,\n activity: { kind: \"assistant-ready\" as const },\n pendingTurn: true,\n error: null,\n };\n case \"tool_execution_start\":\n return {\n ...state,\n trace,\n runningTools: [\n ...state.runningTools.filter((tool) => tool.toolCallId !== event.toolCallId),\n {\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n args: event.args,\n partialResult: null,\n },\n ],\n activity: { kind: \"tool-running\" as const, toolName: event.toolName },\n pendingTurn: true,\n error: null,\n };\n case \"tool_execution_update\":\n return {\n ...state,\n trace,\n runningTools: state.runningTools.map((tool) =>\n tool.toolCallId === event.toolCallId\n ? {\n ...tool,\n partialResult: event.partialResult,\n }\n : tool,\n ),\n activity: { kind: \"tool-updating\" as const, toolName: event.toolName },\n pendingTurn: true,\n error: null,\n };\n case \"tool_execution_end\":\n return {\n ...state,\n trace,\n streamedMessages: appendOrReplaceLiveMessage(\n state.streamedMessages,\n buildLiveToolResultMessage(event),\n ),\n runningTools: state.runningTools.filter((tool) => tool.toolCallId !== event.toolCallId),\n activity: { kind: \"tool-finished\" as const, toolName: event.toolName },\n pendingTurn: true,\n error: null,\n };\n case \"agent_start\":\n return {\n ...state,\n trace,\n activity: { kind: \"agent-started\" as const },\n pendingTurn: true,\n error: null,\n };\n case \"agent_end\":\n return {\n ...state,\n trace,\n activity: { kind: \"agent-finished\" as const },\n pendingTurn: true,\n error: null,\n };\n case \"turn_start\":\n return {\n ...state,\n trace,\n activity: { kind: \"turn-started\" as const },\n pendingTurn: true,\n error: null,\n };\n case \"turn_end\":\n return {\n ...state,\n trace,\n activity: { kind: \"turn-finished\" as const },\n pendingTurn: true,\n error: null,\n };\n default:\n return {\n ...state,\n trace,\n pendingTurn: true,\n error: null,\n };\n }\n};\n\nconst reduceOverlayState = (state: OverlayState, action: OverlayAction): OverlayState => {\n switch (action.type) {\n case \"snapshot-updated\": {\n if (action.sessionId !== state.sessionId) {\n return createOverlayState(action.sessionId);\n }\n\n if (!state.pendingSnapshotReconcile) {\n return {\n ...state,\n optimisticMessages: [],\n sendError: null,\n error: null,\n readyForInputOverride: null,\n };\n }\n\n return {\n ...state,\n optimisticMessages: [],\n streamedMessages: [],\n draftAssistant: null,\n runningTools: [],\n trace: [],\n error: null,\n sendError: null,\n activity: { kind: \"none\" as const },\n pendingTurn: false,\n pendingSnapshotReconcile: false,\n readyForInputOverride: null,\n };\n }\n case \"send-started\":\n return {\n ...state,\n sending: true,\n sendError: null,\n optimisticMessages: [\n ...state.optimisticMessages,\n {\n clientId: action.clientId,\n message: buildOptimisticUserMessage(action.text),\n },\n ],\n activity: { kind: \"sending-message\" as const },\n pendingTurn: true,\n readyForInputOverride: false,\n error: null,\n };\n case \"send-acknowledged\":\n return {\n ...state,\n sending: false,\n sendError: null,\n };\n case \"send-failed\": {\n const optimisticMessages = state.optimisticMessages.filter(\n (message) => message.clientId !== action.clientId,\n );\n const keepPending = state.pendingSnapshotReconcile || hasActiveOverlay(state);\n return {\n ...state,\n sending: false,\n sendError: action.message,\n optimisticMessages,\n activity: keepPending ? state.activity : { kind: \"none\" as const },\n pendingTurn: keepPending,\n readyForInputOverride: keepPending ? state.readyForInputOverride : null,\n };\n }\n case \"stream-connecting\": {\n const connection: PiSessionConnectionState = action.reconnecting\n ? \"reconnecting\"\n : \"connecting\";\n return {\n ...state,\n connection,\n error: null,\n };\n }\n case \"stream-open\":\n return {\n ...state,\n connection: \"listening\" as const,\n error: null,\n };\n case \"stream-message\":\n return reduceProtocolMessage(state, action.message);\n case \"stream-settled\":\n return {\n ...state,\n connection: \"reconnecting\" as const,\n };\n case \"stream-inactive\":\n return {\n ...state,\n connection: \"idle\" as const,\n error: null,\n };\n case \"stream-error\":\n return {\n ...state,\n connection: \"error\" as const,\n error: action.message,\n };\n case \"stream-idle\":\n return {\n ...state,\n connection: \"idle\" as const,\n error: null,\n activity: state.pendingTurn ? state.activity : { kind: \"none\" as const },\n };\n default:\n return state;\n }\n};\n\nconst readPiRouteError = async (response: Response): Promise<string> => {\n const text = await response.text();\n if (!text) {\n return `Request failed (${response.status}).`;\n }\n\n try {\n const parsed = JSON.parse(text) as { message?: string; error?: string };\n return parsed.message ?? parsed.error ?? text;\n } catch {\n return text;\n }\n};\n\nconst consumeProtocolStream = async (\n body: ReadableStream<Uint8Array>,\n onMessage: (message: PiActiveSessionProtocolMessage) => void,\n signal: AbortSignal,\n) => {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n if (signal.aborted) {\n await reader.cancel();\n return;\n }\n\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n onMessage(JSON.parse(trimmed) as PiActiveSessionProtocolMessage);\n }\n }\n\n const trailing = `${buffer}${decoder.decode()}`.trim();\n if (trailing) {\n onMessage(JSON.parse(trailing) as PiActiveSessionProtocolMessage);\n }\n } finally {\n reader.releaseLock();\n }\n};\n\nconst waitWithAbort = (ms: number, signal: AbortSignal) =>\n new Promise<void>((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n signal.removeEventListener(\"abort\", handleAbort);\n resolve();\n }, ms);\n\n function handleAbort() {\n clearTimeout(timeoutId);\n signal.removeEventListener(\"abort\", handleAbort);\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n }\n\n if (signal.aborted) {\n handleAbort();\n return;\n }\n\n signal.addEventListener(\"abort\", handleAbort, { once: true });\n });\n\nconst isSessionReadyForInput = (phase: PiAgentLoopPhase, waitingFor: PiAgentLoopWaitingFor) =>\n phase === \"waiting-for-user\" && waitingFor?.type === \"user_message\";\n\nconst shouldKeepLiveConnection = (session: PiSessionDetail | null) => session?.phase !== \"complete\";\n\nconst withAcceptHeader = (defaultOptions: RequestInit | undefined) => {\n const headers = new Headers(defaultOptions?.headers);\n headers.set(\"accept\", \"application/x-ndjson\");\n\n return {\n ...defaultOptions,\n headers,\n } satisfies RequestInit;\n};\n\nexport function createPiSessionStore(\n deps: CreatePiSessionStoreDependencies,\n args: CreatePiSessionStoreArgs,\n): PiSessionStoreController {\n const detailStore = deps.createDetailStore(args.sessionId);\n const snapshotStore = atom<PiSessionDetail | null>(args.initialData ?? null);\n const overlayStore = atom<OverlayState>(createOverlayState(args.sessionId));\n const lastSnapshotVersion = {\n current: args.initialData\n ? `${args.initialData.id}:${String(args.initialData.updatedAt)}`\n : null,\n };\n\n let destroyed = false;\n let mounted = false;\n let activeAbortController: AbortController | null = null;\n let activeLoopPromise: Promise<void> | null = null;\n let detailUnsubscribe: (() => void) | null = null;\n\n const logActive = (event: string, details?: Record<string, unknown>) => {\n deps.activeLogger?.(event, {\n sessionId: args.sessionId,\n ...details,\n });\n };\n\n const updateSnapshot = (session: PiSessionDetail | null | undefined) => {\n if (!session) {\n return;\n }\n\n snapshotStore.set(session);\n const nextVersion = `${session.id}:${String(session.updatedAt)}`;\n if (nextVersion !== lastSnapshotVersion.current) {\n logActive(\"snapshot:updated\", {\n version: nextVersion,\n phase: session.phase,\n status: session.status,\n turn: session.turn,\n });\n lastSnapshotVersion.current = nextVersion;\n overlayStore.set(\n reduceOverlayState(overlayStore.get(), {\n type: \"snapshot-updated\",\n sessionId: session.id,\n }),\n );\n }\n };\n\n const refetch = () => {\n logActive(\"detail:refetch\");\n detailStore.revalidate();\n };\n\n const stopActiveLoop = () => {\n if (activeAbortController || activeLoopPromise) {\n logActive(\"stream:stop\");\n }\n activeAbortController?.abort();\n activeAbortController = null;\n activeLoopPromise = null;\n };\n\n const ensureActiveLoop = () => {\n if (destroyed || !mounted || activeLoopPromise || deps.enableActiveStream === false) {\n return;\n }\n\n const currentSession = snapshotStore.get();\n if (!shouldKeepLiveConnection(currentSession)) {\n logActive(\"stream:idle\", {\n reason: \"session-complete\",\n phase: currentSession?.phase ?? null,\n status: currentSession?.status ?? null,\n });\n overlayStore.set(reduceOverlayState(overlayStore.get(), { type: \"stream-idle\" }));\n return;\n }\n\n logActive(\"stream:start\", {\n phase: currentSession?.phase ?? null,\n status: currentSession?.status ?? null,\n turn: currentSession?.turn ?? null,\n });\n\n const abortController = new AbortController();\n activeAbortController = abortController;\n activeLoopPromise = (async () => {\n let reconnecting = false;\n\n while (!abortController.signal.aborted && !destroyed) {\n const latestSession = snapshotStore.get();\n if (!shouldKeepLiveConnection(latestSession)) {\n overlayStore.set(reduceOverlayState(overlayStore.get(), { type: \"stream-idle\" }));\n return;\n }\n\n const activeUrl = deps.buildActiveUrl(args.sessionId);\n logActive(\"stream:connecting\", {\n reconnecting,\n url: activeUrl,\n });\n overlayStore.set(\n reduceOverlayState(overlayStore.get(), {\n type: \"stream-connecting\",\n reconnecting,\n }),\n );\n\n try {\n const response = await deps.fetcher(activeUrl, {\n ...withAcceptHeader(deps.defaultOptions),\n method: \"GET\",\n cache: \"no-store\",\n signal: abortController.signal,\n });\n\n logActive(\"stream:response\", {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n url: activeUrl,\n });\n\n if (!response.ok) {\n throw new Error(await readPiRouteError(response));\n }\n\n if (!response.body) {\n throw new Error(\"The active session stream did not return a response body.\");\n }\n\n logActive(\"stream:open\", { url: activeUrl });\n overlayStore.set(reduceOverlayState(overlayStore.get(), { type: \"stream-open\" }));\n\n let sawInactive = false;\n let sawSettled = false;\n await consumeProtocolStream(\n response.body,\n (message) => {\n logActive(\"stream:message\", { message });\n overlayStore.set(\n reduceOverlayState(overlayStore.get(), { type: \"stream-message\", message }),\n );\n if (message.layer === \"system\" && message.type === \"inactive\") {\n sawInactive = true;\n }\n if (message.layer === \"system\" && message.type === \"settled\") {\n sawSettled = true;\n }\n },\n abortController.signal,\n );\n\n if (abortController.signal.aborted || destroyed) {\n return;\n }\n\n if (sawSettled || sawInactive) {\n logActive(\"stream:settled\", {\n sawSettled,\n sawInactive,\n });\n overlayStore.set(reduceOverlayState(overlayStore.get(), { type: \"stream-settled\" }));\n detailStore.revalidate();\n }\n\n if (sawInactive) {\n logActive(\"stream:inactive\");\n overlayStore.set(reduceOverlayState(overlayStore.get(), { type: \"stream-inactive\" }));\n return;\n }\n\n reconnecting = true;\n logActive(\"stream:retry\", { delayMs: 250 });\n await waitWithAbort(250, abortController.signal);\n } catch (error) {\n if (abortController.signal.aborted || destroyed) {\n return;\n }\n\n const message =\n error instanceof Error ? error.message : \"Failed to stream the active session.\";\n logActive(\"stream:error\", { message });\n overlayStore.set(\n reduceOverlayState(overlayStore.get(), { type: \"stream-error\", message }),\n );\n reconnecting = true;\n logActive(\"stream:retry\", { delayMs: 1000 });\n await waitWithAbort(1000, abortController.signal).catch(() => undefined);\n }\n }\n })().finally(() => {\n logActive(\"stream:end\");\n if (activeAbortController === abortController) {\n activeAbortController = null;\n }\n if (activeLoopPromise) {\n activeLoopPromise = null;\n }\n });\n };\n\n const store = computed(\n [detailStore, snapshotStore, overlayStore],\n (detailValue, session, overlay) => {\n const optimisticMessages = overlay.optimisticMessages.map((entry) => entry.message);\n const snapshotMessages = session?.messages ?? [];\n const messages = mergeMessages(\n snapshotMessages,\n optimisticMessages,\n overlay.streamedMessages,\n overlay.draftAssistant,\n );\n\n const statusText =\n activityLabel(overlay.activity) ?? connectionStatusText(overlay.connection);\n const readyForInput =\n session !== null &&\n (overlay.readyForInputOverride ??\n (isSessionReadyForInput(session.phase, session.waitingFor) && !overlay.pendingTurn));\n\n return {\n loading: detailValue.loading,\n session,\n messages,\n traceEvents: [...(session?.trace ?? []), ...overlay.trace],\n runningTools: overlay.runningTools,\n connection: overlay.connection,\n statusText,\n readyForInput,\n sending: overlay.sending,\n error: detailValue.error?.message ?? overlay.error,\n sendError: overlay.sendError,\n } satisfies PiSessionStoreState;\n },\n );\n\n onMount(store, () => {\n mounted = true;\n logActive(\"store:mount\");\n updateSnapshot(detailStore.get().data);\n\n detailUnsubscribe = detailStore.listen((value) => {\n updateSnapshot(value.data);\n\n if (destroyed) {\n return;\n }\n\n if (!shouldKeepLiveConnection(snapshotStore.get())) {\n logActive(\"stream:idle\", {\n reason: \"detail-store-update\",\n });\n stopActiveLoop();\n overlayStore.set(reduceOverlayState(overlayStore.get(), { type: \"stream-idle\" }));\n return;\n }\n\n ensureActiveLoop();\n });\n\n ensureActiveLoop();\n\n return () => {\n logActive(\"store:unmount\");\n mounted = false;\n stopActiveLoop();\n detailUnsubscribe?.();\n detailUnsubscribe = null;\n };\n });\n\n const sendMessage: PiSessionStoreController[\"sendMessage\"] = (input) => {\n const text = input.text.trim();\n if (!text) {\n return false;\n }\n\n const current = store.get();\n if (current.sending || !current.readyForInput) {\n return false;\n }\n\n const clientId = `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n logActive(\"send:start\", { clientId, text });\n overlayStore.set(\n reduceOverlayState(overlayStore.get(), { type: \"send-started\", clientId, text }),\n );\n ensureActiveLoop();\n\n void deps\n .sendMessage({\n sessionId: args.sessionId,\n text,\n done: input.done,\n steeringMode: input.steeringMode,\n })\n .then(() => {\n logActive(\"send:acknowledged\", { clientId });\n overlayStore.set(reduceOverlayState(overlayStore.get(), { type: \"send-acknowledged\" }));\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : \"Failed to send message.\";\n logActive(\"send:failed\", { clientId, message });\n overlayStore.set(\n reduceOverlayState(overlayStore.get(), { type: \"send-failed\", clientId, message }),\n );\n });\n\n return true;\n };\n\n const deactivate = () => {\n logActive(\"store:dispose\");\n mounted = false;\n stopActiveLoop();\n detailUnsubscribe?.();\n detailUnsubscribe = null;\n };\n\n const destroy = () => {\n if (destroyed) {\n return;\n }\n logActive(\"store:destroy\");\n destroyed = true;\n deactivate();\n };\n\n return {\n store,\n sendMessage,\n refetch,\n deactivate,\n destroy,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-log.d.ts","names":[],"sources":["../../src/debug-log.ts"],"mappings":";KAgBY,UAAA;AAAA,KAEA,cAAA;EACV,OAAA;EACA,KAAA,GAAQ,UAAA;AAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//#region src/debug-log.ts
|
|
2
|
+
const LOG_LEVEL_PRIORITY = {
|
|
3
|
+
off: 0,
|
|
4
|
+
error: 1,
|
|
5
|
+
warn: 2,
|
|
6
|
+
info: 3,
|
|
7
|
+
debug: 4
|
|
8
|
+
};
|
|
9
|
+
const DEFAULT_CONFIG = {
|
|
10
|
+
enabled: false,
|
|
11
|
+
level: "off"
|
|
12
|
+
};
|
|
13
|
+
var PiLogger = class PiLogger {
|
|
14
|
+
static #enabled = DEFAULT_CONFIG.enabled;
|
|
15
|
+
static #level = DEFAULT_CONFIG.level;
|
|
16
|
+
static reset() {
|
|
17
|
+
PiLogger.#enabled = DEFAULT_CONFIG.enabled;
|
|
18
|
+
PiLogger.#level = DEFAULT_CONFIG.level;
|
|
19
|
+
}
|
|
20
|
+
static configure(config) {
|
|
21
|
+
if (!config) return;
|
|
22
|
+
if (config.enabled !== void 0) PiLogger.#enabled = config.enabled;
|
|
23
|
+
if (config.level !== void 0) PiLogger.#level = config.level;
|
|
24
|
+
}
|
|
25
|
+
static enable() {
|
|
26
|
+
PiLogger.#enabled = true;
|
|
27
|
+
}
|
|
28
|
+
static disable() {
|
|
29
|
+
PiLogger.#enabled = false;
|
|
30
|
+
}
|
|
31
|
+
static setLogLevel(level) {
|
|
32
|
+
PiLogger.#level = level;
|
|
33
|
+
}
|
|
34
|
+
static debug(message, fields) {
|
|
35
|
+
PiLogger.#log("debug", message, fields);
|
|
36
|
+
}
|
|
37
|
+
static info(message, fields) {
|
|
38
|
+
PiLogger.#log("info", message, fields);
|
|
39
|
+
}
|
|
40
|
+
static warn(message, fields) {
|
|
41
|
+
PiLogger.#log("warn", message, fields);
|
|
42
|
+
}
|
|
43
|
+
static error(message, fields) {
|
|
44
|
+
PiLogger.#log("error", message, fields);
|
|
45
|
+
}
|
|
46
|
+
static #log(level, message, fields) {
|
|
47
|
+
if (!PiLogger.#enabled) return;
|
|
48
|
+
if (LOG_LEVEL_PRIORITY[level] > LOG_LEVEL_PRIORITY[PiLogger.#level]) return;
|
|
49
|
+
console[level](`[pi-fragment] ${message}`, {
|
|
50
|
+
at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
51
|
+
...fields
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
export { PiLogger };
|
|
58
|
+
//# sourceMappingURL=debug-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-log.js","names":["#enabled","#level","#log"],"sources":["../../src/debug-log.ts"],"sourcesContent":["type LogFields = Record<string, unknown>;\ntype LogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nconst LOG_LEVEL_PRIORITY: Record<PiLogLevel, number> = {\n off: 0,\n error: 1,\n warn: 2,\n info: 3,\n debug: 4,\n};\n\nconst DEFAULT_CONFIG: Required<PiLoggerConfig> = {\n enabled: false,\n level: \"off\",\n};\n\nexport type PiLogLevel = \"off\" | \"error\" | \"warn\" | \"info\" | \"debug\";\n\nexport type PiLoggerConfig = {\n enabled?: boolean;\n level?: PiLogLevel;\n};\n\nexport class PiLogger {\n static #enabled = DEFAULT_CONFIG.enabled;\n static #level: PiLogLevel = DEFAULT_CONFIG.level;\n\n static reset(): void {\n PiLogger.#enabled = DEFAULT_CONFIG.enabled;\n PiLogger.#level = DEFAULT_CONFIG.level;\n }\n\n static configure(config?: PiLoggerConfig): void {\n if (!config) {\n return;\n }\n if (config.enabled !== undefined) {\n PiLogger.#enabled = config.enabled;\n }\n if (config.level !== undefined) {\n PiLogger.#level = config.level;\n }\n }\n\n static enable(): void {\n PiLogger.#enabled = true;\n }\n\n static disable(): void {\n PiLogger.#enabled = false;\n }\n\n static setLogLevel(level: PiLogLevel): void {\n PiLogger.#level = level;\n }\n\n static debug(message: string, fields?: LogFields): void {\n PiLogger.#log(\"debug\", message, fields);\n }\n\n static info(message: string, fields?: LogFields): void {\n PiLogger.#log(\"info\", message, fields);\n }\n\n static warn(message: string, fields?: LogFields): void {\n PiLogger.#log(\"warn\", message, fields);\n }\n\n static error(message: string, fields?: LogFields): void {\n PiLogger.#log(\"error\", message, fields);\n }\n\n static #log(level: LogLevel, message: string, fields?: LogFields): void {\n if (!PiLogger.#enabled) {\n return;\n }\n if (LOG_LEVEL_PRIORITY[level] > LOG_LEVEL_PRIORITY[PiLogger.#level]) {\n return;\n }\n\n console[level](`[pi-fragment] ${message}`, {\n at: new Date().toISOString(),\n ...fields,\n });\n }\n}\n"],"mappings":";AAGA,MAAM,qBAAiD;CACrD,KAAK;CACL,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACR;AAED,MAAM,iBAA2C;CAC/C,SAAS;CACT,OAAO;CACR;AASD,IAAa,WAAb,MAAa,SAAS;CACpB,QAAOA,UAAW,eAAe;CACjC,QAAOC,QAAqB,eAAe;CAE3C,OAAO,QAAc;AACnB,YAASD,UAAW,eAAe;AACnC,YAASC,QAAS,eAAe;;CAGnC,OAAO,UAAU,QAA+B;AAC9C,MAAI,CAAC,OACH;AAEF,MAAI,OAAO,YAAY,OACrB,WAASD,UAAW,OAAO;AAE7B,MAAI,OAAO,UAAU,OACnB,WAASC,QAAS,OAAO;;CAI7B,OAAO,SAAe;AACpB,YAASD,UAAW;;CAGtB,OAAO,UAAgB;AACrB,YAASA,UAAW;;CAGtB,OAAO,YAAY,OAAyB;AAC1C,YAASC,QAAS;;CAGpB,OAAO,MAAM,SAAiB,QAA0B;AACtD,YAASC,IAAK,SAAS,SAAS,OAAO;;CAGzC,OAAO,KAAK,SAAiB,QAA0B;AACrD,YAASA,IAAK,QAAQ,SAAS,OAAO;;CAGxC,OAAO,KAAK,SAAiB,QAA0B;AACrD,YAASA,IAAK,QAAQ,SAAS,OAAO;;CAGxC,OAAO,MAAM,SAAiB,QAA0B;AACtD,YAASA,IAAK,SAAS,SAAS,OAAO;;CAGzC,QAAOA,IAAK,OAAiB,SAAiB,QAA0B;AACtE,MAAI,CAAC,UAASF,QACZ;AAEF,MAAI,mBAAmB,SAAS,mBAAmB,UAASC,OAC1D;AAGF,UAAQ,OAAO,iBAAiB,WAAW;GACzC,qBAAI,IAAI,MAAM,EAAC,aAAa;GAC5B,GAAG;GACJ,CAAC"}
|
package/dist/node/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { createPiFragmentClients } from "./pi/clients.js";
|
|
2
1
|
import { PiSessionStatus, PiSteeringMode, SESSION_STATUSES, STEERING_MODES, THINKING_LEVELS } from "./pi/constants.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { PI_WORKFLOW_NAME, PiWorkflowsRegistry, createPiWorkflows } from "./pi/workflow/workflow.js";
|
|
3
|
+
import { PI_TOOL_JOURNAL_VERSION, PiActiveSessionProtocolMessage, PiActiveSessionStreamItem, PiAgentDefinition, PiAgentRegistry, PiFragmentConfig, PiPersistedToolCall, PiPersistedToolCallSource, PiPersistedToolResult, PiSession, PiSessionDetail, PiToolFactory, PiToolFactoryContext, PiToolRegistry, PiToolReplayCache, PiToolReplayContext, PiToolSideEffectReducer, PiToolSideEffectReducerContext, PiToolSideEffectReducerRegistry, PiTurnSummary, PiWorkflowHistoryStep, PiWorkflowsInstanceStatus, PiWorkflowsService } from "./pi/types.js";
|
|
4
|
+
import { CreatePiSessionStoreArgs, PiLiveToolExecution, PiSessionConnectionState, PiSessionStoreController, PiSessionStoreState, createPiSessionStore } from "./client/session-store.js";
|
|
5
|
+
import { createPiFragmentClients } from "./client/clients.js";
|
|
5
6
|
import { PiAgentDefinitionInput, PiRuntime, createPi, defineAgent } from "./pi/dsl.js";
|
|
6
7
|
import { piFragmentDefinition } from "./pi/definition.js";
|
|
7
8
|
import { createPiFragment } from "./pi/factory.js";
|
|
8
9
|
import { piRoutesFactory } from "./routes.js";
|
|
9
10
|
import { FragnoRouteConfig } from "@fragno-dev/core";
|
|
10
|
-
export { type FragnoRouteConfig, PI_WORKFLOW_NAME, type PiAgentDefinition, type PiAgentDefinitionInput, type PiAgentRegistry, type PiFragmentConfig, type PiRuntime, type PiSession, type PiSessionStatus, type PiSteeringMode, type PiToolFactory, type PiToolFactoryContext, type PiToolRegistry, type PiTurnSummary, type PiWorkflowHistoryStep, type PiWorkflowsInstanceStatus, type PiWorkflowsRegistry, type PiWorkflowsService, SESSION_STATUSES, STEERING_MODES, THINKING_LEVELS, createPi, createPiFragment, createPiFragmentClients, createPiWorkflows, defineAgent, piFragmentDefinition, piRoutesFactory };
|
|
11
|
+
export { type CreatePiSessionStoreArgs, type FragnoRouteConfig, PI_TOOL_JOURNAL_VERSION, PI_WORKFLOW_NAME, type PiActiveSessionProtocolMessage, type PiActiveSessionStreamItem, type PiAgentDefinition, type PiAgentDefinitionInput, type PiAgentRegistry, type PiFragmentConfig, type PiLiveToolExecution, type PiPersistedToolCall, type PiPersistedToolCallSource, type PiPersistedToolResult, type PiRuntime, type PiSession, type PiSessionConnectionState, type PiSessionDetail, type PiSessionStatus, type PiSessionStoreController, type PiSessionStoreState, type PiSteeringMode, type PiToolFactory, type PiToolFactoryContext, type PiToolRegistry, type PiToolReplayCache, type PiToolReplayContext, type PiToolSideEffectReducer, type PiToolSideEffectReducerContext, type PiToolSideEffectReducerRegistry, type PiTurnSummary, type PiWorkflowHistoryStep, type PiWorkflowsInstanceStatus, type PiWorkflowsRegistry, type PiWorkflowsService, SESSION_STATUSES, STEERING_MODES, THINKING_LEVELS, createPi, createPiFragment, createPiFragmentClients, createPiSessionStore, createPiWorkflows, defineAgent, piFragmentDefinition, piRoutesFactory };
|
package/dist/node/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { piFragmentDefinition } from "./pi/definition.js";
|
|
2
2
|
import { SESSION_STATUSES, STEERING_MODES, THINKING_LEVELS } from "./pi/constants.js";
|
|
3
|
-
import {
|
|
3
|
+
import { PI_TOOL_JOURNAL_VERSION } from "./pi/types.js";
|
|
4
|
+
import { PI_WORKFLOW_NAME, createPiWorkflows } from "./pi/workflow/workflow.js";
|
|
4
5
|
import { piRoutesFactory } from "./routes.js";
|
|
5
|
-
import {
|
|
6
|
+
import { createPiSessionStore } from "./client/session-store.js";
|
|
7
|
+
import { createPiFragmentClients } from "./client/clients.js";
|
|
6
8
|
import { createPi, defineAgent } from "./pi/dsl.js";
|
|
7
9
|
import { createPiFragment } from "./pi/factory.js";
|
|
8
10
|
|
|
9
|
-
export { PI_WORKFLOW_NAME, SESSION_STATUSES, STEERING_MODES, THINKING_LEVELS, createPi, createPiFragment, createPiFragmentClients, createPiWorkflows, defineAgent, piFragmentDefinition, piRoutesFactory };
|
|
11
|
+
export { PI_TOOL_JOURNAL_VERSION, PI_WORKFLOW_NAME, SESSION_STATUSES, STEERING_MODES, THINKING_LEVELS, createPi, createPiFragment, createPiFragmentClients, createPiSessionStore, createPiWorkflows, defineAgent, piFragmentDefinition, piRoutesFactory };
|
|
@@ -5,7 +5,7 @@ import * as _fragno_dev_db_schema0 from "@fragno-dev/db/schema";
|
|
|
5
5
|
import * as _fragno_dev_db_fragment_definition_builder0 from "@fragno-dev/db/fragment-definition-builder";
|
|
6
6
|
|
|
7
7
|
//#region src/pi/definition.d.ts
|
|
8
|
-
declare const piFragmentDefinition: _fragno_dev_core0.FragmentDefinition<PiFragmentConfig, _fragno_dev_db0.FragnoPublicConfigWithDatabase, _fragno_dev_db0.ImplicitDatabaseDependencies<_fragno_dev_db_schema0.Schema<Record<"session", _fragno_dev_db_schema0.Table<Record<
|
|
8
|
+
declare const piFragmentDefinition: _fragno_dev_core0.FragmentDefinition<PiFragmentConfig, _fragno_dev_db0.FragnoPublicConfigWithDatabase, _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"]>>>>>>, {}, {}, {
|
|
9
9
|
workflows: PiWorkflowsService;
|
|
10
10
|
}, {}, _fragno_dev_db0.DatabaseServiceContext<_fragno_dev_db0.HooksMap>, _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>, _fragno_dev_db_fragment_definition_builder0.DatabaseRequestStorage, []>;
|
|
11
11
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","names":[],"sources":["../../../src/pi/definition.ts"],"mappings":";;;;;;;cAMa,oBAAA,oBAAoB,kBAAA,CAAA,gBAAA,EAAA,eAAA,CAAA,8BAAA,EAAA,eAAA,CAAA,4BAAA,CAAA,sBAAA,CAAA,MAAA,CAAA,MAAA,YAAA,sBAAA,CAAA,KAAA,CAAA,MAAA,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","names":[],"sources":["../../../src/pi/definition.ts"],"mappings":";;;;;;;cAMa,oBAAA,oBAAoB,kBAAA,CAAA,gBAAA,EAAA,eAAA,CAAA,8BAAA,EAAA,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"}
|
package/dist/node/pi/dsl.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PiSteeringMode } from "./constants.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { PiWorkflowsRegistry } from "./workflow/workflow.js";
|
|
3
|
+
import { PiAgentDefinition, PiAgentRegistry, PiFragmentConfig, PiToolFactory, PiToolRegistry, PiToolSideEffectReducer, PiToolSideEffectReducerRegistry } from "./types.js";
|
|
4
4
|
|
|
5
5
|
//#region src/pi/dsl.d.ts
|
|
6
6
|
type PiAgentDefinitionInput = Omit<PiAgentDefinition, "name"> & {
|
|
@@ -16,7 +16,10 @@ declare const createPi: () => {
|
|
|
16
16
|
agents(registry: PiAgentRegistry): /*elided*/any;
|
|
17
17
|
tool(name: string, tool: PiToolFactory): /*elided*/any;
|
|
18
18
|
tools(registry: PiToolRegistry): /*elided*/any;
|
|
19
|
+
toolSideEffectReducer(toolName: string, reducer: PiToolSideEffectReducer): /*elided*/any;
|
|
20
|
+
toolSideEffectReducers(registry: PiToolSideEffectReducerRegistry): /*elided*/any;
|
|
19
21
|
defaultSteeringMode(mode: PiSteeringMode): /*elided*/any;
|
|
22
|
+
logging(config: PiFragmentConfig["logging"]): /*elided*/any;
|
|
20
23
|
build(): PiRuntime;
|
|
21
24
|
};
|
|
22
25
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsl.d.ts","names":[],"sources":["../../../src/pi/dsl.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"dsl.d.ts","names":[],"sources":["../../../src/pi/dsl.ts"],"mappings":";;;;;KAYY,sBAAA,GAAyB,IAAA,CAAK,iBAAA;EAA+B,IAAA;AAAA;AAAA,KAE7D,SAAA;EACV,MAAA,EAAQ,gBAAA;EACR,SAAA,EAAW,mBAAA;AAAA;AAAA,cAGA,WAAA,GACX,IAAA,UACA,UAAA,EAAY,sBAAA,KACX,iBAAA;AAAA,cAUU,QAAA;oBAQS,iBAAA,GA5BuD;mBAgCxD,eAAA,GAhCwD;qBAoCxD,IAAA,EAAQ,aAAA,GAlCR;kBAsCD,cAAA,GAtCC;0CA0CqB,OAAA,EAAW,uBAAA,GAxCrB;mCA4CK,+BAAA,GA5CL;4BAgDF,cAAA,GAjD5B;kBAqDkB,gBAAA,cArDV;WAyDG,SAAA;AAAA"}
|
package/dist/node/pi/dsl.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createPiWorkflows } from "./workflow.js";
|
|
1
|
+
import { createPiWorkflows } from "./workflow/workflow.js";
|
|
2
2
|
|
|
3
3
|
//#region src/pi/dsl.ts
|
|
4
4
|
const defineAgent = (name, definition) => {
|
|
@@ -11,7 +11,9 @@ const defineAgent = (name, definition) => {
|
|
|
11
11
|
const createPi = () => {
|
|
12
12
|
const agents = {};
|
|
13
13
|
const tools = {};
|
|
14
|
+
const toolSideEffectReducers = {};
|
|
14
15
|
let defaultSteeringMode;
|
|
16
|
+
let logging;
|
|
15
17
|
const builder = {
|
|
16
18
|
agent(definition) {
|
|
17
19
|
agents[definition.name] = definition;
|
|
@@ -29,22 +31,39 @@ const createPi = () => {
|
|
|
29
31
|
Object.assign(tools, registry);
|
|
30
32
|
return builder;
|
|
31
33
|
},
|
|
34
|
+
toolSideEffectReducer(toolName, reducer) {
|
|
35
|
+
toolSideEffectReducers[toolName] = reducer;
|
|
36
|
+
return builder;
|
|
37
|
+
},
|
|
38
|
+
toolSideEffectReducers(registry) {
|
|
39
|
+
Object.assign(toolSideEffectReducers, registry);
|
|
40
|
+
return builder;
|
|
41
|
+
},
|
|
32
42
|
defaultSteeringMode(mode) {
|
|
33
43
|
defaultSteeringMode = mode;
|
|
34
44
|
return builder;
|
|
35
45
|
},
|
|
46
|
+
logging(config) {
|
|
47
|
+
logging = config;
|
|
48
|
+
return builder;
|
|
49
|
+
},
|
|
36
50
|
build() {
|
|
37
51
|
const agentsSnapshot = { ...agents };
|
|
38
52
|
const toolsSnapshot = { ...tools };
|
|
53
|
+
const reducersSnapshot = { ...toolSideEffectReducers };
|
|
39
54
|
return {
|
|
40
55
|
config: {
|
|
41
56
|
agents: agentsSnapshot,
|
|
42
57
|
tools: toolsSnapshot,
|
|
43
|
-
defaultSteeringMode
|
|
58
|
+
defaultSteeringMode,
|
|
59
|
+
toolSideEffectReducers: reducersSnapshot,
|
|
60
|
+
logging
|
|
44
61
|
},
|
|
45
62
|
workflows: createPiWorkflows({
|
|
46
63
|
agents: agentsSnapshot,
|
|
47
|
-
tools: toolsSnapshot
|
|
64
|
+
tools: toolsSnapshot,
|
|
65
|
+
toolSideEffectReducers: reducersSnapshot,
|
|
66
|
+
logging
|
|
48
67
|
})
|
|
49
68
|
};
|
|
50
69
|
}
|
package/dist/node/pi/dsl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dsl.js","names":[],"sources":["../../../src/pi/dsl.ts"],"sourcesContent":["import type {\n PiAgentDefinition,\n PiAgentRegistry,\n PiFragmentConfig,\n PiToolFactory,\n PiToolRegistry,\n} from \"./types\";\nimport
|
|
1
|
+
{"version":3,"file":"dsl.js","names":[],"sources":["../../../src/pi/dsl.ts"],"sourcesContent":["import type { PiSteeringMode } from \"./constants\";\nimport type {\n PiAgentDefinition,\n PiAgentRegistry,\n PiFragmentConfig,\n PiToolFactory,\n PiToolRegistry,\n PiToolSideEffectReducer,\n PiToolSideEffectReducerRegistry,\n} from \"./types\";\nimport { createPiWorkflows, type PiWorkflowsRegistry } from \"./workflow/workflow\";\n\nexport type PiAgentDefinitionInput = Omit<PiAgentDefinition, \"name\"> & { name?: string };\n\nexport type PiRuntime = {\n config: PiFragmentConfig;\n workflows: PiWorkflowsRegistry;\n};\n\nexport const defineAgent = (\n name: string,\n definition: PiAgentDefinitionInput,\n): PiAgentDefinition => {\n if (definition.name && definition.name !== name) {\n throw new Error(`defineAgent name mismatch: expected ${name}, got ${definition.name}`);\n }\n return {\n ...definition,\n name,\n };\n};\n\nexport const createPi = () => {\n const agents: PiAgentRegistry = {};\n const tools: PiToolRegistry = {};\n const toolSideEffectReducers: PiToolSideEffectReducerRegistry = {};\n let defaultSteeringMode: PiSteeringMode | undefined;\n let logging: PiFragmentConfig[\"logging\"];\n\n const builder = {\n agent(definition: PiAgentDefinition) {\n agents[definition.name] = definition;\n return builder;\n },\n agents(registry: PiAgentRegistry) {\n Object.assign(agents, registry);\n return builder;\n },\n tool(name: string, tool: PiToolFactory) {\n tools[name] = tool;\n return builder;\n },\n tools(registry: PiToolRegistry) {\n Object.assign(tools, registry);\n return builder;\n },\n toolSideEffectReducer(toolName: string, reducer: PiToolSideEffectReducer) {\n toolSideEffectReducers[toolName] = reducer;\n return builder;\n },\n toolSideEffectReducers(registry: PiToolSideEffectReducerRegistry) {\n Object.assign(toolSideEffectReducers, registry);\n return builder;\n },\n defaultSteeringMode(mode: PiSteeringMode) {\n defaultSteeringMode = mode;\n return builder;\n },\n logging(config: PiFragmentConfig[\"logging\"]) {\n logging = config;\n return builder;\n },\n build(): PiRuntime {\n const agentsSnapshot = { ...agents };\n const toolsSnapshot = { ...tools };\n const reducersSnapshot = { ...toolSideEffectReducers };\n const config: PiFragmentConfig = {\n agents: agentsSnapshot,\n tools: toolsSnapshot,\n defaultSteeringMode,\n toolSideEffectReducers: reducersSnapshot,\n logging,\n };\n return {\n config,\n workflows: createPiWorkflows({\n agents: agentsSnapshot,\n tools: toolsSnapshot,\n toolSideEffectReducers: reducersSnapshot,\n logging,\n }),\n };\n },\n };\n\n return builder;\n};\n"],"mappings":";;;AAmBA,MAAa,eACX,MACA,eACsB;AACtB,KAAI,WAAW,QAAQ,WAAW,SAAS,KACzC,OAAM,IAAI,MAAM,uCAAuC,KAAK,QAAQ,WAAW,OAAO;AAExF,QAAO;EACL,GAAG;EACH;EACD;;AAGH,MAAa,iBAAiB;CAC5B,MAAM,SAA0B,EAAE;CAClC,MAAM,QAAwB,EAAE;CAChC,MAAM,yBAA0D,EAAE;CAClE,IAAI;CACJ,IAAI;CAEJ,MAAM,UAAU;EACd,MAAM,YAA+B;AACnC,UAAO,WAAW,QAAQ;AAC1B,UAAO;;EAET,OAAO,UAA2B;AAChC,UAAO,OAAO,QAAQ,SAAS;AAC/B,UAAO;;EAET,KAAK,MAAc,MAAqB;AACtC,SAAM,QAAQ;AACd,UAAO;;EAET,MAAM,UAA0B;AAC9B,UAAO,OAAO,OAAO,SAAS;AAC9B,UAAO;;EAET,sBAAsB,UAAkB,SAAkC;AACxE,0BAAuB,YAAY;AACnC,UAAO;;EAET,uBAAuB,UAA2C;AAChE,UAAO,OAAO,wBAAwB,SAAS;AAC/C,UAAO;;EAET,oBAAoB,MAAsB;AACxC,yBAAsB;AACtB,UAAO;;EAET,QAAQ,QAAqC;AAC3C,aAAU;AACV,UAAO;;EAET,QAAmB;GACjB,MAAM,iBAAiB,EAAE,GAAG,QAAQ;GACpC,MAAM,gBAAgB,EAAE,GAAG,OAAO;GAClC,MAAM,mBAAmB,EAAE,GAAG,wBAAwB;AAQtD,UAAO;IACL,QAR+B;KAC/B,QAAQ;KACR,OAAO;KACP;KACA,wBAAwB;KACxB;KACD;IAGC,WAAW,kBAAkB;KAC3B,QAAQ;KACR,OAAO;KACP,wBAAwB;KACxB;KACD,CAAC;IACH;;EAEJ;AAED,QAAO"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { PiFragmentConfig, PiWorkflowsService } from "./types.js";
|
|
1
|
+
import { PiActiveSessionProtocolMessage, PiFragmentConfig, PiWorkflowsService } from "./types.js";
|
|
2
2
|
import * as _fragno_dev_core0 from "@fragno-dev/core";
|
|
3
3
|
import * as _fragno_dev_db0 from "@fragno-dev/db";
|
|
4
4
|
import { FragnoPublicConfigWithDatabase } from "@fragno-dev/db";
|
|
5
5
|
import * as _fragno_dev_db_schema0 from "@fragno-dev/db/schema";
|
|
6
6
|
import * as zod from "zod";
|
|
7
|
+
import * as _mariozechner_pi_agent_core0 from "@mariozechner/pi-agent-core";
|
|
7
8
|
import * as zod_v4_core0 from "zod/v4/core";
|
|
8
9
|
import * as _standard_schema_spec0 from "@standard-schema/spec";
|
|
9
10
|
import * as _fragno_dev_db_fragment_definition_builder0 from "@fragno-dev/db/fragment-definition-builder";
|
|
@@ -15,6 +16,7 @@ type PiFragmentServices = {
|
|
|
15
16
|
declare function createPiFragment(config: PiFragmentConfig, options: FragnoPublicConfigWithDatabase, services: PiFragmentServices): _fragno_dev_core0.FragnoInstantiatedFragment<readonly [_fragno_dev_core0.FragnoRouteConfig<"POST", "/sessions", zod.ZodObject<{
|
|
16
17
|
agent: zod.ZodString;
|
|
17
18
|
name: zod.ZodOptional<zod.ZodString>;
|
|
19
|
+
systemMessage: zod.ZodOptional<zod.ZodString>;
|
|
18
20
|
metadata: zod.ZodOptional<zod.ZodAny>;
|
|
19
21
|
tags: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
|
|
20
22
|
steeringMode: zod.ZodOptional<zod.ZodEnum<{
|
|
@@ -33,7 +35,6 @@ declare function createPiFragment(config: PiFragmentConfig, options: FragnoPubli
|
|
|
33
35
|
waiting: "waiting";
|
|
34
36
|
}>;
|
|
35
37
|
agent: zod.ZodString;
|
|
36
|
-
workflowInstanceId: zod.ZodNullable<zod.ZodString>;
|
|
37
38
|
steeringMode: zod.ZodEnum<{
|
|
38
39
|
all: "all";
|
|
39
40
|
"one-at-a-time": "one-at-a-time";
|
|
@@ -42,7 +43,7 @@ declare function createPiFragment(config: PiFragmentConfig, options: FragnoPubli
|
|
|
42
43
|
tags: zod.ZodArray<zod.ZodString>;
|
|
43
44
|
createdAt: zod.ZodDate;
|
|
44
45
|
updatedAt: zod.ZodDate;
|
|
45
|
-
}, zod_v4_core0.$strip>, "AGENT_NOT_FOUND" | "
|
|
46
|
+
}, zod_v4_core0.$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, zod.ZodArray<zod.ZodObject<{
|
|
46
47
|
id: zod.ZodString;
|
|
47
48
|
name: zod.ZodNullable<zod.ZodString>;
|
|
48
49
|
status: zod.ZodEnum<{
|
|
@@ -54,7 +55,6 @@ declare function createPiFragment(config: PiFragmentConfig, options: FragnoPubli
|
|
|
54
55
|
waiting: "waiting";
|
|
55
56
|
}>;
|
|
56
57
|
agent: zod.ZodString;
|
|
57
|
-
workflowInstanceId: zod.ZodNullable<zod.ZodString>;
|
|
58
58
|
steeringMode: zod.ZodEnum<{
|
|
59
59
|
all: "all";
|
|
60
60
|
"one-at-a-time": "one-at-a-time";
|
|
@@ -75,7 +75,6 @@ declare function createPiFragment(config: PiFragmentConfig, options: FragnoPubli
|
|
|
75
75
|
waiting: "waiting";
|
|
76
76
|
}>;
|
|
77
77
|
agent: zod.ZodString;
|
|
78
|
-
workflowInstanceId: zod.ZodNullable<zod.ZodString>;
|
|
79
78
|
steeringMode: zod.ZodEnum<{
|
|
80
79
|
all: "all";
|
|
81
80
|
"one-at-a-time": "one-at-a-time";
|
|
@@ -105,20 +104,10 @@ declare function createPiFragment(config: PiFragmentConfig, options: FragnoPubli
|
|
|
105
104
|
type: zod.ZodLiteral<"text">;
|
|
106
105
|
text: zod.ZodString;
|
|
107
106
|
textSignature: zod.ZodOptional<zod.ZodString>;
|
|
108
|
-
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
109
|
-
type: zod.ZodLiteral<"thinking">;
|
|
110
|
-
thinking: zod.ZodString;
|
|
111
|
-
thinkingSignature: zod.ZodOptional<zod.ZodString>;
|
|
112
107
|
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
113
108
|
type: zod.ZodLiteral<"image">;
|
|
114
109
|
data: zod.ZodString;
|
|
115
110
|
mimeType: zod.ZodString;
|
|
116
|
-
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
117
|
-
type: zod.ZodLiteral<"toolCall">;
|
|
118
|
-
id: zod.ZodString;
|
|
119
|
-
name: zod.ZodString;
|
|
120
|
-
arguments: zod.ZodRecord<zod.ZodString, zod.ZodUnknown>;
|
|
121
|
-
thoughtSignature: zod.ZodOptional<zod.ZodString>;
|
|
122
111
|
}, zod_v4_core0.$strip>]>>]>;
|
|
123
112
|
timestamp: zod.ZodNumber;
|
|
124
113
|
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
@@ -131,10 +120,6 @@ declare function createPiFragment(config: PiFragmentConfig, options: FragnoPubli
|
|
|
131
120
|
type: zod.ZodLiteral<"thinking">;
|
|
132
121
|
thinking: zod.ZodString;
|
|
133
122
|
thinkingSignature: zod.ZodOptional<zod.ZodString>;
|
|
134
|
-
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
135
|
-
type: zod.ZodLiteral<"image">;
|
|
136
|
-
data: zod.ZodString;
|
|
137
|
-
mimeType: zod.ZodString;
|
|
138
123
|
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
139
124
|
type: zod.ZodLiteral<"toolCall">;
|
|
140
125
|
id: zod.ZodString;
|
|
@@ -159,7 +144,13 @@ declare function createPiFragment(config: PiFragmentConfig, options: FragnoPubli
|
|
|
159
144
|
total: zod.ZodNumber;
|
|
160
145
|
}, zod_v4_core0.$strip>;
|
|
161
146
|
}, zod_v4_core0.$strip>;
|
|
162
|
-
stopReason: zod.
|
|
147
|
+
stopReason: zod.ZodEnum<{
|
|
148
|
+
length: "length";
|
|
149
|
+
error: "error";
|
|
150
|
+
stop: "stop";
|
|
151
|
+
toolUse: "toolUse";
|
|
152
|
+
aborted: "aborted";
|
|
153
|
+
}>;
|
|
163
154
|
errorMessage: zod.ZodOptional<zod.ZodString>;
|
|
164
155
|
timestamp: zod.ZodNumber;
|
|
165
156
|
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
@@ -170,35 +161,47 @@ declare function createPiFragment(config: PiFragmentConfig, options: FragnoPubli
|
|
|
170
161
|
type: zod.ZodLiteral<"text">;
|
|
171
162
|
text: zod.ZodString;
|
|
172
163
|
textSignature: zod.ZodOptional<zod.ZodString>;
|
|
173
|
-
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
174
|
-
type: zod.ZodLiteral<"thinking">;
|
|
175
|
-
thinking: zod.ZodString;
|
|
176
|
-
thinkingSignature: zod.ZodOptional<zod.ZodString>;
|
|
177
164
|
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
178
165
|
type: zod.ZodLiteral<"image">;
|
|
179
166
|
data: zod.ZodString;
|
|
180
167
|
mimeType: zod.ZodString;
|
|
181
|
-
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
182
|
-
type: zod.ZodLiteral<"toolCall">;
|
|
183
|
-
id: zod.ZodString;
|
|
184
|
-
name: zod.ZodString;
|
|
185
|
-
arguments: zod.ZodRecord<zod.ZodString, zod.ZodUnknown>;
|
|
186
|
-
thoughtSignature: zod.ZodOptional<zod.ZodString>;
|
|
187
168
|
}, zod_v4_core0.$strip>]>>;
|
|
188
169
|
details: zod.ZodOptional<zod.ZodUnknown>;
|
|
189
170
|
isError: zod.ZodBoolean;
|
|
190
171
|
timestamp: zod.ZodNumber;
|
|
191
172
|
}, zod_v4_core0.$strip>]>>;
|
|
192
|
-
|
|
173
|
+
events: zod.ZodArray<zod.ZodObject<{
|
|
174
|
+
id: zod.ZodString;
|
|
175
|
+
runNumber: zod.ZodOptional<zod.ZodNullable<zod.ZodNumber>>;
|
|
193
176
|
type: zod.ZodString;
|
|
194
|
-
|
|
177
|
+
payload: zod.ZodNullable<zod.ZodUnknown>;
|
|
178
|
+
createdAt: zod.ZodDate;
|
|
179
|
+
deliveredAt: zod.ZodNullable<zod.ZodDate>;
|
|
180
|
+
consumedByStepKey: zod.ZodNullable<zod.ZodString>;
|
|
195
181
|
}, zod_v4_core0.$strip>>;
|
|
182
|
+
trace: zod.ZodArray<zod.ZodType<_mariozechner_pi_agent_core0.AgentEvent, unknown, zod_v4_core0.$ZodTypeInternals<_mariozechner_pi_agent_core0.AgentEvent, unknown>>>;
|
|
183
|
+
turn: zod.ZodNumber;
|
|
184
|
+
phase: zod.ZodEnum<{
|
|
185
|
+
complete: "complete";
|
|
186
|
+
"waiting-for-user": "waiting-for-user";
|
|
187
|
+
"running-agent": "running-agent";
|
|
188
|
+
}>;
|
|
189
|
+
waitingFor: zod.ZodNullable<zod.ZodUnion<readonly [zod.ZodObject<{
|
|
190
|
+
type: zod.ZodLiteral<"user_message">;
|
|
191
|
+
turn: zod.ZodNumber;
|
|
192
|
+
stepKey: zod.ZodString;
|
|
193
|
+
timeoutMs: zod.ZodNullable<zod.ZodNumber>;
|
|
194
|
+
}, zod_v4_core0.$strip>, zod.ZodObject<{
|
|
195
|
+
type: zod.ZodLiteral<"assistant">;
|
|
196
|
+
turn: zod.ZodNumber;
|
|
197
|
+
stepKey: zod.ZodString;
|
|
198
|
+
}, zod_v4_core0.$strip>]>>;
|
|
196
199
|
summaries: zod.ZodArray<zod.ZodObject<{
|
|
197
200
|
turn: zod.ZodNumber;
|
|
198
201
|
assistant: zod.ZodNullable<zod.ZodAny>;
|
|
199
202
|
summary: zod.ZodNullable<zod.ZodString>;
|
|
200
203
|
}, zod_v4_core0.$strip>>;
|
|
201
|
-
}, zod_v4_core0.$strip>, "
|
|
204
|
+
}, zod_v4_core0.$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, zod.ZodArray<zod.ZodType<PiActiveSessionProtocolMessage, unknown, zod_v4_core0.$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", zod.ZodObject<{
|
|
202
205
|
text: zod.ZodString;
|
|
203
206
|
done: zod.ZodOptional<zod.ZodBoolean>;
|
|
204
207
|
steeringMode: zod.ZodOptional<zod.ZodEnum<{
|
|
@@ -214,7 +217,7 @@ declare function createPiFragment(config: PiFragmentConfig, options: FragnoPubli
|
|
|
214
217
|
complete: "complete";
|
|
215
218
|
waiting: "waiting";
|
|
216
219
|
}>;
|
|
217
|
-
}, zod_v4_core0.$strip>, "
|
|
220
|
+
}, zod_v4_core0.$strip>, "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING" | "SESSION_NOT_READY", string, _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>>], _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<{}>, _fragno_dev_db0.DatabaseServiceContext<_fragno_dev_db0.HooksMap>, _fragno_dev_db0.DatabaseRequestContext<_fragno_dev_db0.HooksMap>, _fragno_dev_db_fragment_definition_builder0.DatabaseRequestStorage, FragnoPublicConfigWithDatabase>;
|
|
218
221
|
//#endregion
|
|
219
222
|
export { createPiFragment };
|
|
220
223
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","names":[],"sources":["../../../src/pi/factory.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.d.ts","names":[],"sources":["../../../src/pi/factory.ts"],"mappings":";;;;;;;;;;;;KAOK,kBAAA;EACH,SAAA,EAAW,kBAAA;AAAA;AAAA,iBAGG,gBAAA,CACd,MAAA,EAAQ,gBAAA,EACR,OAAA,EAAS,8BAAA,EACT,QAAA,EAAU,kBAAA,qBAAkB,0BAAA,6BAAA,iBAAA,0BAAA,SAAA;SAAA,GAAA,CAAA,SAAA;;;;;;;;;;MAAA,GAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;0MAAA,sBAAA,CAAA,gBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","names":[],"sources":["../../../src/pi/factory.ts"],"sourcesContent":["import { instantiate } from \"@fragno-dev/core\";\nimport type { FragnoPublicConfigWithDatabase } from \"@fragno-dev/db\";\n\nimport {
|
|
1
|
+
{"version":3,"file":"factory.js","names":[],"sources":["../../../src/pi/factory.ts"],"sourcesContent":["import { instantiate } from \"@fragno-dev/core\";\nimport type { FragnoPublicConfigWithDatabase } from \"@fragno-dev/db\";\n\nimport { piRoutesFactory } from \"../routes\";\nimport { piFragmentDefinition } from \"./definition\";\nimport type { PiFragmentConfig, PiWorkflowsService } from \"./types\";\n\ntype PiFragmentServices = {\n workflows: PiWorkflowsService;\n};\n\nexport function createPiFragment(\n config: PiFragmentConfig,\n options: FragnoPublicConfigWithDatabase,\n services: PiFragmentServices,\n) {\n return instantiate(piFragmentDefinition)\n .withConfig(config)\n .withRoutes([piRoutesFactory])\n .withOptions(options)\n .withServices(services)\n .build();\n}\n"],"mappings":";;;;;AAWA,SAAgB,iBACd,QACA,SACA,UACA;AACA,QAAO,YAAY,qBAAqB,CACrC,WAAW,OAAO,CAClB,WAAW,CAAC,gBAAgB,CAAC,CAC7B,YAAY,QAAQ,CACpB,aAAa,SAAS,CACtB,OAAO"}
|
package/dist/node/pi/mappers.js
CHANGED
|
@@ -33,7 +33,6 @@ const toSessionOutput = (row) => {
|
|
|
33
33
|
name: row.name ?? null,
|
|
34
34
|
status: row.status,
|
|
35
35
|
agent: row.agent ?? "unknown",
|
|
36
|
-
workflowInstanceId: row.workflowInstanceId ?? null,
|
|
37
36
|
steeringMode: normalizeSteeringMode(row.steeringMode),
|
|
38
37
|
metadata: row.metadata ?? null,
|
|
39
38
|
tags: normalizeTags(row.tags),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mappers.js","names":[],"sources":["../../../src/pi/mappers.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"mappers.js","names":[],"sources":["../../../src/pi/mappers.ts"],"sourcesContent":["import type { TableToColumnValues } from \"@fragno-dev/db/query\";\n\nimport type { AgentMessage } from \"@mariozechner/pi-agent-core\";\n\nimport { piSchema } from \"../schema\";\nimport type { PiSteeringMode } from \"./constants\";\nimport { STEERING_MODES } from \"./constants\";\nimport type { PiSession } from \"./types\";\n\nconst toId = (value: { valueOf: () => string } | string | null | undefined): string | null => {\n if (!value) {\n return null;\n }\n if (typeof value === \"string\") {\n return value;\n }\n return value.valueOf();\n};\n\nconst normalizeSteeringMode = (value: unknown): PiSteeringMode => {\n return STEERING_MODES.includes(value as PiSteeringMode)\n ? (value as PiSteeringMode)\n : \"one-at-a-time\";\n};\n\nconst normalizeTags = (value: unknown): string[] => {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter((item): item is string => typeof item === \"string\");\n};\n\nconst extractAssistantText = (messages: AgentMessage[]): string => {\n const lastAssistant = [...messages].reverse().find((message) => {\n return (\n typeof message === \"object\" &&\n message !== null &&\n \"role\" in message &&\n message.role === \"assistant\"\n );\n });\n\n if (!lastAssistant || typeof lastAssistant !== \"object\") {\n return \"\";\n }\n\n const content = (lastAssistant as { content?: unknown }).content;\n if (!Array.isArray(content)) {\n return \"\";\n }\n\n return content\n .filter((block) => typeof block === \"object\" && block !== null && block.type === \"text\")\n .map((block) => (block as { text?: string }).text ?? \"\")\n .join(\"\")\n .trim();\n};\n\nconst extractAssistantTextFromMessage = (message?: AgentMessage | null): string => {\n if (!message) {\n return \"\";\n }\n return extractAssistantText([message]);\n};\n\ntype SessionRow = TableToColumnValues<(typeof piSchema)[\"tables\"][\"session\"]>;\n\nconst toSessionOutput = (row: SessionRow): PiSession => {\n const id = toId(row.id) ?? \"\";\n\n return {\n id,\n name: row.name ?? null,\n status: row.status as PiSession[\"status\"],\n agent: row.agent ?? \"unknown\",\n steeringMode: normalizeSteeringMode(row.steeringMode),\n metadata: row.metadata ?? null,\n tags: normalizeTags(row.tags),\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n};\n\nexport {\n extractAssistantText,\n extractAssistantTextFromMessage,\n normalizeSteeringMode,\n normalizeTags,\n toId,\n toSessionOutput,\n};\n"],"mappings":";;;;AASA,MAAM,QAAQ,UAAgF;AAC5F,KAAI,CAAC,MACH,QAAO;AAET,KAAI,OAAO,UAAU,SACnB,QAAO;AAET,QAAO,MAAM,SAAS;;AAGxB,MAAM,yBAAyB,UAAmC;AAChE,QAAO,eAAe,SAAS,MAAwB,GAClD,QACD;;AAGN,MAAM,iBAAiB,UAA6B;AAClD,KAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,QAAO,EAAE;AAEX,QAAO,MAAM,QAAQ,SAAyB,OAAO,SAAS,SAAS;;AAGzE,MAAM,wBAAwB,aAAqC;CACjE,MAAM,gBAAgB,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,YAAY;AAC9D,SACE,OAAO,YAAY,YACnB,YAAY,QACZ,UAAU,WACV,QAAQ,SAAS;GAEnB;AAEF,KAAI,CAAC,iBAAiB,OAAO,kBAAkB,SAC7C,QAAO;CAGT,MAAM,UAAW,cAAwC;AACzD,KAAI,CAAC,MAAM,QAAQ,QAAQ,CACzB,QAAO;AAGT,QAAO,QACJ,QAAQ,UAAU,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,SAAS,OAAO,CACvF,KAAK,UAAW,MAA4B,QAAQ,GAAG,CACvD,KAAK,GAAG,CACR,MAAM;;AAGX,MAAM,mCAAmC,YAA0C;AACjF,KAAI,CAAC,QACH,QAAO;AAET,QAAO,qBAAqB,CAAC,QAAQ,CAAC;;AAKxC,MAAM,mBAAmB,QAA+B;AAGtD,QAAO;EACL,IAHS,KAAK,IAAI,GAAG,IAAI;EAIzB,MAAM,IAAI,QAAQ;EAClB,QAAQ,IAAI;EACZ,OAAO,IAAI,SAAS;EACpB,cAAc,sBAAsB,IAAI,aAAa;EACrD,UAAU,IAAI,YAAY;EAC1B,MAAM,cAAc,IAAI,KAAK;EAC7B,WAAW,IAAI;EACf,WAAW,IAAI;EAChB"}
|