@agimon-ai/po-dynamic-workflow 0.0.1-alpha.2 → 0.0.1-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extensions/native.mjs +41 -11
- package/dist/extensions/native.mjs.map +1 -1
- package/dist/extensions/server.cjs +1 -1
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.mjs +1 -1
- package/dist/extensions/server.mjs.map +1 -1
- package/package.json +6 -6
- package/src/prompts/codemode-how-to-dynamic-workflow/SKILL.md +1 -1
|
@@ -5,6 +5,7 @@ import { View } from "react-native-unistyles/components/native/View";
|
|
|
5
5
|
import { Text } from "react-native-unistyles/components/native/Text";
|
|
6
6
|
import { ScrollView } from "react-native-unistyles/components/native/ScrollView";
|
|
7
7
|
import { Pressable } from "react-native-unistyles/components/native/Pressable";
|
|
8
|
+
import { AppState } from "react-native";
|
|
8
9
|
import { StyleSheet } from "react-native-unistyles";
|
|
9
10
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
11
|
//#region src/constants/dynamicWorkflow.ts
|
|
@@ -142,6 +143,35 @@ function activityCounts(run) {
|
|
|
142
143
|
}
|
|
143
144
|
//#endregion
|
|
144
145
|
//#region src/extensions/workspaces/sessions/(frontend)/_components/DynamicWorkflowView.native.tsx
|
|
146
|
+
/** Only a visible running duration ticks, not its surrounding workflow tree. */
|
|
147
|
+
function Duration({ startedAt, finishedAt, running, now }) {
|
|
148
|
+
const [clock, setClock] = useState(() => Date.now());
|
|
149
|
+
useEffect(() => {
|
|
150
|
+
if (now !== void 0 || !running || startedAt === void 0 || finishedAt !== void 0) return;
|
|
151
|
+
let timer;
|
|
152
|
+
const update = () => {
|
|
153
|
+
clearInterval(timer);
|
|
154
|
+
if (AppState.currentState !== "active") return;
|
|
155
|
+
setClock(Date.now());
|
|
156
|
+
timer = setInterval(() => setClock(Date.now()), 1e3);
|
|
157
|
+
};
|
|
158
|
+
const subscription = AppState.addEventListener("change", update);
|
|
159
|
+
update();
|
|
160
|
+
return () => {
|
|
161
|
+
clearInterval(timer);
|
|
162
|
+
subscription.remove();
|
|
163
|
+
};
|
|
164
|
+
}, [
|
|
165
|
+
startedAt,
|
|
166
|
+
finishedAt,
|
|
167
|
+
running,
|
|
168
|
+
now
|
|
169
|
+
]);
|
|
170
|
+
return /* @__PURE__ */ jsx(Text, {
|
|
171
|
+
style: styles.dim,
|
|
172
|
+
children: workflowDuration(startedAt, finishedAt, now ?? clock)
|
|
173
|
+
});
|
|
174
|
+
}
|
|
145
175
|
function DynamicWorkflowActivity({ runs, connected = true, onOpen }) {
|
|
146
176
|
return /* @__PURE__ */ jsxs(View, {
|
|
147
177
|
style: styles.run,
|
|
@@ -295,9 +325,11 @@ function ItemRow({ item, run, now, defaultExpanded, onOpenAgent }) {
|
|
|
295
325
|
children: [/* @__PURE__ */ jsx(Text, {
|
|
296
326
|
style: styles.title,
|
|
297
327
|
children: phase.label
|
|
298
|
-
}), /* @__PURE__ */ jsx(
|
|
299
|
-
|
|
300
|
-
|
|
328
|
+
}), /* @__PURE__ */ jsx(Duration, {
|
|
329
|
+
startedAt: phase.startedAt,
|
|
330
|
+
finishedAt: phase.finishedAt,
|
|
331
|
+
running: phase.status === "running",
|
|
332
|
+
now
|
|
301
333
|
})]
|
|
302
334
|
}),
|
|
303
335
|
phase.executionStatus !== phase.status && /* @__PURE__ */ jsxs(Text, {
|
|
@@ -374,7 +406,12 @@ function DynamicWorkflowView({ runs, now, connected = true, defaultExpandedKeys
|
|
|
374
406
|
}),
|
|
375
407
|
/* @__PURE__ */ jsxs(Text, {
|
|
376
408
|
style: styles.dim,
|
|
377
|
-
children: [
|
|
409
|
+
children: [/* @__PURE__ */ jsx(Duration, {
|
|
410
|
+
startedAt: run.startedAt,
|
|
411
|
+
finishedAt: run.finishedAt,
|
|
412
|
+
running: run.status === "running",
|
|
413
|
+
now
|
|
414
|
+
}), run.executionStatus !== run.status ? ` · Workflow execution: ${WORKFLOW_STATUS[run.executionStatus].label}` : ""]
|
|
378
415
|
}),
|
|
379
416
|
run.error && /* @__PURE__ */ jsx(Text, {
|
|
380
417
|
accessibilityRole: run.status === "failed" ? "alert" : void 0,
|
|
@@ -623,7 +660,6 @@ const styles = StyleSheet.create((theme) => ({
|
|
|
623
660
|
//#endregion
|
|
624
661
|
//#region src/extensions/workspaces/sessions/(frontend)/_components/DynamicWorkflowPanel.native.tsx
|
|
625
662
|
const EMPTY_RUNS = [];
|
|
626
|
-
const TICK_MS = 1e3;
|
|
627
663
|
function dynamicWorkflowTab() {
|
|
628
664
|
return {
|
|
629
665
|
id: "dynamic-workflow-runs",
|
|
@@ -658,14 +694,8 @@ function DynamicWorkflowActivitySection({ sessionId, openTransientTab }) {
|
|
|
658
694
|
}
|
|
659
695
|
function DynamicWorkflowPanel({ sessionId, openTransientTab }) {
|
|
660
696
|
const snapshot = useWorkflows(sessionId);
|
|
661
|
-
const [now, setNow] = useState(() => Date.now());
|
|
662
|
-
useEffect(() => {
|
|
663
|
-
const timer = setInterval(() => setNow(Date.now()), TICK_MS);
|
|
664
|
-
return () => clearInterval(timer);
|
|
665
|
-
}, []);
|
|
666
697
|
return /* @__PURE__ */ jsx(DynamicWorkflowView, {
|
|
667
698
|
runs: snapshot?.runs ?? EMPTY_RUNS,
|
|
668
|
-
now,
|
|
669
699
|
onOpenAgent: (runId) => {
|
|
670
700
|
if (sessionId !== null) openTransientTab(workflowAgentTab(runId));
|
|
671
701
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.mjs","names":["Button","Dot","fontOf","StatusBadge","PoNativeTheme","useState","StyleSheet","DynamicWorkflowItem","DynamicWorkflowPhase","DynamicWorkflowRun","DynamicWorkflowShape","DynamicWorkflowActivityProps","DynamicWorkflowViewProps","activitySummary","activityCounts","statusDot","groupSummary","WORKFLOW_STATUS","workflowDuration","DynamicWorkflowActivity","runs","connected","onOpen","styles","run","dim","length","itemTitle","link","map","counts","key","label","activityRow","inline","status","total","activityDetail","running","done","failed","error","progress","progressDone","width","progressRunning","PhaseTrack","shape","phases","kind","phase","find","entry","tone","leaves","node","some","children","grouped","phaseGroup","phaseSequence","child","ItemRow","item","now","defaultExpanded","onOpenAgent","runId","expanded","setExpanded","toggle","track","details","detail","title","startedAt","finishedAt","executionStatus","undefined","agents","agent","index","DynamicWorkflowView","defaultExpandedKeys","screen","content","notice","empty","heading","body","runTitle","groups","group","concurrency","items","includes","truncated","create","theme","minHeight","padding","spacing","gap","uni__dependencies","paddingLeft","height","borderRadius","full","overflow","flexDirection","backgroundColor","colors","deep","green","yellow","flex","bg","flexWrap","alignItems","minWidth","color","text","fontFamily","sans","fontSize","base","lineHeight","flexShrink","hi","fontWeight","semibold","lg","sm","blue","red","borderWidth","borderColor","border","md","paddingVertical","paddingHorizontal","paddingTop","borderTopWidth","borderTopColor","maxWidth","borderLeftWidth","borderLeftColor","activityGroupDynamicWorkflow","channelDynamicWorkflowRuns","fillDynamicWorkflow"],"sources":["../../src/constants/dynamicWorkflow.ts","../../src/extensions/workspaces/sessions/(frontend)/_lib/dynamicWorkflowState.ts","../../src/extensions/workspaces/sessions/(frontend)/_lib/dynamicWorkflowStore.native.ts","../../src/extensions/workspaces/sessions/(frontend)/_components/dynamicWorkflowPresentation.ts","../../src/extensions/workspaces/sessions/(frontend)/_components/DynamicWorkflowView.native.tsx","../../src/extensions/workspaces/sessions/(frontend)/_components/DynamicWorkflowPanel.native.tsx","../../src/extensions/workspaces/sessions/(frontend)/activity-group/dynamic-workflow.native.ts","../../src/extensions/workspaces/sessions/(frontend)/channel/dynamic-workflow-runs.native.ts","../../src/extensions/workspaces/sessions/(frontend)/fill/DynamicWorkflow.activity.dynamic-workflow.native.tsx","../../generated/native.ts"],"sourcesContent":["export const DYNAMIC_WORKFLOW_CHANNEL = 'dynamic_workflow_runs';\n","import type { DynamicWorkflowSnapshot, DynamicWorkflowStatus } from '../../../../../types/dynamicWorkflow';\n\nconst STATUSES: readonly string[] = ['pending', 'running', 'completed', 'failed', 'stopped', 'skipped'];\nconst SHAPE_KINDS = ['step', 'sequence', 'parallel', 'branch', 'foreach'];\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction finite(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction count(value: unknown): boolean {\n return finite(value) && Number.isSafeInteger(value) && value >= 0;\n}\nfunction status(value: unknown): value is DynamicWorkflowStatus {\n return typeof value === 'string' && STATUSES.includes(value);\n}\nfunction named(value: unknown): value is Record<string, unknown> {\n return record(value) && typeof value.key === 'string' && typeof value.label === 'string';\n}\nfunction timing(value: Record<string, unknown>): boolean {\n return (\n (value.startedAt === undefined || finite(value.startedAt)) &&\n (value.finishedAt === undefined || finite(value.finishedAt)) &&\n (value.error === undefined || typeof value.error === 'string')\n );\n}\nfunction shape(value: unknown, depth = 0): boolean {\n return (\n depth < 128 &&\n named(value) &&\n typeof value.kind === 'string' &&\n SHAPE_KINDS.includes(value.kind) &&\n Array.isArray(value.children) &&\n value.children.every((child: unknown) => shape(child, depth + 1))\n );\n}\nfunction phase(value: unknown): boolean {\n return (\n named(value) &&\n status(value.status) &&\n status(value.executionStatus) &&\n timing(value) &&\n Array.isArray(value.agents) &&\n value.agents.every(\n (agent: unknown) =>\n record(agent) &&\n typeof agent.runId === 'string' &&\n agent.runId.length > 0 &&\n status(agent.status) &&\n agent.status !== 'pending' &&\n agent.status !== 'skipped',\n )\n );\n}\nfunction item(value: unknown): boolean {\n return (\n named(value) &&\n count(value.index) &&\n status(value.status) &&\n Array.isArray(value.phases) &&\n value.phases.every(phase)\n );\n}\nfunction group(value: unknown): boolean {\n return (\n named(value) &&\n count(value.total) &&\n typeof value.truncated === 'boolean' &&\n (value.concurrency === undefined || (count(value.concurrency) && value.concurrency !== 0)) &&\n record(value.counts) &&\n STATUSES.every((key) => count((value.counts as Record<string, unknown>)[key])) &&\n Array.isArray(value.items) &&\n value.items.every(item)\n );\n}\nfunction run(value: unknown): boolean {\n return (\n named(value) &&\n typeof value.workflowId === 'string' &&\n status(value.status) &&\n status(value.executionStatus) &&\n finite(value.startedAt) &&\n timing(value) &&\n shape(value.shape) &&\n Array.isArray(value.groups) &&\n value.groups.every(group)\n );\n}\n\n/** Validate every field the two presentations read before admitting a transport frame. */\nexport function parseWorkflowSnapshot(value: unknown): DynamicWorkflowSnapshot | null {\n if (\n !record(value) ||\n value.version !== 1 ||\n !count(value.revision) ||\n typeof value.sessionId !== 'string' ||\n !Array.isArray(value.runs) ||\n !value.runs.every(run)\n )\n return null;\n return value as unknown as DynamicWorkflowSnapshot;\n}\n\n/** Session identity is checked by the channel before this monotonic fold. */\nexport function nextWorkflowSnapshot(\n current: DynamicWorkflowSnapshot | null,\n next: DynamicWorkflowSnapshot,\n): DynamicWorkflowSnapshot {\n return current !== null && next.revision <= current.revision ? current : next;\n}\n","import { defineSessionChannel, defineSessionStore } from '@agimon-ai/po-core/native';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../../../../constants/dynamicWorkflow';\nimport type { DynamicWorkflowSnapshot } from '../../../../../types/dynamicWorkflow';\nimport { nextWorkflowSnapshot, parseWorkflowSnapshot } from './dynamicWorkflowState';\n\nexport const workflows = defineSessionStore<DynamicWorkflowSnapshot | null>(null);\n\nexport const workflowRunsChannel = defineSessionChannel<DynamicWorkflowSnapshot>({\n channel: DYNAMIC_WORKFLOW_CHANNEL,\n parse: parseWorkflowSnapshot,\n apply(sessionId, snapshot) {\n if (snapshot.sessionId !== sessionId) return;\n workflows.update(sessionId, (current) => nextWorkflowSnapshot(current, snapshot));\n },\n drop(sessionId) {\n workflows.drop(sessionId);\n },\n});\n","import type {\n DynamicWorkflowGroup,\n DynamicWorkflowItem,\n DynamicWorkflowPhase,\n DynamicWorkflowShape,\n DynamicWorkflowRun,\n DynamicWorkflowStatus,\n} from '../../../../../types/dynamicWorkflow';\n\nexport const WORKFLOW_STATUS = {\n pending: { label: 'Pending', tone: 'neutral' },\n running: { label: 'Running', tone: 'running' },\n completed: { label: 'Done', tone: 'ok' },\n failed: { label: 'Failed', tone: 'error' },\n stopped: { label: 'Stopped', tone: 'neutral' },\n skipped: { label: 'Skipped', tone: 'neutral' },\n} as const satisfies Record<DynamicWorkflowStatus, { label: string; tone: string }>;\n\nexport function groupSummary(group: DynamicWorkflowGroup): string {\n const count = (status: DynamicWorkflowStatus) => group.counts[status];\n const parts = [`${count('running')} of ${group.total} running`, `${count('completed')} done`];\n if (count('failed')) parts.push(`${count('failed')} failed`);\n if (count('stopped')) parts.push(`${count('stopped')} stopped`);\n if (count('skipped')) parts.push(`${count('skipped')} skipped`);\n return parts.join(' · ');\n}\n\nexport function activitySummary(runs: DynamicWorkflowRun[]): string {\n if (!runs.length) return 'Workflows appear here when Po starts them.';\n return `${runs.filter((run) => run.status === 'running').length} running · ${runs.filter((run) => run.status !== 'running' && run.status !== 'pending').length} finished`;\n}\n\nexport function workflowDuration(startedAt?: number, finishedAt?: number, now = 0): string {\n if (startedAt === undefined) return 'Not started';\n const seconds = Math.max(0, Math.floor(((finishedAt ?? now) - startedAt) / 1000));\n if (seconds < 60) return `${seconds}s`;\n return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n}\n\nexport interface DynamicWorkflowViewProps {\n runs: DynamicWorkflowRun[];\n now: number;\n connected?: boolean;\n defaultExpandedKeys?: string[];\n onOpenAgent: (runId: string) => void;\n}\n\nexport interface DynamicWorkflowActivityProps {\n runs: DynamicWorkflowRun[];\n connected?: boolean;\n onOpen: () => void;\n}\n\nexport const MAX_GRAPH_ITEM_CELLS = 24;\n\nexport const statusDot = (status: DynamicWorkflowStatus) =>\n status === 'completed' ? 'green' : status === 'running' ? 'yellow' : status === 'failed' ? 'red' : 'neutral';\n\nexport function activityCounts(run: DynamicWorkflowRun) {\n // Root rows describe direct steps, not foreach items.\n const groups = run.groups.filter((group) => group.concurrency !== undefined);\n const total = groups.reduce((sum, group) => sum + group.total, 0);\n const count = (status: DynamicWorkflowStatus) => groups.reduce((sum, group) => sum + group.counts[status], 0);\n return { total, running: count('running'), done: count('completed'), failed: count('failed') };\n}\n\nexport interface WorkflowGraphNode {\n id: string;\n parentId?: string;\n position: { x: number; y: number };\n width: number;\n height: number;\n data: {\n label: string;\n kind: DynamicWorkflowShape['kind'];\n status: DynamicWorkflowStatus;\n phase?: DynamicWorkflowPhase;\n group?: DynamicWorkflowGroup;\n };\n}\nexport interface WorkflowGraphEdge {\n id: string;\n source: string;\n target: string;\n status: DynamicWorkflowStatus;\n}\n\n/** DOM-free series-parallel layout. All child coordinates are relative to their foreach parent. */\nexport function workflowGraph(run: DynamicWorkflowRun) {\n type Box = {\n nodes: WorkflowGraphNode[];\n edges: WorkflowGraphEdge[];\n width: number;\n height: number;\n entry: string[];\n exit: string[];\n };\n const edge = (source: string, target: string, nodes: WorkflowGraphNode[]): WorkflowGraphEdge => ({\n id: `${source}->${target}`,\n source,\n target,\n status: nodes.find((node) => node.id === target)?.data.status ?? 'pending',\n });\n const aggregate = (statuses: DynamicWorkflowStatus[]): DynamicWorkflowStatus =>\n statuses.includes('running')\n ? 'running'\n : statuses.includes('failed')\n ? 'failed'\n : statuses.length &&\n statuses.some((status) => status === 'completed') &&\n statuses.every((status) => status === 'completed' || status === 'skipped')\n ? 'completed'\n : statuses.includes('stopped')\n ? 'stopped'\n : statuses.length && statuses.every((status) => status === 'skipped')\n ? 'skipped'\n : 'pending';\n const layout = (shape: DynamicWorkflowShape, item?: DynamicWorkflowItem, parentId?: string): Box => {\n const id = `${parentId ?? run.key}:${shape.key}`;\n if (shape.kind === 'step') {\n const phase = item?.phases.find((phase) => phase.key === shape.key);\n return {\n nodes: [\n {\n id,\n parentId,\n position: { x: 0, y: 0 },\n width: 200,\n height: phase?.error ? 88 : 64,\n data: { label: shape.label, kind: shape.kind, status: phase?.status ?? 'pending', phase },\n },\n ],\n edges: [],\n width: 200,\n height: phase?.error ? 88 : 64,\n entry: [id],\n exit: [id],\n };\n }\n if (shape.kind === 'foreach') {\n const group = run.groups.find((group) =>\n item ? group.key === `${item.key}/${shape.key}` : group.key.endsWith(`/${shape.key}`),\n );\n const representative = group?.items.find((row) => row.status === 'running') ?? group?.items[0];\n const inner = combine(\n shape.children.map((child) => layout(child, representative, id)),\n false,\n );\n const width = Math.max(360, inner.width + 48);\n const cellRows = Math.ceil(Math.min(group?.items.length ?? 0, MAX_GRAPH_ITEM_CELLS) / 8);\n const height = inner.height + 112 + cellRows * 40 + (group && group.total > MAX_GRAPH_ITEM_CELLS ? 32 : 0);\n const status = group\n ? aggregate(\n Object.entries(group.counts)\n .filter(([, count]) => count > 0)\n .map(([status]) => status as DynamicWorkflowStatus),\n )\n : 'pending';\n const node: WorkflowGraphNode = {\n id,\n parentId,\n position: { x: 0, y: 0 },\n width,\n height,\n data: { label: shape.label, kind: shape.kind, status, group },\n };\n inner.nodes.forEach((node) => {\n if (node.parentId === id) {\n node.position.x += (width - inner.width) / 2;\n node.position.y += 72;\n }\n });\n return { nodes: [node, ...inner.nodes], edges: inner.edges, width, height, entry: [id], exit: [id] };\n }\n const children = shape.children.map((child) => layout(child, item, parentId));\n const box = combine(children, shape.kind !== 'sequence');\n if (shape.kind !== 'branch') return box;\n box.nodes.forEach((node) => {\n if (node.parentId === parentId) node.position.y += 144;\n });\n const status = aggregate(\n children.flatMap((child) =>\n child.nodes.filter((node) => node.parentId === parentId).map((node) => node.data.status),\n ),\n );\n const node: WorkflowGraphNode = {\n id,\n parentId,\n position: { x: (box.width - 160) / 2, y: 0 },\n width: 160,\n height: 96,\n data: { label: 'Branch', kind: 'branch', status },\n };\n box.edges.push(...box.entry.map((target) => edge(id, target, box.nodes)));\n return { ...box, nodes: [node, ...box.nodes], height: box.height + 144, entry: [id] };\n };\n function combine(boxes: Box[], horizontal: boolean): Box {\n const width = horizontal\n ? boxes.reduce((sum, box) => sum + box.width, 0) + Math.max(0, boxes.length - 1) * 48\n : Math.max(200, ...boxes.map((box) => box.width));\n const nodes: WorkflowGraphNode[] = [],\n edges: WorkflowGraphEdge[] = [];\n let offset = 0;\n boxes.forEach((box, index) => {\n const roots = new Set(box.nodes.map((node) => node.id));\n box.nodes.forEach((node) => {\n if (!node.parentId || !roots.has(node.parentId)) {\n node.position.x += horizontal ? offset : (width - box.width) / 2;\n node.position.y += horizontal ? 0 : offset;\n }\n });\n nodes.push(...box.nodes);\n edges.push(...box.edges);\n if (!horizontal && index)\n for (const source of boxes[index - 1].exit)\n for (const target of box.entry) edges.push(edge(source, target, box.nodes));\n offset += (horizontal ? box.width : box.height) + 48;\n });\n return {\n nodes,\n edges,\n width,\n height: horizontal ? Math.max(0, ...boxes.map((box) => box.height)) : Math.max(0, offset - 48),\n entry: horizontal ? boxes.flatMap((box) => box.entry) : (boxes[0]?.entry ?? []),\n exit: horizontal ? boxes.flatMap((box) => box.exit) : (boxes.at(-1)?.exit ?? []),\n };\n }\n const root = run.groups\n .flatMap((group) => group.items)\n .find((item) =>\n item.phases.some((phase) => {\n const direct = (shape: DynamicWorkflowShape): boolean =>\n shape.kind === 'foreach' ? false : shape.key === phase.key || shape.children.some(direct);\n return direct(run.shape);\n }),\n );\n return layout(run.shape, root);\n}\n","import { Button, Dot, fontOf, StatusBadge } from '@agimon-ai/po-native-components';\nimport type { PoNativeTheme } from '@agimon-ai/po-web-components/nativeTheme';\nimport { useState } from 'react';\nimport { Pressable, ScrollView, Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport type {\n DynamicWorkflowItem,\n DynamicWorkflowPhase,\n DynamicWorkflowRun,\n DynamicWorkflowShape,\n} from '../../../../../types/dynamicWorkflow';\nimport {\n type DynamicWorkflowActivityProps,\n type DynamicWorkflowViewProps,\n activitySummary,\n activityCounts,\n statusDot,\n groupSummary,\n WORKFLOW_STATUS,\n workflowDuration,\n} from './dynamicWorkflowPresentation';\n\nexport function DynamicWorkflowActivity({ runs, connected = true, onOpen }: DynamicWorkflowActivityProps) {\n return (\n <View style={styles.run}>\n <Text style={styles.dim}>{connected ? activitySummary(runs) : 'Connection paused. Showing last update.'}</Text>\n {!runs.length && (\n <Button variant=\"ghost\" size=\"card\" onPress={onOpen} accessibilityLabel=\"Open dynamic workflows\">\n <Text style={styles.itemTitle}>No workflows yet</Text>\n <Text style={styles.dim}>Idle</Text>\n <Text style={styles.link}>View workflows →</Text>\n </Button>\n )}\n {runs.map((run) => {\n const counts = activityCounts(run);\n return (\n <Pressable\n key={run.key}\n onPress={onOpen}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${run.label}`}\n style={styles.activityRow}\n >\n <View style={styles.inline}>\n <Dot tone={statusDot(run.status)} size=\"md\" />\n <Text style={styles.itemTitle}>{run.label}</Text>\n <Text style={styles.dim}>{WORKFLOW_STATUS[run.status].label} ›</Text>\n </View>\n {counts.total > 0 && (\n <View style={styles.activityDetail}>\n <Text style={styles.dim}>\n {run.status === 'running' ? `${counts.running} of ${counts.total} running` : `${counts.total} items`}{' '}\n · {counts.done} done{counts.failed > 0 && <Text style={styles.error}> · {counts.failed} failed</Text>}\n </Text>\n <View\n style={styles.progress}\n accessibilityLabel={`${counts.done} done, ${counts.running} running, ${counts.total} total`}\n >\n <View style={[styles.progressDone, { width: `${(counts.done / counts.total) * 100}%` }]} />\n <View style={[styles.progressRunning, { width: `${(counts.running / counts.total) * 100}%` }]} />\n </View>\n </View>\n )}\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nfunction PhaseTrack({ shape, phases }: { shape: DynamicWorkflowShape; phases: DynamicWorkflowPhase[] }) {\n if (shape.kind === 'step') {\n const phase = phases.find((entry) => entry.key === shape.key);\n return phase ? (\n <View style={styles.phase}>\n <StatusBadge tone={WORKFLOW_STATUS[phase.status].tone}>\n {phase.label} · {WORKFLOW_STATUS[phase.status].label}\n </StatusBadge>\n </View>\n ) : null;\n }\n const leaves = (node: DynamicWorkflowShape): boolean =>\n node.kind === 'step' ? phases.some((phase) => phase.key === node.key) : node.children.some(leaves);\n if (!leaves(shape)) return null;\n const grouped = shape.kind === 'parallel' || shape.kind === 'branch';\n return (\n <View style={grouped ? styles.phaseGroup : styles.phaseSequence}>\n {grouped && <Text style={styles.dim}>{shape.kind === 'parallel' ? 'Parallel' : 'Branch'}</Text>}\n {shape.children.map((child) => (\n <PhaseTrack key={child.key} shape={child} phases={phases} />\n ))}\n </View>\n );\n}\n\nfunction ItemRow({\n item,\n run,\n now,\n defaultExpanded,\n onOpenAgent,\n}: {\n item: DynamicWorkflowItem;\n run: DynamicWorkflowRun;\n now: number;\n defaultExpanded: boolean;\n onOpenAgent: (runId: string) => void;\n}) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n return (\n <View style={styles.item}>\n <Pressable\n onPress={() => setExpanded(!expanded)}\n accessibilityRole=\"button\"\n accessibilityLabel={`${item.label}, ${WORKFLOW_STATUS[item.status].label}`}\n accessibilityState={{ expanded }}\n style={styles.toggle}\n >\n <Text style={styles.dim}>{expanded ? '▾' : '▸'}</Text>\n <Text style={styles.itemTitle}>{item.label}</Text>\n <StatusBadge tone={WORKFLOW_STATUS[item.status].tone}>{WORKFLOW_STATUS[item.status].label}</StatusBadge>\n </Pressable>\n <View style={styles.track}>\n <PhaseTrack shape={run.shape} phases={item.phases} />\n </View>\n {expanded && (\n <View style={styles.details}>\n {item.phases.map((phase) => (\n <View key={phase.key} style={styles.detail}>\n <View style={styles.inline}>\n <Text style={styles.title}>{phase.label}</Text>\n <Text style={styles.dim}>{workflowDuration(phase.startedAt, phase.finishedAt, now)}</Text>\n </View>\n {phase.executionStatus !== phase.status && (\n <Text style={styles.dim}>Step: {WORKFLOW_STATUS[phase.executionStatus].label}</Text>\n )}\n {phase.error && (\n <Text\n accessibilityRole={phase.status === 'failed' ? 'alert' : undefined}\n style={phase.status === 'failed' ? styles.error : styles.dim}\n >\n {phase.error}\n </Text>\n )}\n {phase.agents.map((agent, index) => (\n <View key={agent.runId} style={styles.inline}>\n <Button\n variant=\"link\"\n size=\"sm\"\n onPress={() => onOpenAgent(agent.runId)}\n accessibilityLabel={`Open ${phase.label} agent ${index + 1} transcript`}\n >\n Agent {index + 1} transcript ↗\n </Button>\n <StatusBadge tone={WORKFLOW_STATUS[agent.status].tone}>\n {WORKFLOW_STATUS[agent.status].label}\n </StatusBadge>\n </View>\n ))}\n {!phase.agents.length && <Text style={styles.dim}>No agent transcript</Text>}\n </View>\n ))}\n </View>\n )}\n </View>\n );\n}\n\nexport function DynamicWorkflowView({\n runs,\n now,\n connected = true,\n defaultExpandedKeys = [],\n onOpenAgent,\n}: DynamicWorkflowViewProps) {\n return (\n <ScrollView style={styles.screen} contentContainerStyle={styles.content} accessibilityLabel=\"Dynamic workflows\">\n {!connected && (\n <Text accessibilityRole=\"alert\" style={styles.notice}>\n Connection paused. These are the last reported workflow states.\n </Text>\n )}\n {!runs.length && (\n <View style={styles.empty}>\n <Text accessibilityRole=\"header\" style={styles.heading}>\n No workflows yet\n </Text>\n <Text style={styles.body}>\n Workflows appear here when Po starts them. You can carry on with your conversation.\n </Text>\n </View>\n )}\n {runs.map((run) => (\n <View key={run.key} style={styles.run}>\n <View style={styles.inline}>\n <Text accessibilityRole=\"header\" style={styles.runTitle}>\n {run.label}\n </Text>\n <StatusBadge tone={WORKFLOW_STATUS[run.status].tone}>{WORKFLOW_STATUS[run.status].label}</StatusBadge>\n </View>\n <Text style={styles.dim}>\n {workflowDuration(run.startedAt, run.finishedAt, now)}\n {run.executionStatus !== run.status\n ? ` · Workflow execution: ${WORKFLOW_STATUS[run.executionStatus].label}`\n : ''}\n </Text>\n {run.error && (\n <Text\n accessibilityRole={run.status === 'failed' ? 'alert' : undefined}\n style={run.status === 'failed' ? styles.error : styles.dim}\n >\n {run.error}\n </Text>\n )}\n {run.groups.map((group) => (\n <View key={group.key} style={styles.group}>\n <Text accessibilityRole=\"header\" style={styles.title}>\n {group.label}\n </Text>\n <Text style={styles.dim}>\n {groupSummary(group)}\n {group.concurrency ? ` · Up to ${group.concurrency} at once` : ''}\n </Text>\n {group.items.map((item) => (\n <ItemRow\n key={item.key}\n item={item}\n run={run}\n now={now}\n defaultExpanded={defaultExpandedKeys.includes(item.key)}\n onOpenAgent={onOpenAgent}\n />\n ))}\n {group.truncated && (\n <Text style={styles.dim}>\n Showing {group.items.length} of {group.total} items.\n </Text>\n )}\n </View>\n ))}\n </View>\n ))}\n </ScrollView>\n );\n}\n\nconst styles = StyleSheet.create((theme: PoNativeTheme) => ({\n activityRow: { minHeight: 44, padding: theme.spacing(3), gap: theme.spacing(2) },\n activityDetail: { paddingLeft: theme.spacing(5), gap: theme.spacing(2) },\n progress: {\n height: 6,\n borderRadius: theme.borderRadius.full,\n overflow: 'hidden',\n flexDirection: 'row',\n backgroundColor: theme.colors.deep,\n },\n progressDone: { backgroundColor: theme.colors.green },\n progressRunning: { backgroundColor: theme.colors.yellow },\n screen: { flex: 1, minHeight: 0, backgroundColor: theme.colors.bg },\n content: { padding: theme.spacing(4), gap: theme.spacing(6) },\n run: { gap: theme.spacing(2) },\n inline: { flexDirection: 'row', flexWrap: 'wrap', alignItems: 'center', gap: theme.spacing(1.5), minWidth: 0 },\n body: {\n color: theme.colors.text,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n flexShrink: 1,\n },\n title: {\n color: theme.colors.hi,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n fontWeight: theme.fontWeight.semibold,\n flexShrink: 1,\n },\n heading: {\n color: theme.colors.hi,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.lg,\n lineHeight: theme.lineHeight.lg,\n fontWeight: theme.fontWeight.semibold,\n },\n runTitle: {\n color: theme.colors.hi,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.lg,\n lineHeight: theme.lineHeight.lg,\n fontWeight: theme.fontWeight.semibold,\n flex: 1,\n minWidth: 0,\n },\n itemTitle: {\n color: theme.colors.hi,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n fontWeight: theme.fontWeight.semibold,\n flex: 1,\n minWidth: 0,\n },\n dim: {\n color: theme.colors.dim,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.sm,\n lineHeight: theme.lineHeight.sm,\n flexShrink: 1,\n },\n link: {\n color: theme.colors.blue,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.sm,\n lineHeight: theme.lineHeight.sm,\n },\n error: {\n color: theme.colors.red,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.sm,\n lineHeight: theme.lineHeight.sm,\n },\n notice: {\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderRadius: theme.borderRadius.md,\n padding: theme.spacing(3),\n color: theme.colors.dim,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n },\n empty: { paddingVertical: theme.spacing(6), gap: theme.spacing(2) },\n group: {\n minWidth: 0,\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderRadius: theme.borderRadius.md,\n paddingHorizontal: theme.spacing(3),\n paddingTop: theme.spacing(3),\n gap: theme.spacing(2),\n },\n item: {\n minWidth: 0,\n borderTopWidth: 1,\n borderTopColor: theme.colors['border-soft'],\n paddingVertical: theme.spacing(3),\n gap: theme.spacing(2),\n },\n toggle: { minHeight: 44, flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2) },\n track: { minWidth: 0, paddingLeft: theme.spacing(4) },\n phaseSequence: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: theme.spacing(1.5),\n minWidth: 0,\n width: '100%',\n maxWidth: '100%',\n flexShrink: 1,\n },\n phase: { maxWidth: '100%', flexShrink: 1 },\n phaseGroup: {\n minWidth: 0,\n maxWidth: '100%',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderRadius: theme.borderRadius.md,\n padding: theme.spacing(1.5),\n },\n details: {\n borderLeftWidth: 1,\n borderLeftColor: theme.colors.border,\n paddingLeft: theme.spacing(3),\n gap: theme.spacing(3),\n },\n detail: { gap: theme.spacing(1) },\n}));\n","import type { WebPluginSlotProps } from '@agimon-ai/po-core/native';\nimport { useCallback, useEffect, useState, useSyncExternalStore } from 'react';\n\nimport type { DynamicWorkflowRun } from '../../../../../types/dynamicWorkflow';\nimport { workflows } from '../_lib/dynamicWorkflowStore.native';\nimport { DynamicWorkflowActivity, DynamicWorkflowView } from './DynamicWorkflowView.native';\n\nconst EMPTY_RUNS: DynamicWorkflowRun[] = [];\nconst TICK_MS = 1000;\n\ntype WorkflowTab = Parameters<WebPluginSlotProps['openTransientTab']>[0];\n\nexport function dynamicWorkflowTab(): WorkflowTab {\n return { id: 'dynamic-workflow-runs', label: 'Dynamic workflows', panel: DynamicWorkflowPanel, retainComposer: true };\n}\n\nexport function workflowAgentTab(runId: string): WorkflowTab {\n return {\n id: `dynamic-workflow-agent-${encodeURIComponent(runId)}`,\n label: 'Agent transcript',\n panel: ({ renderThread }) => <>{renderThread(runId)}</>,\n retainComposer: true,\n };\n}\n\nfunction useWorkflows(sessionId: string | null) {\n const subscribe = useCallback((listener: () => void) => {\n const subscription = workflows.store.subscribe(listener);\n return () => subscription.unsubscribe();\n }, []);\n return useSyncExternalStore(subscribe, () => workflows.select(workflows.store.state, sessionId));\n}\n\nexport function DynamicWorkflowActivitySection({ sessionId, openTransientTab }: WebPluginSlotProps) {\n const snapshot = useWorkflows(sessionId);\n return (\n <DynamicWorkflowActivity\n runs={snapshot?.runs ?? EMPTY_RUNS}\n onOpen={() => {\n if (sessionId !== null) openTransientTab(dynamicWorkflowTab());\n }}\n />\n );\n}\n\nexport function DynamicWorkflowPanel({ sessionId, openTransientTab }: WebPluginSlotProps) {\n const snapshot = useWorkflows(sessionId);\n const [now, setNow] = useState(() => Date.now());\n useEffect(() => {\n const timer = setInterval(() => setNow(Date.now()), TICK_MS);\n return () => clearInterval(timer);\n }, []);\n return (\n <DynamicWorkflowView\n runs={snapshot?.runs ?? EMPTY_RUNS}\n now={now}\n onOpenAgent={(runId) => {\n if (sessionId !== null) openTransientTab(workflowAgentTab(runId));\n }}\n />\n );\n}\n","import { defineActivityGroup } from '@agimon-ai/po-core/native';\nimport { WorkflowIcon } from '@agimon-ai/po-native-components';\nimport { createElement } from 'react';\n\nimport { dynamicWorkflowTab } from '../_components/DynamicWorkflowPanel.native';\nimport { workflows } from '../_lib/dynamicWorkflowStore.native';\n\nexport default defineActivityGroup({\n name: 'dynamic workflow',\n keys: '',\n icon: () => createElement(WorkflowIcon),\n order: 35,\n transientTab: dynamicWorkflowTab,\n activeSource: {\n subscribe(listener) {\n const subscription = workflows.store.subscribe(listener);\n return () => subscription.unsubscribe();\n },\n isActive(sessionId) {\n return workflows.select(workflows.store.state, sessionId)?.runs.some((run) => run.status === 'running') ?? false;\n },\n },\n});\n","import { defineChannelFile } from '@agimon-ai/po-core/native';\n\nimport { workflowRunsChannel } from '../_lib/dynamicWorkflowStore.native';\n\nexport default defineChannelFile(workflowRunsChannel);\n","import { defineFill } from '@agimon-ai/po-core/native';\n\nimport { DynamicWorkflowActivitySection } from '../_components/DynamicWorkflowPanel.native';\n\nexport default defineFill({ slot: 'activity.dynamic workflow', component: DynamicWorkflowActivitySection });\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineNativePlugin, type WebPluginContributions } from '@agimon-ai/po-core/native';\n\nimport activityGroupDynamicWorkflow from '../src/extensions/workspaces/sessions/(frontend)/activity-group/dynamic-workflow.native';\nimport channelDynamicWorkflowRuns from '../src/extensions/workspaces/sessions/(frontend)/channel/dynamic-workflow-runs.native';\nimport fillDynamicWorkflow from '../src/extensions/workspaces/sessions/(frontend)/fill/DynamicWorkflow.activity.dynamic-workflow.native';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const nativePlugin = defineNativePlugin({\n id: 'dynamic-workflow',\n session: {\n get activityGroups(): WebPluginContributions['activityGroups'] { return [via({ name: 'dynamic-workflow' }, activityGroupDynamicWorkflow)]; },\n get channels(): WebPluginContributions['channels'] { return [via({ channel: 'dynamic_workflow_runs' }, channelDynamicWorkflowRuns)]; },\n get fills(): WebPluginContributions['fills'] { return [via({ slot: 'activity.dynamic-workflow', id: 'dynamic-workflow' }, fillDynamicWorkflow)]; },\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"native.mjs","names":["Button","Dot","fontOf","StatusBadge","PoNativeTheme","useEffect","useState","AppState","StyleSheet","DynamicWorkflowItem","DynamicWorkflowPhase","DynamicWorkflowRun","DynamicWorkflowShape","DynamicWorkflowActivityProps","DynamicWorkflowViewProps","activitySummary","activityCounts","statusDot","groupSummary","WORKFLOW_STATUS","workflowDuration","Duration","startedAt","finishedAt","running","now","clock","setClock","Date","undefined","timer","ReturnType","setInterval","update","clearInterval","currentState","subscription","addEventListener","remove","styles","dim","DynamicWorkflowActivity","runs","connected","onOpen","run","length","itemTitle","link","map","counts","key","label","activityRow","inline","status","total","activityDetail","done","failed","error","progress","progressDone","width","progressRunning","PhaseTrack","shape","phases","kind","phase","find","entry","tone","leaves","node","some","children","grouped","phaseGroup","phaseSequence","child","ItemRow","item","defaultExpanded","onOpenAgent","runId","expanded","setExpanded","toggle","track","details","detail","title","executionStatus","agents","agent","index","DynamicWorkflowView","defaultExpandedKeys","Omit","screen","content","notice","empty","heading","body","runTitle","groups","group","concurrency","items","includes","truncated","create","theme","minHeight","padding","spacing","gap","uni__dependencies","paddingLeft","height","borderRadius","full","overflow","flexDirection","backgroundColor","colors","deep","green","yellow","flex","bg","flexWrap","alignItems","minWidth","color","text","fontFamily","sans","fontSize","base","lineHeight","flexShrink","hi","fontWeight","semibold","lg","sm","blue","red","borderWidth","borderColor","border","md","paddingVertical","paddingHorizontal","paddingTop","borderTopWidth","borderTopColor","maxWidth","borderLeftWidth","borderLeftColor","activityGroupDynamicWorkflow","channelDynamicWorkflowRuns","fillDynamicWorkflow"],"sources":["../../src/constants/dynamicWorkflow.ts","../../src/extensions/workspaces/sessions/(frontend)/_lib/dynamicWorkflowState.ts","../../src/extensions/workspaces/sessions/(frontend)/_lib/dynamicWorkflowStore.native.ts","../../src/extensions/workspaces/sessions/(frontend)/_components/dynamicWorkflowPresentation.ts","../../src/extensions/workspaces/sessions/(frontend)/_components/DynamicWorkflowView.native.tsx","../../src/extensions/workspaces/sessions/(frontend)/_components/DynamicWorkflowPanel.native.tsx","../../src/extensions/workspaces/sessions/(frontend)/activity-group/dynamic-workflow.native.ts","../../src/extensions/workspaces/sessions/(frontend)/channel/dynamic-workflow-runs.native.ts","../../src/extensions/workspaces/sessions/(frontend)/fill/DynamicWorkflow.activity.dynamic-workflow.native.tsx","../../generated/native.ts"],"sourcesContent":["export const DYNAMIC_WORKFLOW_CHANNEL = 'dynamic_workflow_runs';\n","import type { DynamicWorkflowSnapshot, DynamicWorkflowStatus } from '../../../../../types/dynamicWorkflow';\n\nconst STATUSES: readonly string[] = ['pending', 'running', 'completed', 'failed', 'stopped', 'skipped'];\nconst SHAPE_KINDS = ['step', 'sequence', 'parallel', 'branch', 'foreach'];\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction finite(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\nfunction count(value: unknown): boolean {\n return finite(value) && Number.isSafeInteger(value) && value >= 0;\n}\nfunction status(value: unknown): value is DynamicWorkflowStatus {\n return typeof value === 'string' && STATUSES.includes(value);\n}\nfunction named(value: unknown): value is Record<string, unknown> {\n return record(value) && typeof value.key === 'string' && typeof value.label === 'string';\n}\nfunction timing(value: Record<string, unknown>): boolean {\n return (\n (value.startedAt === undefined || finite(value.startedAt)) &&\n (value.finishedAt === undefined || finite(value.finishedAt)) &&\n (value.error === undefined || typeof value.error === 'string')\n );\n}\nfunction shape(value: unknown, depth = 0): boolean {\n return (\n depth < 128 &&\n named(value) &&\n typeof value.kind === 'string' &&\n SHAPE_KINDS.includes(value.kind) &&\n Array.isArray(value.children) &&\n value.children.every((child: unknown) => shape(child, depth + 1))\n );\n}\nfunction phase(value: unknown): boolean {\n return (\n named(value) &&\n status(value.status) &&\n status(value.executionStatus) &&\n timing(value) &&\n Array.isArray(value.agents) &&\n value.agents.every(\n (agent: unknown) =>\n record(agent) &&\n typeof agent.runId === 'string' &&\n agent.runId.length > 0 &&\n status(agent.status) &&\n agent.status !== 'pending' &&\n agent.status !== 'skipped',\n )\n );\n}\nfunction item(value: unknown): boolean {\n return (\n named(value) &&\n count(value.index) &&\n status(value.status) &&\n Array.isArray(value.phases) &&\n value.phases.every(phase)\n );\n}\nfunction group(value: unknown): boolean {\n return (\n named(value) &&\n count(value.total) &&\n typeof value.truncated === 'boolean' &&\n (value.concurrency === undefined || (count(value.concurrency) && value.concurrency !== 0)) &&\n record(value.counts) &&\n STATUSES.every((key) => count((value.counts as Record<string, unknown>)[key])) &&\n Array.isArray(value.items) &&\n value.items.every(item)\n );\n}\nfunction run(value: unknown): boolean {\n return (\n named(value) &&\n typeof value.workflowId === 'string' &&\n status(value.status) &&\n status(value.executionStatus) &&\n finite(value.startedAt) &&\n timing(value) &&\n shape(value.shape) &&\n Array.isArray(value.groups) &&\n value.groups.every(group)\n );\n}\n\n/** Validate every field the two presentations read before admitting a transport frame. */\nexport function parseWorkflowSnapshot(value: unknown): DynamicWorkflowSnapshot | null {\n if (\n !record(value) ||\n value.version !== 1 ||\n !count(value.revision) ||\n typeof value.sessionId !== 'string' ||\n !Array.isArray(value.runs) ||\n !value.runs.every(run)\n )\n return null;\n return value as unknown as DynamicWorkflowSnapshot;\n}\n\n/** Session identity is checked by the channel before this monotonic fold. */\nexport function nextWorkflowSnapshot(\n current: DynamicWorkflowSnapshot | null,\n next: DynamicWorkflowSnapshot,\n): DynamicWorkflowSnapshot {\n return current !== null && next.revision <= current.revision ? current : next;\n}\n","import { defineSessionChannel, defineSessionStore } from '@agimon-ai/po-core/native';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../../../../constants/dynamicWorkflow';\nimport type { DynamicWorkflowSnapshot } from '../../../../../types/dynamicWorkflow';\nimport { nextWorkflowSnapshot, parseWorkflowSnapshot } from './dynamicWorkflowState';\n\nexport const workflows = defineSessionStore<DynamicWorkflowSnapshot | null>(null);\n\nexport const workflowRunsChannel = defineSessionChannel<DynamicWorkflowSnapshot>({\n channel: DYNAMIC_WORKFLOW_CHANNEL,\n parse: parseWorkflowSnapshot,\n apply(sessionId, snapshot) {\n if (snapshot.sessionId !== sessionId) return;\n workflows.update(sessionId, (current) => nextWorkflowSnapshot(current, snapshot));\n },\n drop(sessionId) {\n workflows.drop(sessionId);\n },\n});\n","import type {\n DynamicWorkflowGroup,\n DynamicWorkflowItem,\n DynamicWorkflowPhase,\n DynamicWorkflowShape,\n DynamicWorkflowRun,\n DynamicWorkflowStatus,\n} from '../../../../../types/dynamicWorkflow';\n\nexport const WORKFLOW_STATUS = {\n pending: { label: 'Pending', tone: 'neutral' },\n running: { label: 'Running', tone: 'running' },\n completed: { label: 'Done', tone: 'ok' },\n failed: { label: 'Failed', tone: 'error' },\n stopped: { label: 'Stopped', tone: 'neutral' },\n skipped: { label: 'Skipped', tone: 'neutral' },\n} as const satisfies Record<DynamicWorkflowStatus, { label: string; tone: string }>;\n\nexport function groupSummary(group: DynamicWorkflowGroup): string {\n const count = (status: DynamicWorkflowStatus) => group.counts[status];\n const parts = [`${count('running')} of ${group.total} running`, `${count('completed')} done`];\n if (count('failed')) parts.push(`${count('failed')} failed`);\n if (count('stopped')) parts.push(`${count('stopped')} stopped`);\n if (count('skipped')) parts.push(`${count('skipped')} skipped`);\n return parts.join(' · ');\n}\n\nexport function activitySummary(runs: DynamicWorkflowRun[]): string {\n if (!runs.length) return 'Workflows appear here when Po starts them.';\n return `${runs.filter((run) => run.status === 'running').length} running · ${runs.filter((run) => run.status !== 'running' && run.status !== 'pending').length} finished`;\n}\n\nexport function workflowDuration(startedAt?: number, finishedAt?: number, now = 0): string {\n if (startedAt === undefined) return 'Not started';\n const seconds = Math.max(0, Math.floor(((finishedAt ?? now) - startedAt) / 1000));\n if (seconds < 60) return `${seconds}s`;\n return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n}\n\nexport interface DynamicWorkflowViewProps {\n runs: DynamicWorkflowRun[];\n now: number;\n connected?: boolean;\n defaultExpandedKeys?: string[];\n onOpenAgent: (runId: string) => void;\n}\n\nexport interface DynamicWorkflowActivityProps {\n runs: DynamicWorkflowRun[];\n connected?: boolean;\n onOpen: () => void;\n}\n\nexport const MAX_GRAPH_ITEM_CELLS = 24;\n\nexport const statusDot = (status: DynamicWorkflowStatus) =>\n status === 'completed' ? 'green' : status === 'running' ? 'yellow' : status === 'failed' ? 'red' : 'neutral';\n\nexport function activityCounts(run: DynamicWorkflowRun) {\n // Root rows describe direct steps, not foreach items.\n const groups = run.groups.filter((group) => group.concurrency !== undefined);\n const total = groups.reduce((sum, group) => sum + group.total, 0);\n const count = (status: DynamicWorkflowStatus) => groups.reduce((sum, group) => sum + group.counts[status], 0);\n return { total, running: count('running'), done: count('completed'), failed: count('failed') };\n}\n\nexport interface WorkflowGraphNode {\n id: string;\n parentId?: string;\n position: { x: number; y: number };\n width: number;\n height: number;\n data: {\n label: string;\n kind: DynamicWorkflowShape['kind'];\n status: DynamicWorkflowStatus;\n phase?: DynamicWorkflowPhase;\n group?: DynamicWorkflowGroup;\n };\n}\nexport interface WorkflowGraphEdge {\n id: string;\n source: string;\n target: string;\n status: DynamicWorkflowStatus;\n}\n\n/** DOM-free series-parallel layout. All child coordinates are relative to their foreach parent. */\nexport function workflowGraph(run: DynamicWorkflowRun) {\n type Box = {\n nodes: WorkflowGraphNode[];\n edges: WorkflowGraphEdge[];\n width: number;\n height: number;\n entry: string[];\n exit: string[];\n };\n const edge = (source: string, target: string, nodes: WorkflowGraphNode[]): WorkflowGraphEdge => ({\n id: `${source}->${target}`,\n source,\n target,\n status: nodes.find((node) => node.id === target)?.data.status ?? 'pending',\n });\n const aggregate = (statuses: DynamicWorkflowStatus[]): DynamicWorkflowStatus =>\n statuses.includes('running')\n ? 'running'\n : statuses.includes('failed')\n ? 'failed'\n : statuses.length &&\n statuses.some((status) => status === 'completed') &&\n statuses.every((status) => status === 'completed' || status === 'skipped')\n ? 'completed'\n : statuses.includes('stopped')\n ? 'stopped'\n : statuses.length && statuses.every((status) => status === 'skipped')\n ? 'skipped'\n : 'pending';\n const layout = (shape: DynamicWorkflowShape, item?: DynamicWorkflowItem, parentId?: string): Box => {\n const id = `${parentId ?? run.key}:${shape.key}`;\n if (shape.kind === 'step') {\n const phase = item?.phases.find((phase) => phase.key === shape.key);\n return {\n nodes: [\n {\n id,\n parentId,\n position: { x: 0, y: 0 },\n width: 200,\n height: phase?.error ? 88 : 64,\n data: { label: shape.label, kind: shape.kind, status: phase?.status ?? 'pending', phase },\n },\n ],\n edges: [],\n width: 200,\n height: phase?.error ? 88 : 64,\n entry: [id],\n exit: [id],\n };\n }\n if (shape.kind === 'foreach') {\n const group = run.groups.find((group) =>\n item ? group.key === `${item.key}/${shape.key}` : group.key.endsWith(`/${shape.key}`),\n );\n const representative = group?.items.find((row) => row.status === 'running') ?? group?.items[0];\n const inner = combine(\n shape.children.map((child) => layout(child, representative, id)),\n false,\n );\n const width = Math.max(360, inner.width + 48);\n const cellRows = Math.ceil(Math.min(group?.items.length ?? 0, MAX_GRAPH_ITEM_CELLS) / 8);\n const height = inner.height + 112 + cellRows * 40 + (group && group.total > MAX_GRAPH_ITEM_CELLS ? 32 : 0);\n const status = group\n ? aggregate(\n Object.entries(group.counts)\n .filter(([, count]) => count > 0)\n .map(([status]) => status as DynamicWorkflowStatus),\n )\n : 'pending';\n const node: WorkflowGraphNode = {\n id,\n parentId,\n position: { x: 0, y: 0 },\n width,\n height,\n data: { label: shape.label, kind: shape.kind, status, group },\n };\n inner.nodes.forEach((node) => {\n if (node.parentId === id) {\n node.position.x += (width - inner.width) / 2;\n node.position.y += 72;\n }\n });\n return { nodes: [node, ...inner.nodes], edges: inner.edges, width, height, entry: [id], exit: [id] };\n }\n const children = shape.children.map((child) => layout(child, item, parentId));\n const box = combine(children, shape.kind !== 'sequence');\n if (shape.kind !== 'branch') return box;\n box.nodes.forEach((node) => {\n if (node.parentId === parentId) node.position.y += 144;\n });\n const status = aggregate(\n children.flatMap((child) =>\n child.nodes.filter((node) => node.parentId === parentId).map((node) => node.data.status),\n ),\n );\n const node: WorkflowGraphNode = {\n id,\n parentId,\n position: { x: (box.width - 160) / 2, y: 0 },\n width: 160,\n height: 96,\n data: { label: 'Branch', kind: 'branch', status },\n };\n box.edges.push(...box.entry.map((target) => edge(id, target, box.nodes)));\n return { ...box, nodes: [node, ...box.nodes], height: box.height + 144, entry: [id] };\n };\n function combine(boxes: Box[], horizontal: boolean): Box {\n const width = horizontal\n ? boxes.reduce((sum, box) => sum + box.width, 0) + Math.max(0, boxes.length - 1) * 48\n : Math.max(200, ...boxes.map((box) => box.width));\n const nodes: WorkflowGraphNode[] = [],\n edges: WorkflowGraphEdge[] = [];\n let offset = 0;\n boxes.forEach((box, index) => {\n const roots = new Set(box.nodes.map((node) => node.id));\n box.nodes.forEach((node) => {\n if (!node.parentId || !roots.has(node.parentId)) {\n node.position.x += horizontal ? offset : (width - box.width) / 2;\n node.position.y += horizontal ? 0 : offset;\n }\n });\n nodes.push(...box.nodes);\n edges.push(...box.edges);\n if (!horizontal && index)\n for (const source of boxes[index - 1].exit)\n for (const target of box.entry) edges.push(edge(source, target, box.nodes));\n offset += (horizontal ? box.width : box.height) + 48;\n });\n return {\n nodes,\n edges,\n width,\n height: horizontal ? Math.max(0, ...boxes.map((box) => box.height)) : Math.max(0, offset - 48),\n entry: horizontal ? boxes.flatMap((box) => box.entry) : (boxes[0]?.entry ?? []),\n exit: horizontal ? boxes.flatMap((box) => box.exit) : (boxes.at(-1)?.exit ?? []),\n };\n }\n const root = run.groups\n .flatMap((group) => group.items)\n .find((item) =>\n item.phases.some((phase) => {\n const direct = (shape: DynamicWorkflowShape): boolean =>\n shape.kind === 'foreach' ? false : shape.key === phase.key || shape.children.some(direct);\n return direct(run.shape);\n }),\n );\n return layout(run.shape, root);\n}\n","import { Button, Dot, fontOf, StatusBadge } from '@agimon-ai/po-native-components';\nimport type { PoNativeTheme } from '@agimon-ai/po-web-components/nativeTheme';\nimport { useEffect, useState } from 'react';\nimport { AppState, Pressable, ScrollView, Text, View } from 'react-native';\nimport { StyleSheet } from 'react-native-unistyles';\n\nimport type {\n DynamicWorkflowItem,\n DynamicWorkflowPhase,\n DynamicWorkflowRun,\n DynamicWorkflowShape,\n} from '../../../../../types/dynamicWorkflow';\nimport {\n type DynamicWorkflowActivityProps,\n type DynamicWorkflowViewProps,\n activitySummary,\n activityCounts,\n statusDot,\n groupSummary,\n WORKFLOW_STATUS,\n workflowDuration,\n} from './dynamicWorkflowPresentation';\n\n/** Only a visible running duration ticks, not its surrounding workflow tree. */\nfunction Duration({\n startedAt,\n finishedAt,\n running,\n now,\n}: {\n startedAt?: number;\n finishedAt?: number;\n running: boolean;\n now?: number;\n}) {\n const [clock, setClock] = useState(() => Date.now());\n useEffect(() => {\n if (now !== undefined || !running || startedAt === undefined || finishedAt !== undefined) return;\n let timer: ReturnType<typeof setInterval> | undefined;\n const update = () => {\n clearInterval(timer);\n if (AppState.currentState !== 'active') return;\n setClock(Date.now());\n timer = setInterval(() => setClock(Date.now()), 1000);\n };\n const subscription = AppState.addEventListener('change', update);\n update();\n return () => {\n clearInterval(timer);\n subscription.remove();\n };\n }, [startedAt, finishedAt, running, now]);\n return <Text style={styles.dim}>{workflowDuration(startedAt, finishedAt, now ?? clock)}</Text>;\n}\n\nexport function DynamicWorkflowActivity({ runs, connected = true, onOpen }: DynamicWorkflowActivityProps) {\n return (\n <View style={styles.run}>\n <Text style={styles.dim}>{connected ? activitySummary(runs) : 'Connection paused. Showing last update.'}</Text>\n {!runs.length && (\n <Button variant=\"ghost\" size=\"card\" onPress={onOpen} accessibilityLabel=\"Open dynamic workflows\">\n <Text style={styles.itemTitle}>No workflows yet</Text>\n <Text style={styles.dim}>Idle</Text>\n <Text style={styles.link}>View workflows →</Text>\n </Button>\n )}\n {runs.map((run) => {\n const counts = activityCounts(run);\n return (\n <Pressable\n key={run.key}\n onPress={onOpen}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${run.label}`}\n style={styles.activityRow}\n >\n <View style={styles.inline}>\n <Dot tone={statusDot(run.status)} size=\"md\" />\n <Text style={styles.itemTitle}>{run.label}</Text>\n <Text style={styles.dim}>{WORKFLOW_STATUS[run.status].label} ›</Text>\n </View>\n {counts.total > 0 && (\n <View style={styles.activityDetail}>\n <Text style={styles.dim}>\n {run.status === 'running' ? `${counts.running} of ${counts.total} running` : `${counts.total} items`}{' '}\n · {counts.done} done{counts.failed > 0 && <Text style={styles.error}> · {counts.failed} failed</Text>}\n </Text>\n <View\n style={styles.progress}\n accessibilityLabel={`${counts.done} done, ${counts.running} running, ${counts.total} total`}\n >\n <View style={[styles.progressDone, { width: `${(counts.done / counts.total) * 100}%` }]} />\n <View style={[styles.progressRunning, { width: `${(counts.running / counts.total) * 100}%` }]} />\n </View>\n </View>\n )}\n </Pressable>\n );\n })}\n </View>\n );\n}\n\nfunction PhaseTrack({ shape, phases }: { shape: DynamicWorkflowShape; phases: DynamicWorkflowPhase[] }) {\n if (shape.kind === 'step') {\n const phase = phases.find((entry) => entry.key === shape.key);\n return phase ? (\n <View style={styles.phase}>\n <StatusBadge tone={WORKFLOW_STATUS[phase.status].tone}>\n {phase.label} · {WORKFLOW_STATUS[phase.status].label}\n </StatusBadge>\n </View>\n ) : null;\n }\n const leaves = (node: DynamicWorkflowShape): boolean =>\n node.kind === 'step' ? phases.some((phase) => phase.key === node.key) : node.children.some(leaves);\n if (!leaves(shape)) return null;\n const grouped = shape.kind === 'parallel' || shape.kind === 'branch';\n return (\n <View style={grouped ? styles.phaseGroup : styles.phaseSequence}>\n {grouped && <Text style={styles.dim}>{shape.kind === 'parallel' ? 'Parallel' : 'Branch'}</Text>}\n {shape.children.map((child) => (\n <PhaseTrack key={child.key} shape={child} phases={phases} />\n ))}\n </View>\n );\n}\n\nfunction ItemRow({\n item,\n run,\n now,\n defaultExpanded,\n onOpenAgent,\n}: {\n item: DynamicWorkflowItem;\n run: DynamicWorkflowRun;\n now?: number;\n defaultExpanded: boolean;\n onOpenAgent: (runId: string) => void;\n}) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n return (\n <View style={styles.item}>\n <Pressable\n onPress={() => setExpanded(!expanded)}\n accessibilityRole=\"button\"\n accessibilityLabel={`${item.label}, ${WORKFLOW_STATUS[item.status].label}`}\n accessibilityState={{ expanded }}\n style={styles.toggle}\n >\n <Text style={styles.dim}>{expanded ? '▾' : '▸'}</Text>\n <Text style={styles.itemTitle}>{item.label}</Text>\n <StatusBadge tone={WORKFLOW_STATUS[item.status].tone}>{WORKFLOW_STATUS[item.status].label}</StatusBadge>\n </Pressable>\n <View style={styles.track}>\n <PhaseTrack shape={run.shape} phases={item.phases} />\n </View>\n {expanded && (\n <View style={styles.details}>\n {item.phases.map((phase) => (\n <View key={phase.key} style={styles.detail}>\n <View style={styles.inline}>\n <Text style={styles.title}>{phase.label}</Text>\n <Duration\n startedAt={phase.startedAt}\n finishedAt={phase.finishedAt}\n running={phase.status === 'running'}\n now={now}\n />\n </View>\n {phase.executionStatus !== phase.status && (\n <Text style={styles.dim}>Step: {WORKFLOW_STATUS[phase.executionStatus].label}</Text>\n )}\n {phase.error && (\n <Text\n accessibilityRole={phase.status === 'failed' ? 'alert' : undefined}\n style={phase.status === 'failed' ? styles.error : styles.dim}\n >\n {phase.error}\n </Text>\n )}\n {phase.agents.map((agent, index) => (\n <View key={agent.runId} style={styles.inline}>\n <Button\n variant=\"link\"\n size=\"sm\"\n onPress={() => onOpenAgent(agent.runId)}\n accessibilityLabel={`Open ${phase.label} agent ${index + 1} transcript`}\n >\n Agent {index + 1} transcript ↗\n </Button>\n <StatusBadge tone={WORKFLOW_STATUS[agent.status].tone}>\n {WORKFLOW_STATUS[agent.status].label}\n </StatusBadge>\n </View>\n ))}\n {!phase.agents.length && <Text style={styles.dim}>No agent transcript</Text>}\n </View>\n ))}\n </View>\n )}\n </View>\n );\n}\n\nexport function DynamicWorkflowView({\n runs,\n now,\n connected = true,\n defaultExpandedKeys = [],\n onOpenAgent,\n}: Omit<DynamicWorkflowViewProps, 'now'> & { now?: number }) {\n return (\n <ScrollView style={styles.screen} contentContainerStyle={styles.content} accessibilityLabel=\"Dynamic workflows\">\n {!connected && (\n <Text accessibilityRole=\"alert\" style={styles.notice}>\n Connection paused. These are the last reported workflow states.\n </Text>\n )}\n {!runs.length && (\n <View style={styles.empty}>\n <Text accessibilityRole=\"header\" style={styles.heading}>\n No workflows yet\n </Text>\n <Text style={styles.body}>\n Workflows appear here when Po starts them. You can carry on with your conversation.\n </Text>\n </View>\n )}\n {runs.map((run) => (\n <View key={run.key} style={styles.run}>\n <View style={styles.inline}>\n <Text accessibilityRole=\"header\" style={styles.runTitle}>\n {run.label}\n </Text>\n <StatusBadge tone={WORKFLOW_STATUS[run.status].tone}>{WORKFLOW_STATUS[run.status].label}</StatusBadge>\n </View>\n <Text style={styles.dim}>\n <Duration\n startedAt={run.startedAt}\n finishedAt={run.finishedAt}\n running={run.status === 'running'}\n now={now}\n />\n {run.executionStatus !== run.status\n ? ` · Workflow execution: ${WORKFLOW_STATUS[run.executionStatus].label}`\n : ''}\n </Text>\n {run.error && (\n <Text\n accessibilityRole={run.status === 'failed' ? 'alert' : undefined}\n style={run.status === 'failed' ? styles.error : styles.dim}\n >\n {run.error}\n </Text>\n )}\n {run.groups.map((group) => (\n <View key={group.key} style={styles.group}>\n <Text accessibilityRole=\"header\" style={styles.title}>\n {group.label}\n </Text>\n <Text style={styles.dim}>\n {groupSummary(group)}\n {group.concurrency ? ` · Up to ${group.concurrency} at once` : ''}\n </Text>\n {group.items.map((item) => (\n <ItemRow\n key={item.key}\n item={item}\n run={run}\n now={now}\n defaultExpanded={defaultExpandedKeys.includes(item.key)}\n onOpenAgent={onOpenAgent}\n />\n ))}\n {group.truncated && (\n <Text style={styles.dim}>\n Showing {group.items.length} of {group.total} items.\n </Text>\n )}\n </View>\n ))}\n </View>\n ))}\n </ScrollView>\n );\n}\n\nconst styles = StyleSheet.create((theme: PoNativeTheme) => ({\n activityRow: { minHeight: 44, padding: theme.spacing(3), gap: theme.spacing(2) },\n activityDetail: { paddingLeft: theme.spacing(5), gap: theme.spacing(2) },\n progress: {\n height: 6,\n borderRadius: theme.borderRadius.full,\n overflow: 'hidden',\n flexDirection: 'row',\n backgroundColor: theme.colors.deep,\n },\n progressDone: { backgroundColor: theme.colors.green },\n progressRunning: { backgroundColor: theme.colors.yellow },\n screen: { flex: 1, minHeight: 0, backgroundColor: theme.colors.bg },\n content: { padding: theme.spacing(4), gap: theme.spacing(6) },\n run: { gap: theme.spacing(2) },\n inline: { flexDirection: 'row', flexWrap: 'wrap', alignItems: 'center', gap: theme.spacing(1.5), minWidth: 0 },\n body: {\n color: theme.colors.text,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n flexShrink: 1,\n },\n title: {\n color: theme.colors.hi,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n fontWeight: theme.fontWeight.semibold,\n flexShrink: 1,\n },\n heading: {\n color: theme.colors.hi,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.lg,\n lineHeight: theme.lineHeight.lg,\n fontWeight: theme.fontWeight.semibold,\n },\n runTitle: {\n color: theme.colors.hi,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.lg,\n lineHeight: theme.lineHeight.lg,\n fontWeight: theme.fontWeight.semibold,\n flex: 1,\n minWidth: 0,\n },\n itemTitle: {\n color: theme.colors.hi,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n fontWeight: theme.fontWeight.semibold,\n flex: 1,\n minWidth: 0,\n },\n dim: {\n color: theme.colors.dim,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.sm,\n lineHeight: theme.lineHeight.sm,\n flexShrink: 1,\n },\n link: {\n color: theme.colors.blue,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.sm,\n lineHeight: theme.lineHeight.sm,\n },\n error: {\n color: theme.colors.red,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.sm,\n lineHeight: theme.lineHeight.sm,\n },\n notice: {\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderRadius: theme.borderRadius.md,\n padding: theme.spacing(3),\n color: theme.colors.dim,\n fontFamily: fontOf(theme.fontFamily.sans),\n fontSize: theme.fontSize.base,\n lineHeight: theme.lineHeight.base,\n },\n empty: { paddingVertical: theme.spacing(6), gap: theme.spacing(2) },\n group: {\n minWidth: 0,\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderRadius: theme.borderRadius.md,\n paddingHorizontal: theme.spacing(3),\n paddingTop: theme.spacing(3),\n gap: theme.spacing(2),\n },\n item: {\n minWidth: 0,\n borderTopWidth: 1,\n borderTopColor: theme.colors['border-soft'],\n paddingVertical: theme.spacing(3),\n gap: theme.spacing(2),\n },\n toggle: { minHeight: 44, flexDirection: 'row', alignItems: 'center', gap: theme.spacing(2) },\n track: { minWidth: 0, paddingLeft: theme.spacing(4) },\n phaseSequence: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: theme.spacing(1.5),\n minWidth: 0,\n width: '100%',\n maxWidth: '100%',\n flexShrink: 1,\n },\n phase: { maxWidth: '100%', flexShrink: 1 },\n phaseGroup: {\n minWidth: 0,\n maxWidth: '100%',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderRadius: theme.borderRadius.md,\n padding: theme.spacing(1.5),\n },\n details: {\n borderLeftWidth: 1,\n borderLeftColor: theme.colors.border,\n paddingLeft: theme.spacing(3),\n gap: theme.spacing(3),\n },\n detail: { gap: theme.spacing(1) },\n}));\n","import type { WebPluginSlotProps } from '@agimon-ai/po-core/native';\nimport { useCallback, useSyncExternalStore } from 'react';\n\nimport type { DynamicWorkflowRun } from '../../../../../types/dynamicWorkflow';\nimport { workflows } from '../_lib/dynamicWorkflowStore.native';\nimport { DynamicWorkflowActivity, DynamicWorkflowView } from './DynamicWorkflowView.native';\n\nconst EMPTY_RUNS: DynamicWorkflowRun[] = [];\n\ntype WorkflowTab = Parameters<WebPluginSlotProps['openTransientTab']>[0];\n\nexport function dynamicWorkflowTab(): WorkflowTab {\n return { id: 'dynamic-workflow-runs', label: 'Dynamic workflows', panel: DynamicWorkflowPanel, retainComposer: true };\n}\n\nexport function workflowAgentTab(runId: string): WorkflowTab {\n return {\n id: `dynamic-workflow-agent-${encodeURIComponent(runId)}`,\n label: 'Agent transcript',\n panel: ({ renderThread }) => <>{renderThread(runId)}</>,\n retainComposer: true,\n };\n}\n\nfunction useWorkflows(sessionId: string | null) {\n const subscribe = useCallback((listener: () => void) => {\n const subscription = workflows.store.subscribe(listener);\n return () => subscription.unsubscribe();\n }, []);\n return useSyncExternalStore(subscribe, () => workflows.select(workflows.store.state, sessionId));\n}\n\nexport function DynamicWorkflowActivitySection({ sessionId, openTransientTab }: WebPluginSlotProps) {\n const snapshot = useWorkflows(sessionId);\n return (\n <DynamicWorkflowActivity\n runs={snapshot?.runs ?? EMPTY_RUNS}\n onOpen={() => {\n if (sessionId !== null) openTransientTab(dynamicWorkflowTab());\n }}\n />\n );\n}\n\nexport function DynamicWorkflowPanel({ sessionId, openTransientTab }: WebPluginSlotProps) {\n const snapshot = useWorkflows(sessionId);\n return (\n <DynamicWorkflowView\n runs={snapshot?.runs ?? EMPTY_RUNS}\n onOpenAgent={(runId) => {\n if (sessionId !== null) openTransientTab(workflowAgentTab(runId));\n }}\n />\n );\n}\n","import { defineActivityGroup } from '@agimon-ai/po-core/native';\nimport { WorkflowIcon } from '@agimon-ai/po-native-components';\nimport { createElement } from 'react';\n\nimport { dynamicWorkflowTab } from '../_components/DynamicWorkflowPanel.native';\nimport { workflows } from '../_lib/dynamicWorkflowStore.native';\n\nexport default defineActivityGroup({\n name: 'dynamic workflow',\n keys: '',\n icon: () => createElement(WorkflowIcon),\n order: 35,\n transientTab: dynamicWorkflowTab,\n activeSource: {\n subscribe(listener) {\n const subscription = workflows.store.subscribe(listener);\n return () => subscription.unsubscribe();\n },\n isActive(sessionId) {\n return workflows.select(workflows.store.state, sessionId)?.runs.some((run) => run.status === 'running') ?? false;\n },\n },\n});\n","import { defineChannelFile } from '@agimon-ai/po-core/native';\n\nimport { workflowRunsChannel } from '../_lib/dynamicWorkflowStore.native';\n\nexport default defineChannelFile(workflowRunsChannel);\n","import { defineFill } from '@agimon-ai/po-core/native';\n\nimport { DynamicWorkflowActivitySection } from '../_components/DynamicWorkflowPanel.native';\n\nexport default defineFill({ slot: 'activity.dynamic workflow', component: DynamicWorkflowActivitySection });\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineNativePlugin, type WebPluginContributions } from '@agimon-ai/po-core/native';\n\nimport activityGroupDynamicWorkflow from '../src/extensions/workspaces/sessions/(frontend)/activity-group/dynamic-workflow.native';\nimport channelDynamicWorkflowRuns from '../src/extensions/workspaces/sessions/(frontend)/channel/dynamic-workflow-runs.native';\nimport fillDynamicWorkflow from '../src/extensions/workspaces/sessions/(frontend)/fill/DynamicWorkflow.activity.dynamic-workflow.native';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const nativePlugin = defineNativePlugin({\n id: 'dynamic-workflow',\n session: {\n get activityGroups(): WebPluginContributions['activityGroups'] { return [via({ name: 'dynamic-workflow' }, activityGroupDynamicWorkflow)]; },\n get channels(): WebPluginContributions['channels'] { return [via({ channel: 'dynamic_workflow_runs' }, channelDynamicWorkflowRuns)]; },\n get fills(): WebPluginContributions['fills'] { return [via({ slot: 'activity.dynamic-workflow', id: 'dynamic-workflow' }, fillDynamicWorkflow)]; },\n },\n});\n"],"mappings":"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"}
|
|
@@ -833,7 +833,7 @@ var dynamic_workflow_runs_server_default = (0, _agimon_ai_po_core_extensionFile.
|
|
|
833
833
|
//#region src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server.ts
|
|
834
834
|
var codemode_how_to_dynamic_workflow_server_default = (0, _agimon_ai_po_core_extensionFile.defineResource)({
|
|
835
835
|
name: "codemode-how-to-dynamic-workflow",
|
|
836
|
-
description: "
|
|
836
|
+
description: "Let the person follow a long multi-phase or fan-out job live, with each child agent transcript in Activity. Use when a script runs many steps or subagents that someone should be able to watch.",
|
|
837
837
|
kind: "skill",
|
|
838
838
|
pinned: true,
|
|
839
839
|
path: (0, _agimon_ai_po_core_serverPlugin.packageResourcePath)(require("url").pathToFileURL(__filename).href, "src/prompts/codemode-how-to-dynamic-workflow/SKILL.md"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.cjs","names":["require","createRequire","AsyncLocalStorage","defineRoot","PO_TEAM_INLINE_RUN_EVENT","PO_CODEMODE_SERVICE","readPoCodemode","defineChannel","defineResource","packageResourcePath","readPackageResource","defineServerPlugin","composeServerProviderOverrides","rootSession","composeRootInjects","channelDynamicWorkflowRuns","composeRootHooks","resourceCodemodeHowToDynamicWorkflow"],"sources":["../../src/constants/dynamicWorkflow.ts","../../src/constants/declarations.ts","../../src/services/workflowTracker/index.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/services/workflowChannel/index.ts","../../src/extensions/(backend)/channel/dynamic-workflow-runs.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server.ts","../../generated/server.ts"],"sourcesContent":["export const DYNAMIC_WORKFLOW_CHANNEL = 'dynamic_workflow_runs';\n","export const dynamicWorkflowDeclarations = `\ninterface WorkflowSchema<T> {\n readonly _output: T;\n parse(value: unknown): T;\n optional(): WorkflowSchema<T | undefined>;\n nullable(): WorkflowSchema<T | null>;\n default(value: T): WorkflowSchema<T>;\n array(): WorkflowSchema<T[]>;\n describe(text: string): WorkflowSchema<T>;\n min(value: number): WorkflowSchema<T>;\n max(value: number): WorkflowSchema<T>;\n int(): WorkflowSchema<T>;\n positive(): WorkflowSchema<T>;\n nonnegative(): WorkflowSchema<T>;\n trim(): WorkflowSchema<T>;\n}\ntype WorkflowSchemaOutput<S> = S extends WorkflowSchema<infer T> ? T : never;\ntype WorkflowObject<S extends Record<string, WorkflowSchema<unknown>>> =\n { [K in keyof S as undefined extends WorkflowSchemaOutput<S[K]> ? never : K]: WorkflowSchemaOutput<S[K]> } &\n { [K in keyof S as undefined extends WorkflowSchemaOutput<S[K]> ? K : never]?: WorkflowSchemaOutput<S[K]> };\ninterface WorkflowZod {\n string(): WorkflowSchema<string>;\n number(): WorkflowSchema<number>;\n boolean(): WorkflowSchema<boolean>;\n null(): WorkflowSchema<null>;\n unknown(): WorkflowSchema<unknown>;\n any(): WorkflowSchema<unknown>;\n literal<T extends string | number | boolean | null>(value: T): WorkflowSchema<T>;\n enum<T extends string>(values: readonly [T, ...T[]]): WorkflowSchema<T>;\n object<S extends Record<string, WorkflowSchema<unknown>>>(shape: S): WorkflowSchema<WorkflowObject<S>>;\n array<T>(item: WorkflowSchema<T>): WorkflowSchema<T[]>;\n record<T>(item: WorkflowSchema<T>): WorkflowSchema<Record<string,T>>;\n union<S extends readonly [WorkflowSchema<unknown>, WorkflowSchema<unknown>, ...WorkflowSchema<unknown>[]]>(schemas: S): WorkflowSchema<WorkflowSchemaOutput<S[number]>>;\n}\ninterface WorkflowExecute<I> {\n inputData: I;\n runId: string;\n abortSignal: AbortSignal;\n getInitData(): unknown;\n}\ninterface TrackedStep<I = unknown, O = unknown, Id extends string = string> {\n readonly id: Id;\n readonly __input?: I;\n readonly __output?: O;\n}\ninterface TrackedRun<I, O> {\n readonly runId: string;\n start(options: { inputData: I }): Promise<{ status: string; result?: O; error?: unknown }>;\n cancel(): Promise<void>;\n}\ninterface TrackedWorkflow<I, O, Current = I> extends TrackedStep<I,O> {\n then<T>(step: TrackedStep<Current,T>): TrackedWorkflow<I,O,T>;\n parallel<T extends readonly TrackedStep<Current,unknown>[]>(steps: T): TrackedWorkflow<I,O,Record<T[number]['id'],T[number] extends TrackedStep<Current,infer Out> ? Out : never>>;\n branch(choices: [((params: WorkflowExecute<Current>) => boolean | Promise<boolean>), TrackedStep<Current,unknown>][]): TrackedWorkflow<I,O,Record<string,unknown>>;\n foreach<T, U, C>(item: TrackedWorkflow<T,U,C>, options: { concurrency: number }): TrackedWorkflow<I,O,U[]>;\n commit(): TrackedWorkflow<I,O,Current>;\n createRun(): Promise<TrackedRun<I,O>>;\n}\ndeclare const dynamicWorkflow: {\n createStep<I,O,Id extends string>(options: { id: Id; description?: string; inputSchema: WorkflowSchema<I>; outputSchema: WorkflowSchema<O>; execute: (params: WorkflowExecute<I>) => O | Promise<O> }): TrackedStep<I,O,Id>;\n createWorkflow<I,O>(options: { id: string; description?: string; inputSchema: WorkflowSchema<I>; outputSchema: WorkflowSchema<O> }): TrackedWorkflow<I,O>;\n /** Zod 3.25.76. Common constructors are declared here; runtime supplies the real z object. */\n z: WorkflowZod;\n};`;\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createRequire } from 'node:module';\n\nimport type { PoCodemodeRun } from '@agimon-ai/po-core/codemode';\nimport type * as Zod from 'zod';\n\nimport { dynamicWorkflowDeclarations } from '../../constants/declarations';\nimport type {\n DynamicWorkflowGroup,\n DynamicWorkflowItem,\n DynamicWorkflowPhase,\n DynamicWorkflowRun,\n DynamicWorkflowShape,\n DynamicWorkflowSnapshot,\n DynamicWorkflowStatus,\n} from '../../types/dynamicWorkflow';\nimport type { WorkflowTracker, WorkflowTrackerOptions } from './type';\n\ninterface RawStep {\n id: string;\n execute: (params: Record<string, unknown>) => Promise<unknown>;\n}\ninterface RawRun {\n runId: string;\n start: (options: Record<string, unknown>) => Promise<Record<string, unknown>>;\n cancel: () => Promise<unknown>;\n}\ninterface RawWorkflow extends RawStep {\n then(step: RawStep): RawWorkflow;\n parallel(steps: RawStep[]): RawWorkflow;\n branch(steps: [(params: Record<string, unknown>) => Promise<boolean>, RawStep][]): RawWorkflow;\n foreach(step: RawWorkflow, options: { concurrency: (params: { inputData: unknown }) => number }): RawWorkflow;\n commit(): RawWorkflow;\n createRun(options?: Record<string, unknown>): Promise<RawRun>;\n}\ninterface Factories {\n createStep(options: Record<string, unknown>): RawStep;\n createWorkflow(options: Record<string, unknown>): RawWorkflow;\n z: typeof Zod.z;\n}\ninterface Definition {\n raw: RawStep;\n shape: DynamicWorkflowShape;\n workflow?: {\n raw: RawWorkflow;\n committed: boolean;\n foreach: Map<string, DynamicWorkflowShape>;\n nested: Map<string, DynamicWorkflowShape>;\n };\n}\ninterface Execution {\n root: DynamicWorkflowRun;\n definition: Definition;\n item: DynamicWorkflowItem;\n boundaryErrors: string[];\n shape: DynamicWorkflowShape;\n}\ninterface PhaseOwner {\n execution: Execution;\n phase: DynamicWorkflowPhase;\n}\n\nconst object = (value: unknown, name: string): Record<string, unknown> => {\n if (value === null || typeof value !== 'object' || Array.isArray(value))\n throw new Error(`${name} must be an object.`);\n return value as Record<string, unknown>;\n};\nconst options = (value: unknown, keys: string[], name: string): Record<string, unknown> => {\n const result = object(value, name);\n for (const key of Object.keys(result))\n if (!keys.includes(key)) throw new Error(`${name}.${key} is not supported by tracked workflows.`);\n return result;\n};\nconst label = (value: unknown): string => {\n if (typeof value !== 'string' || !value.trim() || value.length > 160)\n throw new Error('Workflow and step ids must be non-empty strings of at most 160 characters.');\n return value;\n};\nconst callbackParameters = (params: Record<string, unknown>): Record<string, unknown> => ({\n inputData: params.inputData,\n runId: params.runId,\n abortSignal: params.abortSignal,\n ...(typeof params.getInitData === 'function' ? { getInitData: params.getInitData } : {}),\n});\n/** Reject the host wrapper on abort; late guest settlement cannot write tracked state. */\nconst callbackWithAbort = (callback: () => unknown, signal: AbortSignal): Promise<unknown> => {\n signal.throwIfAborted();\n return new Promise((resolve, reject) => {\n const abort = () => {\n signal.removeEventListener('abort', abort);\n reject(signal.reason);\n };\n signal.addEventListener('abort', abort, { once: true });\n Promise.resolve()\n .then(() => {\n signal.throwIfAborted();\n return callback();\n })\n .then(\n (value) => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n (error) => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n};\nconst callbackSignal = (binding: AbortSignal, params: Record<string, unknown>): AbortSignal =>\n params.abortSignal instanceof AbortSignal ? AbortSignal.any([binding, params.abortSignal]) : binding;\nconst validateDefinition = (def: Record<string, unknown>) => {\n if (def.description !== undefined && (typeof def.description !== 'string' || def.description.length > 500))\n throw new Error('description must be a string of at most 500 characters.');\n for (const field of ['inputSchema', 'outputSchema']) {\n const schema = object(def[field], field);\n if (typeof schema.safeParse !== 'function') throw new Error(`${field} must be a Zod schema.`);\n }\n};\nconst errorText = (error: unknown): string =>\n (error && typeof error === 'object' && 'message' in error && typeof error.message === 'string'\n ? error.message\n : String(error)\n ).slice(0, 500);\nconst status = (value: unknown): DynamicWorkflowStatus => {\n if (value === 'success') return 'completed';\n if (value === 'canceled' || value === 'cancelled') return 'stopped';\n if (value === 'failed') return 'failed';\n throw new Error(`Unsupported Mastra result status: ${String(value)}.`);\n};\nconst counts = (): Record<DynamicWorkflowStatus, number> => ({\n pending: 0,\n running: 0,\n completed: 0,\n failed: 0,\n stopped: 0,\n skipped: 0,\n});\n/** Mastra executes. This observer only decorates constructors and lifecycle calls. */\nexport async function createWorkflowTracker(config: WorkflowTrackerOptions): Promise<WorkflowTracker> {\n let factories: Factories | undefined;\n const loadFactories = (): Factories => {\n if (!factories) {\n const require = createRequire(import.meta.url);\n const workflow = require('@mastra/core/workflows') as Pick<Factories, 'createStep' | 'createWorkflow'>;\n const schemas = require('zod') as Pick<Factories, 'z'>;\n factories = { ...workflow, z: schemas.z };\n }\n return factories;\n };\n const now = config.now ?? Date.now;\n const roots: DynamicWorkflowRun[] = [];\n const context = new AsyncLocalStorage<PhaseOwner>();\n const runContext = new AsyncLocalStorage<Execution>();\n const children = new Map<string, PhaseOwner>();\n const boundaryFailures = new WeakSet<DynamicWorkflowPhase>();\n const intentionalStops = new WeakSet<DynamicWorkflowPhase>();\n let revision = 0;\n let serial = 0;\n let disposed = false;\n const key = () => `workflow-${++serial}`;\n const origins = new WeakMap<DynamicWorkflowShape, string>();\n const origin = (shape: DynamicWorkflowShape) => origins.get(shape) ?? shape.key;\n const occurrence = (shape: DynamicWorkflowShape): DynamicWorkflowShape => {\n const result = { ...shape, key: key(), children: shape.children.map(occurrence) };\n origins.set(result, origin(shape));\n return result;\n };\n const findShape = (shape: DynamicWorkflowShape, source: DynamicWorkflowShape): DynamicWorkflowShape | undefined => {\n if (origin(shape) === origin(source)) return shape;\n for (const child of shape.children) {\n const found = findShape(child, source);\n if (found) return found;\n }\n return undefined;\n };\n const directSteps = (shape: DynamicWorkflowShape): DynamicWorkflowShape[] => {\n const result: DynamicWorkflowShape[] = [];\n const visit = (node: DynamicWorkflowShape): void => {\n if (node.kind === 'step') result.push(node);\n else if (node.kind === 'parallel' || node.kind === 'branch') node.children.forEach(visit);\n };\n shape.children.forEach(visit);\n return result;\n };\n const snapshot = (): DynamicWorkflowSnapshot =>\n structuredClone({\n version: 1,\n revision,\n sessionId: config.sessionId,\n runs: roots.map((run) => ({\n ...run,\n groups: run.groups.map((group) => ({\n ...group,\n counts: group.items.reduce((sum, item) => {\n sum[item.status]++;\n return sum;\n }, counts()),\n truncated: group.items.length > 1000,\n items: group.items.slice(0, 1000),\n })),\n })),\n });\n const publish = () => {\n revision++;\n // Observers cannot change workflow execution or strand a running item.\n try {\n config.publish?.(snapshot());\n } catch {\n /* Publication is best effort. */\n }\n };\n const derive = (phase: DynamicWorkflowPhase) => {\n phase.status =\n boundaryFailures.has(phase) || phase.agents.some((agent) => agent.status === 'failed')\n ? 'failed'\n : intentionalStops.has(phase)\n ? 'stopped'\n : phase.executionStatus;\n };\n const summarize = (item: DynamicWorkflowItem) => {\n item.status = item.phases.some((phase) => phase.status === 'failed')\n ? 'failed'\n : item.phases.some((phase) => phase.status === 'running')\n ? 'running'\n : item.phases.some((phase) => phase.status === 'stopped')\n ? 'stopped'\n : item.phases.every((phase) => phase.status === 'skipped')\n ? 'skipped'\n : item.phases.some((phase) => phase.status === 'pending')\n ? 'pending'\n : 'completed';\n };\n const update = (owner: PhaseOwner) => {\n derive(owner.phase);\n summarize(owner.execution.item);\n publish();\n };\n const terminal = (execution: Execution, outcome: DynamicWorkflowStatus, root: boolean, engineOutcome = outcome) => {\n const relevant = new Set<string>();\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'foreach') return;\n if (shape.kind === 'step') relevant.add(shape.key);\n else shape.children.forEach(visit);\n };\n visit(execution.shape);\n for (const phase of execution.item.phases) {\n if (!root && !relevant.has(phase.key)) continue;\n if (phase.executionStatus === 'pending') phase.executionStatus = 'skipped';\n else if (phase.executionStatus === 'running') phase.executionStatus = outcome;\n derive(phase);\n }\n if (execution.item.phases.length) summarize(execution.item);\n else execution.item.status = outcome;\n if (\n execution.root.groups.some(\n (group) =>\n group.key.startsWith(`${execution.item.key}/`) && group.items.some((item) => item.status === 'failed'),\n )\n )\n execution.item.status = 'failed';\n if (root) {\n execution.root.executionStatus = engineOutcome;\n execution.root.status = execution.root.groups.some((group) =>\n group.items.some((item) => item.status === 'failed'),\n )\n ? 'failed'\n : outcome;\n execution.root.finishedAt = now();\n for (const group of execution.root.groups)\n for (const item of group.items) {\n if (item.status === 'pending') {\n item.status = 'skipped';\n for (const phase of item.phases)\n if (phase.executionStatus === 'pending') phase.status = phase.executionStatus = 'skipped';\n }\n }\n const completed = roots.filter((run) => run.executionStatus !== 'running');\n for (const run of completed.slice(0, Math.max(0, completed.length - 20))) {\n roots.splice(roots.indexOf(run), 1);\n for (const [id, owner] of children) if (owner.execution.root === run) children.delete(id);\n }\n }\n publish();\n };\n const reconcile = (execution: Execution, result: Record<string, unknown>) => {\n if (!result.steps || typeof result.steps !== 'object') return;\n const results = result.steps as Record<string, unknown>;\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'step') {\n // The contract captures the exact Mastra step id as label, not an inferred display name.\n const value = results[shape.label];\n if (!value || typeof value !== 'object') return;\n const detail = value as Record<string, unknown>;\n const phase = execution.item.phases.find((phase) => phase.key === shape.key);\n if (!phase || !['success', 'failed', 'canceled', 'cancelled', 'skipped'].includes(String(detail.status)))\n return;\n phase.executionStatus = detail.status === 'skipped' ? 'skipped' : status(detail.status);\n if (typeof detail.startedAt === 'number') phase.startedAt = detail.startedAt;\n if (typeof detail.endedAt === 'number') phase.finishedAt = detail.endedAt;\n if (detail.error) phase.error = errorText(detail.error);\n derive(phase);\n } else if (shape.kind === 'parallel' || shape.kind === 'branch') shape.children.forEach(visit);\n };\n // Nested workflows reconcile their own result, which can reuse parent run ids.\n execution.shape.children.forEach(visit);\n };\n const makeItem = (definition: Definition, index: number, shape = definition.shape): DynamicWorkflowItem => {\n const phases: DynamicWorkflowPhase[] = [];\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'foreach') return;\n if (shape.kind === 'step')\n phases.push({ key: shape.key, label: shape.label, status: 'pending', executionStatus: 'pending', agents: [] });\n else shape.children.forEach(visit);\n };\n visit(shape);\n return { key: key(), index, label: `Item ${index + 1}`, status: 'pending', phases };\n };\n const activeCancels = new Set<() => Promise<unknown>>();\n const activeStarts = new Set<Promise<unknown>>();\n const bindings = new Set<AbortController>();\n return {\n snapshot,\n inlineRun(event) {\n if (event.sessionId !== config.sessionId) return;\n if (event.status === 'running') {\n if (disposed) return;\n const owner = context.getStore();\n if (!owner || owner.phase.executionStatus !== 'running' || owner.execution.root.executionStatus !== 'running')\n return;\n children.set(event.runId, owner);\n if (!owner.phase.agents.some((agent) => agent.runId === event.runId))\n owner.phase.agents.push({ runId: event.runId, status: event.status });\n update(owner);\n } else {\n const owner = children.get(event.runId);\n const agent = owner?.phase.agents.find((agent) => agent.runId === event.runId);\n if (owner && agent) {\n agent.status = event.status;\n update(owner);\n }\n }\n },\n namespace(lifetime) {\n return {\n name: 'dynamicWorkflow',\n summary:\n 'Tracked Mastra workflows: then, parallel, branch and bounded foreach, with live child-agent transcripts in Activity.',\n declarations: dynamicWorkflowDeclarations,\n bind(run: PoCodemodeRun) {\n if (run.sessionId !== config.sessionId) throw new Error('dynamicWorkflow belongs to another session.');\n const binding = new AbortController();\n bindings.add(binding);\n const signal = AbortSignal.any([lifetime, run.signal, binding.signal]);\n let closed = false;\n const assert = () => {\n signal.throwIfAborted();\n if (closed || disposed) throw new Error('dynamicWorkflow execution is disposed.');\n };\n const definitions = new WeakMap<object, Definition>();\n const pendingCancels = new Set<() => Promise<unknown>>();\n const pendingStarts = new Set<Promise<unknown>>();\n const stop = () => {\n closed = true;\n for (const cancel of pendingCancels) void cancel().catch(() => undefined);\n };\n signal.addEventListener('abort', stop, { once: true });\n run.onDispose(async () => {\n closed = true;\n binding.abort(new Error('dynamicWorkflow execution is disposed.'));\n bindings.delete(binding);\n signal.removeEventListener('abort', stop);\n await Promise.allSettled([...pendingCancels].map((cancel) => cancel()));\n await Promise.allSettled(pendingStarts);\n });\n const definitionFor = (value: unknown): Definition => {\n const definition = definitions.get(object(value, 'Tracked step'));\n if (!definition)\n throw new Error('Only steps and workflows created by this dynamicWorkflow execution are supported.');\n if (definition.workflow && !definition.workflow.committed)\n throw new Error('Commit nested workflows before composing them.');\n return definition;\n };\n const createGroup = (\n execution: Execution,\n shape: DynamicWorkflowShape,\n total: number,\n concurrency: number,\n ): DynamicWorkflowGroup => {\n const groupKey = `${execution.item.key}/${shape.key}`;\n let group = execution.root.groups.find((group) => group.key === groupKey);\n if (!group) {\n group = {\n key: groupKey,\n label: shape.label,\n total,\n counts: counts(),\n truncated: false,\n concurrency,\n items: [],\n };\n execution.root.groups.push(group);\n }\n return group;\n };\n const members: Record<string, unknown> = {\n get z() {\n assert();\n return loadFactories().z;\n },\n createStep(value: unknown) {\n assert();\n const def = options(value, ['id', 'description', 'inputSchema', 'outputSchema', 'execute'], 'createStep');\n const id = label(def.id);\n validateDefinition(def);\n if (typeof def.execute !== 'function') throw new Error('createStep.execute must be a function.');\n const callback = def.execute as (params: Record<string, unknown>) => unknown;\n const shape: DynamicWorkflowShape = { key: key(), label: id, kind: 'step', children: [] };\n const raw = loadFactories().createStep({\n ...def,\n id,\n execute: async (params: Record<string, unknown>) => {\n assert();\n const execution = runContext.getStore();\n const position =\n execution && directSteps(execution.shape).find((candidate) => origin(candidate) === shape.key);\n const phase = execution?.item.phases.find((phase) => phase.key === position?.key);\n if (!execution || !phase) throw new Error('Tracked step has no execution context.');\n phase.executionStatus = phase.status = 'running';\n phase.startedAt = now();\n execution.item.status = 'running';\n publish();\n const owner = { execution, phase };\n const operationSignal = callbackSignal(signal, params);\n return context.run(owner, async () => {\n try {\n const output = await callbackWithAbort(\n () => callback(callbackParameters(params)),\n operationSignal,\n );\n operationSignal.throwIfAborted();\n assert();\n if (output === undefined)\n throw new Error(\n 'Tracked callback returned undefined. Return null for empty output, or inspect exec diagnostics for a guest callback error.',\n );\n phase.executionStatus = 'completed';\n return output;\n } catch (error) {\n if (operationSignal.aborted || closed || disposed) intentionalStops.add(phase);\n phase.executionStatus = 'failed';\n phase.error = errorText(error);\n throw error;\n } finally {\n phase.finishedAt = now();\n update(owner);\n }\n });\n },\n });\n const handle = Object.freeze({ id });\n definitions.set(handle, { raw, shape });\n return handle;\n },\n createWorkflow(value: unknown) {\n assert();\n const def = options(value, ['id', 'description', 'inputSchema', 'outputSchema'], 'createWorkflow');\n const id = label(def.id);\n validateDefinition(def);\n const raw = loadFactories().createWorkflow({ ...def, id });\n const definition: Definition = {\n raw,\n shape: { key: key(), kind: 'sequence', label: id, children: [] },\n workflow: { raw, committed: false, foreach: new Map(), nested: new Map() },\n };\n const workflow = definition.workflow!;\n const rawCreateRun = raw.createRun.bind(raw);\n raw.createRun = async (createOptions: Record<string, unknown> = {}) => {\n assert();\n const rawRun = await rawCreateRun(createOptions);\n const parent = createOptions.parentWorkflow as\n | { runId: string; stepId: string; foreachIndex?: number }\n | undefined;\n let execution: Execution | undefined;\n if (parent) {\n const ancestor = runContext.getStore();\n if (!ancestor) throw new Error('Nested workflow has no tracked parent.');\n const authoredForeach = ancestor.definition.workflow?.foreach.get(parent.stepId);\n const foreachShape = authoredForeach && findShape(ancestor.shape, authoredForeach);\n if (foreachShape) {\n if (!Number.isSafeInteger(parent.foreachIndex) || parent.foreachIndex! < 0)\n throw new Error('Nested foreach did not provide a stable item index.');\n const group = ancestor.root.groups.find(\n (group) => group.key === `${ancestor.item.key}/${foreachShape.key}`,\n );\n if (!group) throw new Error('Nested foreach has no observed group.');\n const item = group.items[parent.foreachIndex!];\n if (!item) throw new Error('Nested foreach item is outside its observed input.');\n execution = {\n root: ancestor.root,\n item,\n definition,\n boundaryErrors: ancestor.boundaryErrors,\n shape: foreachShape.children[0]!,\n };\n } else {\n const authored = ancestor.definition.workflow?.nested.get(parent.stepId);\n const position = authored && findShape(ancestor.shape, authored);\n if (!position) throw new Error('Nested workflow has no tracked graph position.');\n execution = { ...ancestor, definition, shape: position };\n }\n }\n const start = rawRun.start.bind(rawRun);\n const cancel = rawRun.cancel.bind(rawRun);\n let started = false;\n let cancelled = false;\n const cancelTracked = async () => {\n cancelled = true;\n return await cancel();\n };\n rawRun.cancel = cancelTracked;\n const executeStart = async (startOptions: Record<string, unknown>) => {\n assert();\n if (started) throw new Error('Tracked runs can only start once.');\n started = true;\n if (!parent) {\n const item = makeItem(definition, 0);\n item.label = id;\n const root: DynamicWorkflowRun = {\n key: rawRun.runId,\n workflowId: id,\n label: id,\n status: 'running',\n executionStatus: 'running',\n startedAt: now(),\n shape: structuredClone(definition.shape),\n groups: [{ key: key(), label: id, total: 1, counts: counts(), truncated: false, items: [item] }],\n };\n // Foreach-only roots do not need an empty synthetic row.\n if (!item.phases.length) root.groups = [];\n roots.push(root);\n execution = { root, item, definition, boundaryErrors: [], shape: definition.shape };\n publish();\n }\n if (!execution) throw new Error('Tracked run has no execution context.');\n execution.item.status = 'running';\n pendingCancels.add(cancelTracked);\n activeCancels.add(cancelTracked);\n let reported = false;\n try {\n const result = await runContext.run(execution, () => start(startOptions));\n const outcome =\n cancelled || signal.aborted || closed || disposed ? 'stopped' : status(result.status);\n if (result.error) execution.root.error = errorText(result.error);\n reconcile(execution, result);\n terminal(execution, outcome, !parent, status(result.status));\n reported = true;\n if (execution.boundaryErrors.length) throw new Error(execution.boundaryErrors[0]);\n return result;\n } catch (error) {\n if (!reported) {\n execution.root.error = errorText(error);\n terminal(\n execution,\n cancelled || signal.aborted || closed || disposed ? 'stopped' : 'failed',\n !parent,\n );\n }\n throw error;\n } finally {\n pendingCancels.delete(cancelTracked);\n activeCancels.delete(cancelTracked);\n }\n };\n rawRun.start = (startOptions) => {\n const started = executeStart(startOptions);\n pendingStarts.add(started);\n activeStarts.add(started);\n const settled = () => {\n pendingStarts.delete(started);\n activeStarts.delete(started);\n };\n void started.then(settled, settled);\n return started;\n };\n return rawRun;\n };\n const ids = new Set<string>();\n const claim = (targets: Definition[]) => {\n const next = new Set<string>();\n for (const target of targets) {\n if (ids.has(target.raw.id) || next.has(target.raw.id) || target.raw.id === id)\n throw new Error('Use distinct step ids within a tracked workflow.');\n next.add(target.raw.id);\n }\n for (const value of next) ids.add(value);\n for (const target of targets) if (target.workflow) workflow.nested.set(target.raw.id, target.shape);\n };\n const mutable = () => {\n assert();\n if (workflow.committed) throw new Error('Tracked workflow is already committed.');\n };\n const add = (kind: 'parallel' | 'branch', targets: Definition[]) => {\n definition.shape.children.push({\n key: key(),\n label: kind,\n kind,\n children: targets.map((target) => occurrence(target.shape)),\n });\n };\n const handle = Object.freeze({\n id,\n // Mastra intentionally names its fluent composition method then, not a Promise continuation.\n // oxlint-disable-next-line unicorn/no-thenable\n then(value: unknown) {\n mutable();\n const target = definitionFor(value);\n claim([target]);\n raw.then(target.raw);\n definition.shape.children.push(occurrence(target.shape));\n return handle;\n },\n parallel(values: unknown) {\n mutable();\n if (!Array.isArray(values) || !values.length)\n throw new Error('parallel requires a non-empty array of tracked steps.');\n const targets = values.map(definitionFor);\n claim(targets);\n raw.parallel(targets.map((target) => target.raw));\n add('parallel', targets);\n return handle;\n },\n branch(values: unknown) {\n mutable();\n if (!Array.isArray(values) || !values.length)\n throw new Error('branch requires predicate/step pairs.');\n const targets: Definition[] = [];\n const pairs = values.map(\n (pair: unknown): [(params: Record<string, unknown>) => Promise<boolean>, RawStep] => {\n if (!Array.isArray(pair) || pair.length !== 2 || typeof pair[0] !== 'function')\n throw new Error('branch requires [predicate, tracked step] pairs.');\n const target = definitionFor(pair[1]);\n targets.push(target);\n const predicate = pair[0] as (params: Record<string, unknown>) => unknown;\n return [\n async (params) => {\n assert();\n const operationSignal = callbackSignal(signal, params);\n try {\n const answer = await callbackWithAbort(\n () => predicate(callbackParameters(params)),\n operationSignal,\n );\n if (typeof answer !== 'boolean')\n throw new Error(\n 'Tracked branch predicates must return a boolean. Inspect exec diagnostics if a guest callback failed.',\n );\n return answer;\n } catch (error) {\n if (operationSignal.aborted) throw error;\n const execution = runContext.getStore();\n if (execution) {\n const message = errorText(error);\n execution.boundaryErrors.push(message);\n execution.root.error = message;\n const leaves = new Set<string>();\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'step') leaves.add(shape.key);\n else shape.children.forEach(visit);\n };\n const position = findShape(execution.shape, target.shape);\n if (position) visit(position);\n for (const phase of execution.item.phases)\n if (leaves.has(phase.key)) {\n boundaryFailures.add(phase);\n phase.error = message;\n }\n }\n throw error;\n }\n },\n target.raw,\n ];\n },\n );\n claim(targets);\n raw.branch(pairs);\n add('branch', targets);\n return handle;\n },\n foreach(value: unknown, settings: unknown) {\n mutable();\n const target = definitionFor(value);\n if (!target.workflow)\n throw new Error('foreach requires a committed tracked item workflow, not a bare step.');\n const opts = options(settings, ['concurrency'], 'foreach');\n if (!Number.isSafeInteger(opts.concurrency) || Number(opts.concurrency) < 1)\n throw new Error('foreach.concurrency must be a positive integer.');\n const concurrency = Number(opts.concurrency);\n claim([target]);\n const shape: DynamicWorkflowShape = {\n key: key(),\n kind: 'foreach',\n label: target.shape.label,\n children: [occurrence(target.shape)],\n };\n raw.foreach(target.workflow.raw, {\n concurrency: ({ inputData }) => {\n assert();\n const execution = runContext.getStore();\n if (!execution || !Array.isArray(inputData))\n throw new Error('Tracked foreach requires array input and an active run.');\n const position = findShape(execution.shape, shape);\n if (!position) throw new Error('Foreach has no tracked graph position.');\n const group = createGroup(execution, position, inputData.length, concurrency);\n group.items = inputData.map((_, index) => makeItem(target, index, position.children[0]));\n publish();\n return concurrency;\n },\n });\n workflow.foreach.set(target.raw.id, shape);\n definition.shape.children.push(shape);\n return handle;\n },\n commit() {\n mutable();\n raw.commit();\n workflow.committed = true;\n return handle;\n },\n async createRun(value?: unknown) {\n assert();\n if (!workflow.committed) throw new Error('Commit the tracked workflow before creating a run.');\n if (value !== undefined && Object.keys(options(value, [], 'createRun')).length)\n throw new Error('createRun options are unsupported.');\n const live = await raw.createRun();\n return Object.freeze({\n runId: live.runId,\n async start(value: unknown) {\n assert();\n const opts = options(value, ['inputData'], 'start');\n return live.start(opts);\n },\n async cancel() {\n assert();\n await live.cancel();\n },\n });\n },\n });\n definitions.set(handle, definition);\n return handle;\n },\n };\n return members;\n },\n };\n },\n async dispose() {\n disposed = true;\n for (const binding of bindings) binding.abort(new Error('dynamicWorkflow session is disposed.'));\n bindings.clear();\n await Promise.allSettled([...activeCancels].map((cancel) => cancel()));\n await Promise.allSettled(activeStarts);\n children.clear();\n },\n };\n}\n","import { PO_CODEMODE_SERVICE, readPoCodemode } from '@agimon-ai/po-core/codemode';\nimport { PO_TEAM_INLINE_RUN_EVENT } from '@agimon-ai/po-core/delegation';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../../../constants/dynamicWorkflow';\nimport { createWorkflowTracker } from '../../../../services/workflowTracker';\n\nexport default defineRoot(async ({ context, agent, host, signal }: PoServerPluginContext) => {\n if (!agent) throw new Error('Dynamic workflow requires a headless session host.');\n const runtime = await createWorkflowTracker({\n sessionId: agent.context.sessionId,\n publish: (snapshot) =>\n host.context.directEvents?.publish(DYNAMIC_WORKFLOW_CHANNEL, agent.context.sessionId, snapshot),\n });\n const stopEvents = context.on(PO_TEAM_INLINE_RUN_EVENT, (event) => runtime.inlineRun(event));\n context.inject([PO_CODEMODE_SERVICE], (scoped) => {\n const codemode = readPoCodemode(scoped);\n const registration = codemode?.register('@agimon-ai/po-dynamic-workflow', runtime.namespace(signal));\n return () => registration?.dispose();\n });\n host.context.directEvents?.publish(DYNAMIC_WORKFLOW_CHANNEL, agent.context.sessionId, runtime.snapshot());\n return {\n value: runtime,\n onDispose: async () => {\n try {\n await runtime.dispose();\n } finally {\n stopEvents();\n }\n },\n };\n});\n","import type { PoHubChannel, PoHubSessionScope } from '@agimon-ai/po-core/hubChannel';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../constants/dynamicWorkflow';\nimport type { DynamicWorkflowSnapshot } from '../../types/dynamicWorkflow';\n\nexport function createWorkflowChannel(): PoHubChannel {\n return {\n frameType: DYNAMIC_WORKFLOW_CHANNEL,\n start(host) {\n const latest = new Map<string, DynamicWorkflowSnapshot>();\n const subscriptions = new Map<string, () => void>();\n const scopes = new Map<string, PoHubSessionScope>();\n return {\n payloadFor: (scope) => latest.get(scope.sessionId),\n sessionAdded(scope) {\n subscriptions.get(scope.sessionId)?.();\n scopes.set(scope.sessionId, scope);\n latest.delete(scope.sessionId);\n subscriptions.set(\n scope.sessionId,\n host.directEvents.subscribe(\n DYNAMIC_WORKFLOW_CHANNEL,\n scope.sessionId,\n (value) => {\n if (scopes.get(scope.sessionId) !== scope || !value || typeof value !== 'object') return;\n const snapshot = value as DynamicWorkflowSnapshot;\n if (snapshot.version !== 1 || snapshot.sessionId !== scope.sessionId || !Array.isArray(snapshot.runs))\n return;\n const detached = structuredClone(snapshot);\n latest.set(scope.sessionId, detached);\n host.publish(scope.sessionId, detached);\n },\n { replayLatest: true },\n ),\n );\n },\n sessionRemoved(id) {\n subscriptions.get(id)?.();\n subscriptions.delete(id);\n scopes.delete(id);\n latest.delete(id);\n },\n close() {\n for (const unsubscribe of subscriptions.values()) unsubscribe();\n subscriptions.clear();\n scopes.clear();\n latest.clear();\n },\n };\n },\n };\n}\n","import { defineChannel } from '@agimon-ai/po-core/extensionFile';\n\nimport { createWorkflowChannel } from '../../../services/workflowChannel';\n\nexport default defineChannel(createWorkflowChannel);\n","import { defineResource } from '@agimon-ai/po-core/extensionFile';\nimport { packageResourcePath, readPackageResource } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineResource({\n name: 'codemode-how-to-dynamic-workflow',\n description: 'Compose tracked Mastra workflows and link live child-agent transcripts in Activity.',\n kind: 'skill' as const,\n pinned: true,\n path: packageResourcePath(import.meta.url, 'src/prompts/codemode-how-to-dynamic-workflow/SKILL.md'),\n read: () => readPackageResource(import.meta.url, 'src/prompts/codemode-how-to-dynamic-workflow/SKILL.md'),\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverPlugin';\nimport { composeRootHooks, composeRootInjects } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport channelDynamicWorkflowRuns from '../src/extensions/(backend)/channel/dynamic-workflow-runs.server';\nimport resourceCodemodeHowToDynamicWorkflow from '../src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n/* v8 ignore next -- generated normalization branch */\nconst defined = <T>(values: readonly (T | undefined)[]): T[] =>\n values.filter((value): value is T => value !== undefined);\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-dynamic-workflow',\n providerOverrides: composeServerProviderOverrides(rootSession),\n injects: composeRootInjects({ session: [rootSession] }),\n global: (context) => ({\n get channels(): PoServerSessionPlugin['channels'] { return [() => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]; },\n }),\n workspace: (context) => ({\n get channels(): PoServerSessionPlugin['channels'] { return defined([context.hosted('global') ? undefined : () => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]); },\n }),\n session: async (context) => {\n const scopeSession = await context.scopeRoot('session', rootSession, context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get channels(): PoServerSessionPlugin['channels'] { return defined([context.hosted('global') ? undefined : () => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]); },\n get resources(): PoServerSessionPlugin['resources'] { return [at(resourceCodemodeHowToDynamicWorkflow, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): PoServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default serverPlugin;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.cjs","names":["require","createRequire","AsyncLocalStorage","defineRoot","PO_TEAM_INLINE_RUN_EVENT","PO_CODEMODE_SERVICE","readPoCodemode","defineChannel","defineResource","packageResourcePath","readPackageResource","defineServerPlugin","composeServerProviderOverrides","rootSession","composeRootInjects","channelDynamicWorkflowRuns","composeRootHooks","resourceCodemodeHowToDynamicWorkflow"],"sources":["../../src/constants/dynamicWorkflow.ts","../../src/constants/declarations.ts","../../src/services/workflowTracker/index.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/services/workflowChannel/index.ts","../../src/extensions/(backend)/channel/dynamic-workflow-runs.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server.ts","../../generated/server.ts"],"sourcesContent":["export const DYNAMIC_WORKFLOW_CHANNEL = 'dynamic_workflow_runs';\n","export const dynamicWorkflowDeclarations = `\ninterface WorkflowSchema<T> {\n readonly _output: T;\n parse(value: unknown): T;\n optional(): WorkflowSchema<T | undefined>;\n nullable(): WorkflowSchema<T | null>;\n default(value: T): WorkflowSchema<T>;\n array(): WorkflowSchema<T[]>;\n describe(text: string): WorkflowSchema<T>;\n min(value: number): WorkflowSchema<T>;\n max(value: number): WorkflowSchema<T>;\n int(): WorkflowSchema<T>;\n positive(): WorkflowSchema<T>;\n nonnegative(): WorkflowSchema<T>;\n trim(): WorkflowSchema<T>;\n}\ntype WorkflowSchemaOutput<S> = S extends WorkflowSchema<infer T> ? T : never;\ntype WorkflowObject<S extends Record<string, WorkflowSchema<unknown>>> =\n { [K in keyof S as undefined extends WorkflowSchemaOutput<S[K]> ? never : K]: WorkflowSchemaOutput<S[K]> } &\n { [K in keyof S as undefined extends WorkflowSchemaOutput<S[K]> ? K : never]?: WorkflowSchemaOutput<S[K]> };\ninterface WorkflowZod {\n string(): WorkflowSchema<string>;\n number(): WorkflowSchema<number>;\n boolean(): WorkflowSchema<boolean>;\n null(): WorkflowSchema<null>;\n unknown(): WorkflowSchema<unknown>;\n any(): WorkflowSchema<unknown>;\n literal<T extends string | number | boolean | null>(value: T): WorkflowSchema<T>;\n enum<T extends string>(values: readonly [T, ...T[]]): WorkflowSchema<T>;\n object<S extends Record<string, WorkflowSchema<unknown>>>(shape: S): WorkflowSchema<WorkflowObject<S>>;\n array<T>(item: WorkflowSchema<T>): WorkflowSchema<T[]>;\n record<T>(item: WorkflowSchema<T>): WorkflowSchema<Record<string,T>>;\n union<S extends readonly [WorkflowSchema<unknown>, WorkflowSchema<unknown>, ...WorkflowSchema<unknown>[]]>(schemas: S): WorkflowSchema<WorkflowSchemaOutput<S[number]>>;\n}\ninterface WorkflowExecute<I> {\n inputData: I;\n runId: string;\n abortSignal: AbortSignal;\n getInitData(): unknown;\n}\ninterface TrackedStep<I = unknown, O = unknown, Id extends string = string> {\n readonly id: Id;\n readonly __input?: I;\n readonly __output?: O;\n}\ninterface TrackedRun<I, O> {\n readonly runId: string;\n start(options: { inputData: I }): Promise<{ status: string; result?: O; error?: unknown }>;\n cancel(): Promise<void>;\n}\ninterface TrackedWorkflow<I, O, Current = I> extends TrackedStep<I,O> {\n then<T>(step: TrackedStep<Current,T>): TrackedWorkflow<I,O,T>;\n parallel<T extends readonly TrackedStep<Current,unknown>[]>(steps: T): TrackedWorkflow<I,O,Record<T[number]['id'],T[number] extends TrackedStep<Current,infer Out> ? Out : never>>;\n branch(choices: [((params: WorkflowExecute<Current>) => boolean | Promise<boolean>), TrackedStep<Current,unknown>][]): TrackedWorkflow<I,O,Record<string,unknown>>;\n foreach<T, U, C>(item: TrackedWorkflow<T,U,C>, options: { concurrency: number }): TrackedWorkflow<I,O,U[]>;\n commit(): TrackedWorkflow<I,O,Current>;\n createRun(): Promise<TrackedRun<I,O>>;\n}\ndeclare const dynamicWorkflow: {\n createStep<I,O,Id extends string>(options: { id: Id; description?: string; inputSchema: WorkflowSchema<I>; outputSchema: WorkflowSchema<O>; execute: (params: WorkflowExecute<I>) => O | Promise<O> }): TrackedStep<I,O,Id>;\n createWorkflow<I,O>(options: { id: string; description?: string; inputSchema: WorkflowSchema<I>; outputSchema: WorkflowSchema<O> }): TrackedWorkflow<I,O>;\n /** Zod 3.25.76. Common constructors are declared here; runtime supplies the real z object. */\n z: WorkflowZod;\n};`;\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createRequire } from 'node:module';\n\nimport type { PoCodemodeRun } from '@agimon-ai/po-core/codemode';\nimport type * as Zod from 'zod';\n\nimport { dynamicWorkflowDeclarations } from '../../constants/declarations';\nimport type {\n DynamicWorkflowGroup,\n DynamicWorkflowItem,\n DynamicWorkflowPhase,\n DynamicWorkflowRun,\n DynamicWorkflowShape,\n DynamicWorkflowSnapshot,\n DynamicWorkflowStatus,\n} from '../../types/dynamicWorkflow';\nimport type { WorkflowTracker, WorkflowTrackerOptions } from './type';\n\ninterface RawStep {\n id: string;\n execute: (params: Record<string, unknown>) => Promise<unknown>;\n}\ninterface RawRun {\n runId: string;\n start: (options: Record<string, unknown>) => Promise<Record<string, unknown>>;\n cancel: () => Promise<unknown>;\n}\ninterface RawWorkflow extends RawStep {\n then(step: RawStep): RawWorkflow;\n parallel(steps: RawStep[]): RawWorkflow;\n branch(steps: [(params: Record<string, unknown>) => Promise<boolean>, RawStep][]): RawWorkflow;\n foreach(step: RawWorkflow, options: { concurrency: (params: { inputData: unknown }) => number }): RawWorkflow;\n commit(): RawWorkflow;\n createRun(options?: Record<string, unknown>): Promise<RawRun>;\n}\ninterface Factories {\n createStep(options: Record<string, unknown>): RawStep;\n createWorkflow(options: Record<string, unknown>): RawWorkflow;\n z: typeof Zod.z;\n}\ninterface Definition {\n raw: RawStep;\n shape: DynamicWorkflowShape;\n workflow?: {\n raw: RawWorkflow;\n committed: boolean;\n foreach: Map<string, DynamicWorkflowShape>;\n nested: Map<string, DynamicWorkflowShape>;\n };\n}\ninterface Execution {\n root: DynamicWorkflowRun;\n definition: Definition;\n item: DynamicWorkflowItem;\n boundaryErrors: string[];\n shape: DynamicWorkflowShape;\n}\ninterface PhaseOwner {\n execution: Execution;\n phase: DynamicWorkflowPhase;\n}\n\nconst object = (value: unknown, name: string): Record<string, unknown> => {\n if (value === null || typeof value !== 'object' || Array.isArray(value))\n throw new Error(`${name} must be an object.`);\n return value as Record<string, unknown>;\n};\nconst options = (value: unknown, keys: string[], name: string): Record<string, unknown> => {\n const result = object(value, name);\n for (const key of Object.keys(result))\n if (!keys.includes(key)) throw new Error(`${name}.${key} is not supported by tracked workflows.`);\n return result;\n};\nconst label = (value: unknown): string => {\n if (typeof value !== 'string' || !value.trim() || value.length > 160)\n throw new Error('Workflow and step ids must be non-empty strings of at most 160 characters.');\n return value;\n};\nconst callbackParameters = (params: Record<string, unknown>): Record<string, unknown> => ({\n inputData: params.inputData,\n runId: params.runId,\n abortSignal: params.abortSignal,\n ...(typeof params.getInitData === 'function' ? { getInitData: params.getInitData } : {}),\n});\n/** Reject the host wrapper on abort; late guest settlement cannot write tracked state. */\nconst callbackWithAbort = (callback: () => unknown, signal: AbortSignal): Promise<unknown> => {\n signal.throwIfAborted();\n return new Promise((resolve, reject) => {\n const abort = () => {\n signal.removeEventListener('abort', abort);\n reject(signal.reason);\n };\n signal.addEventListener('abort', abort, { once: true });\n Promise.resolve()\n .then(() => {\n signal.throwIfAborted();\n return callback();\n })\n .then(\n (value) => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n (error) => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n};\nconst callbackSignal = (binding: AbortSignal, params: Record<string, unknown>): AbortSignal =>\n params.abortSignal instanceof AbortSignal ? AbortSignal.any([binding, params.abortSignal]) : binding;\nconst validateDefinition = (def: Record<string, unknown>) => {\n if (def.description !== undefined && (typeof def.description !== 'string' || def.description.length > 500))\n throw new Error('description must be a string of at most 500 characters.');\n for (const field of ['inputSchema', 'outputSchema']) {\n const schema = object(def[field], field);\n if (typeof schema.safeParse !== 'function') throw new Error(`${field} must be a Zod schema.`);\n }\n};\nconst errorText = (error: unknown): string =>\n (error && typeof error === 'object' && 'message' in error && typeof error.message === 'string'\n ? error.message\n : String(error)\n ).slice(0, 500);\nconst status = (value: unknown): DynamicWorkflowStatus => {\n if (value === 'success') return 'completed';\n if (value === 'canceled' || value === 'cancelled') return 'stopped';\n if (value === 'failed') return 'failed';\n throw new Error(`Unsupported Mastra result status: ${String(value)}.`);\n};\nconst counts = (): Record<DynamicWorkflowStatus, number> => ({\n pending: 0,\n running: 0,\n completed: 0,\n failed: 0,\n stopped: 0,\n skipped: 0,\n});\n/** Mastra executes. This observer only decorates constructors and lifecycle calls. */\nexport async function createWorkflowTracker(config: WorkflowTrackerOptions): Promise<WorkflowTracker> {\n let factories: Factories | undefined;\n const loadFactories = (): Factories => {\n if (!factories) {\n const require = createRequire(import.meta.url);\n const workflow = require('@mastra/core/workflows') as Pick<Factories, 'createStep' | 'createWorkflow'>;\n const schemas = require('zod') as Pick<Factories, 'z'>;\n factories = { ...workflow, z: schemas.z };\n }\n return factories;\n };\n const now = config.now ?? Date.now;\n const roots: DynamicWorkflowRun[] = [];\n const context = new AsyncLocalStorage<PhaseOwner>();\n const runContext = new AsyncLocalStorage<Execution>();\n const children = new Map<string, PhaseOwner>();\n const boundaryFailures = new WeakSet<DynamicWorkflowPhase>();\n const intentionalStops = new WeakSet<DynamicWorkflowPhase>();\n let revision = 0;\n let serial = 0;\n let disposed = false;\n const key = () => `workflow-${++serial}`;\n const origins = new WeakMap<DynamicWorkflowShape, string>();\n const origin = (shape: DynamicWorkflowShape) => origins.get(shape) ?? shape.key;\n const occurrence = (shape: DynamicWorkflowShape): DynamicWorkflowShape => {\n const result = { ...shape, key: key(), children: shape.children.map(occurrence) };\n origins.set(result, origin(shape));\n return result;\n };\n const findShape = (shape: DynamicWorkflowShape, source: DynamicWorkflowShape): DynamicWorkflowShape | undefined => {\n if (origin(shape) === origin(source)) return shape;\n for (const child of shape.children) {\n const found = findShape(child, source);\n if (found) return found;\n }\n return undefined;\n };\n const directSteps = (shape: DynamicWorkflowShape): DynamicWorkflowShape[] => {\n const result: DynamicWorkflowShape[] = [];\n const visit = (node: DynamicWorkflowShape): void => {\n if (node.kind === 'step') result.push(node);\n else if (node.kind === 'parallel' || node.kind === 'branch') node.children.forEach(visit);\n };\n shape.children.forEach(visit);\n return result;\n };\n const snapshot = (): DynamicWorkflowSnapshot =>\n structuredClone({\n version: 1,\n revision,\n sessionId: config.sessionId,\n runs: roots.map((run) => ({\n ...run,\n groups: run.groups.map((group) => ({\n ...group,\n counts: group.items.reduce((sum, item) => {\n sum[item.status]++;\n return sum;\n }, counts()),\n truncated: group.items.length > 1000,\n items: group.items.slice(0, 1000),\n })),\n })),\n });\n const publish = () => {\n revision++;\n // Observers cannot change workflow execution or strand a running item.\n try {\n config.publish?.(snapshot());\n } catch {\n /* Publication is best effort. */\n }\n };\n const derive = (phase: DynamicWorkflowPhase) => {\n phase.status =\n boundaryFailures.has(phase) || phase.agents.some((agent) => agent.status === 'failed')\n ? 'failed'\n : intentionalStops.has(phase)\n ? 'stopped'\n : phase.executionStatus;\n };\n const summarize = (item: DynamicWorkflowItem) => {\n item.status = item.phases.some((phase) => phase.status === 'failed')\n ? 'failed'\n : item.phases.some((phase) => phase.status === 'running')\n ? 'running'\n : item.phases.some((phase) => phase.status === 'stopped')\n ? 'stopped'\n : item.phases.every((phase) => phase.status === 'skipped')\n ? 'skipped'\n : item.phases.some((phase) => phase.status === 'pending')\n ? 'pending'\n : 'completed';\n };\n const update = (owner: PhaseOwner) => {\n derive(owner.phase);\n summarize(owner.execution.item);\n publish();\n };\n const terminal = (execution: Execution, outcome: DynamicWorkflowStatus, root: boolean, engineOutcome = outcome) => {\n const relevant = new Set<string>();\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'foreach') return;\n if (shape.kind === 'step') relevant.add(shape.key);\n else shape.children.forEach(visit);\n };\n visit(execution.shape);\n for (const phase of execution.item.phases) {\n if (!root && !relevant.has(phase.key)) continue;\n if (phase.executionStatus === 'pending') phase.executionStatus = 'skipped';\n else if (phase.executionStatus === 'running') phase.executionStatus = outcome;\n derive(phase);\n }\n if (execution.item.phases.length) summarize(execution.item);\n else execution.item.status = outcome;\n if (\n execution.root.groups.some(\n (group) =>\n group.key.startsWith(`${execution.item.key}/`) && group.items.some((item) => item.status === 'failed'),\n )\n )\n execution.item.status = 'failed';\n if (root) {\n execution.root.executionStatus = engineOutcome;\n execution.root.status = execution.root.groups.some((group) =>\n group.items.some((item) => item.status === 'failed'),\n )\n ? 'failed'\n : outcome;\n execution.root.finishedAt = now();\n for (const group of execution.root.groups)\n for (const item of group.items) {\n if (item.status === 'pending') {\n item.status = 'skipped';\n for (const phase of item.phases)\n if (phase.executionStatus === 'pending') phase.status = phase.executionStatus = 'skipped';\n }\n }\n const completed = roots.filter((run) => run.executionStatus !== 'running');\n for (const run of completed.slice(0, Math.max(0, completed.length - 20))) {\n roots.splice(roots.indexOf(run), 1);\n for (const [id, owner] of children) if (owner.execution.root === run) children.delete(id);\n }\n }\n publish();\n };\n const reconcile = (execution: Execution, result: Record<string, unknown>) => {\n if (!result.steps || typeof result.steps !== 'object') return;\n const results = result.steps as Record<string, unknown>;\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'step') {\n // The contract captures the exact Mastra step id as label, not an inferred display name.\n const value = results[shape.label];\n if (!value || typeof value !== 'object') return;\n const detail = value as Record<string, unknown>;\n const phase = execution.item.phases.find((phase) => phase.key === shape.key);\n if (!phase || !['success', 'failed', 'canceled', 'cancelled', 'skipped'].includes(String(detail.status)))\n return;\n phase.executionStatus = detail.status === 'skipped' ? 'skipped' : status(detail.status);\n if (typeof detail.startedAt === 'number') phase.startedAt = detail.startedAt;\n if (typeof detail.endedAt === 'number') phase.finishedAt = detail.endedAt;\n if (detail.error) phase.error = errorText(detail.error);\n derive(phase);\n } else if (shape.kind === 'parallel' || shape.kind === 'branch') shape.children.forEach(visit);\n };\n // Nested workflows reconcile their own result, which can reuse parent run ids.\n execution.shape.children.forEach(visit);\n };\n const makeItem = (definition: Definition, index: number, shape = definition.shape): DynamicWorkflowItem => {\n const phases: DynamicWorkflowPhase[] = [];\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'foreach') return;\n if (shape.kind === 'step')\n phases.push({ key: shape.key, label: shape.label, status: 'pending', executionStatus: 'pending', agents: [] });\n else shape.children.forEach(visit);\n };\n visit(shape);\n return { key: key(), index, label: `Item ${index + 1}`, status: 'pending', phases };\n };\n const activeCancels = new Set<() => Promise<unknown>>();\n const activeStarts = new Set<Promise<unknown>>();\n const bindings = new Set<AbortController>();\n return {\n snapshot,\n inlineRun(event) {\n if (event.sessionId !== config.sessionId) return;\n if (event.status === 'running') {\n if (disposed) return;\n const owner = context.getStore();\n if (!owner || owner.phase.executionStatus !== 'running' || owner.execution.root.executionStatus !== 'running')\n return;\n children.set(event.runId, owner);\n if (!owner.phase.agents.some((agent) => agent.runId === event.runId))\n owner.phase.agents.push({ runId: event.runId, status: event.status });\n update(owner);\n } else {\n const owner = children.get(event.runId);\n const agent = owner?.phase.agents.find((agent) => agent.runId === event.runId);\n if (owner && agent) {\n agent.status = event.status;\n update(owner);\n }\n }\n },\n namespace(lifetime) {\n return {\n name: 'dynamicWorkflow',\n summary:\n 'Tracked Mastra workflows: then, parallel, branch and bounded foreach, with live child-agent transcripts in Activity.',\n declarations: dynamicWorkflowDeclarations,\n bind(run: PoCodemodeRun) {\n if (run.sessionId !== config.sessionId) throw new Error('dynamicWorkflow belongs to another session.');\n const binding = new AbortController();\n bindings.add(binding);\n const signal = AbortSignal.any([lifetime, run.signal, binding.signal]);\n let closed = false;\n const assert = () => {\n signal.throwIfAborted();\n if (closed || disposed) throw new Error('dynamicWorkflow execution is disposed.');\n };\n const definitions = new WeakMap<object, Definition>();\n const pendingCancels = new Set<() => Promise<unknown>>();\n const pendingStarts = new Set<Promise<unknown>>();\n const stop = () => {\n closed = true;\n for (const cancel of pendingCancels) void cancel().catch(() => undefined);\n };\n signal.addEventListener('abort', stop, { once: true });\n run.onDispose(async () => {\n closed = true;\n binding.abort(new Error('dynamicWorkflow execution is disposed.'));\n bindings.delete(binding);\n signal.removeEventListener('abort', stop);\n await Promise.allSettled([...pendingCancels].map((cancel) => cancel()));\n await Promise.allSettled(pendingStarts);\n });\n const definitionFor = (value: unknown): Definition => {\n const definition = definitions.get(object(value, 'Tracked step'));\n if (!definition)\n throw new Error('Only steps and workflows created by this dynamicWorkflow execution are supported.');\n if (definition.workflow && !definition.workflow.committed)\n throw new Error('Commit nested workflows before composing them.');\n return definition;\n };\n const createGroup = (\n execution: Execution,\n shape: DynamicWorkflowShape,\n total: number,\n concurrency: number,\n ): DynamicWorkflowGroup => {\n const groupKey = `${execution.item.key}/${shape.key}`;\n let group = execution.root.groups.find((group) => group.key === groupKey);\n if (!group) {\n group = {\n key: groupKey,\n label: shape.label,\n total,\n counts: counts(),\n truncated: false,\n concurrency,\n items: [],\n };\n execution.root.groups.push(group);\n }\n return group;\n };\n const members: Record<string, unknown> = {\n get z() {\n assert();\n return loadFactories().z;\n },\n createStep(value: unknown) {\n assert();\n const def = options(value, ['id', 'description', 'inputSchema', 'outputSchema', 'execute'], 'createStep');\n const id = label(def.id);\n validateDefinition(def);\n if (typeof def.execute !== 'function') throw new Error('createStep.execute must be a function.');\n const callback = def.execute as (params: Record<string, unknown>) => unknown;\n const shape: DynamicWorkflowShape = { key: key(), label: id, kind: 'step', children: [] };\n const raw = loadFactories().createStep({\n ...def,\n id,\n execute: async (params: Record<string, unknown>) => {\n assert();\n const execution = runContext.getStore();\n const position =\n execution && directSteps(execution.shape).find((candidate) => origin(candidate) === shape.key);\n const phase = execution?.item.phases.find((phase) => phase.key === position?.key);\n if (!execution || !phase) throw new Error('Tracked step has no execution context.');\n phase.executionStatus = phase.status = 'running';\n phase.startedAt = now();\n execution.item.status = 'running';\n publish();\n const owner = { execution, phase };\n const operationSignal = callbackSignal(signal, params);\n return context.run(owner, async () => {\n try {\n const output = await callbackWithAbort(\n () => callback(callbackParameters(params)),\n operationSignal,\n );\n operationSignal.throwIfAborted();\n assert();\n if (output === undefined)\n throw new Error(\n 'Tracked callback returned undefined. Return null for empty output, or inspect exec diagnostics for a guest callback error.',\n );\n phase.executionStatus = 'completed';\n return output;\n } catch (error) {\n if (operationSignal.aborted || closed || disposed) intentionalStops.add(phase);\n phase.executionStatus = 'failed';\n phase.error = errorText(error);\n throw error;\n } finally {\n phase.finishedAt = now();\n update(owner);\n }\n });\n },\n });\n const handle = Object.freeze({ id });\n definitions.set(handle, { raw, shape });\n return handle;\n },\n createWorkflow(value: unknown) {\n assert();\n const def = options(value, ['id', 'description', 'inputSchema', 'outputSchema'], 'createWorkflow');\n const id = label(def.id);\n validateDefinition(def);\n const raw = loadFactories().createWorkflow({ ...def, id });\n const definition: Definition = {\n raw,\n shape: { key: key(), kind: 'sequence', label: id, children: [] },\n workflow: { raw, committed: false, foreach: new Map(), nested: new Map() },\n };\n const workflow = definition.workflow!;\n const rawCreateRun = raw.createRun.bind(raw);\n raw.createRun = async (createOptions: Record<string, unknown> = {}) => {\n assert();\n const rawRun = await rawCreateRun(createOptions);\n const parent = createOptions.parentWorkflow as\n | { runId: string; stepId: string; foreachIndex?: number }\n | undefined;\n let execution: Execution | undefined;\n if (parent) {\n const ancestor = runContext.getStore();\n if (!ancestor) throw new Error('Nested workflow has no tracked parent.');\n const authoredForeach = ancestor.definition.workflow?.foreach.get(parent.stepId);\n const foreachShape = authoredForeach && findShape(ancestor.shape, authoredForeach);\n if (foreachShape) {\n if (!Number.isSafeInteger(parent.foreachIndex) || parent.foreachIndex! < 0)\n throw new Error('Nested foreach did not provide a stable item index.');\n const group = ancestor.root.groups.find(\n (group) => group.key === `${ancestor.item.key}/${foreachShape.key}`,\n );\n if (!group) throw new Error('Nested foreach has no observed group.');\n const item = group.items[parent.foreachIndex!];\n if (!item) throw new Error('Nested foreach item is outside its observed input.');\n execution = {\n root: ancestor.root,\n item,\n definition,\n boundaryErrors: ancestor.boundaryErrors,\n shape: foreachShape.children[0]!,\n };\n } else {\n const authored = ancestor.definition.workflow?.nested.get(parent.stepId);\n const position = authored && findShape(ancestor.shape, authored);\n if (!position) throw new Error('Nested workflow has no tracked graph position.');\n execution = { ...ancestor, definition, shape: position };\n }\n }\n const start = rawRun.start.bind(rawRun);\n const cancel = rawRun.cancel.bind(rawRun);\n let started = false;\n let cancelled = false;\n const cancelTracked = async () => {\n cancelled = true;\n return await cancel();\n };\n rawRun.cancel = cancelTracked;\n const executeStart = async (startOptions: Record<string, unknown>) => {\n assert();\n if (started) throw new Error('Tracked runs can only start once.');\n started = true;\n if (!parent) {\n const item = makeItem(definition, 0);\n item.label = id;\n const root: DynamicWorkflowRun = {\n key: rawRun.runId,\n workflowId: id,\n label: id,\n status: 'running',\n executionStatus: 'running',\n startedAt: now(),\n shape: structuredClone(definition.shape),\n groups: [{ key: key(), label: id, total: 1, counts: counts(), truncated: false, items: [item] }],\n };\n // Foreach-only roots do not need an empty synthetic row.\n if (!item.phases.length) root.groups = [];\n roots.push(root);\n execution = { root, item, definition, boundaryErrors: [], shape: definition.shape };\n publish();\n }\n if (!execution) throw new Error('Tracked run has no execution context.');\n execution.item.status = 'running';\n pendingCancels.add(cancelTracked);\n activeCancels.add(cancelTracked);\n let reported = false;\n try {\n const result = await runContext.run(execution, () => start(startOptions));\n const outcome =\n cancelled || signal.aborted || closed || disposed ? 'stopped' : status(result.status);\n if (result.error) execution.root.error = errorText(result.error);\n reconcile(execution, result);\n terminal(execution, outcome, !parent, status(result.status));\n reported = true;\n if (execution.boundaryErrors.length) throw new Error(execution.boundaryErrors[0]);\n return result;\n } catch (error) {\n if (!reported) {\n execution.root.error = errorText(error);\n terminal(\n execution,\n cancelled || signal.aborted || closed || disposed ? 'stopped' : 'failed',\n !parent,\n );\n }\n throw error;\n } finally {\n pendingCancels.delete(cancelTracked);\n activeCancels.delete(cancelTracked);\n }\n };\n rawRun.start = (startOptions) => {\n const started = executeStart(startOptions);\n pendingStarts.add(started);\n activeStarts.add(started);\n const settled = () => {\n pendingStarts.delete(started);\n activeStarts.delete(started);\n };\n void started.then(settled, settled);\n return started;\n };\n return rawRun;\n };\n const ids = new Set<string>();\n const claim = (targets: Definition[]) => {\n const next = new Set<string>();\n for (const target of targets) {\n if (ids.has(target.raw.id) || next.has(target.raw.id) || target.raw.id === id)\n throw new Error('Use distinct step ids within a tracked workflow.');\n next.add(target.raw.id);\n }\n for (const value of next) ids.add(value);\n for (const target of targets) if (target.workflow) workflow.nested.set(target.raw.id, target.shape);\n };\n const mutable = () => {\n assert();\n if (workflow.committed) throw new Error('Tracked workflow is already committed.');\n };\n const add = (kind: 'parallel' | 'branch', targets: Definition[]) => {\n definition.shape.children.push({\n key: key(),\n label: kind,\n kind,\n children: targets.map((target) => occurrence(target.shape)),\n });\n };\n const handle = Object.freeze({\n id,\n // Mastra intentionally names its fluent composition method then, not a Promise continuation.\n // oxlint-disable-next-line unicorn/no-thenable\n then(value: unknown) {\n mutable();\n const target = definitionFor(value);\n claim([target]);\n raw.then(target.raw);\n definition.shape.children.push(occurrence(target.shape));\n return handle;\n },\n parallel(values: unknown) {\n mutable();\n if (!Array.isArray(values) || !values.length)\n throw new Error('parallel requires a non-empty array of tracked steps.');\n const targets = values.map(definitionFor);\n claim(targets);\n raw.parallel(targets.map((target) => target.raw));\n add('parallel', targets);\n return handle;\n },\n branch(values: unknown) {\n mutable();\n if (!Array.isArray(values) || !values.length)\n throw new Error('branch requires predicate/step pairs.');\n const targets: Definition[] = [];\n const pairs = values.map(\n (pair: unknown): [(params: Record<string, unknown>) => Promise<boolean>, RawStep] => {\n if (!Array.isArray(pair) || pair.length !== 2 || typeof pair[0] !== 'function')\n throw new Error('branch requires [predicate, tracked step] pairs.');\n const target = definitionFor(pair[1]);\n targets.push(target);\n const predicate = pair[0] as (params: Record<string, unknown>) => unknown;\n return [\n async (params) => {\n assert();\n const operationSignal = callbackSignal(signal, params);\n try {\n const answer = await callbackWithAbort(\n () => predicate(callbackParameters(params)),\n operationSignal,\n );\n if (typeof answer !== 'boolean')\n throw new Error(\n 'Tracked branch predicates must return a boolean. Inspect exec diagnostics if a guest callback failed.',\n );\n return answer;\n } catch (error) {\n if (operationSignal.aborted) throw error;\n const execution = runContext.getStore();\n if (execution) {\n const message = errorText(error);\n execution.boundaryErrors.push(message);\n execution.root.error = message;\n const leaves = new Set<string>();\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'step') leaves.add(shape.key);\n else shape.children.forEach(visit);\n };\n const position = findShape(execution.shape, target.shape);\n if (position) visit(position);\n for (const phase of execution.item.phases)\n if (leaves.has(phase.key)) {\n boundaryFailures.add(phase);\n phase.error = message;\n }\n }\n throw error;\n }\n },\n target.raw,\n ];\n },\n );\n claim(targets);\n raw.branch(pairs);\n add('branch', targets);\n return handle;\n },\n foreach(value: unknown, settings: unknown) {\n mutable();\n const target = definitionFor(value);\n if (!target.workflow)\n throw new Error('foreach requires a committed tracked item workflow, not a bare step.');\n const opts = options(settings, ['concurrency'], 'foreach');\n if (!Number.isSafeInteger(opts.concurrency) || Number(opts.concurrency) < 1)\n throw new Error('foreach.concurrency must be a positive integer.');\n const concurrency = Number(opts.concurrency);\n claim([target]);\n const shape: DynamicWorkflowShape = {\n key: key(),\n kind: 'foreach',\n label: target.shape.label,\n children: [occurrence(target.shape)],\n };\n raw.foreach(target.workflow.raw, {\n concurrency: ({ inputData }) => {\n assert();\n const execution = runContext.getStore();\n if (!execution || !Array.isArray(inputData))\n throw new Error('Tracked foreach requires array input and an active run.');\n const position = findShape(execution.shape, shape);\n if (!position) throw new Error('Foreach has no tracked graph position.');\n const group = createGroup(execution, position, inputData.length, concurrency);\n group.items = inputData.map((_, index) => makeItem(target, index, position.children[0]));\n publish();\n return concurrency;\n },\n });\n workflow.foreach.set(target.raw.id, shape);\n definition.shape.children.push(shape);\n return handle;\n },\n commit() {\n mutable();\n raw.commit();\n workflow.committed = true;\n return handle;\n },\n async createRun(value?: unknown) {\n assert();\n if (!workflow.committed) throw new Error('Commit the tracked workflow before creating a run.');\n if (value !== undefined && Object.keys(options(value, [], 'createRun')).length)\n throw new Error('createRun options are unsupported.');\n const live = await raw.createRun();\n return Object.freeze({\n runId: live.runId,\n async start(value: unknown) {\n assert();\n const opts = options(value, ['inputData'], 'start');\n return live.start(opts);\n },\n async cancel() {\n assert();\n await live.cancel();\n },\n });\n },\n });\n definitions.set(handle, definition);\n return handle;\n },\n };\n return members;\n },\n };\n },\n async dispose() {\n disposed = true;\n for (const binding of bindings) binding.abort(new Error('dynamicWorkflow session is disposed.'));\n bindings.clear();\n await Promise.allSettled([...activeCancels].map((cancel) => cancel()));\n await Promise.allSettled(activeStarts);\n children.clear();\n },\n };\n}\n","import { PO_CODEMODE_SERVICE, readPoCodemode } from '@agimon-ai/po-core/codemode';\nimport { PO_TEAM_INLINE_RUN_EVENT } from '@agimon-ai/po-core/delegation';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../../../constants/dynamicWorkflow';\nimport { createWorkflowTracker } from '../../../../services/workflowTracker';\n\nexport default defineRoot(async ({ context, agent, host, signal }: PoServerPluginContext) => {\n if (!agent) throw new Error('Dynamic workflow requires a headless session host.');\n const runtime = await createWorkflowTracker({\n sessionId: agent.context.sessionId,\n publish: (snapshot) =>\n host.context.directEvents?.publish(DYNAMIC_WORKFLOW_CHANNEL, agent.context.sessionId, snapshot),\n });\n const stopEvents = context.on(PO_TEAM_INLINE_RUN_EVENT, (event) => runtime.inlineRun(event));\n context.inject([PO_CODEMODE_SERVICE], (scoped) => {\n const codemode = readPoCodemode(scoped);\n const registration = codemode?.register('@agimon-ai/po-dynamic-workflow', runtime.namespace(signal));\n return () => registration?.dispose();\n });\n host.context.directEvents?.publish(DYNAMIC_WORKFLOW_CHANNEL, agent.context.sessionId, runtime.snapshot());\n return {\n value: runtime,\n onDispose: async () => {\n try {\n await runtime.dispose();\n } finally {\n stopEvents();\n }\n },\n };\n});\n","import type { PoHubChannel, PoHubSessionScope } from '@agimon-ai/po-core/hubChannel';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../constants/dynamicWorkflow';\nimport type { DynamicWorkflowSnapshot } from '../../types/dynamicWorkflow';\n\nexport function createWorkflowChannel(): PoHubChannel {\n return {\n frameType: DYNAMIC_WORKFLOW_CHANNEL,\n start(host) {\n const latest = new Map<string, DynamicWorkflowSnapshot>();\n const subscriptions = new Map<string, () => void>();\n const scopes = new Map<string, PoHubSessionScope>();\n return {\n payloadFor: (scope) => latest.get(scope.sessionId),\n sessionAdded(scope) {\n subscriptions.get(scope.sessionId)?.();\n scopes.set(scope.sessionId, scope);\n latest.delete(scope.sessionId);\n subscriptions.set(\n scope.sessionId,\n host.directEvents.subscribe(\n DYNAMIC_WORKFLOW_CHANNEL,\n scope.sessionId,\n (value) => {\n if (scopes.get(scope.sessionId) !== scope || !value || typeof value !== 'object') return;\n const snapshot = value as DynamicWorkflowSnapshot;\n if (snapshot.version !== 1 || snapshot.sessionId !== scope.sessionId || !Array.isArray(snapshot.runs))\n return;\n const detached = structuredClone(snapshot);\n latest.set(scope.sessionId, detached);\n host.publish(scope.sessionId, detached);\n },\n { replayLatest: true },\n ),\n );\n },\n sessionRemoved(id) {\n subscriptions.get(id)?.();\n subscriptions.delete(id);\n scopes.delete(id);\n latest.delete(id);\n },\n close() {\n for (const unsubscribe of subscriptions.values()) unsubscribe();\n subscriptions.clear();\n scopes.clear();\n latest.clear();\n },\n };\n },\n };\n}\n","import { defineChannel } from '@agimon-ai/po-core/extensionFile';\n\nimport { createWorkflowChannel } from '../../../services/workflowChannel';\n\nexport default defineChannel(createWorkflowChannel);\n","import { defineResource } from '@agimon-ai/po-core/extensionFile';\nimport { packageResourcePath, readPackageResource } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineResource({\n name: 'codemode-how-to-dynamic-workflow',\n description:\n 'Let the person follow a long multi-phase or fan-out job live, with each child agent transcript in Activity. Use when a script runs many steps or subagents that someone should be able to watch.',\n kind: 'skill' as const,\n pinned: true,\n path: packageResourcePath(import.meta.url, 'src/prompts/codemode-how-to-dynamic-workflow/SKILL.md'),\n read: () => readPackageResource(import.meta.url, 'src/prompts/codemode-how-to-dynamic-workflow/SKILL.md'),\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverPlugin';\nimport { composeRootHooks, composeRootInjects } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport channelDynamicWorkflowRuns from '../src/extensions/(backend)/channel/dynamic-workflow-runs.server';\nimport resourceCodemodeHowToDynamicWorkflow from '../src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n/* v8 ignore next -- generated normalization branch */\nconst defined = <T>(values: readonly (T | undefined)[]): T[] =>\n values.filter((value): value is T => value !== undefined);\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-dynamic-workflow',\n providerOverrides: composeServerProviderOverrides(rootSession),\n injects: composeRootInjects({ session: [rootSession] }),\n global: (context) => ({\n get channels(): PoServerSessionPlugin['channels'] { return [() => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]; },\n }),\n workspace: (context) => ({\n get channels(): PoServerSessionPlugin['channels'] { return defined([context.hosted('global') ? undefined : () => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]); },\n }),\n session: async (context) => {\n const scopeSession = await context.scopeRoot('session', rootSession, context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get channels(): PoServerSessionPlugin['channels'] { return defined([context.hosted('global') ? undefined : () => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]); },\n get resources(): PoServerSessionPlugin['resources'] { return [at(resourceCodemodeHowToDynamicWorkflow, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): PoServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default serverPlugin;\n"],"mappings":"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"}
|
|
@@ -829,7 +829,7 @@ var dynamic_workflow_runs_server_default = defineChannel(createWorkflowChannel);
|
|
|
829
829
|
//#region src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server.ts
|
|
830
830
|
var codemode_how_to_dynamic_workflow_server_default = defineResource({
|
|
831
831
|
name: "codemode-how-to-dynamic-workflow",
|
|
832
|
-
description: "
|
|
832
|
+
description: "Let the person follow a long multi-phase or fan-out job live, with each child agent transcript in Activity. Use when a script runs many steps or subagents that someone should be able to watch.",
|
|
833
833
|
kind: "skill",
|
|
834
834
|
pinned: true,
|
|
835
835
|
path: packageResourcePath(import.meta.url, "src/prompts/codemode-how-to-dynamic-workflow/SKILL.md"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.mjs","names":["rootSession","channelDynamicWorkflowRuns","resourceCodemodeHowToDynamicWorkflow"],"sources":["../../src/constants/dynamicWorkflow.ts","../../src/constants/declarations.ts","../../src/services/workflowTracker/index.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/services/workflowChannel/index.ts","../../src/extensions/(backend)/channel/dynamic-workflow-runs.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server.ts","../../generated/server.ts"],"sourcesContent":["export const DYNAMIC_WORKFLOW_CHANNEL = 'dynamic_workflow_runs';\n","export const dynamicWorkflowDeclarations = `\ninterface WorkflowSchema<T> {\n readonly _output: T;\n parse(value: unknown): T;\n optional(): WorkflowSchema<T | undefined>;\n nullable(): WorkflowSchema<T | null>;\n default(value: T): WorkflowSchema<T>;\n array(): WorkflowSchema<T[]>;\n describe(text: string): WorkflowSchema<T>;\n min(value: number): WorkflowSchema<T>;\n max(value: number): WorkflowSchema<T>;\n int(): WorkflowSchema<T>;\n positive(): WorkflowSchema<T>;\n nonnegative(): WorkflowSchema<T>;\n trim(): WorkflowSchema<T>;\n}\ntype WorkflowSchemaOutput<S> = S extends WorkflowSchema<infer T> ? T : never;\ntype WorkflowObject<S extends Record<string, WorkflowSchema<unknown>>> =\n { [K in keyof S as undefined extends WorkflowSchemaOutput<S[K]> ? never : K]: WorkflowSchemaOutput<S[K]> } &\n { [K in keyof S as undefined extends WorkflowSchemaOutput<S[K]> ? K : never]?: WorkflowSchemaOutput<S[K]> };\ninterface WorkflowZod {\n string(): WorkflowSchema<string>;\n number(): WorkflowSchema<number>;\n boolean(): WorkflowSchema<boolean>;\n null(): WorkflowSchema<null>;\n unknown(): WorkflowSchema<unknown>;\n any(): WorkflowSchema<unknown>;\n literal<T extends string | number | boolean | null>(value: T): WorkflowSchema<T>;\n enum<T extends string>(values: readonly [T, ...T[]]): WorkflowSchema<T>;\n object<S extends Record<string, WorkflowSchema<unknown>>>(shape: S): WorkflowSchema<WorkflowObject<S>>;\n array<T>(item: WorkflowSchema<T>): WorkflowSchema<T[]>;\n record<T>(item: WorkflowSchema<T>): WorkflowSchema<Record<string,T>>;\n union<S extends readonly [WorkflowSchema<unknown>, WorkflowSchema<unknown>, ...WorkflowSchema<unknown>[]]>(schemas: S): WorkflowSchema<WorkflowSchemaOutput<S[number]>>;\n}\ninterface WorkflowExecute<I> {\n inputData: I;\n runId: string;\n abortSignal: AbortSignal;\n getInitData(): unknown;\n}\ninterface TrackedStep<I = unknown, O = unknown, Id extends string = string> {\n readonly id: Id;\n readonly __input?: I;\n readonly __output?: O;\n}\ninterface TrackedRun<I, O> {\n readonly runId: string;\n start(options: { inputData: I }): Promise<{ status: string; result?: O; error?: unknown }>;\n cancel(): Promise<void>;\n}\ninterface TrackedWorkflow<I, O, Current = I> extends TrackedStep<I,O> {\n then<T>(step: TrackedStep<Current,T>): TrackedWorkflow<I,O,T>;\n parallel<T extends readonly TrackedStep<Current,unknown>[]>(steps: T): TrackedWorkflow<I,O,Record<T[number]['id'],T[number] extends TrackedStep<Current,infer Out> ? Out : never>>;\n branch(choices: [((params: WorkflowExecute<Current>) => boolean | Promise<boolean>), TrackedStep<Current,unknown>][]): TrackedWorkflow<I,O,Record<string,unknown>>;\n foreach<T, U, C>(item: TrackedWorkflow<T,U,C>, options: { concurrency: number }): TrackedWorkflow<I,O,U[]>;\n commit(): TrackedWorkflow<I,O,Current>;\n createRun(): Promise<TrackedRun<I,O>>;\n}\ndeclare const dynamicWorkflow: {\n createStep<I,O,Id extends string>(options: { id: Id; description?: string; inputSchema: WorkflowSchema<I>; outputSchema: WorkflowSchema<O>; execute: (params: WorkflowExecute<I>) => O | Promise<O> }): TrackedStep<I,O,Id>;\n createWorkflow<I,O>(options: { id: string; description?: string; inputSchema: WorkflowSchema<I>; outputSchema: WorkflowSchema<O> }): TrackedWorkflow<I,O>;\n /** Zod 3.25.76. Common constructors are declared here; runtime supplies the real z object. */\n z: WorkflowZod;\n};`;\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createRequire } from 'node:module';\n\nimport type { PoCodemodeRun } from '@agimon-ai/po-core/codemode';\nimport type * as Zod from 'zod';\n\nimport { dynamicWorkflowDeclarations } from '../../constants/declarations';\nimport type {\n DynamicWorkflowGroup,\n DynamicWorkflowItem,\n DynamicWorkflowPhase,\n DynamicWorkflowRun,\n DynamicWorkflowShape,\n DynamicWorkflowSnapshot,\n DynamicWorkflowStatus,\n} from '../../types/dynamicWorkflow';\nimport type { WorkflowTracker, WorkflowTrackerOptions } from './type';\n\ninterface RawStep {\n id: string;\n execute: (params: Record<string, unknown>) => Promise<unknown>;\n}\ninterface RawRun {\n runId: string;\n start: (options: Record<string, unknown>) => Promise<Record<string, unknown>>;\n cancel: () => Promise<unknown>;\n}\ninterface RawWorkflow extends RawStep {\n then(step: RawStep): RawWorkflow;\n parallel(steps: RawStep[]): RawWorkflow;\n branch(steps: [(params: Record<string, unknown>) => Promise<boolean>, RawStep][]): RawWorkflow;\n foreach(step: RawWorkflow, options: { concurrency: (params: { inputData: unknown }) => number }): RawWorkflow;\n commit(): RawWorkflow;\n createRun(options?: Record<string, unknown>): Promise<RawRun>;\n}\ninterface Factories {\n createStep(options: Record<string, unknown>): RawStep;\n createWorkflow(options: Record<string, unknown>): RawWorkflow;\n z: typeof Zod.z;\n}\ninterface Definition {\n raw: RawStep;\n shape: DynamicWorkflowShape;\n workflow?: {\n raw: RawWorkflow;\n committed: boolean;\n foreach: Map<string, DynamicWorkflowShape>;\n nested: Map<string, DynamicWorkflowShape>;\n };\n}\ninterface Execution {\n root: DynamicWorkflowRun;\n definition: Definition;\n item: DynamicWorkflowItem;\n boundaryErrors: string[];\n shape: DynamicWorkflowShape;\n}\ninterface PhaseOwner {\n execution: Execution;\n phase: DynamicWorkflowPhase;\n}\n\nconst object = (value: unknown, name: string): Record<string, unknown> => {\n if (value === null || typeof value !== 'object' || Array.isArray(value))\n throw new Error(`${name} must be an object.`);\n return value as Record<string, unknown>;\n};\nconst options = (value: unknown, keys: string[], name: string): Record<string, unknown> => {\n const result = object(value, name);\n for (const key of Object.keys(result))\n if (!keys.includes(key)) throw new Error(`${name}.${key} is not supported by tracked workflows.`);\n return result;\n};\nconst label = (value: unknown): string => {\n if (typeof value !== 'string' || !value.trim() || value.length > 160)\n throw new Error('Workflow and step ids must be non-empty strings of at most 160 characters.');\n return value;\n};\nconst callbackParameters = (params: Record<string, unknown>): Record<string, unknown> => ({\n inputData: params.inputData,\n runId: params.runId,\n abortSignal: params.abortSignal,\n ...(typeof params.getInitData === 'function' ? { getInitData: params.getInitData } : {}),\n});\n/** Reject the host wrapper on abort; late guest settlement cannot write tracked state. */\nconst callbackWithAbort = (callback: () => unknown, signal: AbortSignal): Promise<unknown> => {\n signal.throwIfAborted();\n return new Promise((resolve, reject) => {\n const abort = () => {\n signal.removeEventListener('abort', abort);\n reject(signal.reason);\n };\n signal.addEventListener('abort', abort, { once: true });\n Promise.resolve()\n .then(() => {\n signal.throwIfAborted();\n return callback();\n })\n .then(\n (value) => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n (error) => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n};\nconst callbackSignal = (binding: AbortSignal, params: Record<string, unknown>): AbortSignal =>\n params.abortSignal instanceof AbortSignal ? AbortSignal.any([binding, params.abortSignal]) : binding;\nconst validateDefinition = (def: Record<string, unknown>) => {\n if (def.description !== undefined && (typeof def.description !== 'string' || def.description.length > 500))\n throw new Error('description must be a string of at most 500 characters.');\n for (const field of ['inputSchema', 'outputSchema']) {\n const schema = object(def[field], field);\n if (typeof schema.safeParse !== 'function') throw new Error(`${field} must be a Zod schema.`);\n }\n};\nconst errorText = (error: unknown): string =>\n (error && typeof error === 'object' && 'message' in error && typeof error.message === 'string'\n ? error.message\n : String(error)\n ).slice(0, 500);\nconst status = (value: unknown): DynamicWorkflowStatus => {\n if (value === 'success') return 'completed';\n if (value === 'canceled' || value === 'cancelled') return 'stopped';\n if (value === 'failed') return 'failed';\n throw new Error(`Unsupported Mastra result status: ${String(value)}.`);\n};\nconst counts = (): Record<DynamicWorkflowStatus, number> => ({\n pending: 0,\n running: 0,\n completed: 0,\n failed: 0,\n stopped: 0,\n skipped: 0,\n});\n/** Mastra executes. This observer only decorates constructors and lifecycle calls. */\nexport async function createWorkflowTracker(config: WorkflowTrackerOptions): Promise<WorkflowTracker> {\n let factories: Factories | undefined;\n const loadFactories = (): Factories => {\n if (!factories) {\n const require = createRequire(import.meta.url);\n const workflow = require('@mastra/core/workflows') as Pick<Factories, 'createStep' | 'createWorkflow'>;\n const schemas = require('zod') as Pick<Factories, 'z'>;\n factories = { ...workflow, z: schemas.z };\n }\n return factories;\n };\n const now = config.now ?? Date.now;\n const roots: DynamicWorkflowRun[] = [];\n const context = new AsyncLocalStorage<PhaseOwner>();\n const runContext = new AsyncLocalStorage<Execution>();\n const children = new Map<string, PhaseOwner>();\n const boundaryFailures = new WeakSet<DynamicWorkflowPhase>();\n const intentionalStops = new WeakSet<DynamicWorkflowPhase>();\n let revision = 0;\n let serial = 0;\n let disposed = false;\n const key = () => `workflow-${++serial}`;\n const origins = new WeakMap<DynamicWorkflowShape, string>();\n const origin = (shape: DynamicWorkflowShape) => origins.get(shape) ?? shape.key;\n const occurrence = (shape: DynamicWorkflowShape): DynamicWorkflowShape => {\n const result = { ...shape, key: key(), children: shape.children.map(occurrence) };\n origins.set(result, origin(shape));\n return result;\n };\n const findShape = (shape: DynamicWorkflowShape, source: DynamicWorkflowShape): DynamicWorkflowShape | undefined => {\n if (origin(shape) === origin(source)) return shape;\n for (const child of shape.children) {\n const found = findShape(child, source);\n if (found) return found;\n }\n return undefined;\n };\n const directSteps = (shape: DynamicWorkflowShape): DynamicWorkflowShape[] => {\n const result: DynamicWorkflowShape[] = [];\n const visit = (node: DynamicWorkflowShape): void => {\n if (node.kind === 'step') result.push(node);\n else if (node.kind === 'parallel' || node.kind === 'branch') node.children.forEach(visit);\n };\n shape.children.forEach(visit);\n return result;\n };\n const snapshot = (): DynamicWorkflowSnapshot =>\n structuredClone({\n version: 1,\n revision,\n sessionId: config.sessionId,\n runs: roots.map((run) => ({\n ...run,\n groups: run.groups.map((group) => ({\n ...group,\n counts: group.items.reduce((sum, item) => {\n sum[item.status]++;\n return sum;\n }, counts()),\n truncated: group.items.length > 1000,\n items: group.items.slice(0, 1000),\n })),\n })),\n });\n const publish = () => {\n revision++;\n // Observers cannot change workflow execution or strand a running item.\n try {\n config.publish?.(snapshot());\n } catch {\n /* Publication is best effort. */\n }\n };\n const derive = (phase: DynamicWorkflowPhase) => {\n phase.status =\n boundaryFailures.has(phase) || phase.agents.some((agent) => agent.status === 'failed')\n ? 'failed'\n : intentionalStops.has(phase)\n ? 'stopped'\n : phase.executionStatus;\n };\n const summarize = (item: DynamicWorkflowItem) => {\n item.status = item.phases.some((phase) => phase.status === 'failed')\n ? 'failed'\n : item.phases.some((phase) => phase.status === 'running')\n ? 'running'\n : item.phases.some((phase) => phase.status === 'stopped')\n ? 'stopped'\n : item.phases.every((phase) => phase.status === 'skipped')\n ? 'skipped'\n : item.phases.some((phase) => phase.status === 'pending')\n ? 'pending'\n : 'completed';\n };\n const update = (owner: PhaseOwner) => {\n derive(owner.phase);\n summarize(owner.execution.item);\n publish();\n };\n const terminal = (execution: Execution, outcome: DynamicWorkflowStatus, root: boolean, engineOutcome = outcome) => {\n const relevant = new Set<string>();\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'foreach') return;\n if (shape.kind === 'step') relevant.add(shape.key);\n else shape.children.forEach(visit);\n };\n visit(execution.shape);\n for (const phase of execution.item.phases) {\n if (!root && !relevant.has(phase.key)) continue;\n if (phase.executionStatus === 'pending') phase.executionStatus = 'skipped';\n else if (phase.executionStatus === 'running') phase.executionStatus = outcome;\n derive(phase);\n }\n if (execution.item.phases.length) summarize(execution.item);\n else execution.item.status = outcome;\n if (\n execution.root.groups.some(\n (group) =>\n group.key.startsWith(`${execution.item.key}/`) && group.items.some((item) => item.status === 'failed'),\n )\n )\n execution.item.status = 'failed';\n if (root) {\n execution.root.executionStatus = engineOutcome;\n execution.root.status = execution.root.groups.some((group) =>\n group.items.some((item) => item.status === 'failed'),\n )\n ? 'failed'\n : outcome;\n execution.root.finishedAt = now();\n for (const group of execution.root.groups)\n for (const item of group.items) {\n if (item.status === 'pending') {\n item.status = 'skipped';\n for (const phase of item.phases)\n if (phase.executionStatus === 'pending') phase.status = phase.executionStatus = 'skipped';\n }\n }\n const completed = roots.filter((run) => run.executionStatus !== 'running');\n for (const run of completed.slice(0, Math.max(0, completed.length - 20))) {\n roots.splice(roots.indexOf(run), 1);\n for (const [id, owner] of children) if (owner.execution.root === run) children.delete(id);\n }\n }\n publish();\n };\n const reconcile = (execution: Execution, result: Record<string, unknown>) => {\n if (!result.steps || typeof result.steps !== 'object') return;\n const results = result.steps as Record<string, unknown>;\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'step') {\n // The contract captures the exact Mastra step id as label, not an inferred display name.\n const value = results[shape.label];\n if (!value || typeof value !== 'object') return;\n const detail = value as Record<string, unknown>;\n const phase = execution.item.phases.find((phase) => phase.key === shape.key);\n if (!phase || !['success', 'failed', 'canceled', 'cancelled', 'skipped'].includes(String(detail.status)))\n return;\n phase.executionStatus = detail.status === 'skipped' ? 'skipped' : status(detail.status);\n if (typeof detail.startedAt === 'number') phase.startedAt = detail.startedAt;\n if (typeof detail.endedAt === 'number') phase.finishedAt = detail.endedAt;\n if (detail.error) phase.error = errorText(detail.error);\n derive(phase);\n } else if (shape.kind === 'parallel' || shape.kind === 'branch') shape.children.forEach(visit);\n };\n // Nested workflows reconcile their own result, which can reuse parent run ids.\n execution.shape.children.forEach(visit);\n };\n const makeItem = (definition: Definition, index: number, shape = definition.shape): DynamicWorkflowItem => {\n const phases: DynamicWorkflowPhase[] = [];\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'foreach') return;\n if (shape.kind === 'step')\n phases.push({ key: shape.key, label: shape.label, status: 'pending', executionStatus: 'pending', agents: [] });\n else shape.children.forEach(visit);\n };\n visit(shape);\n return { key: key(), index, label: `Item ${index + 1}`, status: 'pending', phases };\n };\n const activeCancels = new Set<() => Promise<unknown>>();\n const activeStarts = new Set<Promise<unknown>>();\n const bindings = new Set<AbortController>();\n return {\n snapshot,\n inlineRun(event) {\n if (event.sessionId !== config.sessionId) return;\n if (event.status === 'running') {\n if (disposed) return;\n const owner = context.getStore();\n if (!owner || owner.phase.executionStatus !== 'running' || owner.execution.root.executionStatus !== 'running')\n return;\n children.set(event.runId, owner);\n if (!owner.phase.agents.some((agent) => agent.runId === event.runId))\n owner.phase.agents.push({ runId: event.runId, status: event.status });\n update(owner);\n } else {\n const owner = children.get(event.runId);\n const agent = owner?.phase.agents.find((agent) => agent.runId === event.runId);\n if (owner && agent) {\n agent.status = event.status;\n update(owner);\n }\n }\n },\n namespace(lifetime) {\n return {\n name: 'dynamicWorkflow',\n summary:\n 'Tracked Mastra workflows: then, parallel, branch and bounded foreach, with live child-agent transcripts in Activity.',\n declarations: dynamicWorkflowDeclarations,\n bind(run: PoCodemodeRun) {\n if (run.sessionId !== config.sessionId) throw new Error('dynamicWorkflow belongs to another session.');\n const binding = new AbortController();\n bindings.add(binding);\n const signal = AbortSignal.any([lifetime, run.signal, binding.signal]);\n let closed = false;\n const assert = () => {\n signal.throwIfAborted();\n if (closed || disposed) throw new Error('dynamicWorkflow execution is disposed.');\n };\n const definitions = new WeakMap<object, Definition>();\n const pendingCancels = new Set<() => Promise<unknown>>();\n const pendingStarts = new Set<Promise<unknown>>();\n const stop = () => {\n closed = true;\n for (const cancel of pendingCancels) void cancel().catch(() => undefined);\n };\n signal.addEventListener('abort', stop, { once: true });\n run.onDispose(async () => {\n closed = true;\n binding.abort(new Error('dynamicWorkflow execution is disposed.'));\n bindings.delete(binding);\n signal.removeEventListener('abort', stop);\n await Promise.allSettled([...pendingCancels].map((cancel) => cancel()));\n await Promise.allSettled(pendingStarts);\n });\n const definitionFor = (value: unknown): Definition => {\n const definition = definitions.get(object(value, 'Tracked step'));\n if (!definition)\n throw new Error('Only steps and workflows created by this dynamicWorkflow execution are supported.');\n if (definition.workflow && !definition.workflow.committed)\n throw new Error('Commit nested workflows before composing them.');\n return definition;\n };\n const createGroup = (\n execution: Execution,\n shape: DynamicWorkflowShape,\n total: number,\n concurrency: number,\n ): DynamicWorkflowGroup => {\n const groupKey = `${execution.item.key}/${shape.key}`;\n let group = execution.root.groups.find((group) => group.key === groupKey);\n if (!group) {\n group = {\n key: groupKey,\n label: shape.label,\n total,\n counts: counts(),\n truncated: false,\n concurrency,\n items: [],\n };\n execution.root.groups.push(group);\n }\n return group;\n };\n const members: Record<string, unknown> = {\n get z() {\n assert();\n return loadFactories().z;\n },\n createStep(value: unknown) {\n assert();\n const def = options(value, ['id', 'description', 'inputSchema', 'outputSchema', 'execute'], 'createStep');\n const id = label(def.id);\n validateDefinition(def);\n if (typeof def.execute !== 'function') throw new Error('createStep.execute must be a function.');\n const callback = def.execute as (params: Record<string, unknown>) => unknown;\n const shape: DynamicWorkflowShape = { key: key(), label: id, kind: 'step', children: [] };\n const raw = loadFactories().createStep({\n ...def,\n id,\n execute: async (params: Record<string, unknown>) => {\n assert();\n const execution = runContext.getStore();\n const position =\n execution && directSteps(execution.shape).find((candidate) => origin(candidate) === shape.key);\n const phase = execution?.item.phases.find((phase) => phase.key === position?.key);\n if (!execution || !phase) throw new Error('Tracked step has no execution context.');\n phase.executionStatus = phase.status = 'running';\n phase.startedAt = now();\n execution.item.status = 'running';\n publish();\n const owner = { execution, phase };\n const operationSignal = callbackSignal(signal, params);\n return context.run(owner, async () => {\n try {\n const output = await callbackWithAbort(\n () => callback(callbackParameters(params)),\n operationSignal,\n );\n operationSignal.throwIfAborted();\n assert();\n if (output === undefined)\n throw new Error(\n 'Tracked callback returned undefined. Return null for empty output, or inspect exec diagnostics for a guest callback error.',\n );\n phase.executionStatus = 'completed';\n return output;\n } catch (error) {\n if (operationSignal.aborted || closed || disposed) intentionalStops.add(phase);\n phase.executionStatus = 'failed';\n phase.error = errorText(error);\n throw error;\n } finally {\n phase.finishedAt = now();\n update(owner);\n }\n });\n },\n });\n const handle = Object.freeze({ id });\n definitions.set(handle, { raw, shape });\n return handle;\n },\n createWorkflow(value: unknown) {\n assert();\n const def = options(value, ['id', 'description', 'inputSchema', 'outputSchema'], 'createWorkflow');\n const id = label(def.id);\n validateDefinition(def);\n const raw = loadFactories().createWorkflow({ ...def, id });\n const definition: Definition = {\n raw,\n shape: { key: key(), kind: 'sequence', label: id, children: [] },\n workflow: { raw, committed: false, foreach: new Map(), nested: new Map() },\n };\n const workflow = definition.workflow!;\n const rawCreateRun = raw.createRun.bind(raw);\n raw.createRun = async (createOptions: Record<string, unknown> = {}) => {\n assert();\n const rawRun = await rawCreateRun(createOptions);\n const parent = createOptions.parentWorkflow as\n | { runId: string; stepId: string; foreachIndex?: number }\n | undefined;\n let execution: Execution | undefined;\n if (parent) {\n const ancestor = runContext.getStore();\n if (!ancestor) throw new Error('Nested workflow has no tracked parent.');\n const authoredForeach = ancestor.definition.workflow?.foreach.get(parent.stepId);\n const foreachShape = authoredForeach && findShape(ancestor.shape, authoredForeach);\n if (foreachShape) {\n if (!Number.isSafeInteger(parent.foreachIndex) || parent.foreachIndex! < 0)\n throw new Error('Nested foreach did not provide a stable item index.');\n const group = ancestor.root.groups.find(\n (group) => group.key === `${ancestor.item.key}/${foreachShape.key}`,\n );\n if (!group) throw new Error('Nested foreach has no observed group.');\n const item = group.items[parent.foreachIndex!];\n if (!item) throw new Error('Nested foreach item is outside its observed input.');\n execution = {\n root: ancestor.root,\n item,\n definition,\n boundaryErrors: ancestor.boundaryErrors,\n shape: foreachShape.children[0]!,\n };\n } else {\n const authored = ancestor.definition.workflow?.nested.get(parent.stepId);\n const position = authored && findShape(ancestor.shape, authored);\n if (!position) throw new Error('Nested workflow has no tracked graph position.');\n execution = { ...ancestor, definition, shape: position };\n }\n }\n const start = rawRun.start.bind(rawRun);\n const cancel = rawRun.cancel.bind(rawRun);\n let started = false;\n let cancelled = false;\n const cancelTracked = async () => {\n cancelled = true;\n return await cancel();\n };\n rawRun.cancel = cancelTracked;\n const executeStart = async (startOptions: Record<string, unknown>) => {\n assert();\n if (started) throw new Error('Tracked runs can only start once.');\n started = true;\n if (!parent) {\n const item = makeItem(definition, 0);\n item.label = id;\n const root: DynamicWorkflowRun = {\n key: rawRun.runId,\n workflowId: id,\n label: id,\n status: 'running',\n executionStatus: 'running',\n startedAt: now(),\n shape: structuredClone(definition.shape),\n groups: [{ key: key(), label: id, total: 1, counts: counts(), truncated: false, items: [item] }],\n };\n // Foreach-only roots do not need an empty synthetic row.\n if (!item.phases.length) root.groups = [];\n roots.push(root);\n execution = { root, item, definition, boundaryErrors: [], shape: definition.shape };\n publish();\n }\n if (!execution) throw new Error('Tracked run has no execution context.');\n execution.item.status = 'running';\n pendingCancels.add(cancelTracked);\n activeCancels.add(cancelTracked);\n let reported = false;\n try {\n const result = await runContext.run(execution, () => start(startOptions));\n const outcome =\n cancelled || signal.aborted || closed || disposed ? 'stopped' : status(result.status);\n if (result.error) execution.root.error = errorText(result.error);\n reconcile(execution, result);\n terminal(execution, outcome, !parent, status(result.status));\n reported = true;\n if (execution.boundaryErrors.length) throw new Error(execution.boundaryErrors[0]);\n return result;\n } catch (error) {\n if (!reported) {\n execution.root.error = errorText(error);\n terminal(\n execution,\n cancelled || signal.aborted || closed || disposed ? 'stopped' : 'failed',\n !parent,\n );\n }\n throw error;\n } finally {\n pendingCancels.delete(cancelTracked);\n activeCancels.delete(cancelTracked);\n }\n };\n rawRun.start = (startOptions) => {\n const started = executeStart(startOptions);\n pendingStarts.add(started);\n activeStarts.add(started);\n const settled = () => {\n pendingStarts.delete(started);\n activeStarts.delete(started);\n };\n void started.then(settled, settled);\n return started;\n };\n return rawRun;\n };\n const ids = new Set<string>();\n const claim = (targets: Definition[]) => {\n const next = new Set<string>();\n for (const target of targets) {\n if (ids.has(target.raw.id) || next.has(target.raw.id) || target.raw.id === id)\n throw new Error('Use distinct step ids within a tracked workflow.');\n next.add(target.raw.id);\n }\n for (const value of next) ids.add(value);\n for (const target of targets) if (target.workflow) workflow.nested.set(target.raw.id, target.shape);\n };\n const mutable = () => {\n assert();\n if (workflow.committed) throw new Error('Tracked workflow is already committed.');\n };\n const add = (kind: 'parallel' | 'branch', targets: Definition[]) => {\n definition.shape.children.push({\n key: key(),\n label: kind,\n kind,\n children: targets.map((target) => occurrence(target.shape)),\n });\n };\n const handle = Object.freeze({\n id,\n // Mastra intentionally names its fluent composition method then, not a Promise continuation.\n // oxlint-disable-next-line unicorn/no-thenable\n then(value: unknown) {\n mutable();\n const target = definitionFor(value);\n claim([target]);\n raw.then(target.raw);\n definition.shape.children.push(occurrence(target.shape));\n return handle;\n },\n parallel(values: unknown) {\n mutable();\n if (!Array.isArray(values) || !values.length)\n throw new Error('parallel requires a non-empty array of tracked steps.');\n const targets = values.map(definitionFor);\n claim(targets);\n raw.parallel(targets.map((target) => target.raw));\n add('parallel', targets);\n return handle;\n },\n branch(values: unknown) {\n mutable();\n if (!Array.isArray(values) || !values.length)\n throw new Error('branch requires predicate/step pairs.');\n const targets: Definition[] = [];\n const pairs = values.map(\n (pair: unknown): [(params: Record<string, unknown>) => Promise<boolean>, RawStep] => {\n if (!Array.isArray(pair) || pair.length !== 2 || typeof pair[0] !== 'function')\n throw new Error('branch requires [predicate, tracked step] pairs.');\n const target = definitionFor(pair[1]);\n targets.push(target);\n const predicate = pair[0] as (params: Record<string, unknown>) => unknown;\n return [\n async (params) => {\n assert();\n const operationSignal = callbackSignal(signal, params);\n try {\n const answer = await callbackWithAbort(\n () => predicate(callbackParameters(params)),\n operationSignal,\n );\n if (typeof answer !== 'boolean')\n throw new Error(\n 'Tracked branch predicates must return a boolean. Inspect exec diagnostics if a guest callback failed.',\n );\n return answer;\n } catch (error) {\n if (operationSignal.aborted) throw error;\n const execution = runContext.getStore();\n if (execution) {\n const message = errorText(error);\n execution.boundaryErrors.push(message);\n execution.root.error = message;\n const leaves = new Set<string>();\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'step') leaves.add(shape.key);\n else shape.children.forEach(visit);\n };\n const position = findShape(execution.shape, target.shape);\n if (position) visit(position);\n for (const phase of execution.item.phases)\n if (leaves.has(phase.key)) {\n boundaryFailures.add(phase);\n phase.error = message;\n }\n }\n throw error;\n }\n },\n target.raw,\n ];\n },\n );\n claim(targets);\n raw.branch(pairs);\n add('branch', targets);\n return handle;\n },\n foreach(value: unknown, settings: unknown) {\n mutable();\n const target = definitionFor(value);\n if (!target.workflow)\n throw new Error('foreach requires a committed tracked item workflow, not a bare step.');\n const opts = options(settings, ['concurrency'], 'foreach');\n if (!Number.isSafeInteger(opts.concurrency) || Number(opts.concurrency) < 1)\n throw new Error('foreach.concurrency must be a positive integer.');\n const concurrency = Number(opts.concurrency);\n claim([target]);\n const shape: DynamicWorkflowShape = {\n key: key(),\n kind: 'foreach',\n label: target.shape.label,\n children: [occurrence(target.shape)],\n };\n raw.foreach(target.workflow.raw, {\n concurrency: ({ inputData }) => {\n assert();\n const execution = runContext.getStore();\n if (!execution || !Array.isArray(inputData))\n throw new Error('Tracked foreach requires array input and an active run.');\n const position = findShape(execution.shape, shape);\n if (!position) throw new Error('Foreach has no tracked graph position.');\n const group = createGroup(execution, position, inputData.length, concurrency);\n group.items = inputData.map((_, index) => makeItem(target, index, position.children[0]));\n publish();\n return concurrency;\n },\n });\n workflow.foreach.set(target.raw.id, shape);\n definition.shape.children.push(shape);\n return handle;\n },\n commit() {\n mutable();\n raw.commit();\n workflow.committed = true;\n return handle;\n },\n async createRun(value?: unknown) {\n assert();\n if (!workflow.committed) throw new Error('Commit the tracked workflow before creating a run.');\n if (value !== undefined && Object.keys(options(value, [], 'createRun')).length)\n throw new Error('createRun options are unsupported.');\n const live = await raw.createRun();\n return Object.freeze({\n runId: live.runId,\n async start(value: unknown) {\n assert();\n const opts = options(value, ['inputData'], 'start');\n return live.start(opts);\n },\n async cancel() {\n assert();\n await live.cancel();\n },\n });\n },\n });\n definitions.set(handle, definition);\n return handle;\n },\n };\n return members;\n },\n };\n },\n async dispose() {\n disposed = true;\n for (const binding of bindings) binding.abort(new Error('dynamicWorkflow session is disposed.'));\n bindings.clear();\n await Promise.allSettled([...activeCancels].map((cancel) => cancel()));\n await Promise.allSettled(activeStarts);\n children.clear();\n },\n };\n}\n","import { PO_CODEMODE_SERVICE, readPoCodemode } from '@agimon-ai/po-core/codemode';\nimport { PO_TEAM_INLINE_RUN_EVENT } from '@agimon-ai/po-core/delegation';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../../../constants/dynamicWorkflow';\nimport { createWorkflowTracker } from '../../../../services/workflowTracker';\n\nexport default defineRoot(async ({ context, agent, host, signal }: PoServerPluginContext) => {\n if (!agent) throw new Error('Dynamic workflow requires a headless session host.');\n const runtime = await createWorkflowTracker({\n sessionId: agent.context.sessionId,\n publish: (snapshot) =>\n host.context.directEvents?.publish(DYNAMIC_WORKFLOW_CHANNEL, agent.context.sessionId, snapshot),\n });\n const stopEvents = context.on(PO_TEAM_INLINE_RUN_EVENT, (event) => runtime.inlineRun(event));\n context.inject([PO_CODEMODE_SERVICE], (scoped) => {\n const codemode = readPoCodemode(scoped);\n const registration = codemode?.register('@agimon-ai/po-dynamic-workflow', runtime.namespace(signal));\n return () => registration?.dispose();\n });\n host.context.directEvents?.publish(DYNAMIC_WORKFLOW_CHANNEL, agent.context.sessionId, runtime.snapshot());\n return {\n value: runtime,\n onDispose: async () => {\n try {\n await runtime.dispose();\n } finally {\n stopEvents();\n }\n },\n };\n});\n","import type { PoHubChannel, PoHubSessionScope } from '@agimon-ai/po-core/hubChannel';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../constants/dynamicWorkflow';\nimport type { DynamicWorkflowSnapshot } from '../../types/dynamicWorkflow';\n\nexport function createWorkflowChannel(): PoHubChannel {\n return {\n frameType: DYNAMIC_WORKFLOW_CHANNEL,\n start(host) {\n const latest = new Map<string, DynamicWorkflowSnapshot>();\n const subscriptions = new Map<string, () => void>();\n const scopes = new Map<string, PoHubSessionScope>();\n return {\n payloadFor: (scope) => latest.get(scope.sessionId),\n sessionAdded(scope) {\n subscriptions.get(scope.sessionId)?.();\n scopes.set(scope.sessionId, scope);\n latest.delete(scope.sessionId);\n subscriptions.set(\n scope.sessionId,\n host.directEvents.subscribe(\n DYNAMIC_WORKFLOW_CHANNEL,\n scope.sessionId,\n (value) => {\n if (scopes.get(scope.sessionId) !== scope || !value || typeof value !== 'object') return;\n const snapshot = value as DynamicWorkflowSnapshot;\n if (snapshot.version !== 1 || snapshot.sessionId !== scope.sessionId || !Array.isArray(snapshot.runs))\n return;\n const detached = structuredClone(snapshot);\n latest.set(scope.sessionId, detached);\n host.publish(scope.sessionId, detached);\n },\n { replayLatest: true },\n ),\n );\n },\n sessionRemoved(id) {\n subscriptions.get(id)?.();\n subscriptions.delete(id);\n scopes.delete(id);\n latest.delete(id);\n },\n close() {\n for (const unsubscribe of subscriptions.values()) unsubscribe();\n subscriptions.clear();\n scopes.clear();\n latest.clear();\n },\n };\n },\n };\n}\n","import { defineChannel } from '@agimon-ai/po-core/extensionFile';\n\nimport { createWorkflowChannel } from '../../../services/workflowChannel';\n\nexport default defineChannel(createWorkflowChannel);\n","import { defineResource } from '@agimon-ai/po-core/extensionFile';\nimport { packageResourcePath, readPackageResource } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineResource({\n name: 'codemode-how-to-dynamic-workflow',\n description: 'Compose tracked Mastra workflows and link live child-agent transcripts in Activity.',\n kind: 'skill' as const,\n pinned: true,\n path: packageResourcePath(import.meta.url, 'src/prompts/codemode-how-to-dynamic-workflow/SKILL.md'),\n read: () => readPackageResource(import.meta.url, 'src/prompts/codemode-how-to-dynamic-workflow/SKILL.md'),\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverPlugin';\nimport { composeRootHooks, composeRootInjects } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport channelDynamicWorkflowRuns from '../src/extensions/(backend)/channel/dynamic-workflow-runs.server';\nimport resourceCodemodeHowToDynamicWorkflow from '../src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n/* v8 ignore next -- generated normalization branch */\nconst defined = <T>(values: readonly (T | undefined)[]): T[] =>\n values.filter((value): value is T => value !== undefined);\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-dynamic-workflow',\n providerOverrides: composeServerProviderOverrides(rootSession),\n injects: composeRootInjects({ session: [rootSession] }),\n global: (context) => ({\n get channels(): PoServerSessionPlugin['channels'] { return [() => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]; },\n }),\n workspace: (context) => ({\n get channels(): PoServerSessionPlugin['channels'] { return defined([context.hosted('global') ? undefined : () => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]); },\n }),\n session: async (context) => {\n const scopeSession = await context.scopeRoot('session', rootSession, context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get channels(): PoServerSessionPlugin['channels'] { return defined([context.hosted('global') ? undefined : () => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]); },\n get resources(): PoServerSessionPlugin['resources'] { return [at(resourceCodemodeHowToDynamicWorkflow, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): PoServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default serverPlugin;\n"],"mappings":";;;;;;;AAAA,MAAa,2BAA2B;;;ACAxC,MAAa,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC8D3C,MAAM,UAAU,OAAgB,SAA0C;CACxE,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GACpE,MAAM,IAAI,MAAM,GAAG,KAAK,oBAAoB;CAC9C,OAAO;AACT;AACA,MAAM,WAAW,OAAgB,MAAgB,SAA0C;CACzF,MAAM,SAAS,OAAO,OAAO,IAAI;CACjC,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,GAClC,IAAI,CAAC,KAAK,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,KAAK,GAAG,IAAI,wCAAwC;CAClG,OAAO;AACT;AACA,MAAM,SAAS,UAA2B;CACxC,IAAI,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,KAAK,MAAM,SAAS,KAC/D,MAAM,IAAI,MAAM,4EAA4E;CAC9F,OAAO;AACT;AACA,MAAM,sBAAsB,YAA8D;CACxF,WAAW,OAAO;CAClB,OAAO,OAAO;CACd,aAAa,OAAO;CACpB,GAAI,OAAO,OAAO,gBAAgB,aAAa,EAAE,aAAa,OAAO,YAAY,IAAI,CAAC;AACxF;;AAEA,MAAM,qBAAqB,UAAyB,WAA0C;CAC5F,OAAO,eAAe;CACtB,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,cAAc;GAClB,OAAO,oBAAoB,SAAS,KAAK;GACzC,OAAO,OAAO,MAAM;EACtB;EACA,OAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;EACtD,QAAQ,QAAQ,CAAC,CACd,WAAW;GACV,OAAO,eAAe;GACtB,OAAO,SAAS;EAClB,CAAC,CAAC,CACD,MACE,UAAU;GACT,OAAO,oBAAoB,SAAS,KAAK;GACzC,QAAQ,KAAK;EACf,IACC,UAAU;GACT,OAAO,oBAAoB,SAAS,KAAK;GACzC,OAAO,KAAK;EACd,CACF;CACJ,CAAC;AACH;AACA,MAAM,kBAAkB,SAAsB,WAC5C,OAAO,uBAAuB,cAAc,YAAY,IAAI,CAAC,SAAS,OAAO,WAAW,CAAC,IAAI;AAC/F,MAAM,sBAAsB,QAAiC;CAC3D,IAAI,IAAI,gBAAgB,KAAA,MAAc,OAAO,IAAI,gBAAgB,YAAY,IAAI,YAAY,SAAS,MACpG,MAAM,IAAI,MAAM,yDAAyD;CAC3E,KAAK,MAAM,SAAS,CAAC,eAAe,cAAc,GAEhD,IAAI,OADW,OAAO,IAAI,QAAQ,KAClB,CAAC,CAAC,cAAc,YAAY,MAAM,IAAI,MAAM,GAAG,MAAM,uBAAuB;AAEhG;AACA,MAAM,aAAa,WAChB,SAAS,OAAO,UAAU,YAAY,aAAa,SAAS,OAAO,MAAM,YAAY,WAClF,MAAM,UACN,OAAO,KAAK,EAAA,CACd,MAAM,GAAG,GAAG;AAChB,MAAM,UAAU,UAA0C;CACxD,IAAI,UAAU,WAAW,OAAO;CAChC,IAAI,UAAU,cAAc,UAAU,aAAa,OAAO;CAC1D,IAAI,UAAU,UAAU,OAAO;CAC/B,MAAM,IAAI,MAAM,qCAAqC,OAAO,KAAK,EAAE,EAAE;AACvE;AACA,MAAM,gBAAuD;CAC3D,SAAS;CACT,SAAS;CACT,WAAW;CACX,QAAQ;CACR,SAAS;CACT,SAAS;AACX;;AAEA,eAAsB,sBAAsB,QAA0D;CACpG,IAAI;CACJ,MAAM,sBAAiC;EACrC,IAAI,CAAC,WAAW;GACd,MAAM,UAAU,cAAc,YAAY,GAAG;GAC7C,MAAM,WAAW,QAAQ,wBAAwB;GACjD,MAAM,UAAU,QAAQ,KAAK;GAC7B,YAAY;IAAE,GAAG;IAAU,GAAG,QAAQ;GAAE;EAC1C;EACA,OAAO;CACT;CACA,MAAM,MAAM,OAAO,OAAO,KAAK;CAC/B,MAAM,QAA8B,CAAC;CACrC,MAAM,UAAU,IAAI,kBAA8B;CAClD,MAAM,aAAa,IAAI,kBAA6B;CACpD,MAAM,2BAAW,IAAI,IAAwB;CAC7C,MAAM,mCAAmB,IAAI,QAA8B;CAC3D,MAAM,mCAAmB,IAAI,QAA8B;CAC3D,IAAI,WAAW;CACf,IAAI,SAAS;CACb,IAAI,WAAW;CACf,MAAM,YAAY,YAAY,EAAE;CAChC,MAAM,0BAAU,IAAI,QAAsC;CAC1D,MAAM,UAAU,UAAgC,QAAQ,IAAI,KAAK,KAAK,MAAM;CAC5E,MAAM,cAAc,UAAsD;EACxE,MAAM,SAAS;GAAE,GAAG;GAAO,KAAK,IAAI;GAAG,UAAU,MAAM,SAAS,IAAI,UAAU;EAAE;EAChF,QAAQ,IAAI,QAAQ,OAAO,KAAK,CAAC;EACjC,OAAO;CACT;CACA,MAAM,aAAa,OAA6B,WAAmE;EACjH,IAAI,OAAO,KAAK,MAAM,OAAO,MAAM,GAAG,OAAO;EAC7C,KAAK,MAAM,SAAS,MAAM,UAAU;GAClC,MAAM,QAAQ,UAAU,OAAO,MAAM;GACrC,IAAI,OAAO,OAAO;EACpB;CAEF;CACA,MAAM,eAAe,UAAwD;EAC3E,MAAM,SAAiC,CAAC;EACxC,MAAM,SAAS,SAAqC;GAClD,IAAI,KAAK,SAAS,QAAQ,OAAO,KAAK,IAAI;QACrC,IAAI,KAAK,SAAS,cAAc,KAAK,SAAS,UAAU,KAAK,SAAS,QAAQ,KAAK;EAC1F;EACA,MAAM,SAAS,QAAQ,KAAK;EAC5B,OAAO;CACT;CACA,MAAM,iBACJ,gBAAgB;EACd,SAAS;EACT;EACA,WAAW,OAAO;EAClB,MAAM,MAAM,KAAK,SAAS;GACxB,GAAG;GACH,QAAQ,IAAI,OAAO,KAAK,WAAW;IACjC,GAAG;IACH,QAAQ,MAAM,MAAM,QAAQ,KAAK,SAAS;KACxC,IAAI,KAAK,OAAO;KAChB,OAAO;IACT,GAAG,OAAO,CAAC;IACX,WAAW,MAAM,MAAM,SAAS;IAChC,OAAO,MAAM,MAAM,MAAM,GAAG,GAAI;GAClC,EAAE;EACJ,EAAE;CACJ,CAAC;CACH,MAAM,gBAAgB;EACpB;EAEA,IAAI;GACF,OAAO,UAAU,SAAS,CAAC;EAC7B,QAAQ,CAER;CACF;CACA,MAAM,UAAU,UAAgC;EAC9C,MAAM,SACJ,iBAAiB,IAAI,KAAK,KAAK,MAAM,OAAO,MAAM,UAAU,MAAM,WAAW,QAAQ,IACjF,WACA,iBAAiB,IAAI,KAAK,IACxB,YACA,MAAM;CAChB;CACA,MAAM,aAAa,SAA8B;EAC/C,KAAK,SAAS,KAAK,OAAO,MAAM,UAAU,MAAM,WAAW,QAAQ,IAC/D,WACA,KAAK,OAAO,MAAM,UAAU,MAAM,WAAW,SAAS,IACpD,YACA,KAAK,OAAO,MAAM,UAAU,MAAM,WAAW,SAAS,IACpD,YACA,KAAK,OAAO,OAAO,UAAU,MAAM,WAAW,SAAS,IACrD,YACA,KAAK,OAAO,MAAM,UAAU,MAAM,WAAW,SAAS,IACpD,YACA;CACd;CACA,MAAM,UAAU,UAAsB;EACpC,OAAO,MAAM,KAAK;EAClB,UAAU,MAAM,UAAU,IAAI;EAC9B,QAAQ;CACV;CACA,MAAM,YAAY,WAAsB,SAAgC,MAAe,gBAAgB,YAAY;EACjH,MAAM,2BAAW,IAAI,IAAY;EACjC,MAAM,SAAS,UAAsC;GACnD,IAAI,MAAM,SAAS,WAAW;GAC9B,IAAI,MAAM,SAAS,QAAQ,SAAS,IAAI,MAAM,GAAG;QAC5C,MAAM,SAAS,QAAQ,KAAK;EACnC;EACA,MAAM,UAAU,KAAK;EACrB,KAAK,MAAM,SAAS,UAAU,KAAK,QAAQ;GACzC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,GAAG,GAAG;GACvC,IAAI,MAAM,oBAAoB,WAAW,MAAM,kBAAkB;QAC5D,IAAI,MAAM,oBAAoB,WAAW,MAAM,kBAAkB;GACtE,OAAO,KAAK;EACd;EACA,IAAI,UAAU,KAAK,OAAO,QAAQ,UAAU,UAAU,IAAI;OACrD,UAAU,KAAK,SAAS;EAC7B,IACE,UAAU,KAAK,OAAO,MACnB,UACC,MAAM,IAAI,WAAW,GAAG,UAAU,KAAK,IAAI,EAAE,KAAK,MAAM,MAAM,MAAM,SAAS,KAAK,WAAW,QAAQ,CACzG,GAEA,UAAU,KAAK,SAAS;EAC1B,IAAI,MAAM;GACR,UAAU,KAAK,kBAAkB;GACjC,UAAU,KAAK,SAAS,UAAU,KAAK,OAAO,MAAM,UAClD,MAAM,MAAM,MAAM,SAAS,KAAK,WAAW,QAAQ,CACrD,IACI,WACA;GACJ,UAAU,KAAK,aAAa,IAAI;GAChC,KAAK,MAAM,SAAS,UAAU,KAAK,QACjC,KAAK,MAAM,QAAQ,MAAM,OACvB,IAAI,KAAK,WAAW,WAAW;IAC7B,KAAK,SAAS;IACd,KAAK,MAAM,SAAS,KAAK,QACvB,IAAI,MAAM,oBAAoB,WAAW,MAAM,SAAS,MAAM,kBAAkB;GACpF;GAEJ,MAAM,YAAY,MAAM,QAAQ,QAAQ,IAAI,oBAAoB,SAAS;GACzE,KAAK,MAAM,OAAO,UAAU,MAAM,GAAG,KAAK,IAAI,GAAG,UAAU,SAAS,EAAE,CAAC,GAAG;IACxE,MAAM,OAAO,MAAM,QAAQ,GAAG,GAAG,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,UAAU,UAAU,IAAI,MAAM,UAAU,SAAS,KAAK,SAAS,OAAO,EAAE;GAC1F;EACF;EACA,QAAQ;CACV;CACA,MAAM,aAAa,WAAsB,WAAoC;EAC3E,IAAI,CAAC,OAAO,SAAS,OAAO,OAAO,UAAU,UAAU;EACvD,MAAM,UAAU,OAAO;EACvB,MAAM,SAAS,UAAsC;GACnD,IAAI,MAAM,SAAS,QAAQ;IAEzB,MAAM,QAAQ,QAAQ,MAAM;IAC5B,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU;IACzC,MAAM,SAAS;IACf,MAAM,QAAQ,UAAU,KAAK,OAAO,MAAM,UAAU,MAAM,QAAQ,MAAM,GAAG;IAC3E,IAAI,CAAC,SAAS,CAAC;KAAC;KAAW;KAAU;KAAY;KAAa;IAAS,CAAC,CAAC,SAAS,OAAO,OAAO,MAAM,CAAC,GACrG;IACF,MAAM,kBAAkB,OAAO,WAAW,YAAY,YAAY,OAAO,OAAO,MAAM;IACtF,IAAI,OAAO,OAAO,cAAc,UAAU,MAAM,YAAY,OAAO;IACnE,IAAI,OAAO,OAAO,YAAY,UAAU,MAAM,aAAa,OAAO;IAClE,IAAI,OAAO,OAAO,MAAM,QAAQ,UAAU,OAAO,KAAK;IACtD,OAAO,KAAK;GACd,OAAO,IAAI,MAAM,SAAS,cAAc,MAAM,SAAS,UAAU,MAAM,SAAS,QAAQ,KAAK;EAC/F;EAEA,UAAU,MAAM,SAAS,QAAQ,KAAK;CACxC;CACA,MAAM,YAAY,YAAwB,OAAe,QAAQ,WAAW,UAA+B;EACzG,MAAM,SAAiC,CAAC;EACxC,MAAM,SAAS,UAAsC;GACnD,IAAI,MAAM,SAAS,WAAW;GAC9B,IAAI,MAAM,SAAS,QACjB,OAAO,KAAK;IAAE,KAAK,MAAM;IAAK,OAAO,MAAM;IAAO,QAAQ;IAAW,iBAAiB;IAAW,QAAQ,CAAC;GAAE,CAAC;QAC1G,MAAM,SAAS,QAAQ,KAAK;EACnC;EACA,MAAM,KAAK;EACX,OAAO;GAAE,KAAK,IAAI;GAAG;GAAO,OAAO,QAAQ,QAAQ;GAAK,QAAQ;GAAW;EAAO;CACpF;CACA,MAAM,gCAAgB,IAAI,IAA4B;CACtD,MAAM,+BAAe,IAAI,IAAsB;CAC/C,MAAM,2BAAW,IAAI,IAAqB;CAC1C,OAAO;EACL;EACA,UAAU,OAAO;GACf,IAAI,MAAM,cAAc,OAAO,WAAW;GAC1C,IAAI,MAAM,WAAW,WAAW;IAC9B,IAAI,UAAU;IACd,MAAM,QAAQ,QAAQ,SAAS;IAC/B,IAAI,CAAC,SAAS,MAAM,MAAM,oBAAoB,aAAa,MAAM,UAAU,KAAK,oBAAoB,WAClG;IACF,SAAS,IAAI,MAAM,OAAO,KAAK;IAC/B,IAAI,CAAC,MAAM,MAAM,OAAO,MAAM,UAAU,MAAM,UAAU,MAAM,KAAK,GACjE,MAAM,MAAM,OAAO,KAAK;KAAE,OAAO,MAAM;KAAO,QAAQ,MAAM;IAAO,CAAC;IACtE,OAAO,KAAK;GACd,OAAO;IACL,MAAM,QAAQ,SAAS,IAAI,MAAM,KAAK;IACtC,MAAM,QAAQ,OAAO,MAAM,OAAO,MAAM,UAAU,MAAM,UAAU,MAAM,KAAK;IAC7E,IAAI,SAAS,OAAO;KAClB,MAAM,SAAS,MAAM;KACrB,OAAO,KAAK;IACd;GACF;EACF;EACA,UAAU,UAAU;GAClB,OAAO;IACL,MAAM;IACN,SACE;IACF,cAAc;IACd,KAAK,KAAoB;KACvB,IAAI,IAAI,cAAc,OAAO,WAAW,MAAM,IAAI,MAAM,6CAA6C;KACrG,MAAM,UAAU,IAAI,gBAAgB;KACpC,SAAS,IAAI,OAAO;KACpB,MAAM,SAAS,YAAY,IAAI;MAAC;MAAU,IAAI;MAAQ,QAAQ;KAAM,CAAC;KACrE,IAAI,SAAS;KACb,MAAM,eAAe;MACnB,OAAO,eAAe;MACtB,IAAI,UAAU,UAAU,MAAM,IAAI,MAAM,wCAAwC;KAClF;KACA,MAAM,8BAAc,IAAI,QAA4B;KACpD,MAAM,iCAAiB,IAAI,IAA4B;KACvD,MAAM,gCAAgB,IAAI,IAAsB;KAChD,MAAM,aAAa;MACjB,SAAS;MACT,KAAK,MAAM,UAAU,gBAAgB,OAAY,CAAC,CAAC,YAAY,KAAA,CAAS;KAC1E;KACA,OAAO,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;KACrD,IAAI,UAAU,YAAY;MACxB,SAAS;MACT,QAAQ,sBAAM,IAAI,MAAM,wCAAwC,CAAC;MACjE,SAAS,OAAO,OAAO;MACvB,OAAO,oBAAoB,SAAS,IAAI;MACxC,MAAM,QAAQ,WAAW,CAAC,GAAG,cAAc,CAAC,CAAC,KAAK,WAAW,OAAO,CAAC,CAAC;MACtE,MAAM,QAAQ,WAAW,aAAa;KACxC,CAAC;KACD,MAAM,iBAAiB,UAA+B;MACpD,MAAM,aAAa,YAAY,IAAI,OAAO,OAAO,cAAc,CAAC;MAChE,IAAI,CAAC,YACH,MAAM,IAAI,MAAM,mFAAmF;MACrG,IAAI,WAAW,YAAY,CAAC,WAAW,SAAS,WAC9C,MAAM,IAAI,MAAM,gDAAgD;MAClE,OAAO;KACT;KACA,MAAM,eACJ,WACA,OACA,OACA,gBACyB;MACzB,MAAM,WAAW,GAAG,UAAU,KAAK,IAAI,GAAG,MAAM;MAChD,IAAI,QAAQ,UAAU,KAAK,OAAO,MAAM,UAAU,MAAM,QAAQ,QAAQ;MACxE,IAAI,CAAC,OAAO;OACV,QAAQ;QACN,KAAK;QACL,OAAO,MAAM;QACb;QACA,QAAQ,OAAO;QACf,WAAW;QACX;QACA,OAAO,CAAC;OACV;OACA,UAAU,KAAK,OAAO,KAAK,KAAK;MAClC;MACA,OAAO;KACT;KA8VA,OAAO;MA5VL,IAAI,IAAI;OACN,OAAO;OACP,OAAO,cAAc,CAAC,CAAC;MACzB;MACA,WAAW,OAAgB;OACzB,OAAO;OACP,MAAM,MAAM,QAAQ,OAAO;QAAC;QAAM;QAAe;QAAe;QAAgB;OAAS,GAAG,YAAY;OACxG,MAAM,KAAK,MAAM,IAAI,EAAE;OACvB,mBAAmB,GAAG;OACtB,IAAI,OAAO,IAAI,YAAY,YAAY,MAAM,IAAI,MAAM,wCAAwC;OAC/F,MAAM,WAAW,IAAI;OACrB,MAAM,QAA8B;QAAE,KAAK,IAAI;QAAG,OAAO;QAAI,MAAM;QAAQ,UAAU,CAAC;OAAE;OACxF,MAAM,MAAM,cAAc,CAAC,CAAC,WAAW;QACrC,GAAG;QACH;QACA,SAAS,OAAO,WAAoC;SAClD,OAAO;SACP,MAAM,YAAY,WAAW,SAAS;SACtC,MAAM,WACJ,aAAa,YAAY,UAAU,KAAK,CAAC,CAAC,MAAM,cAAc,OAAO,SAAS,MAAM,MAAM,GAAG;SAC/F,MAAM,QAAQ,WAAW,KAAK,OAAO,MAAM,UAAU,MAAM,QAAQ,UAAU,GAAG;SAChF,IAAI,CAAC,aAAa,CAAC,OAAO,MAAM,IAAI,MAAM,wCAAwC;SAClF,MAAM,kBAAkB,MAAM,SAAS;SACvC,MAAM,YAAY,IAAI;SACtB,UAAU,KAAK,SAAS;SACxB,QAAQ;SACR,MAAM,QAAQ;UAAE;UAAW;SAAM;SACjC,MAAM,kBAAkB,eAAe,QAAQ,MAAM;SACrD,OAAO,QAAQ,IAAI,OAAO,YAAY;UACpC,IAAI;WACF,MAAM,SAAS,MAAM,wBACb,SAAS,mBAAmB,MAAM,CAAC,GACzC,eACF;WACA,gBAAgB,eAAe;WAC/B,OAAO;WACP,IAAI,WAAW,KAAA,GACb,MAAM,IAAI,MACR,4HACF;WACF,MAAM,kBAAkB;WACxB,OAAO;UACT,SAAS,OAAO;WACd,IAAI,gBAAgB,WAAW,UAAU,UAAU,iBAAiB,IAAI,KAAK;WAC7E,MAAM,kBAAkB;WACxB,MAAM,QAAQ,UAAU,KAAK;WAC7B,MAAM;UACR,UAAU;WACR,MAAM,aAAa,IAAI;WACvB,OAAO,KAAK;UACd;SACF,CAAC;QACH;OACF,CAAC;OACD,MAAM,SAAS,OAAO,OAAO,EAAE,GAAG,CAAC;OACnC,YAAY,IAAI,QAAQ;QAAE;QAAK;OAAM,CAAC;OACtC,OAAO;MACT;MACA,eAAe,OAAgB;OAC7B,OAAO;OACP,MAAM,MAAM,QAAQ,OAAO;QAAC;QAAM;QAAe;QAAe;OAAc,GAAG,gBAAgB;OACjG,MAAM,KAAK,MAAM,IAAI,EAAE;OACvB,mBAAmB,GAAG;OACtB,MAAM,MAAM,cAAc,CAAC,CAAC,eAAe;QAAE,GAAG;QAAK;OAAG,CAAC;OACzD,MAAM,aAAyB;QAC7B;QACA,OAAO;SAAE,KAAK,IAAI;SAAG,MAAM;SAAY,OAAO;SAAI,UAAU,CAAC;QAAE;QAC/D,UAAU;SAAE;SAAK,WAAW;SAAO,yBAAS,IAAI,IAAI;SAAG,wBAAQ,IAAI,IAAI;QAAE;OAC3E;OACA,MAAM,WAAW,WAAW;OAC5B,MAAM,eAAe,IAAI,UAAU,KAAK,GAAG;OAC3C,IAAI,YAAY,OAAO,gBAAyC,CAAC,MAAM;QACrE,OAAO;QACP,MAAM,SAAS,MAAM,aAAa,aAAa;QAC/C,MAAM,SAAS,cAAc;QAG7B,IAAI;QACJ,IAAI,QAAQ;SACV,MAAM,WAAW,WAAW,SAAS;SACrC,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,wCAAwC;SACvE,MAAM,kBAAkB,SAAS,WAAW,UAAU,QAAQ,IAAI,OAAO,MAAM;SAC/E,MAAM,eAAe,mBAAmB,UAAU,SAAS,OAAO,eAAe;SACjF,IAAI,cAAc;UAChB,IAAI,CAAC,OAAO,cAAc,OAAO,YAAY,KAAK,OAAO,eAAgB,GACvE,MAAM,IAAI,MAAM,qDAAqD;UACvE,MAAM,QAAQ,SAAS,KAAK,OAAO,MAChC,UAAU,MAAM,QAAQ,GAAG,SAAS,KAAK,IAAI,GAAG,aAAa,KAChE;UACA,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,uCAAuC;UACnE,MAAM,OAAO,MAAM,MAAM,OAAO;UAChC,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,oDAAoD;UAC/E,YAAY;WACV,MAAM,SAAS;WACf;WACA;WACA,gBAAgB,SAAS;WACzB,OAAO,aAAa,SAAS;UAC/B;SACF,OAAO;UACL,MAAM,WAAW,SAAS,WAAW,UAAU,OAAO,IAAI,OAAO,MAAM;UACvE,MAAM,WAAW,YAAY,UAAU,SAAS,OAAO,QAAQ;UAC/D,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,gDAAgD;UAC/E,YAAY;WAAE,GAAG;WAAU;WAAY,OAAO;UAAS;SACzD;QACF;QACA,MAAM,QAAQ,OAAO,MAAM,KAAK,MAAM;QACtC,MAAM,SAAS,OAAO,OAAO,KAAK,MAAM;QACxC,IAAI,UAAU;QACd,IAAI,YAAY;QAChB,MAAM,gBAAgB,YAAY;SAChC,YAAY;SACZ,OAAO,MAAM,OAAO;QACtB;QACA,OAAO,SAAS;QAChB,MAAM,eAAe,OAAO,iBAA0C;SACpE,OAAO;SACP,IAAI,SAAS,MAAM,IAAI,MAAM,mCAAmC;SAChE,UAAU;SACV,IAAI,CAAC,QAAQ;UACX,MAAM,OAAO,SAAS,YAAY,CAAC;UACnC,KAAK,QAAQ;UACb,MAAM,OAA2B;WAC/B,KAAK,OAAO;WACZ,YAAY;WACZ,OAAO;WACP,QAAQ;WACR,iBAAiB;WACjB,WAAW,IAAI;WACf,OAAO,gBAAgB,WAAW,KAAK;WACvC,QAAQ,CAAC;YAAE,KAAK,IAAI;YAAG,OAAO;YAAI,OAAO;YAAG,QAAQ,OAAO;YAAG,WAAW;YAAO,OAAO,CAAC,IAAI;WAAE,CAAC;UACjG;UAEA,IAAI,CAAC,KAAK,OAAO,QAAQ,KAAK,SAAS,CAAC;UACxC,MAAM,KAAK,IAAI;UACf,YAAY;WAAE;WAAM;WAAM;WAAY,gBAAgB,CAAC;WAAG,OAAO,WAAW;UAAM;UAClF,QAAQ;SACV;SACA,IAAI,CAAC,WAAW,MAAM,IAAI,MAAM,uCAAuC;SACvE,UAAU,KAAK,SAAS;SACxB,eAAe,IAAI,aAAa;SAChC,cAAc,IAAI,aAAa;SAC/B,IAAI,WAAW;SACf,IAAI;UACF,MAAM,SAAS,MAAM,WAAW,IAAI,iBAAiB,MAAM,YAAY,CAAC;UACxE,MAAM,UACJ,aAAa,OAAO,WAAW,UAAU,WAAW,YAAY,OAAO,OAAO,MAAM;UACtF,IAAI,OAAO,OAAO,UAAU,KAAK,QAAQ,UAAU,OAAO,KAAK;UAC/D,UAAU,WAAW,MAAM;UAC3B,SAAS,WAAW,SAAS,CAAC,QAAQ,OAAO,OAAO,MAAM,CAAC;UAC3D,WAAW;UACX,IAAI,UAAU,eAAe,QAAQ,MAAM,IAAI,MAAM,UAAU,eAAe,EAAE;UAChF,OAAO;SACT,SAAS,OAAO;UACd,IAAI,CAAC,UAAU;WACb,UAAU,KAAK,QAAQ,UAAU,KAAK;WACtC,SACE,WACA,aAAa,OAAO,WAAW,UAAU,WAAW,YAAY,UAChE,CAAC,MACH;UACF;UACA,MAAM;SACR,UAAU;UACR,eAAe,OAAO,aAAa;UACnC,cAAc,OAAO,aAAa;SACpC;QACF;QACA,OAAO,SAAS,iBAAiB;SAC/B,MAAM,UAAU,aAAa,YAAY;SACzC,cAAc,IAAI,OAAO;SACzB,aAAa,IAAI,OAAO;SACxB,MAAM,gBAAgB;UACpB,cAAc,OAAO,OAAO;UAC5B,aAAa,OAAO,OAAO;SAC7B;SACA,QAAa,KAAK,SAAS,OAAO;SAClC,OAAO;QACT;QACA,OAAO;OACT;OACA,MAAM,sBAAM,IAAI,IAAY;OAC5B,MAAM,SAAS,YAA0B;QACvC,MAAM,uBAAO,IAAI,IAAY;QAC7B,KAAK,MAAM,UAAU,SAAS;SAC5B,IAAI,IAAI,IAAI,OAAO,IAAI,EAAE,KAAK,KAAK,IAAI,OAAO,IAAI,EAAE,KAAK,OAAO,IAAI,OAAO,IACzE,MAAM,IAAI,MAAM,kDAAkD;SACpE,KAAK,IAAI,OAAO,IAAI,EAAE;QACxB;QACA,KAAK,MAAM,SAAS,MAAM,IAAI,IAAI,KAAK;QACvC,KAAK,MAAM,UAAU,SAAS,IAAI,OAAO,UAAU,SAAS,OAAO,IAAI,OAAO,IAAI,IAAI,OAAO,KAAK;OACpG;OACA,MAAM,gBAAgB;QACpB,OAAO;QACP,IAAI,SAAS,WAAW,MAAM,IAAI,MAAM,wCAAwC;OAClF;OACA,MAAM,OAAO,MAA6B,YAA0B;QAClE,WAAW,MAAM,SAAS,KAAK;SAC7B,KAAK,IAAI;SACT,OAAO;SACP;SACA,UAAU,QAAQ,KAAK,WAAW,WAAW,OAAO,KAAK,CAAC;QAC5D,CAAC;OACH;OACA,MAAM,SAAS,OAAO,OAAO;QAC3B;QAGA,KAAK,OAAgB;SACnB,QAAQ;SACR,MAAM,SAAS,cAAc,KAAK;SAClC,MAAM,CAAC,MAAM,CAAC;SACd,IAAI,KAAK,OAAO,GAAG;SACnB,WAAW,MAAM,SAAS,KAAK,WAAW,OAAO,KAAK,CAAC;SACvD,OAAO;QACT;QACA,SAAS,QAAiB;SACxB,QAAQ;SACR,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,OAAO,QACpC,MAAM,IAAI,MAAM,uDAAuD;SACzE,MAAM,UAAU,OAAO,IAAI,aAAa;SACxC,MAAM,OAAO;SACb,IAAI,SAAS,QAAQ,KAAK,WAAW,OAAO,GAAG,CAAC;SAChD,IAAI,YAAY,OAAO;SACvB,OAAO;QACT;QACA,OAAO,QAAiB;SACtB,QAAQ;SACR,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,OAAO,QACpC,MAAM,IAAI,MAAM,uCAAuC;SACzD,MAAM,UAAwB,CAAC;SAC/B,MAAM,QAAQ,OAAO,KAClB,SAAoF;UACnF,IAAI,CAAC,MAAM,QAAQ,IAAI,KAAK,KAAK,WAAW,KAAK,OAAO,KAAK,OAAO,YAClE,MAAM,IAAI,MAAM,kDAAkD;UACpE,MAAM,SAAS,cAAc,KAAK,EAAE;UACpC,QAAQ,KAAK,MAAM;UACnB,MAAM,YAAY,KAAK;UACvB,OAAO,CACL,OAAO,WAAW;WAChB,OAAO;WACP,MAAM,kBAAkB,eAAe,QAAQ,MAAM;WACrD,IAAI;YACF,MAAM,SAAS,MAAM,wBACb,UAAU,mBAAmB,MAAM,CAAC,GAC1C,eACF;YACA,IAAI,OAAO,WAAW,WACpB,MAAM,IAAI,MACR,uGACF;YACF,OAAO;WACT,SAAS,OAAO;YACd,IAAI,gBAAgB,SAAS,MAAM;YACnC,MAAM,YAAY,WAAW,SAAS;YACtC,IAAI,WAAW;aACb,MAAM,UAAU,UAAU,KAAK;aAC/B,UAAU,eAAe,KAAK,OAAO;aACrC,UAAU,KAAK,QAAQ;aACvB,MAAM,yBAAS,IAAI,IAAY;aAC/B,MAAM,SAAS,UAAsC;cACnD,IAAI,MAAM,SAAS,QAAQ,OAAO,IAAI,MAAM,GAAG;mBAC1C,MAAM,SAAS,QAAQ,KAAK;aACnC;aACA,MAAM,WAAW,UAAU,UAAU,OAAO,OAAO,KAAK;aACxD,IAAI,UAAU,MAAM,QAAQ;aAC5B,KAAK,MAAM,SAAS,UAAU,KAAK,QACjC,IAAI,OAAO,IAAI,MAAM,GAAG,GAAG;cACzB,iBAAiB,IAAI,KAAK;cAC1B,MAAM,QAAQ;aAChB;YACJ;YACA,MAAM;WACR;UACF,GACA,OAAO,GACT;SACF,CACF;SACA,MAAM,OAAO;SACb,IAAI,OAAO,KAAK;SAChB,IAAI,UAAU,OAAO;SACrB,OAAO;QACT;QACA,QAAQ,OAAgB,UAAmB;SACzC,QAAQ;SACR,MAAM,SAAS,cAAc,KAAK;SAClC,IAAI,CAAC,OAAO,UACV,MAAM,IAAI,MAAM,sEAAsE;SACxF,MAAM,OAAO,QAAQ,UAAU,CAAC,aAAa,GAAG,SAAS;SACzD,IAAI,CAAC,OAAO,cAAc,KAAK,WAAW,KAAK,OAAO,KAAK,WAAW,IAAI,GACxE,MAAM,IAAI,MAAM,iDAAiD;SACnE,MAAM,cAAc,OAAO,KAAK,WAAW;SAC3C,MAAM,CAAC,MAAM,CAAC;SACd,MAAM,QAA8B;UAClC,KAAK,IAAI;UACT,MAAM;UACN,OAAO,OAAO,MAAM;UACpB,UAAU,CAAC,WAAW,OAAO,KAAK,CAAC;SACrC;SACA,IAAI,QAAQ,OAAO,SAAS,KAAK,EAC/B,cAAc,EAAE,gBAAgB;UAC9B,OAAO;UACP,MAAM,YAAY,WAAW,SAAS;UACtC,IAAI,CAAC,aAAa,CAAC,MAAM,QAAQ,SAAS,GACxC,MAAM,IAAI,MAAM,yDAAyD;UAC3E,MAAM,WAAW,UAAU,UAAU,OAAO,KAAK;UACjD,IAAI,CAAC,UAAU,MAAM,IAAI,MAAM,wCAAwC;UACvE,MAAM,QAAQ,YAAY,WAAW,UAAU,UAAU,QAAQ,WAAW;UAC5E,MAAM,QAAQ,UAAU,KAAK,GAAG,UAAU,SAAS,QAAQ,OAAO,SAAS,SAAS,EAAE,CAAC;UACvF,QAAQ;UACR,OAAO;SACT,EACF,CAAC;SACD,SAAS,QAAQ,IAAI,OAAO,IAAI,IAAI,KAAK;SACzC,WAAW,MAAM,SAAS,KAAK,KAAK;SACpC,OAAO;QACT;QACA,SAAS;SACP,QAAQ;SACR,IAAI,OAAO;SACX,SAAS,YAAY;SACrB,OAAO;QACT;QACA,MAAM,UAAU,OAAiB;SAC/B,OAAO;SACP,IAAI,CAAC,SAAS,WAAW,MAAM,IAAI,MAAM,oDAAoD;SAC7F,IAAI,UAAU,KAAA,KAAa,OAAO,KAAK,QAAQ,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,QACtE,MAAM,IAAI,MAAM,oCAAoC;SACtD,MAAM,OAAO,MAAM,IAAI,UAAU;SACjC,OAAO,OAAO,OAAO;UACnB,OAAO,KAAK;UACZ,MAAM,MAAM,OAAgB;WAC1B,OAAO;WACP,MAAM,OAAO,QAAQ,OAAO,CAAC,WAAW,GAAG,OAAO;WAClD,OAAO,KAAK,MAAM,IAAI;UACxB;UACA,MAAM,SAAS;WACb,OAAO;WACP,MAAM,KAAK,OAAO;UACpB;SACF,CAAC;QACH;OACF,CAAC;OACD,YAAY,IAAI,QAAQ,UAAU;OAClC,OAAO;MACT;KAEW;IACf;GACF;EACF;EACA,MAAM,UAAU;GACd,WAAW;GACX,KAAK,MAAM,WAAW,UAAU,QAAQ,sBAAM,IAAI,MAAM,sCAAsC,CAAC;GAC/F,SAAS,MAAM;GACf,MAAM,QAAQ,WAAW,CAAC,GAAG,aAAa,CAAC,CAAC,KAAK,WAAW,OAAO,CAAC,CAAC;GACrE,MAAM,QAAQ,WAAW,YAAY;GACrC,SAAS,MAAM;EACjB;CACF;AACF;;;ACxvBA,IAAA,sBAAe,WAAW,OAAO,EAAE,SAAS,OAAO,MAAM,aAAoC;CAC3F,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,oDAAoD;CAChF,MAAM,UAAU,MAAM,sBAAsB;EAC1C,WAAW,MAAM,QAAQ;EACzB,UAAU,aACR,KAAK,QAAQ,cAAc,QAAQ,0BAA0B,MAAM,QAAQ,WAAW,QAAQ;CAClG,CAAC;CACD,MAAM,aAAa,QAAQ,GAAG,2BAA2B,UAAU,QAAQ,UAAU,KAAK,CAAC;CAC3F,QAAQ,OAAO,CAAC,mBAAmB,IAAI,WAAW;EAEhD,MAAM,eADW,eAAe,MACJ,CAAC,EAAE,SAAS,kCAAkC,QAAQ,UAAU,MAAM,CAAC;EACnG,aAAa,cAAc,QAAQ;CACrC,CAAC;CACD,KAAK,QAAQ,cAAc,QAAQ,0BAA0B,MAAM,QAAQ,WAAW,QAAQ,SAAS,CAAC;CACxG,OAAO;EACL,OAAO;EACP,WAAW,YAAY;GACrB,IAAI;IACF,MAAM,QAAQ,QAAQ;GACxB,UAAU;IACR,WAAW;GACb;EACF;CACF;AACF,CAAC;;;AC3BD,SAAgB,wBAAsC;CACpD,OAAO;EACL,WAAW;EACX,MAAM,MAAM;GACV,MAAM,yBAAS,IAAI,IAAqC;GACxD,MAAM,gCAAgB,IAAI,IAAwB;GAClD,MAAM,yBAAS,IAAI,IAA+B;GAClD,OAAO;IACL,aAAa,UAAU,OAAO,IAAI,MAAM,SAAS;IACjD,aAAa,OAAO;KAClB,cAAc,IAAI,MAAM,SAAS,CAAC,GAAG;KACrC,OAAO,IAAI,MAAM,WAAW,KAAK;KACjC,OAAO,OAAO,MAAM,SAAS;KAC7B,cAAc,IACZ,MAAM,WACN,KAAK,aAAa,UAChB,0BACA,MAAM,YACL,UAAU;MACT,IAAI,OAAO,IAAI,MAAM,SAAS,MAAM,SAAS,CAAC,SAAS,OAAO,UAAU,UAAU;MAClF,MAAM,WAAW;MACjB,IAAI,SAAS,YAAY,KAAK,SAAS,cAAc,MAAM,aAAa,CAAC,MAAM,QAAQ,SAAS,IAAI,GAClG;MACF,MAAM,WAAW,gBAAgB,QAAQ;MACzC,OAAO,IAAI,MAAM,WAAW,QAAQ;MACpC,KAAK,QAAQ,MAAM,WAAW,QAAQ;KACxC,GACA,EAAE,cAAc,KAAK,CACvB,CACF;IACF;IACA,eAAe,IAAI;KACjB,cAAc,IAAI,EAAE,CAAC,GAAG;KACxB,cAAc,OAAO,EAAE;KACvB,OAAO,OAAO,EAAE;KAChB,OAAO,OAAO,EAAE;IAClB;IACA,QAAQ;KACN,KAAK,MAAM,eAAe,cAAc,OAAO,GAAG,YAAY;KAC9D,cAAc,MAAM;KACpB,OAAO,MAAM;KACb,OAAO,MAAM;IACf;GACF;EACF;CACF;AACF;;;AC/CA,IAAA,uCAAe,cAAc,qBAAqB;;;ACDlD,IAAA,kDAAe,eAAe;CAC5B,MAAM;CACN,aAAa;CACb,MAAM;CACN,QAAQ;CACR,MAAM,oBAAoB,YAAY,KAAK,uDAAuD;CAClG,YAAY,oBAAoB,YAAY,KAAK,uDAAuD;AAC1G,CAAC;;;ACAD,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;;AAEpE,MAAM,WAAc,WAClB,OAAO,QAAQ,UAAsB,UAAU,KAAA,CAAS;AAC1D,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,eAAe,mBAAmB;CAC7C,MAAM;CACN,mBAAmB,+BAA+BA,mBAAW;CAC7D,SAAS,mBAAmB,EAAE,SAAS,CAACA,mBAAW,EAAE,CAAC;CACtD,SAAS,aAAa,EACpB,IAAI,WAA8C;EAAE,OAAO,OAAO,IAAI,EAAE,WAAW,wBAAwB,GAAG,GAAGC,sCAA4B,OAAO,CAAC,CAAC;CAAG,EAC3J;CACA,YAAY,aAAa,EACvB,IAAI,WAA8C;EAAE,OAAO,QAAQ,CAAC,QAAQ,OAAO,QAAQ,IAAI,KAAA,UAAkB,IAAI,EAAE,WAAW,wBAAwB,GAAG,GAAGA,sCAA4B,OAAO,CAAC,CAAC,CAAC;CAAG,EAC3M;CACA,SAAS,OAAO,YAAY;EAC1B,MAAM,eAAe,MAAM,QAAQ,UAAU,WAAWD,qBAAa,OAAO;EAC5E,MAAM,iBAAiB;GAAE,GAAG;GAAS,MAAM,aAAa;EAAM;EAC9D,OAAO;GACL,GAAG,iBAAiB,YAAY;GAChC,IAAI,WAA8C;IAAE,OAAO,QAAQ,CAAC,QAAQ,OAAO,QAAQ,IAAI,KAAA,UAAkB,IAAI,EAAE,WAAW,wBAAwB,GAAG,GAAGC,sCAA4B,OAAO,CAAC,CAAC,CAAC;GAAG;GACzM,IAAI,YAAgD;IAAE,OAAO,CAAC,GAAGC,iDAAsC,cAAc,CAAC;GAAG;GACzH,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;GAC3C,IAAI,aAAkD;IAAE,OAAO,CAAC,GAAI,aAAa,cAAc,CAAC,CAAE;GAAG;EACvG;CACF;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.mjs","names":["rootSession","channelDynamicWorkflowRuns","resourceCodemodeHowToDynamicWorkflow"],"sources":["../../src/constants/dynamicWorkflow.ts","../../src/constants/declarations.ts","../../src/services/workflowTracker/index.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/services/workflowChannel/index.ts","../../src/extensions/(backend)/channel/dynamic-workflow-runs.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server.ts","../../generated/server.ts"],"sourcesContent":["export const DYNAMIC_WORKFLOW_CHANNEL = 'dynamic_workflow_runs';\n","export const dynamicWorkflowDeclarations = `\ninterface WorkflowSchema<T> {\n readonly _output: T;\n parse(value: unknown): T;\n optional(): WorkflowSchema<T | undefined>;\n nullable(): WorkflowSchema<T | null>;\n default(value: T): WorkflowSchema<T>;\n array(): WorkflowSchema<T[]>;\n describe(text: string): WorkflowSchema<T>;\n min(value: number): WorkflowSchema<T>;\n max(value: number): WorkflowSchema<T>;\n int(): WorkflowSchema<T>;\n positive(): WorkflowSchema<T>;\n nonnegative(): WorkflowSchema<T>;\n trim(): WorkflowSchema<T>;\n}\ntype WorkflowSchemaOutput<S> = S extends WorkflowSchema<infer T> ? T : never;\ntype WorkflowObject<S extends Record<string, WorkflowSchema<unknown>>> =\n { [K in keyof S as undefined extends WorkflowSchemaOutput<S[K]> ? never : K]: WorkflowSchemaOutput<S[K]> } &\n { [K in keyof S as undefined extends WorkflowSchemaOutput<S[K]> ? K : never]?: WorkflowSchemaOutput<S[K]> };\ninterface WorkflowZod {\n string(): WorkflowSchema<string>;\n number(): WorkflowSchema<number>;\n boolean(): WorkflowSchema<boolean>;\n null(): WorkflowSchema<null>;\n unknown(): WorkflowSchema<unknown>;\n any(): WorkflowSchema<unknown>;\n literal<T extends string | number | boolean | null>(value: T): WorkflowSchema<T>;\n enum<T extends string>(values: readonly [T, ...T[]]): WorkflowSchema<T>;\n object<S extends Record<string, WorkflowSchema<unknown>>>(shape: S): WorkflowSchema<WorkflowObject<S>>;\n array<T>(item: WorkflowSchema<T>): WorkflowSchema<T[]>;\n record<T>(item: WorkflowSchema<T>): WorkflowSchema<Record<string,T>>;\n union<S extends readonly [WorkflowSchema<unknown>, WorkflowSchema<unknown>, ...WorkflowSchema<unknown>[]]>(schemas: S): WorkflowSchema<WorkflowSchemaOutput<S[number]>>;\n}\ninterface WorkflowExecute<I> {\n inputData: I;\n runId: string;\n abortSignal: AbortSignal;\n getInitData(): unknown;\n}\ninterface TrackedStep<I = unknown, O = unknown, Id extends string = string> {\n readonly id: Id;\n readonly __input?: I;\n readonly __output?: O;\n}\ninterface TrackedRun<I, O> {\n readonly runId: string;\n start(options: { inputData: I }): Promise<{ status: string; result?: O; error?: unknown }>;\n cancel(): Promise<void>;\n}\ninterface TrackedWorkflow<I, O, Current = I> extends TrackedStep<I,O> {\n then<T>(step: TrackedStep<Current,T>): TrackedWorkflow<I,O,T>;\n parallel<T extends readonly TrackedStep<Current,unknown>[]>(steps: T): TrackedWorkflow<I,O,Record<T[number]['id'],T[number] extends TrackedStep<Current,infer Out> ? Out : never>>;\n branch(choices: [((params: WorkflowExecute<Current>) => boolean | Promise<boolean>), TrackedStep<Current,unknown>][]): TrackedWorkflow<I,O,Record<string,unknown>>;\n foreach<T, U, C>(item: TrackedWorkflow<T,U,C>, options: { concurrency: number }): TrackedWorkflow<I,O,U[]>;\n commit(): TrackedWorkflow<I,O,Current>;\n createRun(): Promise<TrackedRun<I,O>>;\n}\ndeclare const dynamicWorkflow: {\n createStep<I,O,Id extends string>(options: { id: Id; description?: string; inputSchema: WorkflowSchema<I>; outputSchema: WorkflowSchema<O>; execute: (params: WorkflowExecute<I>) => O | Promise<O> }): TrackedStep<I,O,Id>;\n createWorkflow<I,O>(options: { id: string; description?: string; inputSchema: WorkflowSchema<I>; outputSchema: WorkflowSchema<O> }): TrackedWorkflow<I,O>;\n /** Zod 3.25.76. Common constructors are declared here; runtime supplies the real z object. */\n z: WorkflowZod;\n};`;\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createRequire } from 'node:module';\n\nimport type { PoCodemodeRun } from '@agimon-ai/po-core/codemode';\nimport type * as Zod from 'zod';\n\nimport { dynamicWorkflowDeclarations } from '../../constants/declarations';\nimport type {\n DynamicWorkflowGroup,\n DynamicWorkflowItem,\n DynamicWorkflowPhase,\n DynamicWorkflowRun,\n DynamicWorkflowShape,\n DynamicWorkflowSnapshot,\n DynamicWorkflowStatus,\n} from '../../types/dynamicWorkflow';\nimport type { WorkflowTracker, WorkflowTrackerOptions } from './type';\n\ninterface RawStep {\n id: string;\n execute: (params: Record<string, unknown>) => Promise<unknown>;\n}\ninterface RawRun {\n runId: string;\n start: (options: Record<string, unknown>) => Promise<Record<string, unknown>>;\n cancel: () => Promise<unknown>;\n}\ninterface RawWorkflow extends RawStep {\n then(step: RawStep): RawWorkflow;\n parallel(steps: RawStep[]): RawWorkflow;\n branch(steps: [(params: Record<string, unknown>) => Promise<boolean>, RawStep][]): RawWorkflow;\n foreach(step: RawWorkflow, options: { concurrency: (params: { inputData: unknown }) => number }): RawWorkflow;\n commit(): RawWorkflow;\n createRun(options?: Record<string, unknown>): Promise<RawRun>;\n}\ninterface Factories {\n createStep(options: Record<string, unknown>): RawStep;\n createWorkflow(options: Record<string, unknown>): RawWorkflow;\n z: typeof Zod.z;\n}\ninterface Definition {\n raw: RawStep;\n shape: DynamicWorkflowShape;\n workflow?: {\n raw: RawWorkflow;\n committed: boolean;\n foreach: Map<string, DynamicWorkflowShape>;\n nested: Map<string, DynamicWorkflowShape>;\n };\n}\ninterface Execution {\n root: DynamicWorkflowRun;\n definition: Definition;\n item: DynamicWorkflowItem;\n boundaryErrors: string[];\n shape: DynamicWorkflowShape;\n}\ninterface PhaseOwner {\n execution: Execution;\n phase: DynamicWorkflowPhase;\n}\n\nconst object = (value: unknown, name: string): Record<string, unknown> => {\n if (value === null || typeof value !== 'object' || Array.isArray(value))\n throw new Error(`${name} must be an object.`);\n return value as Record<string, unknown>;\n};\nconst options = (value: unknown, keys: string[], name: string): Record<string, unknown> => {\n const result = object(value, name);\n for (const key of Object.keys(result))\n if (!keys.includes(key)) throw new Error(`${name}.${key} is not supported by tracked workflows.`);\n return result;\n};\nconst label = (value: unknown): string => {\n if (typeof value !== 'string' || !value.trim() || value.length > 160)\n throw new Error('Workflow and step ids must be non-empty strings of at most 160 characters.');\n return value;\n};\nconst callbackParameters = (params: Record<string, unknown>): Record<string, unknown> => ({\n inputData: params.inputData,\n runId: params.runId,\n abortSignal: params.abortSignal,\n ...(typeof params.getInitData === 'function' ? { getInitData: params.getInitData } : {}),\n});\n/** Reject the host wrapper on abort; late guest settlement cannot write tracked state. */\nconst callbackWithAbort = (callback: () => unknown, signal: AbortSignal): Promise<unknown> => {\n signal.throwIfAborted();\n return new Promise((resolve, reject) => {\n const abort = () => {\n signal.removeEventListener('abort', abort);\n reject(signal.reason);\n };\n signal.addEventListener('abort', abort, { once: true });\n Promise.resolve()\n .then(() => {\n signal.throwIfAborted();\n return callback();\n })\n .then(\n (value) => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n (error) => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n};\nconst callbackSignal = (binding: AbortSignal, params: Record<string, unknown>): AbortSignal =>\n params.abortSignal instanceof AbortSignal ? AbortSignal.any([binding, params.abortSignal]) : binding;\nconst validateDefinition = (def: Record<string, unknown>) => {\n if (def.description !== undefined && (typeof def.description !== 'string' || def.description.length > 500))\n throw new Error('description must be a string of at most 500 characters.');\n for (const field of ['inputSchema', 'outputSchema']) {\n const schema = object(def[field], field);\n if (typeof schema.safeParse !== 'function') throw new Error(`${field} must be a Zod schema.`);\n }\n};\nconst errorText = (error: unknown): string =>\n (error && typeof error === 'object' && 'message' in error && typeof error.message === 'string'\n ? error.message\n : String(error)\n ).slice(0, 500);\nconst status = (value: unknown): DynamicWorkflowStatus => {\n if (value === 'success') return 'completed';\n if (value === 'canceled' || value === 'cancelled') return 'stopped';\n if (value === 'failed') return 'failed';\n throw new Error(`Unsupported Mastra result status: ${String(value)}.`);\n};\nconst counts = (): Record<DynamicWorkflowStatus, number> => ({\n pending: 0,\n running: 0,\n completed: 0,\n failed: 0,\n stopped: 0,\n skipped: 0,\n});\n/** Mastra executes. This observer only decorates constructors and lifecycle calls. */\nexport async function createWorkflowTracker(config: WorkflowTrackerOptions): Promise<WorkflowTracker> {\n let factories: Factories | undefined;\n const loadFactories = (): Factories => {\n if (!factories) {\n const require = createRequire(import.meta.url);\n const workflow = require('@mastra/core/workflows') as Pick<Factories, 'createStep' | 'createWorkflow'>;\n const schemas = require('zod') as Pick<Factories, 'z'>;\n factories = { ...workflow, z: schemas.z };\n }\n return factories;\n };\n const now = config.now ?? Date.now;\n const roots: DynamicWorkflowRun[] = [];\n const context = new AsyncLocalStorage<PhaseOwner>();\n const runContext = new AsyncLocalStorage<Execution>();\n const children = new Map<string, PhaseOwner>();\n const boundaryFailures = new WeakSet<DynamicWorkflowPhase>();\n const intentionalStops = new WeakSet<DynamicWorkflowPhase>();\n let revision = 0;\n let serial = 0;\n let disposed = false;\n const key = () => `workflow-${++serial}`;\n const origins = new WeakMap<DynamicWorkflowShape, string>();\n const origin = (shape: DynamicWorkflowShape) => origins.get(shape) ?? shape.key;\n const occurrence = (shape: DynamicWorkflowShape): DynamicWorkflowShape => {\n const result = { ...shape, key: key(), children: shape.children.map(occurrence) };\n origins.set(result, origin(shape));\n return result;\n };\n const findShape = (shape: DynamicWorkflowShape, source: DynamicWorkflowShape): DynamicWorkflowShape | undefined => {\n if (origin(shape) === origin(source)) return shape;\n for (const child of shape.children) {\n const found = findShape(child, source);\n if (found) return found;\n }\n return undefined;\n };\n const directSteps = (shape: DynamicWorkflowShape): DynamicWorkflowShape[] => {\n const result: DynamicWorkflowShape[] = [];\n const visit = (node: DynamicWorkflowShape): void => {\n if (node.kind === 'step') result.push(node);\n else if (node.kind === 'parallel' || node.kind === 'branch') node.children.forEach(visit);\n };\n shape.children.forEach(visit);\n return result;\n };\n const snapshot = (): DynamicWorkflowSnapshot =>\n structuredClone({\n version: 1,\n revision,\n sessionId: config.sessionId,\n runs: roots.map((run) => ({\n ...run,\n groups: run.groups.map((group) => ({\n ...group,\n counts: group.items.reduce((sum, item) => {\n sum[item.status]++;\n return sum;\n }, counts()),\n truncated: group.items.length > 1000,\n items: group.items.slice(0, 1000),\n })),\n })),\n });\n const publish = () => {\n revision++;\n // Observers cannot change workflow execution or strand a running item.\n try {\n config.publish?.(snapshot());\n } catch {\n /* Publication is best effort. */\n }\n };\n const derive = (phase: DynamicWorkflowPhase) => {\n phase.status =\n boundaryFailures.has(phase) || phase.agents.some((agent) => agent.status === 'failed')\n ? 'failed'\n : intentionalStops.has(phase)\n ? 'stopped'\n : phase.executionStatus;\n };\n const summarize = (item: DynamicWorkflowItem) => {\n item.status = item.phases.some((phase) => phase.status === 'failed')\n ? 'failed'\n : item.phases.some((phase) => phase.status === 'running')\n ? 'running'\n : item.phases.some((phase) => phase.status === 'stopped')\n ? 'stopped'\n : item.phases.every((phase) => phase.status === 'skipped')\n ? 'skipped'\n : item.phases.some((phase) => phase.status === 'pending')\n ? 'pending'\n : 'completed';\n };\n const update = (owner: PhaseOwner) => {\n derive(owner.phase);\n summarize(owner.execution.item);\n publish();\n };\n const terminal = (execution: Execution, outcome: DynamicWorkflowStatus, root: boolean, engineOutcome = outcome) => {\n const relevant = new Set<string>();\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'foreach') return;\n if (shape.kind === 'step') relevant.add(shape.key);\n else shape.children.forEach(visit);\n };\n visit(execution.shape);\n for (const phase of execution.item.phases) {\n if (!root && !relevant.has(phase.key)) continue;\n if (phase.executionStatus === 'pending') phase.executionStatus = 'skipped';\n else if (phase.executionStatus === 'running') phase.executionStatus = outcome;\n derive(phase);\n }\n if (execution.item.phases.length) summarize(execution.item);\n else execution.item.status = outcome;\n if (\n execution.root.groups.some(\n (group) =>\n group.key.startsWith(`${execution.item.key}/`) && group.items.some((item) => item.status === 'failed'),\n )\n )\n execution.item.status = 'failed';\n if (root) {\n execution.root.executionStatus = engineOutcome;\n execution.root.status = execution.root.groups.some((group) =>\n group.items.some((item) => item.status === 'failed'),\n )\n ? 'failed'\n : outcome;\n execution.root.finishedAt = now();\n for (const group of execution.root.groups)\n for (const item of group.items) {\n if (item.status === 'pending') {\n item.status = 'skipped';\n for (const phase of item.phases)\n if (phase.executionStatus === 'pending') phase.status = phase.executionStatus = 'skipped';\n }\n }\n const completed = roots.filter((run) => run.executionStatus !== 'running');\n for (const run of completed.slice(0, Math.max(0, completed.length - 20))) {\n roots.splice(roots.indexOf(run), 1);\n for (const [id, owner] of children) if (owner.execution.root === run) children.delete(id);\n }\n }\n publish();\n };\n const reconcile = (execution: Execution, result: Record<string, unknown>) => {\n if (!result.steps || typeof result.steps !== 'object') return;\n const results = result.steps as Record<string, unknown>;\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'step') {\n // The contract captures the exact Mastra step id as label, not an inferred display name.\n const value = results[shape.label];\n if (!value || typeof value !== 'object') return;\n const detail = value as Record<string, unknown>;\n const phase = execution.item.phases.find((phase) => phase.key === shape.key);\n if (!phase || !['success', 'failed', 'canceled', 'cancelled', 'skipped'].includes(String(detail.status)))\n return;\n phase.executionStatus = detail.status === 'skipped' ? 'skipped' : status(detail.status);\n if (typeof detail.startedAt === 'number') phase.startedAt = detail.startedAt;\n if (typeof detail.endedAt === 'number') phase.finishedAt = detail.endedAt;\n if (detail.error) phase.error = errorText(detail.error);\n derive(phase);\n } else if (shape.kind === 'parallel' || shape.kind === 'branch') shape.children.forEach(visit);\n };\n // Nested workflows reconcile their own result, which can reuse parent run ids.\n execution.shape.children.forEach(visit);\n };\n const makeItem = (definition: Definition, index: number, shape = definition.shape): DynamicWorkflowItem => {\n const phases: DynamicWorkflowPhase[] = [];\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'foreach') return;\n if (shape.kind === 'step')\n phases.push({ key: shape.key, label: shape.label, status: 'pending', executionStatus: 'pending', agents: [] });\n else shape.children.forEach(visit);\n };\n visit(shape);\n return { key: key(), index, label: `Item ${index + 1}`, status: 'pending', phases };\n };\n const activeCancels = new Set<() => Promise<unknown>>();\n const activeStarts = new Set<Promise<unknown>>();\n const bindings = new Set<AbortController>();\n return {\n snapshot,\n inlineRun(event) {\n if (event.sessionId !== config.sessionId) return;\n if (event.status === 'running') {\n if (disposed) return;\n const owner = context.getStore();\n if (!owner || owner.phase.executionStatus !== 'running' || owner.execution.root.executionStatus !== 'running')\n return;\n children.set(event.runId, owner);\n if (!owner.phase.agents.some((agent) => agent.runId === event.runId))\n owner.phase.agents.push({ runId: event.runId, status: event.status });\n update(owner);\n } else {\n const owner = children.get(event.runId);\n const agent = owner?.phase.agents.find((agent) => agent.runId === event.runId);\n if (owner && agent) {\n agent.status = event.status;\n update(owner);\n }\n }\n },\n namespace(lifetime) {\n return {\n name: 'dynamicWorkflow',\n summary:\n 'Tracked Mastra workflows: then, parallel, branch and bounded foreach, with live child-agent transcripts in Activity.',\n declarations: dynamicWorkflowDeclarations,\n bind(run: PoCodemodeRun) {\n if (run.sessionId !== config.sessionId) throw new Error('dynamicWorkflow belongs to another session.');\n const binding = new AbortController();\n bindings.add(binding);\n const signal = AbortSignal.any([lifetime, run.signal, binding.signal]);\n let closed = false;\n const assert = () => {\n signal.throwIfAborted();\n if (closed || disposed) throw new Error('dynamicWorkflow execution is disposed.');\n };\n const definitions = new WeakMap<object, Definition>();\n const pendingCancels = new Set<() => Promise<unknown>>();\n const pendingStarts = new Set<Promise<unknown>>();\n const stop = () => {\n closed = true;\n for (const cancel of pendingCancels) void cancel().catch(() => undefined);\n };\n signal.addEventListener('abort', stop, { once: true });\n run.onDispose(async () => {\n closed = true;\n binding.abort(new Error('dynamicWorkflow execution is disposed.'));\n bindings.delete(binding);\n signal.removeEventListener('abort', stop);\n await Promise.allSettled([...pendingCancels].map((cancel) => cancel()));\n await Promise.allSettled(pendingStarts);\n });\n const definitionFor = (value: unknown): Definition => {\n const definition = definitions.get(object(value, 'Tracked step'));\n if (!definition)\n throw new Error('Only steps and workflows created by this dynamicWorkflow execution are supported.');\n if (definition.workflow && !definition.workflow.committed)\n throw new Error('Commit nested workflows before composing them.');\n return definition;\n };\n const createGroup = (\n execution: Execution,\n shape: DynamicWorkflowShape,\n total: number,\n concurrency: number,\n ): DynamicWorkflowGroup => {\n const groupKey = `${execution.item.key}/${shape.key}`;\n let group = execution.root.groups.find((group) => group.key === groupKey);\n if (!group) {\n group = {\n key: groupKey,\n label: shape.label,\n total,\n counts: counts(),\n truncated: false,\n concurrency,\n items: [],\n };\n execution.root.groups.push(group);\n }\n return group;\n };\n const members: Record<string, unknown> = {\n get z() {\n assert();\n return loadFactories().z;\n },\n createStep(value: unknown) {\n assert();\n const def = options(value, ['id', 'description', 'inputSchema', 'outputSchema', 'execute'], 'createStep');\n const id = label(def.id);\n validateDefinition(def);\n if (typeof def.execute !== 'function') throw new Error('createStep.execute must be a function.');\n const callback = def.execute as (params: Record<string, unknown>) => unknown;\n const shape: DynamicWorkflowShape = { key: key(), label: id, kind: 'step', children: [] };\n const raw = loadFactories().createStep({\n ...def,\n id,\n execute: async (params: Record<string, unknown>) => {\n assert();\n const execution = runContext.getStore();\n const position =\n execution && directSteps(execution.shape).find((candidate) => origin(candidate) === shape.key);\n const phase = execution?.item.phases.find((phase) => phase.key === position?.key);\n if (!execution || !phase) throw new Error('Tracked step has no execution context.');\n phase.executionStatus = phase.status = 'running';\n phase.startedAt = now();\n execution.item.status = 'running';\n publish();\n const owner = { execution, phase };\n const operationSignal = callbackSignal(signal, params);\n return context.run(owner, async () => {\n try {\n const output = await callbackWithAbort(\n () => callback(callbackParameters(params)),\n operationSignal,\n );\n operationSignal.throwIfAborted();\n assert();\n if (output === undefined)\n throw new Error(\n 'Tracked callback returned undefined. Return null for empty output, or inspect exec diagnostics for a guest callback error.',\n );\n phase.executionStatus = 'completed';\n return output;\n } catch (error) {\n if (operationSignal.aborted || closed || disposed) intentionalStops.add(phase);\n phase.executionStatus = 'failed';\n phase.error = errorText(error);\n throw error;\n } finally {\n phase.finishedAt = now();\n update(owner);\n }\n });\n },\n });\n const handle = Object.freeze({ id });\n definitions.set(handle, { raw, shape });\n return handle;\n },\n createWorkflow(value: unknown) {\n assert();\n const def = options(value, ['id', 'description', 'inputSchema', 'outputSchema'], 'createWorkflow');\n const id = label(def.id);\n validateDefinition(def);\n const raw = loadFactories().createWorkflow({ ...def, id });\n const definition: Definition = {\n raw,\n shape: { key: key(), kind: 'sequence', label: id, children: [] },\n workflow: { raw, committed: false, foreach: new Map(), nested: new Map() },\n };\n const workflow = definition.workflow!;\n const rawCreateRun = raw.createRun.bind(raw);\n raw.createRun = async (createOptions: Record<string, unknown> = {}) => {\n assert();\n const rawRun = await rawCreateRun(createOptions);\n const parent = createOptions.parentWorkflow as\n | { runId: string; stepId: string; foreachIndex?: number }\n | undefined;\n let execution: Execution | undefined;\n if (parent) {\n const ancestor = runContext.getStore();\n if (!ancestor) throw new Error('Nested workflow has no tracked parent.');\n const authoredForeach = ancestor.definition.workflow?.foreach.get(parent.stepId);\n const foreachShape = authoredForeach && findShape(ancestor.shape, authoredForeach);\n if (foreachShape) {\n if (!Number.isSafeInteger(parent.foreachIndex) || parent.foreachIndex! < 0)\n throw new Error('Nested foreach did not provide a stable item index.');\n const group = ancestor.root.groups.find(\n (group) => group.key === `${ancestor.item.key}/${foreachShape.key}`,\n );\n if (!group) throw new Error('Nested foreach has no observed group.');\n const item = group.items[parent.foreachIndex!];\n if (!item) throw new Error('Nested foreach item is outside its observed input.');\n execution = {\n root: ancestor.root,\n item,\n definition,\n boundaryErrors: ancestor.boundaryErrors,\n shape: foreachShape.children[0]!,\n };\n } else {\n const authored = ancestor.definition.workflow?.nested.get(parent.stepId);\n const position = authored && findShape(ancestor.shape, authored);\n if (!position) throw new Error('Nested workflow has no tracked graph position.');\n execution = { ...ancestor, definition, shape: position };\n }\n }\n const start = rawRun.start.bind(rawRun);\n const cancel = rawRun.cancel.bind(rawRun);\n let started = false;\n let cancelled = false;\n const cancelTracked = async () => {\n cancelled = true;\n return await cancel();\n };\n rawRun.cancel = cancelTracked;\n const executeStart = async (startOptions: Record<string, unknown>) => {\n assert();\n if (started) throw new Error('Tracked runs can only start once.');\n started = true;\n if (!parent) {\n const item = makeItem(definition, 0);\n item.label = id;\n const root: DynamicWorkflowRun = {\n key: rawRun.runId,\n workflowId: id,\n label: id,\n status: 'running',\n executionStatus: 'running',\n startedAt: now(),\n shape: structuredClone(definition.shape),\n groups: [{ key: key(), label: id, total: 1, counts: counts(), truncated: false, items: [item] }],\n };\n // Foreach-only roots do not need an empty synthetic row.\n if (!item.phases.length) root.groups = [];\n roots.push(root);\n execution = { root, item, definition, boundaryErrors: [], shape: definition.shape };\n publish();\n }\n if (!execution) throw new Error('Tracked run has no execution context.');\n execution.item.status = 'running';\n pendingCancels.add(cancelTracked);\n activeCancels.add(cancelTracked);\n let reported = false;\n try {\n const result = await runContext.run(execution, () => start(startOptions));\n const outcome =\n cancelled || signal.aborted || closed || disposed ? 'stopped' : status(result.status);\n if (result.error) execution.root.error = errorText(result.error);\n reconcile(execution, result);\n terminal(execution, outcome, !parent, status(result.status));\n reported = true;\n if (execution.boundaryErrors.length) throw new Error(execution.boundaryErrors[0]);\n return result;\n } catch (error) {\n if (!reported) {\n execution.root.error = errorText(error);\n terminal(\n execution,\n cancelled || signal.aborted || closed || disposed ? 'stopped' : 'failed',\n !parent,\n );\n }\n throw error;\n } finally {\n pendingCancels.delete(cancelTracked);\n activeCancels.delete(cancelTracked);\n }\n };\n rawRun.start = (startOptions) => {\n const started = executeStart(startOptions);\n pendingStarts.add(started);\n activeStarts.add(started);\n const settled = () => {\n pendingStarts.delete(started);\n activeStarts.delete(started);\n };\n void started.then(settled, settled);\n return started;\n };\n return rawRun;\n };\n const ids = new Set<string>();\n const claim = (targets: Definition[]) => {\n const next = new Set<string>();\n for (const target of targets) {\n if (ids.has(target.raw.id) || next.has(target.raw.id) || target.raw.id === id)\n throw new Error('Use distinct step ids within a tracked workflow.');\n next.add(target.raw.id);\n }\n for (const value of next) ids.add(value);\n for (const target of targets) if (target.workflow) workflow.nested.set(target.raw.id, target.shape);\n };\n const mutable = () => {\n assert();\n if (workflow.committed) throw new Error('Tracked workflow is already committed.');\n };\n const add = (kind: 'parallel' | 'branch', targets: Definition[]) => {\n definition.shape.children.push({\n key: key(),\n label: kind,\n kind,\n children: targets.map((target) => occurrence(target.shape)),\n });\n };\n const handle = Object.freeze({\n id,\n // Mastra intentionally names its fluent composition method then, not a Promise continuation.\n // oxlint-disable-next-line unicorn/no-thenable\n then(value: unknown) {\n mutable();\n const target = definitionFor(value);\n claim([target]);\n raw.then(target.raw);\n definition.shape.children.push(occurrence(target.shape));\n return handle;\n },\n parallel(values: unknown) {\n mutable();\n if (!Array.isArray(values) || !values.length)\n throw new Error('parallel requires a non-empty array of tracked steps.');\n const targets = values.map(definitionFor);\n claim(targets);\n raw.parallel(targets.map((target) => target.raw));\n add('parallel', targets);\n return handle;\n },\n branch(values: unknown) {\n mutable();\n if (!Array.isArray(values) || !values.length)\n throw new Error('branch requires predicate/step pairs.');\n const targets: Definition[] = [];\n const pairs = values.map(\n (pair: unknown): [(params: Record<string, unknown>) => Promise<boolean>, RawStep] => {\n if (!Array.isArray(pair) || pair.length !== 2 || typeof pair[0] !== 'function')\n throw new Error('branch requires [predicate, tracked step] pairs.');\n const target = definitionFor(pair[1]);\n targets.push(target);\n const predicate = pair[0] as (params: Record<string, unknown>) => unknown;\n return [\n async (params) => {\n assert();\n const operationSignal = callbackSignal(signal, params);\n try {\n const answer = await callbackWithAbort(\n () => predicate(callbackParameters(params)),\n operationSignal,\n );\n if (typeof answer !== 'boolean')\n throw new Error(\n 'Tracked branch predicates must return a boolean. Inspect exec diagnostics if a guest callback failed.',\n );\n return answer;\n } catch (error) {\n if (operationSignal.aborted) throw error;\n const execution = runContext.getStore();\n if (execution) {\n const message = errorText(error);\n execution.boundaryErrors.push(message);\n execution.root.error = message;\n const leaves = new Set<string>();\n const visit = (shape: DynamicWorkflowShape): void => {\n if (shape.kind === 'step') leaves.add(shape.key);\n else shape.children.forEach(visit);\n };\n const position = findShape(execution.shape, target.shape);\n if (position) visit(position);\n for (const phase of execution.item.phases)\n if (leaves.has(phase.key)) {\n boundaryFailures.add(phase);\n phase.error = message;\n }\n }\n throw error;\n }\n },\n target.raw,\n ];\n },\n );\n claim(targets);\n raw.branch(pairs);\n add('branch', targets);\n return handle;\n },\n foreach(value: unknown, settings: unknown) {\n mutable();\n const target = definitionFor(value);\n if (!target.workflow)\n throw new Error('foreach requires a committed tracked item workflow, not a bare step.');\n const opts = options(settings, ['concurrency'], 'foreach');\n if (!Number.isSafeInteger(opts.concurrency) || Number(opts.concurrency) < 1)\n throw new Error('foreach.concurrency must be a positive integer.');\n const concurrency = Number(opts.concurrency);\n claim([target]);\n const shape: DynamicWorkflowShape = {\n key: key(),\n kind: 'foreach',\n label: target.shape.label,\n children: [occurrence(target.shape)],\n };\n raw.foreach(target.workflow.raw, {\n concurrency: ({ inputData }) => {\n assert();\n const execution = runContext.getStore();\n if (!execution || !Array.isArray(inputData))\n throw new Error('Tracked foreach requires array input and an active run.');\n const position = findShape(execution.shape, shape);\n if (!position) throw new Error('Foreach has no tracked graph position.');\n const group = createGroup(execution, position, inputData.length, concurrency);\n group.items = inputData.map((_, index) => makeItem(target, index, position.children[0]));\n publish();\n return concurrency;\n },\n });\n workflow.foreach.set(target.raw.id, shape);\n definition.shape.children.push(shape);\n return handle;\n },\n commit() {\n mutable();\n raw.commit();\n workflow.committed = true;\n return handle;\n },\n async createRun(value?: unknown) {\n assert();\n if (!workflow.committed) throw new Error('Commit the tracked workflow before creating a run.');\n if (value !== undefined && Object.keys(options(value, [], 'createRun')).length)\n throw new Error('createRun options are unsupported.');\n const live = await raw.createRun();\n return Object.freeze({\n runId: live.runId,\n async start(value: unknown) {\n assert();\n const opts = options(value, ['inputData'], 'start');\n return live.start(opts);\n },\n async cancel() {\n assert();\n await live.cancel();\n },\n });\n },\n });\n definitions.set(handle, definition);\n return handle;\n },\n };\n return members;\n },\n };\n },\n async dispose() {\n disposed = true;\n for (const binding of bindings) binding.abort(new Error('dynamicWorkflow session is disposed.'));\n bindings.clear();\n await Promise.allSettled([...activeCancels].map((cancel) => cancel()));\n await Promise.allSettled(activeStarts);\n children.clear();\n },\n };\n}\n","import { PO_CODEMODE_SERVICE, readPoCodemode } from '@agimon-ai/po-core/codemode';\nimport { PO_TEAM_INLINE_RUN_EVENT } from '@agimon-ai/po-core/delegation';\nimport { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { PoServerPluginContext } from '@agimon-ai/po-core/serverPlugin';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../../../constants/dynamicWorkflow';\nimport { createWorkflowTracker } from '../../../../services/workflowTracker';\n\nexport default defineRoot(async ({ context, agent, host, signal }: PoServerPluginContext) => {\n if (!agent) throw new Error('Dynamic workflow requires a headless session host.');\n const runtime = await createWorkflowTracker({\n sessionId: agent.context.sessionId,\n publish: (snapshot) =>\n host.context.directEvents?.publish(DYNAMIC_WORKFLOW_CHANNEL, agent.context.sessionId, snapshot),\n });\n const stopEvents = context.on(PO_TEAM_INLINE_RUN_EVENT, (event) => runtime.inlineRun(event));\n context.inject([PO_CODEMODE_SERVICE], (scoped) => {\n const codemode = readPoCodemode(scoped);\n const registration = codemode?.register('@agimon-ai/po-dynamic-workflow', runtime.namespace(signal));\n return () => registration?.dispose();\n });\n host.context.directEvents?.publish(DYNAMIC_WORKFLOW_CHANNEL, agent.context.sessionId, runtime.snapshot());\n return {\n value: runtime,\n onDispose: async () => {\n try {\n await runtime.dispose();\n } finally {\n stopEvents();\n }\n },\n };\n});\n","import type { PoHubChannel, PoHubSessionScope } from '@agimon-ai/po-core/hubChannel';\n\nimport { DYNAMIC_WORKFLOW_CHANNEL } from '../../constants/dynamicWorkflow';\nimport type { DynamicWorkflowSnapshot } from '../../types/dynamicWorkflow';\n\nexport function createWorkflowChannel(): PoHubChannel {\n return {\n frameType: DYNAMIC_WORKFLOW_CHANNEL,\n start(host) {\n const latest = new Map<string, DynamicWorkflowSnapshot>();\n const subscriptions = new Map<string, () => void>();\n const scopes = new Map<string, PoHubSessionScope>();\n return {\n payloadFor: (scope) => latest.get(scope.sessionId),\n sessionAdded(scope) {\n subscriptions.get(scope.sessionId)?.();\n scopes.set(scope.sessionId, scope);\n latest.delete(scope.sessionId);\n subscriptions.set(\n scope.sessionId,\n host.directEvents.subscribe(\n DYNAMIC_WORKFLOW_CHANNEL,\n scope.sessionId,\n (value) => {\n if (scopes.get(scope.sessionId) !== scope || !value || typeof value !== 'object') return;\n const snapshot = value as DynamicWorkflowSnapshot;\n if (snapshot.version !== 1 || snapshot.sessionId !== scope.sessionId || !Array.isArray(snapshot.runs))\n return;\n const detached = structuredClone(snapshot);\n latest.set(scope.sessionId, detached);\n host.publish(scope.sessionId, detached);\n },\n { replayLatest: true },\n ),\n );\n },\n sessionRemoved(id) {\n subscriptions.get(id)?.();\n subscriptions.delete(id);\n scopes.delete(id);\n latest.delete(id);\n },\n close() {\n for (const unsubscribe of subscriptions.values()) unsubscribe();\n subscriptions.clear();\n scopes.clear();\n latest.clear();\n },\n };\n },\n };\n}\n","import { defineChannel } from '@agimon-ai/po-core/extensionFile';\n\nimport { createWorkflowChannel } from '../../../services/workflowChannel';\n\nexport default defineChannel(createWorkflowChannel);\n","import { defineResource } from '@agimon-ai/po-core/extensionFile';\nimport { packageResourcePath, readPackageResource } from '@agimon-ai/po-core/serverPlugin';\n\nexport default defineResource({\n name: 'codemode-how-to-dynamic-workflow',\n description:\n 'Let the person follow a long multi-phase or fan-out job live, with each child agent transcript in Activity. Use when a script runs many steps or subagents that someone should be able to watch.',\n kind: 'skill' as const,\n pinned: true,\n path: packageResourcePath(import.meta.url, 'src/prompts/codemode-how-to-dynamic-workflow/SKILL.md'),\n read: () => readPackageResource(import.meta.url, 'src/prompts/codemode-how-to-dynamic-workflow/SKILL.md'),\n});\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverPlugin';\nimport { composeRootHooks, composeRootInjects } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport channelDynamicWorkflowRuns from '../src/extensions/(backend)/channel/dynamic-workflow-runs.server';\nimport resourceCodemodeHowToDynamicWorkflow from '../src/extensions/workspaces/sessions/(backend)/resource/codemode-how-to-dynamic-workflow.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n/* v8 ignore next -- generated normalization branch */\nconst defined = <T>(values: readonly (T | undefined)[]): T[] =>\n values.filter((value): value is T => value !== undefined);\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-dynamic-workflow',\n providerOverrides: composeServerProviderOverrides(rootSession),\n injects: composeRootInjects({ session: [rootSession] }),\n global: (context) => ({\n get channels(): PoServerSessionPlugin['channels'] { return [() => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]; },\n }),\n workspace: (context) => ({\n get channels(): PoServerSessionPlugin['channels'] { return defined([context.hosted('global') ? undefined : () => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]); },\n }),\n session: async (context) => {\n const scopeSession = await context.scopeRoot('session', rootSession, context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get channels(): PoServerSessionPlugin['channels'] { return defined([context.hosted('global') ? undefined : () => via({ frameType: 'dynamic_workflow_runs' }, at(channelDynamicWorkflowRuns, context))]); },\n get resources(): PoServerSessionPlugin['resources'] { return [at(resourceCodemodeHowToDynamicWorkflow, contextSession)]; },\n services: [...(scopeSession.services ?? [])],\n get activities(): PoServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default serverPlugin;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agimon-ai/po-dynamic-workflow",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.4",
|
|
4
4
|
"description": "Tracked Mastra workflows for Po",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -55,17 +55,17 @@
|
|
|
55
55
|
"access": "public"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@agimon-ai/po-core": "0.0.0-alpha.
|
|
59
|
-
"@agimon-ai/po-native-components": "0.0.0-alpha.
|
|
60
|
-
"@agimon-ai/po-web-components": "0.0.0-alpha.
|
|
58
|
+
"@agimon-ai/po-core": "0.0.0-alpha.36",
|
|
59
|
+
"@agimon-ai/po-native-components": "0.0.0-alpha.36",
|
|
60
|
+
"@agimon-ai/po-web-components": "0.0.0-alpha.36",
|
|
61
61
|
"@deepseek-ai/cordis": "4.0.5",
|
|
62
62
|
"@mastra/core": "1.78.0",
|
|
63
63
|
"typebox": "1.3.37",
|
|
64
64
|
"zod": "3.25.76"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@agimon-ai/po-build": "0.0.0-alpha.
|
|
68
|
-
"@agimon-ai/vibe-lint-plugin-po-extension": "0.0.0-alpha.
|
|
67
|
+
"@agimon-ai/po-build": "0.0.0-alpha.36",
|
|
68
|
+
"@agimon-ai/vibe-lint-plugin-po-extension": "0.0.0-alpha.36",
|
|
69
69
|
"@earendil-works/pi-coding-agent": "1.3.0",
|
|
70
70
|
"@tanstack/react-store": "0.11.2",
|
|
71
71
|
"@tanstack/store": "0.11.2",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: codemode-how-to-dynamic-workflow
|
|
3
|
-
description:
|
|
3
|
+
description: 'Let the person follow a long multi-phase or fan-out job live, with each child agent transcript in Activity. Use when a script runs many steps or subagents that someone should be able to watch.'
|
|
4
4
|
pinned: true
|
|
5
5
|
---
|
|
6
6
|
|