@skaile/workspaces 2.9.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +17 -6
- package/dist/{asset-feeds-EO2QDJ4C.js → asset-feeds-XKPJZ6QT.js} +4 -4
- package/dist/{asset-feeds-EO2QDJ4C.js.map → asset-feeds-XKPJZ6QT.js.map} +1 -1
- package/dist/asset-manager/index.js +1 -1
- package/dist/bridge/drivers/claude-sdk.js +2 -2
- package/dist/bridge/drivers/codex.js +2 -2
- package/dist/bridge/drivers/continue.js +2 -2
- package/dist/bridge/drivers/echo.js +1 -1
- package/dist/bridge/drivers/gemini.js +4 -4
- package/dist/bridge/drivers/goose.js +2 -2
- package/dist/bridge/drivers/omp.js +1 -1
- package/dist/bridge/drivers/opencode.js +2 -2
- package/dist/bridge/drivers/qwen.js +4 -4
- package/dist/bridge/index.js +3 -3
- package/dist/bridge/src/models.d.ts +59 -0
- package/dist/bridge/src/models.d.ts.map +1 -1
- package/dist/{chunk-INHE5U74.js → chunk-5QGMEPUX.js} +8 -12
- package/dist/chunk-5QGMEPUX.js.map +1 -0
- package/dist/{chunk-TU7JDHKS.js → chunk-7HXS7WZF.js} +2 -2
- package/dist/{chunk-TU7JDHKS.js.map → chunk-7HXS7WZF.js.map} +1 -1
- package/dist/{chunk-OHLKWUO3.js → chunk-7KFN2EPR.js} +12 -4
- package/dist/chunk-7KFN2EPR.js.map +1 -0
- package/dist/{chunk-L3TS7ZO4.js → chunk-BJDACPWZ.js} +3 -3
- package/dist/{chunk-L3TS7ZO4.js.map → chunk-BJDACPWZ.js.map} +1 -1
- package/dist/{chunk-AFUOORJE.js → chunk-EH7BCJF4.js} +6 -6
- package/dist/{chunk-AFUOORJE.js.map → chunk-EH7BCJF4.js.map} +1 -1
- package/dist/{chunk-AGFAOSCZ.js → chunk-F5VREBV2.js} +8 -5
- package/dist/chunk-F5VREBV2.js.map +1 -0
- package/dist/{chunk-5LA4XI4Y.js → chunk-JQMULHO6.js} +24 -12
- package/dist/chunk-JQMULHO6.js.map +1 -0
- package/dist/{chunk-ZR2X4SIG.js → chunk-KXWUCKP5.js} +5 -5
- package/dist/{chunk-ZR2X4SIG.js.map → chunk-KXWUCKP5.js.map} +1 -1
- package/dist/{chunk-ZXJKWA44.js → chunk-N4GFUWWC.js} +3 -3
- package/dist/{chunk-ZXJKWA44.js.map → chunk-N4GFUWWC.js.map} +1 -1
- package/dist/{chunk-UTHMTZEH.js → chunk-NMKTM55X.js} +2 -2
- package/dist/{chunk-UTHMTZEH.js.map → chunk-NMKTM55X.js.map} +1 -1
- package/dist/{chunk-QVFCDSRH.js → chunk-P2J3MLTW.js} +3 -3
- package/dist/{chunk-QVFCDSRH.js.map → chunk-P2J3MLTW.js.map} +1 -1
- package/dist/{chunk-VNIKF66R.js → chunk-P5W6JVD4.js} +4 -4
- package/dist/{chunk-VNIKF66R.js.map → chunk-P5W6JVD4.js.map} +1 -1
- package/dist/{chunk-4PSDPZUG.js → chunk-Q6O53D5Q.js} +2 -2
- package/dist/{chunk-4PSDPZUG.js.map → chunk-Q6O53D5Q.js.map} +1 -1
- package/dist/{chunk-YFAED6OB.js → chunk-QGDQHNYC.js} +4 -4
- package/dist/{chunk-YFAED6OB.js.map → chunk-QGDQHNYC.js.map} +1 -1
- package/dist/{chunk-UAIR3K6X.js → chunk-S5FV6ISY.js} +8 -5
- package/dist/chunk-S5FV6ISY.js.map +1 -0
- package/dist/{chunk-HY3MBSNC.js → chunk-SR6NBBWT.js} +2 -2
- package/dist/{chunk-HY3MBSNC.js.map → chunk-SR6NBBWT.js.map} +1 -1
- package/dist/{chunk-BIKTLLLD.js → chunk-TXTCW7V6.js} +6 -6
- package/dist/{chunk-BIKTLLLD.js.map → chunk-TXTCW7V6.js.map} +1 -1
- package/dist/{chunk-BMQKMOQY.js → chunk-V34ZEXSE.js} +61 -3
- package/dist/chunk-V34ZEXSE.js.map +1 -0
- package/dist/{chunk-XXDQHZJY.js → chunk-WECBTWWZ.js} +3 -3
- package/dist/{chunk-XXDQHZJY.js.map → chunk-WECBTWWZ.js.map} +1 -1
- package/dist/{chunk-XHSS3YHV.js → chunk-XJECOBCO.js} +16 -7
- package/dist/chunk-XJECOBCO.js.map +1 -0
- package/dist/{chunk-E5VGAW4E.js → chunk-ZO7KL7GN.js} +230 -9
- package/dist/chunk-ZO7KL7GN.js.map +1 -0
- package/dist/cli/index.js +38 -38
- package/dist/connectors/index.js +11 -5
- package/dist/{ensure-sources-6ZOD45TO.js → ensure-sources-D6R57GAP.js} +4 -4
- package/dist/{ensure-sources-6ZOD45TO.js.map → ensure-sources-D6R57GAP.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +11 -5
- package/dist/factory-assets/connectors/deploy.js +11 -5
- package/dist/factory-assets/connectors/devserver.js +11 -5
- package/dist/factory-assets/connectors/flow/CONNECTOR.md +47 -6
- package/dist/factory-assets/connectors/flow/adapter.d.ts +5 -0
- package/dist/factory-assets/connectors/flow/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/adapter.js +11 -5
- package/dist/factory-assets/connectors/flow/contract/flow.v2.schema.json +0 -6
- package/dist/factory-assets/connectors/flow/contract/normalize.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts +0 -4
- package/dist/factory-assets/connectors/flow/contract/schema.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/contract.js +2 -2
- package/dist/factory-assets/connectors/flow/engine/bindings.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/node-shape.d.ts +7 -1
- package/dist/factory-assets/connectors/flow/engine/node-shape.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine/types.d.ts +12 -12
- package/dist/factory-assets/connectors/flow/engine/types.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/engine.js +3 -3
- package/dist/factory-assets/connectors/flow/index.d.ts +1 -0
- package/dist/factory-assets/connectors/flow/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts +3 -0
- package/dist/factory-assets/connectors/flow/inline-sub-flow-host.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts +14 -0
- package/dist/factory-assets/connectors/flow/prompt-fragments.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/prompt-fragments.js +2 -2
- package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +12 -6
- package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts +99 -0
- package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -0
- package/dist/factory-assets/connectors/flow.js +11 -5
- package/dist/factory-assets/connectors/git.js +11 -5
- package/dist/factory-assets/connectors/gmail.js +11 -5
- package/dist/factory-assets/connectors/googledrive.js +11 -5
- package/dist/factory-assets/connectors/local.js +11 -5
- package/dist/factory-assets/connectors/mattermost.js +11 -5
- package/dist/factory-assets/connectors/memory.js +11 -5
- package/dist/factory-assets/connectors/minio.js +11 -5
- package/dist/factory-assets/connectors/postgres.js +11 -5
- package/dist/factory-assets/connectors/s3.js +11 -5
- package/dist/factory-assets/connectors/sharepoint.js +11 -5
- package/dist/factory-assets/connectors/sqlite.js +11 -5
- package/dist/factory-assets/connectors/static-server.js +11 -5
- package/dist/factory-assets/connectors/tunnel.js +11 -5
- package/dist/factory-assets/connectors/webdav.js +11 -5
- package/dist/factory-assets/connectors/xstate-store.js +11 -5
- package/dist/factory-assets/connectors/xstate.js +11 -5
- package/dist/{flows-7N5AUUIS.js → flows-LQSVM45J.js} +3 -3
- package/dist/{flows-7N5AUUIS.js.map → flows-LQSVM45J.js.map} +1 -1
- package/dist/{helpers-HWLCANAK.js → helpers-IS4MSEOQ.js} +4 -4
- package/dist/{helpers-HWLCANAK.js.map → helpers-IS4MSEOQ.js.map} +1 -1
- package/dist/{library-publish-GSAIZCO3.js → library-publish-QJACP6FW.js} +9 -9
- package/dist/{library-publish-GSAIZCO3.js.map → library-publish-QJACP6FW.js.map} +1 -1
- package/dist/{open-library-ZB2STYC6.js → open-library-3FMLAU3F.js} +8 -8
- package/dist/{open-library-ZB2STYC6.js.map → open-library-3FMLAU3F.js.map} +1 -1
- package/dist/{project-EJFCLSHS.js → project-KEAAGHSX.js} +5 -5
- package/dist/{project-EJFCLSHS.js.map → project-KEAAGHSX.js.map} +1 -1
- package/dist/runner/index.js +15 -15
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +1 -1
- package/dist/sdk/bridge.js +3 -3
- package/dist/sdk/flow.js +3 -3
- package/dist/sdk/index.js +15 -15
- package/dist/sdk/runner.js +15 -15
- package/dist/{setup-RHWARBBB.js → setup-VX6EPF5P.js} +5 -5
- package/dist/{setup-RHWARBBB.js.map → setup-VX6EPF5P.js.map} +1 -1
- package/dist/{source-ILV6ZKWM.js → source-45XHQSBF.js} +9 -9
- package/dist/{source-ILV6ZKWM.js.map → source-45XHQSBF.js.map} +1 -1
- package/dist/{source-manifest-publish-QE2IFDRW.js → source-manifest-publish-M34SKD46.js} +10 -10
- package/dist/{source-manifest-publish-QE2IFDRW.js.map → source-manifest-publish-M34SKD46.js.map} +1 -1
- package/dist/tui/index.js +15 -15
- package/dist/workspace-plugin/adapters/mcp.js +1 -1
- package/dist/workspace-plugin/adapters/omp.js +3 -3
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5LA4XI4Y.js.map +0 -1
- package/dist/chunk-AGFAOSCZ.js.map +0 -1
- package/dist/chunk-BMQKMOQY.js.map +0 -1
- package/dist/chunk-E5VGAW4E.js.map +0 -1
- package/dist/chunk-INHE5U74.js.map +0 -1
- package/dist/chunk-OHLKWUO3.js.map +0 -1
- package/dist/chunk-UAIR3K6X.js.map +0 -1
- package/dist/chunk-XHSS3YHV.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../factory-assets/connectors/flow/contract/expression.ts","../factory-assets/connectors/flow/contract/schema.ts","../factory-assets/connectors/flow/contract/normalize.ts"],"names":["number","evaluate","record","bindingName","z2","data","assets","parameters","control"],"mappings":"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","file":"chunk-INHE5U74.js","sourcesContent":["// Canonical definition lives in `@skaile/workspaces/types` — it is the wire\n// shape persisted on `CheckEvidence`/`NodeExecutionAttempt`, not a connector-\n// local concept. Re-exported here so existing in-connector imports are unaffected.\nimport type { BindingOrigin } from \"@skaile/workspaces/types\";\nexport type { BindingOrigin };\n\n/** Hard resource budgets applied to every Flow expression evaluation. */\nexport const FLOW_EXPRESSION_LIMITS = Object.freeze({\n maxLength: 4096,\n maxTokens: 256,\n maxNesting: 32,\n maxPathSegments: 32,\n maxCollectionItems: 1024,\n});\n\n/** Read-only values available to the bounded Flow expression language. */\nexport interface FlowExpressionContext {\n /** Validated input supplied to the current flow run. */\n flow: { input: unknown };\n /** Authored defaults exposed through bounded own-property reads. */\n defaults?: Record<string, unknown>;\n /** Node status and declared output fields keyed by node identifier. */\n nodes: Record<string, { status?: string; output?: { fields?: unknown } }>;\n}\n\n/** A resolved JSON value together with every source that contributed to it. */\nexport interface ResolvedBinding {\n /** Runtime value passed to the node executor. */\n value: unknown;\n /** Stable, de-duplicated provenance in authored traversal order. */\n origins: BindingOrigin[];\n}\n\n/** All named node inputs, keeping executor values separate from provenance. */\nexport interface ResolvedNodeBindings {\n /** Resolved values keyed by authored binding name. */\n values: Record<string, unknown>;\n /** Provenance keyed by authored binding name. */\n origins: Record<string, BindingOrigin[]>;\n}\n\n/** How each producer node obtained its output fields. */\nexport type NodeOutputOrigin = Record<string, \"agent\" | \"runtime\">;\n\n/** @internal Binding names excluded from both authored and direct typed inputs. */\nexport const FLOW_BINDING_NAME_PATTERN = /^(?!__proto__$)/;\n\n/** @internal Collect bounded expressions embedded in a JSON binding value. */\nexport function collectFlowBindingExpressions(value: unknown): string[] {\n if (typeof value === \"string\") {\n return Array.from(value.matchAll(/\\$\\{([^{}]+)\\}/g), (match) => match[1]);\n }\n if (Array.isArray(value)) return value.flatMap(collectFlowBindingExpressions);\n if (typeof value !== \"object\" || value === null) return [];\n return Object.values(value).flatMap(collectFlowBindingExpressions);\n}\n\n/** Deterministic syntax, budget, or path failure raised by the Flow evaluator. */\nexport class FlowExpressionError extends Error {\n /** Stable error name for callers that classify evaluator failures. */\n override readonly name = \"FlowExpressionError\";\n\n /** Runtime path that was grammar-valid but absent from the supplied context. */\n readonly missingPath?: string;\n\n constructor(message: string, missingPath?: string) {\n super(message);\n this.missingPath = missingPath;\n }\n}\n\ntype TokenKind = \"value\" | \"word\" | \"operator\" | \"punctuation\" | \"eof\";\ninterface Token {\n kind: TokenKind;\n value: unknown;\n position: number;\n}\n\nfunction expressionError(\n message: string,\n position?: number,\n missingPath?: string,\n): FlowExpressionError {\n return new FlowExpressionError(\n position === undefined\n ? `Flow expression ${message}`\n : `Flow expression ${message} at ${position}`,\n missingPath,\n );\n}\n\nfunction parseString(source: string, start: number): { value: string; end: number } {\n const quote = source[start];\n let value = \"\";\n let index = start + 1;\n while (index < source.length) {\n const character = source[index];\n if (character === quote) return { value, end: index + 1 };\n if (character !== \"\\\\\") {\n value += character;\n index++;\n continue;\n }\n\n const escaped = source[index + 1];\n if (escaped === undefined) throw expressionError(\"has an unterminated string\", start);\n const replacements: Record<string, string> = {\n \"\\\\\": \"\\\\\",\n \"'\": \"'\",\n '\"': '\"',\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\",\n b: \"\\b\",\n f: \"\\f\",\n };\n if (escaped === \"u\") {\n const hex = source.slice(index + 2, index + 6);\n if (!/^[0-9a-fA-F]{4}$/.test(hex)) {\n throw expressionError(\"has an invalid unicode escape\", index);\n }\n value += String.fromCharCode(Number.parseInt(hex, 16));\n index += 6;\n continue;\n }\n if (!(escaped in replacements)) throw expressionError(\"has an invalid escape\", index);\n value += replacements[escaped];\n index += 2;\n }\n throw expressionError(\"has an unterminated string\", start);\n}\n\nfunction tokenize(source: string): Token[] {\n if (source.length > FLOW_EXPRESSION_LIMITS.maxLength) {\n throw expressionError(`exceeds the length limit of ${FLOW_EXPRESSION_LIMITS.maxLength}`);\n }\n\n const tokens: Token[] = [];\n const add = (token: Token): void => {\n tokens.push(token);\n if (tokens.length > FLOW_EXPRESSION_LIMITS.maxTokens) {\n throw expressionError(`exceeds the token limit of ${FLOW_EXPRESSION_LIMITS.maxTokens}`);\n }\n };\n\n let index = 0;\n while (index < source.length) {\n const character = source[index];\n if (/\\s/.test(character)) {\n index++;\n continue;\n }\n\n const pair = source.slice(index, index + 2);\n if ([\"&&\", \"||\", \"==\", \"!=\", \"<=\", \">=\"].includes(pair)) {\n add({ kind: \"operator\", value: pair, position: index });\n index += 2;\n continue;\n }\n if ([\"!\", \"<\", \">\"].includes(character)) {\n add({ kind: \"operator\", value: character, position: index });\n index++;\n continue;\n }\n if ([\"(\", \")\", \"[\", \"]\", \",\"].includes(character)) {\n add({ kind: \"punctuation\", value: character, position: index });\n index++;\n continue;\n }\n if (character === \"'\" || character === '\"') {\n const parsed = parseString(source, index);\n add({ kind: \"value\", value: parsed.value, position: index });\n index = parsed.end;\n continue;\n }\n\n const number = source.slice(index).match(/^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/);\n if (number) {\n add({ kind: \"value\", value: Number(number[0]), position: index });\n index += number[0].length;\n continue;\n }\n\n const word = source.slice(index).match(/^[A-Za-z_][A-Za-z0-9_.-]*/);\n if (word) {\n const raw = word[0];\n if (raw === \"true\") add({ kind: \"value\", value: true, position: index });\n else if (raw === \"false\") add({ kind: \"value\", value: false, position: index });\n else if (raw === \"null\") add({ kind: \"value\", value: null, position: index });\n else if (raw === \"in\") add({ kind: \"operator\", value: raw, position: index });\n else add({ kind: \"word\", value: raw, position: index });\n index += raw.length;\n continue;\n }\n\n throw expressionError(`contains unsupported token ${JSON.stringify(character)}`, index);\n }\n tokens.push({ kind: \"eof\", value: \"\", position: source.length });\n return tokens;\n}\n\nconst FORBIDDEN_PATH_SEGMENTS = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\n\nfunction ownValue(value: unknown, segment: string, position: number, path: string): unknown {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) {\n throw expressionError(\"path does not exist\", position, path);\n }\n if (!Object.hasOwn(value, segment)) {\n throw expressionError(\"path does not exist\", position, path);\n }\n return (value as Record<string, unknown>)[segment];\n}\n\nfunction resolvePath(\n raw: string,\n context: FlowExpressionContext,\n position: number,\n traverse: boolean,\n): unknown {\n const segments = raw.split(\".\");\n if (segments.length > FLOW_EXPRESSION_LIMITS.maxPathSegments) {\n throw expressionError(\n `exceeds the path traversal limit of ${FLOW_EXPRESSION_LIMITS.maxPathSegments}`,\n position,\n );\n }\n if (segments.some((segment) => segment.length === 0)) {\n throw expressionError(\"contains an empty path segment\", position);\n }\n const forbidden = segments.find((segment) => FORBIDDEN_PATH_SEGMENTS.has(segment));\n if (forbidden) throw expressionError(`contains forbidden path segment ${forbidden}`, position);\n\n let value: unknown;\n let remaining: string[];\n if (segments[0] === \"flow\" && segments[1] === \"input\") {\n if (segments.length === 2) {\n throw expressionError(\"path requires a JSON property suffix\", position);\n }\n value = context.flow.input;\n remaining = segments.slice(2);\n } else if (segments[0] === \"defaults\" && segments.length >= 2) {\n value = context.defaults ?? {};\n remaining = segments.slice(1);\n } else if (segments[0] === \"nodes\" && segments.length === 3 && segments[2] === \"status\") {\n value = context.nodes;\n remaining = segments.slice(1);\n } else if (\n segments[0] === \"nodes\" &&\n segments.length >= 4 &&\n segments[2] === \"output\" &&\n segments[3] === \"fields\"\n ) {\n if (segments.length === 4) {\n throw expressionError(\"path requires a JSON property suffix\", position);\n }\n value = context.nodes;\n remaining = segments.slice(1);\n } else {\n throw expressionError(`contains unsupported path ${raw}`, position);\n }\n\n if (!traverse) return undefined;\n for (const segment of remaining) value = ownValue(value, segment, position, raw);\n return value;\n}\n\nfunction compare(operator: string, left: unknown, right: unknown, position: number): boolean {\n if (operator === \"==\") return Object.is(left, right);\n if (operator === \"!=\") return !Object.is(left, right);\n if (operator === \"in\") {\n if (!Array.isArray(right))\n throw expressionError(\"requires an array on the right of in\", position);\n if (right.length > FLOW_EXPRESSION_LIMITS.maxCollectionItems) {\n throw expressionError(\n `exceeds the collection item limit of ${FLOW_EXPRESSION_LIMITS.maxCollectionItems}`,\n position,\n );\n }\n return right.some((candidate) => Object.is(candidate, left));\n }\n if (\n !(\n (typeof left === \"number\" && typeof right === \"number\") ||\n (typeof left === \"string\" && typeof right === \"string\")\n )\n ) {\n throw expressionError(`requires comparable operands for ${operator}`, position);\n }\n if (operator === \"<\") return left < right;\n if (operator === \"<=\") return left <= right;\n if (operator === \">\") return left > right;\n if (operator === \">=\") return left >= right;\n throw expressionError(`contains unsupported operator ${operator}`, position);\n}\n\nconst STATIC_BOOLEAN = Symbol(\"static-boolean\");\nconst STATIC_PATH = Symbol(\"static-path\");\n\ninterface StaticPath {\n marker: typeof STATIC_PATH;\n path: string;\n}\n\nfunction isStaticPath(value: unknown): value is StaticPath {\n return (\n typeof value === \"object\" && value !== null && (value as StaticPath).marker === STATIC_PATH\n );\n}\n\nfunction isBooleanOperand(value: unknown): boolean {\n return typeof value === \"boolean\" || value === STATIC_BOOLEAN || isStaticPath(value);\n}\n\nfunction assertBooleanOperand(value: unknown, position: number): void {\n if (!isBooleanOperand(value)) throw expressionError(\"requires boolean operands\", position);\n}\n\nclass Parser {\n private index = 0;\n private nesting = 0;\n\n constructor(\n private readonly tokens: Token[],\n private readonly context: FlowExpressionContext,\n private readonly onPath?: (path: string) => void,\n private readonly onBooleanPath?: (path: string) => void,\n private readonly onEvaluatedPath?: (path: string) => void,\n ) {}\n\n parse(evaluate = true): unknown {\n const value = this.parseOr(evaluate);\n const trailing = this.peek();\n if (trailing.kind !== \"eof\") {\n throw expressionError(\n `contains unexpected token ${String(trailing.value)}`,\n trailing.position,\n );\n }\n return value;\n }\n\n private peek(): Token {\n return this.tokens[this.index];\n }\n\n private take(): Token {\n return this.tokens[this.index++];\n }\n\n private accept(value: string): Token | undefined {\n if (this.peek().value !== value) return undefined;\n return this.take();\n }\n\n private parseOr(evaluate: boolean): unknown {\n let value = this.parseAnd(evaluate);\n while (this.peek().value === \"||\") {\n const operator = this.take();\n assertBooleanOperand(value, operator.position);\n if (isStaticPath(value)) this.onBooleanPath?.(value.path);\n const evaluateRight = evaluate && value === false;\n const right = this.parseAnd(evaluateRight);\n assertBooleanOperand(right, operator.position);\n if (isStaticPath(right)) this.onBooleanPath?.(right.path);\n value = evaluate ? value === true || right === true : STATIC_BOOLEAN;\n }\n return value;\n }\n\n private parseAnd(evaluate: boolean): unknown {\n let value = this.parseComparison(evaluate);\n while (this.peek().value === \"&&\") {\n const operator = this.take();\n assertBooleanOperand(value, operator.position);\n if (isStaticPath(value)) this.onBooleanPath?.(value.path);\n const evaluateRight = evaluate && value === true;\n const right = this.parseComparison(evaluateRight);\n assertBooleanOperand(right, operator.position);\n if (isStaticPath(right)) this.onBooleanPath?.(right.path);\n value = evaluate ? value === true && right === true : STATIC_BOOLEAN;\n }\n return value;\n }\n\n private parseComparison(evaluate: boolean): unknown {\n const left = this.parseUnary(evaluate);\n const token = this.peek();\n if (\n token.kind !== \"operator\" ||\n ![\"==\", \"!=\", \"<\", \"<=\", \">\", \">=\", \"in\"].includes(String(token.value))\n ) {\n return left;\n }\n this.take();\n const right = this.parseUnary(evaluate);\n return evaluate ? compare(String(token.value), left, right, token.position) : STATIC_BOOLEAN;\n }\n\n private parseUnary(evaluate: boolean): unknown {\n const operator = this.accept(\"!\");\n if (operator) {\n const value = this.parseUnary(evaluate);\n assertBooleanOperand(value, operator.position);\n if (isStaticPath(value)) this.onBooleanPath?.(value.path);\n return evaluate ? value === false : STATIC_BOOLEAN;\n }\n return this.parsePrimary(evaluate);\n }\n\n private parsePrimary(evaluate: boolean): unknown {\n const token = this.take();\n if (token.kind === \"value\") return token.value;\n if (token.kind === \"word\") {\n this.onPath?.(String(token.value));\n resolvePath(String(token.value), this.context, token.position, false);\n if (evaluate) this.onEvaluatedPath?.(String(token.value));\n return evaluate\n ? resolvePath(String(token.value), this.context, token.position, true)\n : { marker: STATIC_PATH, path: String(token.value) };\n }\n if (token.value === \"(\") {\n this.enterNesting(token.position);\n const value = this.parseOr(evaluate);\n if (!this.accept(\")\"))\n throw expressionError(\"is missing a closing parenthesis\", token.position);\n this.nesting--;\n return value;\n }\n if (token.value === \"[\") {\n this.enterNesting(token.position);\n const values: unknown[] = [];\n if (!this.accept(\"]\")) {\n do values.push(this.parsePrimary(evaluate));\n while (this.accept(\",\"));\n if (!this.accept(\"]\"))\n throw expressionError(\"is missing a closing bracket\", token.position);\n }\n this.nesting--;\n return values;\n }\n throw expressionError(`contains unexpected token ${String(token.value)}`, token.position);\n }\n\n private enterNesting(position: number): void {\n this.nesting++;\n if (this.nesting > FLOW_EXPRESSION_LIMITS.maxNesting) {\n throw expressionError(\n `exceeds the nesting limit of ${FLOW_EXPRESSION_LIMITS.maxNesting}`,\n position,\n );\n }\n }\n}\n\n/** Static path evidence used to reconcile safe grammar with declared producer output types. */\nexport interface FlowExpressionReference {\n /** Grammar-approved context path. */\n path: string;\n /** True when logical evaluation requires the resolved value itself to be boolean. */\n booleanOperand: boolean;\n}\n\n/** Validates authored syntax without reading runtime values; binding mode relaxes only the result type. */\nexport function inspectFlowExpression(\n expression: string,\n requireBoolean = true,\n): FlowExpressionReference[] {\n const tokens = tokenize(expression);\n if (expression.trim() === \"default\") return [];\n const references = new Map<string, boolean>();\n const record = (path: string, booleanOperand: boolean): void => {\n references.set(path, (references.get(path) ?? false) || booleanOperand);\n };\n const context: FlowExpressionContext = { flow: { input: {} }, nodes: {} };\n const result = new Parser(\n tokens,\n context,\n (path) => record(path, false),\n (path) => record(path, true),\n ).parse(false);\n if (requireBoolean && typeof result !== \"boolean\" && result !== STATIC_BOOLEAN) {\n throw expressionError(\"must evaluate to a boolean\");\n }\n return Array.from(references, ([path, booleanOperand]) => ({ path, booleanOperand }));\n}\n\n/**\n * Evaluates the bounded Flow expression subset without calls, arithmetic, or dynamic property access.\n * The `default` sentinel is valid only as the complete expression and matches unconditionally.\n */\nexport function evaluateFlowExpression(\n expression: string,\n context: FlowExpressionContext,\n): boolean {\n const tokens = tokenize(expression);\n if (expression.trim() === \"default\") return true;\n const result = new Parser(tokens, context).parse();\n if (typeof result !== \"boolean\") {\n throw expressionError(\"must evaluate to a boolean\");\n }\n return result;\n}\n\n/** Proposal-compatible short name for {@link evaluateFlowExpression}. */\nexport function evaluate(expression: string, context: FlowExpressionContext): boolean {\n return evaluateFlowExpression(expression, context);\n}\n\nfunction evaluateFlowExpressionValue(\n expression: string,\n context: FlowExpressionContext,\n): { value: unknown; paths: string[] } {\n const tokens = tokenize(expression);\n if (expression.trim() === \"default\") return { value: true, paths: [] };\n const paths: string[] = [];\n const value = new Parser(tokens, context, undefined, undefined, (path) =>\n paths.push(path),\n ).parse();\n return { value, paths };\n}\n\nfunction originsForPath(\n path: string,\n nodeOutputOrigin: NodeOutputOrigin,\n flowInputOrigins: Record<string, BindingOrigin[]>,\n): BindingOrigin[] {\n if (path.startsWith(\"flow.input.\")) {\n const inputName = path.split(\".\")[2];\n const inherited = flowInputOrigins[inputName];\n return inherited ?? [{ source: \"flow-input\", path, obtainedBy: \"runtime\" }];\n }\n if (path.startsWith(\"defaults.\")) {\n return [{ source: \"default\", path, obtainedBy: \"runtime\" }];\n }\n\n const segments = path.split(\".\");\n const nodeId = segments[1];\n if (segments.length === 3 && segments[0] === \"nodes\" && segments[2] === \"status\") {\n return [{ source: \"node-status\", nodeId, path, obtainedBy: \"runtime\" }];\n }\n if (\n segments.length >= 5 &&\n segments[0] === \"nodes\" &&\n segments[2] === \"output\" &&\n segments[3] === \"fields\"\n ) {\n const obtainedBy = nodeOutputOrigin[nodeId];\n if (!obtainedBy) {\n throw expressionError(`has no output origin for node ${nodeId}`);\n }\n return [{ source: \"node-output\", nodeId, path, obtainedBy }];\n }\n\n throw expressionError(`contains unsupported path ${path}`);\n}\n\n/** @internal Serialize a JSON-compatible value with deterministic object-key ordering. */\nexport function stableFlowJson(value: unknown): string {\n if (value === undefined) return \"null\";\n if (value === null || typeof value !== \"object\") return JSON.stringify(value) ?? \"null\";\n if (Array.isArray(value)) return `[${value.map(stableFlowJson).join(\",\")}]`;\n const object = value as Record<string, unknown>;\n return `{${Object.keys(object)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableFlowJson(object[key])}`)\n .join(\",\")}}`;\n}\n\nfunction interpolationText(value: unknown): string {\n if (typeof value === \"string\") return value;\n return stableFlowJson(value);\n}\n\nfunction deduplicateOrigins(origins: BindingOrigin[]): BindingOrigin[] {\n const seen = new Set<string>();\n return origins.filter((origin) => {\n const key = JSON.stringify(origin);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nfunction resolveBindingValue(\n authored: unknown,\n bindingPath: string,\n context: FlowExpressionContext,\n nodeOutputOrigin: NodeOutputOrigin,\n flowInputOrigins: Record<string, BindingOrigin[]>,\n depth: number,\n): ResolvedBinding {\n if (depth > FLOW_EXPRESSION_LIMITS.maxNesting) {\n throw expressionError(`exceeds the nesting limit of ${FLOW_EXPRESSION_LIMITS.maxNesting}`);\n }\n\n if (typeof authored === \"string\") {\n const exact = authored.match(/^\\$\\{([^{}]+)\\}$/);\n if (exact) {\n const evaluated = evaluateFlowExpressionValue(exact[1], context);\n return {\n value: evaluated.value,\n origins: deduplicateOrigins(\n evaluated.paths.flatMap((path) =>\n originsForPath(path, nodeOutputOrigin, flowInputOrigins),\n ),\n ),\n };\n }\n\n const matches = Array.from(authored.matchAll(/\\$\\{([^{}]+)\\}/g));\n if (matches.length === 0) {\n return {\n value: authored,\n origins: [{ source: \"literal\", path: bindingPath, obtainedBy: \"runtime\" }],\n };\n }\n\n const origins: BindingOrigin[] = [\n { source: \"literal\", path: bindingPath, obtainedBy: \"runtime\" },\n ];\n const value = authored.replace(/\\$\\{([^{}]+)\\}/g, (_placeholder, expression: string) => {\n const evaluated = evaluateFlowExpressionValue(expression, context);\n origins.push(\n ...evaluated.paths.flatMap((path) =>\n originsForPath(path, nodeOutputOrigin, flowInputOrigins),\n ),\n );\n return interpolationText(evaluated.value);\n });\n return { value, origins: deduplicateOrigins(origins) };\n }\n\n if (Array.isArray(authored)) {\n if (authored.length > FLOW_EXPRESSION_LIMITS.maxCollectionItems) {\n throw expressionError(\n `exceeds the collection item limit of ${FLOW_EXPRESSION_LIMITS.maxCollectionItems}`,\n );\n }\n const resolved = authored.map((value) =>\n resolveBindingValue(\n value,\n bindingPath,\n context,\n nodeOutputOrigin,\n flowInputOrigins,\n depth + 1,\n ),\n );\n return {\n value: resolved.map(({ value }) => value),\n origins: deduplicateOrigins([\n { source: \"literal\", path: bindingPath, obtainedBy: \"runtime\" },\n ...resolved.flatMap(({ origins }) => origins),\n ]),\n };\n }\n\n if (typeof authored === \"object\" && authored !== null) {\n const entries = Object.entries(authored);\n if (entries.length > FLOW_EXPRESSION_LIMITS.maxCollectionItems) {\n throw expressionError(\n `exceeds the collection item limit of ${FLOW_EXPRESSION_LIMITS.maxCollectionItems}`,\n );\n }\n const resolved = entries.map(\n ([key, value]) =>\n [\n key,\n resolveBindingValue(\n value,\n bindingPath,\n context,\n nodeOutputOrigin,\n flowInputOrigins,\n depth + 1,\n ),\n ] as const,\n );\n return {\n value: Object.fromEntries(resolved.map(([key, result]) => [key, result.value])),\n origins: deduplicateOrigins([\n { source: \"literal\", path: bindingPath, obtainedBy: \"runtime\" },\n ...resolved.flatMap(([, result]) => result.origins),\n ]),\n };\n }\n\n return {\n value: authored,\n origins: [{ source: \"literal\", path: bindingPath, obtainedBy: \"runtime\" }],\n };\n}\n\n/**\n * Resolves authored node inputs through the bounded Flow expression grammar.\n *\n * Exact `${...}` placeholders retain their JSON type. Placeholders embedded in\n * text use deterministic interpolation, while arrays and objects are traversed\n * recursively. Runtime values and provenance remain separate so executors do not\n * need to understand trust metadata.\n */\nexport function resolveFlowBindings(\n bindings: Record<string, unknown> | undefined,\n context: FlowExpressionContext,\n nodeOutputOrigin: NodeOutputOrigin = {},\n flowInputOrigins: Record<string, BindingOrigin[]> = {},\n): ResolvedNodeBindings {\n const values: Record<string, unknown> = {};\n const origins: Record<string, BindingOrigin[]> = {};\n const entries = Object.entries(bindings ?? {});\n for (const [name] of entries) {\n if (!FLOW_BINDING_NAME_PATTERN.test(name)) {\n throw expressionError(`contains reserved binding name input.${name}`);\n }\n }\n for (const [name, authored] of entries) {\n const resolved = resolveBindingValue(\n authored,\n `input.${name}`,\n context,\n nodeOutputOrigin,\n flowInputOrigins,\n 0,\n );\n values[name] = resolved.value;\n origins[name] = resolved.origins;\n }\n return { values, origins };\n}\n","import * as z from \"zod\";\nimport {\n collectFlowBindingExpressions,\n FLOW_BINDING_NAME_PATTERN,\n inspectFlowExpression,\n type FlowExpressionReference,\n} from \"./expression.js\";\n\nconst nonEmptyString = z.string().min(1);\nconst flowAssetIdentity = z\n .string()\n .regex(\n /^[a-z0-9]+(?:-[a-z0-9]+)*$/,\n \"Flow identity must be lowercase kebab-case without path separators\",\n );\nconst jsonSchema = z.record(z.string(), z.json());\nconst bindingName = z.string().regex(FLOW_BINDING_NAME_PATTERN, \"Binding name is reserved\");\nconst nodeBindings = z.preprocess(\n (value, context) => {\n if (typeof value === \"object\" && value !== null) {\n for (const key of Object.keys(value)) {\n if (!FLOW_BINDING_NAME_PATTERN.test(key)) {\n context.addIssue({ code: \"custom\", path: [key], message: \"Binding name is reserved\" });\n }\n }\n }\n return value;\n },\n z.record(bindingName, z.json()),\n);\n\nconst FlowInputContractSchema = z.strictObject({\n schema: jsonSchema,\n example: z.json().optional(),\n});\n\nconst FlowOutputContractSchema = z.strictObject({\n schema: jsonSchema,\n});\n\nconst PreconditionSchema = z.strictObject({\n expr: nonEmptyString,\n message: nonEmptyString.optional(),\n});\n\nconst ArtifactContractSchema = z.strictObject({\n kind: nonEmptyString,\n lifetime: z.enum([\"session\", \"persistent\"]),\n});\n\nconst NodeOutputContractSchema = z.strictObject({\n fields: jsonSchema.optional(),\n artifacts: z.array(ArtifactContractSchema).optional(),\n});\n\nconst NodeContractSchema = z.strictObject({\n requires: z.array(PreconditionSchema).optional(),\n input: nodeBindings.optional(),\n output: NodeOutputContractSchema.optional(),\n});\n\nconst NodeGateSchema = z.strictObject({\n approval: z.enum([\"none\", \"optional\", \"mandatory\"]),\n});\n\nconst NodeControlSchema = z.strictObject({\n optional: z.boolean().optional(),\n retries: z.number().int().min(0).optional(),\n timeoutSec: z.number().positive().optional(),\n parallelGroup: nonEmptyString.optional(),\n subagent: z.boolean().optional(),\n});\n\nconst runAssets = { assets: z.array(nonEmptyString).optional() };\n\n// Closed vocabulary, not a free-form model id: the runtime resolves each tier to a\n// concrete model, keeping authored flows portable across model-lineup changes.\nconst modelTier = z.enum([\"small\", \"default\", \"deep\"]);\n\nconst AgentRunSchema = z.strictObject({\n kind: z.literal(\"agent\"),\n instruction: nonEmptyString,\n model: modelTier.optional(),\n ...runAssets,\n});\n\nconst SubpromptRunSchema = z.strictObject({\n kind: z.literal(\"subprompt\"),\n instruction: nonEmptyString,\n model: modelTier.optional(),\n ...runAssets,\n});\n\nconst deterministicRun = {\n runtime: z.enum([\"shell\", \"node\", \"python\"]).optional(),\n command: nonEmptyString,\n cwd: nonEmptyString.optional(),\n successExit: z.array(z.number().int()).optional(),\n capture: z\n .strictObject({ stdout: nonEmptyString.optional(), stderr: nonEmptyString.optional() })\n .optional(),\n ...runAssets,\n};\n\nconst FunctionRunSchema = z.strictObject({\n kind: z.literal(\"function\"),\n ...deterministicRun,\n});\n\nconst CheckRunSchema = z.strictObject({\n kind: z.literal(\"check\"),\n onFail: z.enum([\"escalate\", \"fail\"]).default(\"escalate\"),\n ...deterministicRun,\n});\n\nconst InputChoiceSchema = z.strictObject({\n id: nonEmptyString,\n label: nonEmptyString,\n description: nonEmptyString.optional(),\n});\n\nconst FormFieldSchema = z.strictObject({\n id: nonEmptyString,\n label: nonEmptyString,\n type: z.enum([\"text\", \"textarea\", \"number\", \"choice\", \"file\", \"date\", \"boolean\"]),\n required: z.boolean().optional(),\n options: z.array(InputChoiceSchema).optional(),\n accept: z.array(nonEmptyString).optional(),\n});\n\nconst InputSchema = z.discriminatedUnion(\"kind\", [\n z.strictObject({ kind: z.literal(\"text\"), multiline: z.boolean().optional() }),\n z.strictObject({\n kind: z.literal(\"choice\"),\n options: z.array(InputChoiceSchema).min(1),\n multiple: z.boolean().optional(),\n }),\n z.strictObject({ kind: z.literal(\"form\"), fields: z.array(FormFieldSchema) }),\n z.strictObject({\n kind: z.literal(\"file\"),\n accept: z.array(nonEmptyString).optional(),\n maxSize: z.number().positive().optional(),\n multiple: z.boolean().optional(),\n }),\n]);\n\nconst GateRunSchema = z.strictObject({\n kind: z.literal(\"gate\"),\n prompt: nonEmptyString,\n schema: InputSchema,\n ...runAssets,\n});\n\nconst RouteSchema = z.strictObject({\n when: nonEmptyString,\n target: nonEmptyString.nullable(),\n});\n\nconst RouterRunSchema = z.strictObject({\n kind: z.literal(\"router\"),\n routes: z.array(RouteSchema).min(1),\n ...runAssets,\n});\n\nconst SubFlowRunSchema = z.strictObject({\n kind: z.literal(\"sub-flow\"),\n flow: flowAssetIdentity,\n passContext: z.boolean().optional(),\n ...runAssets,\n});\n\nconst RunSchema = z.discriminatedUnion(\"kind\", [\n AgentRunSchema,\n SubpromptRunSchema,\n FunctionRunSchema,\n CheckRunSchema,\n GateRunSchema,\n RouterRunSchema,\n SubFlowRunSchema,\n]);\n\nconst NodeSchema = z.strictObject({\n id: nonEmptyString,\n label: nonEmptyString,\n description: nonEmptyString,\n phase: nonEmptyString.optional(),\n run: RunSchema,\n contract: NodeContractSchema.optional(),\n gate: NodeGateSchema.optional(),\n control: NodeControlSchema.optional(),\n});\n\nconst EdgeSchema = z.strictObject({\n id: nonEmptyString,\n source: nonEmptyString,\n target: nonEmptyString,\n type: z.enum([\"flow\", \"parallel\", \"optional\"]),\n});\n\nconst FlowDefaultsSchema = z.strictObject({\n approval: z.enum([\"checkpoint\", \"auto\", \"manual\"]).optional(),\n researchDepth: nonEmptyString.optional(),\n autoReview: z.boolean().optional(),\n subagentMode: z.boolean().optional(),\n verbosity: nonEmptyString.optional(),\n cliMode: z.boolean().optional(),\n run_input: z.json().optional(),\n parameters: z.record(z.string(), z.json()).optional(),\n});\n\nconst FlowMetaSchema = z.strictObject({\n icon: nonEmptyString.optional(),\n category: nonEmptyString.optional(),\n tags: z.array(nonEmptyString).optional(),\n stage: nonEmptyString.optional(),\n onboarding: z\n .strictObject({\n input_style: z.enum([\"freeform\", \"structured\", \"repo\"]),\n placeholder: nonEmptyString.optional(),\n fields: z.array(nonEmptyString).optional(),\n })\n .optional(),\n});\n\nconst FlowDefinitionObjectSchema = z.strictObject({\n $schema: nonEmptyString.optional(),\n schemaVersion: z.literal(2),\n id: nonEmptyString,\n version: nonEmptyString,\n name: nonEmptyString,\n description: nonEmptyString.optional(),\n input: FlowInputContractSchema.optional(),\n output: FlowOutputContractSchema.optional(),\n defaults: FlowDefaultsSchema.optional(),\n entry: nonEmptyString.optional(),\n nodes: z.array(NodeSchema),\n edges: z.array(EdgeSchema),\n meta: FlowMetaSchema.optional(),\n});\n\n/** Validates normalized field shapes without applying authored-v2 graph semantics. */\nexport function parseFlowDefinitionStructure(data: unknown) {\n return FlowDefinitionObjectSchema.safeParse(data);\n}\n\nconst MISSING_FIELD = Symbol(\"missing-field\");\n\nfunction declaredFieldSchema(schema: unknown, path: string[]): unknown | typeof MISSING_FIELD {\n let current = schema;\n for (const segment of path) {\n if (typeof current !== \"object\" || current === null) return MISSING_FIELD;\n const properties = (current as Record<string, unknown>).properties;\n if (\n typeof properties !== \"object\" ||\n properties === null ||\n !Object.hasOwn(properties, segment)\n ) {\n return MISSING_FIELD;\n }\n current = (properties as Record<string, unknown>)[segment];\n }\n return current;\n}\n\nfunction knownNonBooleanType(schema: unknown): string | undefined {\n if (typeof schema !== \"object\" || schema === null) return undefined;\n const type = (schema as Record<string, unknown>).type;\n if (typeof type === \"string\") return type === \"boolean\" ? undefined : type;\n if (\n Array.isArray(type) &&\n type.length > 0 &&\n type.every((candidate) => typeof candidate === \"string\") &&\n type.some((candidate) => candidate !== \"boolean\")\n ) {\n return type.join(\" | \");\n }\n return undefined;\n}\n\n/**\n * Why `control.optional` is refused on this node, or `undefined` when it is\n * allowed. `optional` downgrades a failed node to `skipped` so the run carries\n * on — incoherent for a node whose only job is to stop one. Derived in one\n * place so the refusal condition and the message explaining it cannot drift.\n */\nfunction optionalRefusalReason(node: z.infer<typeof NodeSchema>): string | undefined {\n if (node.run.kind === \"gate\") return \"a first-class gate node cannot be optional\";\n if (node.run.kind === \"check\") {\n return \"a check node cannot be optional — an optional verification either hides a false green (escalate) or hangs the run forever (fail); reject the check entirely if it should not gate the run\";\n }\n if (node.gate?.approval === \"mandatory\") {\n return \"a node cannot be both optional and a mandatory approval gate\";\n }\n return undefined;\n}\n\n/** Authoritative strict runtime schema for authored, acyclic Flow v2 definitions. */\nexport const FlowDefinitionSchema = FlowDefinitionObjectSchema.superRefine((flow, context) => {\n const nodeIds = new Set<string>();\n for (const [index, node] of flow.nodes.entries()) {\n if (nodeIds.has(node.id)) {\n context.addIssue({\n code: \"custom\",\n path: [\"nodes\", index, \"id\"],\n message: `duplicate node id: ${node.id}`,\n });\n }\n nodeIds.add(node.id);\n if (node.control?.optional === true) {\n const refusal = optionalRefusalReason(node);\n if (refusal !== undefined) {\n context.addIssue({\n code: \"custom\",\n path: [\"nodes\", index, \"control\", \"optional\"],\n message: refusal,\n });\n }\n }\n }\n\n if (flow.entry !== undefined && !nodeIds.has(flow.entry)) {\n context.addIssue({ code: \"custom\", path: [\"entry\"], message: `unknown node: ${flow.entry}` });\n }\n\n const outgoing = new Map<string, Array<{ target: string; path: PropertyKey[] }>>();\n for (const [edgeIndex, edge] of flow.edges.entries()) {\n if (!nodeIds.has(edge.source)) {\n context.addIssue({\n code: \"custom\",\n path: [\"edges\", edgeIndex, \"source\"],\n message: `unknown node: ${edge.source}`,\n });\n }\n if (!nodeIds.has(edge.target)) {\n context.addIssue({\n code: \"custom\",\n path: [\"edges\", edgeIndex, \"target\"],\n message: `unknown node: ${edge.target}`,\n });\n }\n if (edge.type === \"flow\" && nodeIds.has(edge.source) && nodeIds.has(edge.target)) {\n const edges = outgoing.get(edge.source) ?? [];\n edges.push({ target: edge.target, path: [\"edges\", edgeIndex] });\n outgoing.set(edge.source, edges);\n }\n }\n\n for (const [nodeIndex, node] of flow.nodes.entries()) {\n if (node.run.kind !== \"router\") continue;\n for (const [routeIndex, route] of node.run.routes.entries()) {\n if (route.target !== null && !nodeIds.has(route.target)) {\n context.addIssue({\n code: \"custom\",\n path: [\"nodes\", nodeIndex, \"run\", \"routes\", routeIndex, \"target\"],\n message: `unknown node: ${route.target}`,\n });\n }\n }\n }\n\n const validateExpression = (\n expression: string,\n path: PropertyKey[],\n requireBoolean = true,\n ): void => {\n let references: FlowExpressionReference[];\n try {\n references = inspectFlowExpression(expression, requireBoolean);\n } catch (error) {\n context.addIssue({\n code: \"custom\",\n path,\n message: error instanceof Error ? error.message : \"invalid Flow expression\",\n });\n return;\n }\n for (const reference of references) {\n const segments = reference.path.split(\".\");\n if (segments[0] !== \"nodes\") continue;\n const producer = flow.nodes.find((node) => node.id === segments[1]);\n if (!producer) {\n context.addIssue({\n code: \"custom\",\n path,\n message: `unknown producer node: ${segments[1]}`,\n });\n continue;\n }\n if (segments[2] === \"status\") {\n if (reference.booleanOperand) {\n context.addIssue({ code: \"custom\", path, message: \"node status is not boolean\" });\n }\n continue;\n }\n const outputSchema = producer.contract?.output?.fields;\n if (!outputSchema) {\n context.addIssue({\n code: \"custom\",\n path,\n message: `node ${producer.id} has no declared output fields`,\n });\n continue;\n }\n const fieldPath = segments.slice(4);\n const fieldSchema = declaredFieldSchema(outputSchema, fieldPath);\n if (fieldSchema === MISSING_FIELD) {\n context.addIssue({\n code: \"custom\",\n path,\n message: `node ${producer.id} does not declare output field ${fieldPath.join(\".\")}`,\n });\n continue;\n }\n const nonBooleanType = reference.booleanOperand\n ? knownNonBooleanType(fieldSchema)\n : undefined;\n if (nonBooleanType) {\n context.addIssue({\n code: \"custom\",\n path,\n message: `node ${producer.id} output field ${fieldPath.join(\".\")} is ${nonBooleanType}, not boolean`,\n });\n }\n }\n };\n\n for (const [nodeIndex, node] of flow.nodes.entries()) {\n for (const [requireIndex, requirement] of node.contract?.requires?.entries() ?? []) {\n validateExpression(requirement.expr, [\n \"nodes\",\n nodeIndex,\n \"contract\",\n \"requires\",\n requireIndex,\n \"expr\",\n ]);\n }\n for (const [bindingName, binding] of Object.entries(node.contract?.input ?? {})) {\n for (const expression of collectFlowBindingExpressions(binding)) {\n validateExpression(\n expression,\n [\"nodes\", nodeIndex, \"contract\", \"input\", bindingName],\n false,\n );\n }\n }\n if (node.run.kind === \"router\") {\n for (const [routeIndex, route] of node.run.routes.entries()) {\n validateExpression(route.when, [\"nodes\", nodeIndex, \"run\", \"routes\", routeIndex, \"when\"]);\n }\n }\n }\n\n const state = new Map<string, \"active\" | \"done\">();\n for (const nodeId of nodeIds) {\n if (state.has(nodeId)) continue;\n const stack: Array<{ nodeId: string; next: number }> = [{ nodeId, next: 0 }];\n state.set(nodeId, \"active\");\n while (stack.length > 0) {\n const frame = stack.at(-1);\n if (!frame) break;\n const arcs = outgoing.get(frame.nodeId) ?? [];\n if (frame.next >= arcs.length) {\n state.set(frame.nodeId, \"done\");\n stack.pop();\n continue;\n }\n const arc = arcs[frame.next++];\n if (state.get(arc.target) === \"active\") {\n context.addIssue({ code: \"custom\", path: arc.path, message: \"flow graph must be acyclic\" });\n } else if (!state.has(arc.target)) {\n state.set(arc.target, \"active\");\n stack.push({ nodeId: arc.target, next: 0 });\n }\n }\n }\n});\n\n/** Validated authoring content that is strict, acyclic, and always schema version 2. */\nexport type FlowDefinition = z.infer<typeof FlowDefinitionSchema>;\n\n/** Graph vertex whose execution identity comes only from its `run.kind`. */\nexport type FlowNode = FlowDefinition[\"nodes\"][number];\n\n/** Directed dependency link whose authored array position remains content-significant. */\nexport type FlowEdge = FlowDefinition[\"edges\"][number];\n\n/** Closed execution-owner declaration with no dispatch or conversation-mode switches. */\nexport type FlowNodeRun = FlowNode[\"run\"];\n\n/** Closed vocabulary of the seven supported execution-owner identities. */\nexport type FlowNodeKind = FlowNodeRun[\"kind\"];\n\n/** Validation boundary applied to values entering a Flow run. */\nexport type FlowInputContract = NonNullable<FlowDefinition[\"input\"]>;\n\n/** Validation boundary applied to values leaving a Flow run. */\nexport type FlowOutputContract = NonNullable<FlowDefinition[\"output\"]>;\n\n/** Node admission and data contract; output typing is paid only when downstream consumers need it. */\nexport type FlowNodeContract = NonNullable<FlowNode[\"contract\"]>;\n\n/** Availability and failure policy that never changes execution ownership. */\nexport type FlowNodeControl = NonNullable<FlowNode[\"control\"]>;\n\n/** Named values resolved at the consumer boundary before admission. */\nexport type FlowNodeBindings = NonNullable<FlowNode[\"contract\"]>[\"input\"];\n\n/** Bounded deterministic admission condition; arbitrary calls and property access are invalid. */\nexport type FlowNodePrecondition = NonNullable<FlowNode[\"contract\"]>[\"requires\"] extends\n | Array<infer T>\n | undefined\n ? T\n : never;\n\n/** Ordered router branch; the first matching condition owns the routing decision. */\nexport type FlowRoute = Extract<FlowNodeRun, { kind: \"router\" }>[\"routes\"][number];\n\n/** Asset requirement independent of node identity and available on every run kind. */\nexport type FlowAssetRef = NonNullable<FlowNodeRun[\"assets\"]>[number];\n\n/** Model tier for `agent` and `subprompt` runs; `default` inherits the session model\n * (`agent`) or the runtime default (`subprompt`) rather than naming a concrete model. */\nexport type FlowModelTier = z.infer<typeof modelTier>;\n","import * as z from \"zod\";\nimport {\n FlowDefinitionSchema,\n parseFlowDefinitionStructure,\n type FlowDefinition,\n} from \"./schema.js\";\n\nconst successfullyParsedDefinitions = new WeakMap<object, string>();\n\nfunction valueFingerprint(value: unknown, ancestors: Set<object>): string | null {\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n if (typeof value === \"string\") return `string:${JSON.stringify(value)}`;\n if (typeof value === \"boolean\") return `boolean:${value}`;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) return null;\n return `number:${Object.is(value, -0) ? \"-0\" : value}`;\n }\n if (typeof value !== \"object\" || ancestors.has(value)) return null;\n\n ancestors.add(value);\n try {\n if (Array.isArray(value)) {\n if (Object.getPrototypeOf(value) !== Array.prototype) return null;\n if (Object.getOwnPropertySymbols(value).length > 0) return null;\n const names = Object.getOwnPropertyNames(value);\n if (names.length !== value.length + 1 || !names.includes(\"length\")) return null;\n const items: string[] = [];\n for (let index = 0; index < value.length; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) return null;\n const item = valueFingerprint(descriptor.value, ancestors);\n if (item === null) return null;\n items.push(item);\n }\n return `array:[${items.join(\",\")}]`;\n }\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return null;\n if (Object.getOwnPropertySymbols(value).length > 0) return null;\n const entries: string[] = [];\n for (const key of Object.getOwnPropertyNames(value).sort()) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor || !(\"value\" in descriptor) || !descriptor.enumerable) return null;\n const nested = valueFingerprint(descriptor.value, ancestors);\n if (nested === null) return null;\n entries.push(`${JSON.stringify(key)}:${nested}`);\n }\n return `object:{${entries.join(\",\")}}`;\n } finally {\n ancestors.delete(value);\n }\n}\n\nfunction definitionFingerprint(data: object): string | null {\n return valueFingerprint(data, new Set());\n}\n\nconst LegacyRouteSchema = z.looseObject({\n condition: z.string().min(1),\n target: z.string().min(1).nullable(),\n});\n\nconst LegacyNodeDataSchema = z.looseObject({\n skill: z.string().min(1).optional(),\n version: z.string().min(1).optional(),\n label: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n optional: z.boolean().optional(),\n approval: z.looseObject({ mandatory: z.boolean().optional() }).optional(),\n parameters: z.record(z.string(), z.unknown()).optional(),\n phase: z.string().min(1).optional(),\n parallel_group: z.string().min(1).optional(),\n flow: z.string().min(1).optional(),\n pass_context: z.boolean().optional(),\n subagent: z.boolean().optional(),\n message: z.string().min(1).optional(),\n routes: z.array(LegacyRouteSchema).optional(),\n assets: z.array(z.string().min(1)).optional(),\n});\n\nconst LegacyNodeSchema = z.looseObject({\n id: z.string().min(1),\n type: z.string().min(1).optional(),\n skill: z.string().min(1).optional(),\n label: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n data: LegacyNodeDataSchema.optional(),\n});\n\nconst LegacyEdgeSchema = z.looseObject({\n id: z.string().min(1).optional(),\n source: z.string().min(1),\n target: z.string().min(1),\n type: z.string().min(1).optional(),\n});\n\nconst LegacyFlowSchema = z.looseObject({\n id: z.string().min(1),\n version: z.string().min(1).optional(),\n name: z.string().min(1),\n description: z.string().min(1).optional(),\n requires: z.array(z.string().min(1)).optional(),\n globals: z.record(z.string(), z.unknown()).optional(),\n entry: z.string().min(1).optional(),\n nodes: z.array(LegacyNodeSchema).optional(),\n edges: z.array(LegacyEdgeSchema).optional(),\n meta: z.record(z.string(), z.unknown()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\n/** Stable authored-path failure returned without exposing Zod as part of the public boundary. */\nexport interface FlowDefinitionIssue {\n /** Dot-separated authored-data path; the empty string identifies the root. */\n path: string;\n /** Human-readable reason the value failed contract validation. */\n message: string;\n}\n\n/** Inert legacy edge retained for round-tripping outside the closed authored-v2 vocabulary. */\nexport type LegacyCompatibilityEdge = {\n id: string;\n source: string;\n target: string;\n type: string;\n} & Record<string, unknown>;\n\n/** Normalized content whose nodes are strict v2 while inert legacy edges remain lossless. */\nexport type ParsedFlowDefinition = Omit<FlowDefinition, \"edges\"> & {\n edges: Array<FlowDefinition[\"edges\"][number] | LegacyCompatibilityEdge>;\n};\n\n/** Normalized authoring or compatibility content, or complete authored-path failures. */\nexport type FlowDefinitionParseResult =\n | { ok: true; data: ParsedFlowDefinition }\n | { ok: false; errors: FlowDefinitionIssue[] };\n\nfunction success(data: ParsedFlowDefinition): FlowDefinitionParseResult {\n const fingerprint = definitionFingerprint(data);\n if (fingerprint !== null) successfullyParsedDefinitions.set(data, fingerprint);\n return { ok: true, data };\n}\n\nfunction failure(error: z.ZodError): FlowDefinitionParseResult {\n return {\n ok: false,\n errors: error.issues.map((issue) => ({\n path: issue.path.map(String).join(\".\"),\n message: issue.message,\n })),\n };\n}\n\nconst LEGACY_DEFAULT_KEYS: Record<string, string> = {\n approval_mode: \"approval\",\n research_depth: \"researchDepth\",\n auto_review: \"autoReview\",\n subagent_mode: \"subagentMode\",\n verbosity: \"verbosity\",\n cli_mode: \"cliMode\",\n run_input: \"run_input\",\n};\n\nfunction normalizeDefaults(globals: Record<string, unknown> | undefined): unknown {\n if (!globals) return undefined;\n const known: Record<string, unknown> = {};\n const parameters: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(globals)) {\n const normalizedKey = LEGACY_DEFAULT_KEYS[key];\n if (normalizedKey) {\n known[normalizedKey] = key === \"approval_mode\" && value === \"auto_approve\" ? \"auto\" : value;\n } else {\n parameters[key] = value;\n }\n }\n\n if (Object.keys(parameters).length > 0) known.parameters = parameters;\n return Object.keys(known).length > 0 ? known : undefined;\n}\n\nfunction normalizeMeta(value: Record<string, unknown> | undefined): unknown {\n if (!value) return undefined;\n const meta: Record<string, unknown> = {};\n if (typeof value.icon === \"string\") meta.icon = value.icon;\n if (typeof value.category === \"string\") meta.category = value.category;\n if (Array.isArray(value.tags)) meta.tags = value.tags;\n if (typeof value.stage === \"string\") meta.stage = value.stage;\n if (typeof value.onboarding === \"object\" && value.onboarding !== null) {\n const onboarding = value.onboarding as Record<string, unknown>;\n if (\n onboarding.input_style === \"freeform\" ||\n onboarding.input_style === \"structured\" ||\n onboarding.input_style === \"repo\"\n ) {\n meta.onboarding = {\n input_style: onboarding.input_style,\n ...(typeof onboarding.placeholder === \"string\"\n ? { placeholder: onboarding.placeholder }\n : {}),\n ...(Array.isArray(onboarding.fields) ? { fields: onboarding.fields } : {}),\n };\n }\n }\n return Object.keys(meta).length > 0 ? meta : undefined;\n}\n\nfunction normalizeLegacyBinding(value: unknown): unknown {\n if (typeof value === \"string\") {\n return value.replace(/\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g, (_match, key: string) => {\n const normalized = LEGACY_DEFAULT_KEYS[key];\n return `\\${defaults.${normalized ?? `parameters.${key}`}}`;\n });\n }\n if (Array.isArray(value)) return value.map(normalizeLegacyBinding);\n if (typeof value !== \"object\" || value === null) return value;\n return Object.fromEntries(\n Object.entries(value).map(([key, nested]) => [key, normalizeLegacyBinding(nested)]),\n );\n}\n\n/**\n * Converts a recognized v1 definition to strict v2 without mutating the authored input.\n * Non-executable legacy nodes become inert placeholders so dependency and terminal semantics survive.\n */\nexport function normalizeV1(data: unknown): FlowDefinitionParseResult {\n const legacyResult = LegacyFlowSchema.safeParse(data);\n if (!legacyResult.success) return failure(legacyResult.error);\n const legacy = legacyResult.data;\n\n const contradiction = (legacy.nodes ?? []).findIndex(\n (node) => node.data?.optional === true && node.data.approval?.mandatory === true,\n );\n if (contradiction !== -1) {\n return {\n ok: false,\n errors: [\n {\n path: `nodes.${contradiction}.data`,\n message: \"a node cannot be both optional and a mandatory approval gate\",\n },\n ],\n };\n }\n\n const nodes: Array<{ id: string } & Record<string, unknown>> = [];\n for (const node of legacy.nodes ?? []) {\n const data = node.data ?? {};\n const kind = node.type;\n\n const label = data.label ?? node.label ?? data.skill ?? node.skill ?? node.id;\n const description = node.description ?? data.description ?? data.message ?? label;\n if (kind === \"sub-flow\" && data.flow) {\n const delegatedAsset = `flow:${data.flow}`;\n const assets = [...new Set([delegatedAsset, ...(data.assets ?? [])])];\n const parameters = data.parameters ?? {};\n const control = {\n optional: data.optional,\n parallelGroup: data.parallel_group,\n subagent: data.subagent,\n };\n nodes.push({\n id: node.id,\n label,\n description,\n phase: data.phase,\n run: {\n kind: \"sub-flow\",\n flow: data.flow,\n passContext: data.pass_context,\n assets,\n },\n contract:\n Object.keys(parameters).length > 0\n ? { input: normalizeLegacyBinding(parameters) }\n : undefined,\n control: Object.values(control).some((value) => value !== undefined) ? control : undefined,\n });\n continue;\n }\n\n if (kind !== \"skill\") {\n const delegatedAsset = kind === \"sub-flow\" && data.flow ? `flow:${data.flow}` : undefined;\n const assets = [\n ...new Set([...(delegatedAsset ? [delegatedAsset] : []), ...(data.assets ?? [])]),\n ];\n const parameters = data.parameters ?? {};\n nodes.push({\n id: node.id,\n label,\n description,\n phase: data.phase,\n run: {\n kind: \"router\",\n routes: [{ when: \"default\", target: null }],\n assets: assets.length > 0 ? assets : undefined,\n },\n contract: {\n requires: [{ expr: \"false\" }],\n input:\n Object.keys(parameters).length > 0 ? normalizeLegacyBinding(parameters) : undefined,\n },\n control: { optional: true, parallelGroup: data.parallel_group, subagent: data.subagent },\n });\n continue;\n }\n\n const parameters = { ...(data.parameters ?? {}) };\n const authoredInstruction = parameters.instructions;\n delete parameters.instructions;\n const instruction =\n typeof authoredInstruction === \"string\" && authoredInstruction.length > 0\n ? authoredInstruction\n : description;\n const skill = data.skill ?? node.skill;\n const skillAsset = skill\n ? `skill:${skill}${data.version !== undefined ? `#${data.version}` : \"\"}`\n : undefined;\n const assets = [...(skillAsset ? [skillAsset] : []), ...(data.assets ?? [])];\n const control = {\n optional: data.optional,\n parallelGroup: data.parallel_group,\n subagent: data.subagent,\n };\n\n nodes.push({\n id: node.id,\n label,\n description,\n phase: data.phase,\n run: {\n kind: \"agent\",\n instruction,\n assets: assets.length > 0 ? assets : undefined,\n },\n contract:\n Object.keys(parameters).length > 0\n ? { input: normalizeLegacyBinding(parameters) }\n : undefined,\n gate: data.approval?.mandatory === true ? { approval: \"mandatory\" } : undefined,\n control: Object.values(control).some((value) => value !== undefined) ? control : undefined,\n });\n }\n\n const nodeIds = new Set(nodes.map((node) => node.id));\n const edges = (legacy.edges ?? []).map((edge, index) => ({\n ...edge,\n id: edge.id ?? `${edge.source}-${edge.target}-${index}`,\n type: edge.type ?? \"optional\",\n }));\n\n const anchor =\n nodes.find((node) => node.id === legacy.entry) ?? (nodes.length > 0 ? nodes[0] : undefined);\n if (anchor && legacy.requires && legacy.requires.length > 0) {\n const run = anchor.run as Record<string, unknown>;\n const existingAssets = Array.isArray(run.assets) ? run.assets : [];\n run.assets = [...new Set([...existingAssets, ...legacy.requires])];\n }\n\n const candidate = {\n schemaVersion: 2,\n id: legacy.id,\n version: legacy.version ?? \"1.0.0\",\n name: legacy.name,\n description: legacy.description,\n defaults: normalizeDefaults(legacy.globals),\n entry: legacy.entry !== undefined && nodeIds.has(legacy.entry) ? legacy.entry : undefined,\n nodes,\n edges,\n meta: normalizeMeta({ ...(legacy.metadata ?? {}), ...(legacy.meta ?? {}) }),\n };\n const normalized = parseFlowDefinitionStructure({ ...candidate, edges: [] });\n if (!normalized.success) return failure(normalized.error);\n const parsed: ParsedFlowDefinition = { ...normalized.data, edges };\n return success(parsed);\n}\n\n/**\n * Parses strict v2 or normalizes v1, reusing an unchanged successful result across boundaries.\n * Only an absent own schema version permits compatibility normalization.\n */\nexport function parseFlowDefinition(data: unknown): FlowDefinitionParseResult {\n if (typeof data === \"object\" && data !== null) {\n const recorded = successfullyParsedDefinitions.get(data);\n if (recorded !== undefined && definitionFingerprint(data) === recorded) {\n return { ok: true, data: data as ParsedFlowDefinition };\n }\n }\n if (typeof data === \"object\" && data !== null && Object.hasOwn(data, \"schemaVersion\")) {\n const result = FlowDefinitionSchema.safeParse(data);\n return result.success ? success(result.data) : failure(result.error);\n }\n return normalizeV1(data);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../factory-assets/connectors/flow/prompt-fragments.ts"],"names":[],"mappings":"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","file":"chunk-OHLKWUO3.js","sourcesContent":["/**\n * Prompt fragments for the flow connector.\n *\n * Pure functions that translate a {@link TurnStimulus} into the strings the\n * runner's flow orchestrator splices into the per-turn agent prompt.\n * Extracted from `runner/src/flow-orchestrator.ts` in Phase 3 of the\n * flow-connector extraction (2026-05-08) so the connector owns its\n * prompt-rendering surface without a runtime dep on the orchestrator.\n *\n * The contract is byte-identical to the previous inline implementation —\n * any divergence is a regression.\n *\n * @docLink packages/factory-assets/flow#prompt-fragments\n */\n\nimport type { FlowExecution } from \"@skaile/workspaces/types\";\nimport type { FlowDefinition } from \"./engine/types.js\";\nimport {\n flowDefaults,\n isAgentNode,\n isGateNode,\n nodeIsOptional,\n nodeLabel,\n nodeRequiresApproval,\n} from \"./engine/node-shape.js\";\n\n/**\n * Reasons why a new turn is starting. The flow orchestrator's prompt template\n * renders a stimulus-specific paragraph (via {@link renderStimulusPrompt}) so\n * the agent knows exactly why it has been invoked.\n *\n * @docLink packages/factory-assets/flow#turn-stimulus\n */\nexport type TurnStimulus =\n | { kind: \"flow_started\" }\n | {\n kind: \"approval_received\";\n nodeId: string;\n decision: \"approved\" | \"rejected\";\n feedback?: string;\n decidedBy: string;\n }\n | { kind: \"input_received\"; nodeId: string; response: unknown; providedBy: string }\n | { kind: \"retry_requested\"; nodeId: string; requestedBy: string }\n | { kind: \"user_message\"; text: string; senderId: string }\n | { kind: \"resumed_after_hibernation\" }\n | { kind: \"cancelled\" }\n | { kind: \"state_changed\" };\n\n/**\n * Render the stimulus paragraph the agent sees at turn start.\n *\n * The output is a single paragraph (one or more sentences, no surrounding\n * whitespace) describing why the runner has woken the agent. Spliced into\n * the orchestrator prompt under the `## Why this turn is happening` heading.\n *\n * @docLink packages/factory-assets/flow#render-stimulus-prompt\n */\nexport function renderStimulusPrompt(stimulus: TurnStimulus): string {\n switch (stimulus.kind) {\n case \"flow_started\":\n return \"The user just started this flow. Begin with the first available node — call `get_available`, then `build_handoff` for your chosen node, then `start_node`.\";\n case \"approval_received\": {\n const { nodeId, decision, decidedBy, feedback } = stimulus;\n if (decision === \"approved\") {\n return `Node \\`${nodeId}\\` was **approved** by ${decidedBy}. Call \\`complete_node\\` for this node with the approved output, then advance to the next available node.`;\n }\n const fb = feedback ? ` Feedback: \"${feedback}\".` : \"\";\n return `Node \\`${nodeId}\\` was **rejected** by ${decidedBy}.${fb} Decide how to proceed: retry the node (the engine returned it to \\`available\\`), ask clarifying questions via \\`request_input\\`, or call \\`fail_node(..., recoverable: false)\\` if the issue cannot be addressed.`;\n }\n case \"input_received\":\n return `The user just provided input for node \\`${stimulus.nodeId}\\` (provided by ${stimulus.providedBy}). The node has returned to its prior status. Continue executing the node with this input.`;\n case \"retry_requested\":\n return `A user requested a retry of node \\`${stimulus.nodeId}\\` (requested by ${stimulus.requestedBy}). The node has been returned to \\`available\\` with its prior error preserved in history. Start a fresh attempt — review the error context if relevant and try a different approach.`;\n case \"user_message\":\n return `A user sent a message: \"${stimulus.text}\" (from ${stimulus.senderId}). You can respond directly without touching the flow, continue flow work, or both. If the message is a question about the flow, answer it; if it signals a new direction, consider whether to pause.`;\n case \"resumed_after_hibernation\":\n return \"This session was hibernated and has just resumed. Review the current state above and continue where you left off. No state was lost.\";\n case \"cancelled\":\n return \"The user has cancelled this flow. Wrap up cleanly: do not start any new nodes. You may record a short summary if relevant, then stop.\";\n case \"state_changed\":\n return \"The flow state changed. Review the current state above and continue work accordingly.\";\n }\n}\n\n/**\n * Build the full agent-orchestrator prompt for a flow turn.\n *\n * Reassembles the five-section prompt from the current FlowExecution snapshot\n * and the supplied stimulus:\n *\n * 1. Flow definition (markdown table of nodes)\n * 2. Current state (progress, available/blocked, interaction pointers)\n * 3. Why this turn is happening (stimulus-specific paragraph)\n * 4. Flow tools available (static documentation)\n * 5. Rules\n *\n * Originally a byte-identical lift of the (since-deleted)\n * `FlowOrchestrator.buildOrchestratorPrompt`; the contract now is simply\n * this function's own output. When strict v2 defaults or legacy globals are\n * non-empty, a `## Flow globals` section exposes those run-scoped values. The\n * flow-wide active-node table stays bounded to selection metadata; `build_handoff`\n * supplies a selected agent node's execution payload. First-class gates appear\n * as runtime-owned state but never as agent-executable work.\n * Pure — depends only on its inputs.\n *\n * @docLink packages/factory-assets/flow#build-orchestrator-prompt\n * @since 2.2.0\n */\nexport function buildOrchestratorPrompt(\n flowDef: FlowDefinition,\n state: FlowExecution,\n stimulus: TurnStimulus,\n): string {\n const agentNodes = flowDef.nodes.filter(isAgentNode);\n const gateNodes = flowDef.nodes.filter(isGateNode);\n const promptNodes = flowDef.nodes.filter((node) => isAgentNode(node) || isGateNode(node));\n const agentNodeIds = new Set(agentNodes.map((node) => node.id));\n const promptNodeIds = new Set(promptNodes.map((node) => node.id));\n\n // ── Section 1: definition table ──\n const nodeRows = promptNodes\n .map((n) => {\n const deps =\n flowDef.edges\n .filter((e) => e.target === n.id && e.type === \"flow\")\n .map((e) => e.source)\n .join(\", \") || \"—\";\n const required = nodeIsOptional(n) ? \"optional\" : \"required\";\n const gate = isGateNode(n) ? \"first-class\" : nodeRequiresApproval(n) ? \"mandatory\" : \"—\";\n const nodeState = state.nodes[n.id];\n const status = nodeState?.status ?? \"not_started\";\n const description = (n.description ?? n.data?.description ?? \"—\")\n .replace(/\\s+/g, \" \")\n .replaceAll(\"|\", \"\\\\|\");\n return `| ${n.id} | ${nodeLabel(n)} | ${description} | ${required} | ${gate} | ${status} | ${deps} |`;\n })\n .join(\"\\n\");\n\n // ── Section 2: current state summary ──\n const nodesByStatus = (s: string) =>\n Object.values(state.nodes)\n .filter((n) => promptNodeIds.has(n.id) && n.status === s)\n .map((n) => n.id);\n const available = nodesByStatus(\"available\");\n const awaitingApproval = nodesByStatus(\"awaiting_approval\");\n const awaitingInput = nodesByStatus(\"awaiting_input\");\n const running = nodesByStatus(\"running\");\n const failed = nodesByStatus(\"failed\");\n const completed = nodesByStatus(\"complete\");\n const totalRequired = promptNodes.filter((n) => !nodeIsOptional(n)).length;\n\n const stateSummary = [\n `- Run ID: ${state.runId}`,\n `- Status: ${state.status}`,\n `- Autonomous mode: ${state.autonomousMode}`,\n `- Progress: ${completed.length} / ${totalRequired} required nodes complete`,\n `- Available now: ${available.join(\", \") || \"(none)\"}`,\n `- Currently running: ${running.join(\", \") || \"(none)\"}`,\n `- Awaiting approval: ${awaitingApproval.join(\", \") || \"(none)\"}`,\n `- Awaiting input: ${awaitingInput.join(\", \") || \"(none)\"}`,\n `- Failed: ${failed.join(\", \") || \"(none)\"}`,\n ].join(\"\\n\");\n\n const outputCorrections = Object.values(state.nodes)\n .filter(\n (node) =>\n agentNodeIds.has(node.id) &&\n node.outputCorrection &&\n node.status !== \"complete\" &&\n node.status !== \"failed\",\n )\n .map(\n (node) =>\n `- Node \\`${node.id}\\`: ${node.outputCorrection?.issues.join(\"; \") ?? \"unknown issue\"}`,\n );\n const correctionSection =\n outputCorrections.length > 0\n ? `## Output correction required\n\nThe following node has already used its single corrective reprompt. Submit one corrected \\`complete_node\\` call that fixes every issue; a second mismatch fails the node.\n\n${outputCorrections.join(\"\\n\")}\n\n`\n : \"\";\n\n const rejectedGates = gateNodes.flatMap((node) => {\n const approval = state.nodes[node.id]?.approval;\n if (approval?.decision !== \"rejected\") return [];\n return [\n `- \\`${node.id}\\` — rejected by ${approval.decidedBy ?? \"unknown reviewer\"}: ${\n approval.feedback ?? \"(no feedback provided)\"\n }`,\n ];\n });\n const rejectedGateSection =\n rejectedGates.length > 0\n ? `## Rejected first-class gates requiring revision\n\n${rejectedGates.join(\"\\n\")}\n\nRevise the surrounding work in conversation, then re-request each gate with \\`request_approval(nodeId, summary, artifacts)\\`. Every gate remains parked until its new human decision; do not start, complete, skip, or fail a first-class gate.\n\n`\n : \"\";\n\n // ── Section 2b: flow globals (additive — omitted entirely when empty so\n // flows without globals keep the byte-identical Phase 3 prompt) ──\n const globals = flowDefaults(flowDef);\n const globalsSection =\n Object.keys(globals).length > 0\n ? `## Flow globals\n\nRun-scoped parameters set by the flow author or by the host that started this run. When \\`run_input\\` is present it carries the payload this run was started with (e.g. a scheduled or webhook-triggered run) — treat it as the run's initial input instead of asking the user for it.\n\n\\`\\`\\`json\n${JSON.stringify(globals, null, 2)}\n\\`\\`\\`\n\n`\n : \"\";\n\n // ── Section 3: stimulus paragraph ──\n const stimulusNode =\n stimulus.kind === \"approval_received\"\n ? flowDef.nodes.find((node) => node.id === stimulus.nodeId)\n : undefined;\n let stimulusParagraph = renderStimulusPrompt(stimulus);\n if (stimulus.kind === \"approval_received\" && stimulusNode && isGateNode(stimulusNode)) {\n if (stimulus.decision === \"approved\") {\n const availableSuccessors = agentNodes\n .filter((node) => state.nodes[node.id]?.status === \"available\")\n .map((node) => `\\`${node.id}\\``);\n stimulusParagraph = `Gate node \\`${stimulus.nodeId}\\` is already \\`complete\\` after approval by ${stimulus.decidedBy}. Do not call \\`complete_node\\` for the gate. Advance to successor work${\n availableSuccessors.length > 0\n ? `; available agent nodes: ${availableSuccessors.join(\", \")}`\n : \"\"\n } — call \\`get_available\\`, then \\`build_handoff\\` and \\`start_node\\` for the chosen agent node.`;\n } else {\n stimulusParagraph = `Gate node \\`${stimulus.nodeId}\\` was **rejected** by ${stimulus.decidedBy}.${\n stimulus.feedback ? ` Feedback: \"${stimulus.feedback}\".` : \"\"\n } Revise the work in conversation and follow the rejected-gate instructions above.`;\n }\n }\n\n // ── Section 4+5: static tool surface and rules ──\n return `# Flow Execution Context\n\nYou are orchestrating the flow **${flowDef.name}** (${flowDef.id} v${flowDef.version}). This is a governed flow execution: your job is to run nodes through the flow tools, summarize their outputs for human review, and yield control at approval gates.\n\n## Flow definition\n\n| ID | Label | Description | Required | Gate | Status | Depends on |\n|----|-------|-------------|----------|------|--------|------------|\n${nodeRows}\n\nNodes with **Gate = mandatory** are hard approval gates: they always require \\`request_approval\\` and a human decision, even when autonomous mode is on. They cannot be skipped — \\`request_approval\\` → approval is their only completion path.\nNodes with **Gate = first-class** are runtime-owned human decisions. The runtime parks them automatically and completes them directly on approval; the agent never executes them.\n\n## Current state\n\n${stateSummary}\n\n${globalsSection}${correctionSection}${rejectedGateSection}## Why this turn is happening\n\n${stimulusParagraph}\n\n## Flow tools available\n\nAll tools are exposed by the \\`flow\\` connector:\n\n- \\`get_available()\\` — list node IDs that are ready to start\n- \\`get_state()\\` — full current state including approvals, inputs, outputs\n- \\`get_globals()\\` — the flow's run-scoped globals (e.g. the \\`run_input\\` payload for scheduled/params-bound runs)\n- \\`build_handoff(nodeId)\\` — selected node instruction, supplied bindings, required assets, and upstream context\n- \\`start_node(nodeId)\\` — transition an agent node from \\`available\\` → \\`running\\`; call before executing it. Never start a first-class gate.\n- \\`request_approval(nodeId, summary, artifacts)\\` — transition a running agent node to \\`awaiting_approval\\`, or replace a rejected first-class gate's decision with a fresh pending request. **This ends your turn.**\n- \\`request_input(nodeId, prompt, schema)\\` — transition to \\`awaiting_input\\`. **This ends your turn.** Legal from \\`available\\`, \\`running\\`, or \\`awaiting_approval\\`.\n- \\`complete_node(nodeId, summary, fields?, artifacts?, concerns?)\\` — complete an agent node. When downstream nodes consume declared output fields, include a conforming JSON object. The first mismatch gets one corrective call; the second fails the node. Valid only if the agent node was approved, OR autonomousMode is true and it does not require mandatory approval. First-class gates are completed by the runtime on approval; never call this tool for them.\n- \\`fail_node(nodeId, message, recoverable)\\` — transition to \\`failed\\`. \\`recoverable=true\\` returns the node to \\`available\\`.\n- \\`skip_node(nodeId)\\` — transition to \\`skipped\\`. Only valid for optional nodes.\n\n## Rules\n\n1. Before executing an agent node, call \\`build_handoff(nodeId)\\` and follow its instruction with the supplied bindings, assets, and upstream context; then call \\`start_node(nodeId)\\`.\n2. After executing the node, call \\`request_approval\\` unless \\`autonomousMode\\` is true — in which case call \\`complete_node\\` directly. Exception: nodes marked **Gate = mandatory** always require \\`request_approval\\` and a human decision, even in autonomous mode.\n3. First-class nodes marked **Gate = first-class** are runtime-owned. Never start, complete, skip, fail, or request input for them. After rejection, revise in conversation and only call \\`request_approval\\` to create the next attempt.\n4. If you need information from the user before or during agent execution, call \\`request_input\\`. This ends your turn until the user responds.\n5. On unrecoverable agent failure, call \\`fail_node(..., recoverable: false)\\`. On recoverable failure, call \\`fail_node(..., recoverable: true)\\` and the engine returns the node to \\`available\\`.\n6. When all required nodes are \\`complete\\` or \\`skipped\\`, stop. The runner marks the flow done automatically.\n7. Free-chat user messages do not require flow action. Respond directly, continue flow work, or both — your call.\n`;\n}\n\n/**\n * Single-line tag suitable for telemetry / logging. Derives a short, stable\n * summary of a stimulus that's safe to attach to spans, log entries, and\n * trace events. The kind is always included; node-specific stimuli also\n * include their `nodeId` so log queries can pivot on it.\n *\n * @docLink packages/factory-assets/flow#describe-stimulus\n */\nexport function describeStimulus(stimulus: TurnStimulus): string {\n switch (stimulus.kind) {\n case \"flow_started\":\n return \"flow_started\";\n case \"approval_received\":\n return `approval_received:${stimulus.nodeId}:${stimulus.decision}`;\n case \"input_received\":\n return `input_received:${stimulus.nodeId}`;\n case \"retry_requested\":\n return `retry_requested:${stimulus.nodeId}`;\n case \"user_message\":\n return `user_message:${stimulus.senderId}`;\n case \"resumed_after_hibernation\":\n return \"resumed_after_hibernation\";\n case \"cancelled\":\n return \"cancelled\";\n case \"state_changed\":\n return \"state_changed\";\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../factory-assets/connectors/flow/engine/bindings.ts","../factory-assets/connectors/flow/engine/router-settlement.ts","../factory-assets/connectors/flow/engine/engine.ts","../factory-assets/connectors/flow/engine/output-schema.ts","../factory-assets/connectors/flow/engine/node-deadline.ts","../factory-assets/connectors/flow/engine/node-attempts.ts","../factory-assets/connectors/flow/engine/check-provenance.ts","../factory-assets/connectors/flow/engine/flow-manifest.ts","../factory-assets/connectors/flow/engine/flow-kind-provider.ts","../factory-assets/connectors/flow/engine/loader.ts"],"names":["path","z","process","parseYaml"],"mappings":"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","file":"chunk-UAIR3K6X.js","sourcesContent":["import {\n resolveFlowBindings,\n stableFlowJson,\n type BindingOrigin,\n type FlowExpressionContext,\n type ResolvedNodeBindings,\n} from \"../contract/expression.js\";\nimport { isAgentNode, nodeBindings } from \"./node-shape.js\";\nimport type { FlowDefinition, FlowNode, NodeExecutionSnapshot } from \"./types.js\";\n\n/** Build the bounded expression context from immutable definition and snapshot state. */\nexport function buildFlowExpressionContext(\n flow: FlowDefinition,\n snapshots: Map<string, NodeExecutionSnapshot>,\n): FlowExpressionContext {\n const nodes: FlowExpressionContext[\"nodes\"] = {};\n for (const node of flow.nodes) {\n const snapshot = snapshots.get(node.id);\n const output =\n snapshot?.status === \"complete\" && snapshot.output?.fields\n ? { fields: snapshot.output.fields }\n : undefined;\n nodes[node.id] = { status: snapshot?.status ?? \"not_started\", output };\n }\n return {\n flow: { input: flow.defaults?.run_input ?? {} },\n defaults: flow.defaults,\n nodes,\n };\n}\n\n/** Resolve one node's named inputs and derive their runtime/agent origins. */\nexport function resolveNodeBindings(\n flow: FlowDefinition,\n node: FlowNode,\n snapshots: Map<string, NodeExecutionSnapshot>,\n flowInputOrigins: Record<string, BindingOrigin[]> = {},\n): ResolvedNodeBindings {\n const origins = Object.fromEntries(\n flow.nodes.map((producer) => [producer.id, isAgentNode(producer) ? \"agent\" : \"runtime\"]),\n ) as Record<string, \"agent\" | \"runtime\">;\n return resolveFlowBindings(\n nodeBindings(node),\n buildFlowExpressionContext(flow, snapshots),\n origins,\n flowInputOrigins,\n );\n}\n\n/** Interpolate named, already-resolved binding values into an agent instruction. */\nexport function interpolateNodeInstruction(\n instruction: string,\n values: Record<string, unknown>,\n): string {\n return instruction.replace(/\\$\\{([A-Za-z_][A-Za-z0-9_-]*)\\}/g, (_placeholder, name: string) => {\n if (!Object.hasOwn(values, name)) {\n throw new Error(`Node instruction binding ${name} is missing`);\n }\n const value = values[name];\n return typeof value === \"string\" ? value : stableFlowJson(value);\n });\n}\n","import type { NodeOutput } from \"@skaile/workspaces/types\";\nimport { evaluateFlowExpression, FlowExpressionError } from \"../contract/expression.js\";\nimport { buildFlowExpressionContext } from \"./bindings.js\";\nimport { isRouterNode } from \"./node-shape.js\";\nimport type { FlowDefinition, FlowNode, NodeExecutionSnapshot } from \"./types.js\";\n\nconst ROUTER_SELECTION_MARKER = \"\\n\\n[skaile:flow-router-selection:\";\n\n/** One deterministic router choice being settled in the current atomic batch. */\nexport interface RouterSettlement {\n routerNodeId: string;\n selectedTarget: string | null;\n}\n\n/** Internal result of evaluating one already-admitted router. */\nexport type RouterSelection =\n | { selectedTarget: string | null }\n | { unresolved: \"not-ready\" | \"no-match\" };\n\nfunction pendingProducerOutput(\n flow: FlowDefinition,\n snapshots: Map<string, NodeExecutionSnapshot>,\n missingPath: string | undefined,\n): boolean {\n if (!missingPath) return false;\n const segments = missingPath.split(\".\");\n if (\n segments.length < 5 ||\n segments[0] !== \"nodes\" ||\n segments[2] !== \"output\" ||\n segments[3] !== \"fields\"\n ) {\n return false;\n }\n const producer = flow.nodes.find(({ id }) => id === segments[1]);\n if (!producer?.contract?.output?.fields) return false;\n return snapshots.get(producer.id)?.status !== \"complete\";\n}\n\n/** Evaluate ordered routes for a router whose availability was already established. */\nexport function evaluateRouterSelection(\n flow: FlowDefinition,\n router: FlowNode,\n snapshots: Map<string, NodeExecutionSnapshot>,\n): RouterSelection {\n if (!isRouterNode(router)) return { unresolved: \"no-match\" };\n const context = buildFlowExpressionContext(flow, snapshots);\n for (const route of router.run.routes) {\n try {\n if (evaluateFlowExpression(route.when, context)) {\n return { selectedTarget: route.target };\n }\n } catch (error) {\n if (\n error instanceof FlowExpressionError &&\n pendingProducerOutput(flow, snapshots, error.missingPath)\n ) {\n return { unresolved: \"not-ready\" };\n }\n throw error;\n }\n }\n return { unresolved: \"no-match\" };\n}\n\n/** Encode a router choice in the existing durable node-output envelope. */\nexport function routerSelectionOutput(selectedTarget: string | null): NodeOutput {\n const summary =\n selectedTarget === null\n ? \"Router completed without selecting a target.\"\n : `Router selected ${selectedTarget}.`;\n return {\n summary: `${summary}${ROUTER_SELECTION_MARKER}${JSON.stringify(selectedTarget)}]`,\n artifacts: [],\n };\n}\n\nfunction routeTargets(router: FlowNode): string[] {\n if (!isRouterNode(router)) return [];\n return [...new Set(router.run.routes.flatMap(({ target }) => (target === null ? [] : [target])))];\n}\n\ninterface RouterOwnershipIndex {\n routers: FlowNode[];\n outgoing: Map<string, string[]>;\n}\n\n/** Index router-to-router ownership through route targets and hard-flow descendants. */\nfunction routerOwnershipIndex(\n flow: FlowDefinition,\n snapshots: Map<string, NodeExecutionSnapshot>,\n): RouterOwnershipIndex {\n const routers = flow.nodes.filter(\n (node) =>\n isRouterNode(node) &&\n ![\"complete\", \"failed\", \"skipped\"].includes(snapshots.get(node.id)?.status ?? \"not_started\"),\n );\n const routerIds = new Set(routers.map(({ id }) => id));\n const hardOutgoing = new Map<string, string[]>();\n for (const edge of flow.edges) {\n if (edge.type !== \"flow\") continue;\n const targets = hardOutgoing.get(edge.source) ?? [];\n targets.push(edge.target);\n hardOutgoing.set(edge.source, targets);\n }\n\n const outgoing = new Map<string, string[]>();\n for (const router of routers) {\n const owned = new Set<string>();\n const visited = new Set<string>();\n const queue = routeTargets(router);\n for (let index = 0; index < queue.length; index++) {\n const nodeId = queue[index];\n if (visited.has(nodeId)) continue;\n visited.add(nodeId);\n if (routerIds.has(nodeId)) owned.add(nodeId);\n queue.push(...(hardOutgoing.get(nodeId) ?? []));\n }\n outgoing.set(router.id, [...owned]);\n }\n return { routers, outgoing };\n}\n\n/**\n * Return every member of each source router-ownership SCC.\n *\n * Route ownership is deliberately not a dependency arc and may cycle even though hard flow is\n * acyclic. Source SCC members are ungated so normal hard-edge/precondition admission and ordered\n * decidability select the settlement frontier. Ordinary parent components remain ahead of nested\n * children, while self-targeting and mutually targeting routers cannot deadlock admission. The\n * graph is preindexed and both SCC passes are iterative.\n */\nfunction routerOwnershipSourceComponents(\n flow: FlowDefinition,\n snapshots: Map<string, NodeExecutionSnapshot>,\n): string[][] {\n const { routers, outgoing } = routerOwnershipIndex(flow, snapshots);\n const reverse = new Map<string, string[]>();\n for (const router of routers) reverse.set(router.id, []);\n for (const [source, targets] of outgoing) {\n for (const target of targets) reverse.get(target)?.push(source);\n }\n\n const visited = new Set<string>();\n const finished: string[] = [];\n for (const router of routers) {\n if (visited.has(router.id)) continue;\n const stack: Array<{ nodeId: string; exiting: boolean }> = [\n { nodeId: router.id, exiting: false },\n ];\n while (stack.length > 0) {\n const frame = stack.pop();\n if (!frame) break;\n if (frame.exiting) {\n finished.push(frame.nodeId);\n continue;\n }\n if (visited.has(frame.nodeId)) continue;\n visited.add(frame.nodeId);\n stack.push({ nodeId: frame.nodeId, exiting: true });\n const targets = outgoing.get(frame.nodeId) ?? [];\n for (let index = targets.length - 1; index >= 0; index--) {\n if (!visited.has(targets[index])) {\n stack.push({ nodeId: targets[index], exiting: false });\n }\n }\n }\n }\n\n const componentByRouter = new Map<string, number>();\n const components: string[][] = [];\n for (let index = finished.length - 1; index >= 0; index--) {\n const start = finished[index];\n if (componentByRouter.has(start)) continue;\n const componentId = components.length;\n const component: string[] = [];\n const stack = [start];\n componentByRouter.set(start, componentId);\n while (stack.length > 0) {\n const nodeId = stack.pop();\n if (!nodeId) break;\n component.push(nodeId);\n for (const source of reverse.get(nodeId) ?? []) {\n if (componentByRouter.has(source)) continue;\n componentByRouter.set(source, componentId);\n stack.push(source);\n }\n }\n components.push(component);\n }\n\n const incomingComponents = new Set<number>();\n for (const [source, targets] of outgoing) {\n const sourceComponent = componentByRouter.get(source);\n for (const target of targets) {\n const targetComponent = componentByRouter.get(target);\n if (\n sourceComponent !== undefined &&\n targetComponent !== undefined &&\n sourceComponent !== targetComponent\n ) {\n incomingComponents.add(targetComponent);\n }\n }\n }\n\n const definitionOrder = new Map(flow.nodes.map((node, index) => [node.id, index]));\n const sourceComponents = components.filter(\n (_, componentId) => !incomingComponents.has(componentId),\n );\n for (const component of sourceComponents) {\n component.sort(\n (left, right) =>\n (definitionOrder.get(left) ?? Number.MAX_SAFE_INTEGER) -\n (definitionOrder.get(right) ?? Number.MAX_SAFE_INTEGER),\n );\n }\n return sourceComponents.sort(\n (left, right) =>\n (definitionOrder.get(left[0]) ?? Number.MAX_SAFE_INTEGER) -\n (definitionOrder.get(right[0]) ?? Number.MAX_SAFE_INTEGER),\n );\n}\n\n/** Decode and validate a completed router's engine-owned selection summary. */\nexport function persistedRouterSelection(\n router: FlowNode,\n snapshot: NodeExecutionSnapshot | undefined,\n): { selectedTarget: string | null } | undefined {\n if (!isRouterNode(router) || snapshot?.status !== \"complete\") return undefined;\n const summary = snapshot.output?.summary;\n const markerIndex = summary?.lastIndexOf(ROUTER_SELECTION_MARKER) ?? -1;\n if (!summary || markerIndex < 0 || !summary.endsWith(\"]\")) return undefined;\n let selectedTarget: unknown;\n try {\n selectedTarget = JSON.parse(summary.slice(markerIndex + ROUTER_SELECTION_MARKER.length, -1));\n } catch {\n return undefined;\n }\n if (\n selectedTarget !== null &&\n (typeof selectedTarget !== \"string\" || !routeTargets(router).includes(selectedTarget))\n ) {\n return undefined;\n }\n if (selectedTarget === null && !router.run.routes.some(({ target }) => target === null)) {\n return undefined;\n }\n return summary === routerSelectionOutput(selectedTarget).summary ? { selectedTarget } : undefined;\n}\n\nfunction edgeKey(source: string, target: string): string {\n return `${source}\\u0000${target}`;\n}\n\n/**\n * Plan exclusive branch skips for all known router choices as one coordinated settlement.\n *\n * Only hard `flow` edges participate. The graph is indexed once, then each distinct losing\n * target performs a linear adjacency walk; optional and parallel edges can neither spread nor\n * preserve exclusivity. A selected route, a still-live unsettled router, shared convergence, or\n * an incoming hard predecessor outside the losing region protects that node and its descendants.\n */\nexport function planRouterSkips(\n flow: FlowDefinition,\n snapshots: Map<string, NodeExecutionSnapshot>,\n settlements: readonly RouterSettlement[],\n): string[] {\n const routers = flow.nodes.filter(isRouterNode);\n const currentSelections = new Map(\n settlements.map(({ routerNodeId, selectedTarget }) => [routerNodeId, selectedTarget]),\n );\n const knownSelections = new Map<string, string | null>();\n for (const router of routers) {\n if (currentSelections.has(router.id)) {\n knownSelections.set(router.id, currentSelections.get(router.id) ?? null);\n continue;\n }\n const persisted = persistedRouterSelection(router, snapshots.get(router.id));\n if (persisted) knownSelections.set(router.id, persisted.selectedTarget);\n }\n\n const outgoing = new Map<string, string[]>();\n const incoming = new Map<string, string[]>();\n for (const edge of flow.edges) {\n if (edge.type !== \"flow\") continue;\n const targets = outgoing.get(edge.source) ?? [];\n targets.push(edge.target);\n outgoing.set(edge.source, targets);\n const sources = incoming.get(edge.target) ?? [];\n sources.push(edge.source);\n incoming.set(edge.target, sources);\n }\n\n const losingRoots = new Set<string>();\n const selectedRoots = new Set<string>();\n const losingRouteEdges = new Set<string>();\n for (const router of routers) {\n if (!knownSelections.has(router.id)) continue;\n const selectedTarget = knownSelections.get(router.id) ?? null;\n if (selectedTarget !== null) selectedRoots.add(selectedTarget);\n for (const target of routeTargets(router)) {\n if (target === selectedTarget) continue;\n losingRoots.add(target);\n losingRouteEdges.add(edgeKey(router.id, target));\n }\n }\n\n const candidateOrigins = new Map<string, Set<string>>();\n for (const root of losingRoots) {\n const visited = new Set<string>();\n const queue = [root];\n for (let index = 0; index < queue.length; index++) {\n const nodeId = queue[index];\n if (visited.has(nodeId)) continue;\n visited.add(nodeId);\n const origins = candidateOrigins.get(nodeId) ?? new Set<string>();\n origins.add(root);\n candidateOrigins.set(nodeId, origins);\n for (const target of outgoing.get(nodeId) ?? []) queue.push(target);\n }\n }\n const candidates = new Set(candidateOrigins.keys());\n\n const protectionQueue = [...selectedRoots];\n for (const [nodeId, origins] of candidateOrigins) {\n if (origins.size >= 2) protectionQueue.push(nodeId);\n for (const source of incoming.get(nodeId) ?? []) {\n if (candidates.has(source)) continue;\n if (losingRouteEdges.has(edgeKey(source, nodeId))) continue;\n if ([\"failed\", \"skipped\"].includes(snapshots.get(source)?.status ?? \"not_started\")) continue;\n protectionQueue.push(nodeId);\n break;\n }\n }\n\n const unknownSelections = new Map<string, string[]>();\n for (const router of routers) {\n if (knownSelections.has(router.id)) continue;\n const status = snapshots.get(router.id)?.status ?? \"not_started\";\n if (status === \"failed\" || status === \"skipped\") continue;\n const targets = routeTargets(router);\n unknownSelections.set(router.id, targets);\n if (!candidates.has(router.id)) protectionQueue.push(...targets);\n }\n\n const protectedNodes = new Set<string>();\n for (let index = 0; index < protectionQueue.length; index++) {\n const nodeId = protectionQueue[index];\n if (protectedNodes.has(nodeId)) continue;\n protectedNodes.add(nodeId);\n protectionQueue.push(...(outgoing.get(nodeId) ?? []));\n protectionQueue.push(...(unknownSelections.get(nodeId) ?? []));\n }\n\n return flow.nodes.flatMap((node) =>\n candidates.has(node.id) && !protectedNodes.has(node.id) ? [node.id] : [],\n );\n}\n\n/**\n * Return every possible target branch gated by an unsettled router.\n *\n * Gating follows hard `flow` descendants only. A selected route, shared convergence, or another\n * live hard predecessor protects a node, matching settlement pruning without mutating snapshots.\n */\nexport function unsettledRouterBranchIds(\n flow: FlowDefinition,\n snapshots: Map<string, NodeExecutionSnapshot>,\n): Set<string> {\n const unsettled = flow.nodes.filter(\n (node) =>\n isRouterNode(node) &&\n ![\"complete\", \"failed\", \"skipped\"].includes(snapshots.get(node.id)?.status ?? \"not_started\"),\n );\n const branches = new Set(\n planRouterSkips(\n flow,\n snapshots,\n unsettled.map(({ id }) => ({ routerNodeId: id, selectedTarget: null })),\n ),\n );\n for (const component of routerOwnershipSourceComponents(flow, snapshots)) {\n for (const routerId of component) branches.delete(routerId);\n }\n return branches;\n}\n\n/**\n * Return one actually available, decidable router per source ownership component.\n *\n * Every source-component member remains ungated for normal admission. Within a settlement wave,\n * definition order chooses the first member that is both available and decidable; unresolved or\n * blocked peers cannot starve it. Limiting each component to one choice prevents a router from\n * completing atomically after that same wave makes its branch losing. Independent source\n * components can still settle together.\n */\nexport function availableRouterFrontier(\n flow: FlowDefinition,\n snapshots: Map<string, NodeExecutionSnapshot>,\n): FlowNode[] {\n const nodesById = new Map(flow.nodes.map((node) => [node.id, node]));\n return routerOwnershipSourceComponents(flow, snapshots).flatMap((component) => {\n for (const routerId of component) {\n const node = nodesById.get(routerId);\n if (!node || snapshots.get(routerId)?.status !== \"available\") continue;\n if (\"unresolved\" in evaluateRouterSelection(flow, node, snapshots)) continue;\n return [node];\n }\n return [];\n });\n}\n","import type {\n FlowDefinition,\n FlowEdge,\n FlowNode,\n FlowState,\n NodeExecutionSnapshot,\n NodePreconditionFailure,\n NodeState,\n NodeStatus,\n} from \"./types.js\";\nimport { evaluateFlowExpression, type FlowExpressionContext } from \"../contract/expression.js\";\nimport { buildFlowExpressionContext } from \"./bindings.js\";\nimport {\n isActiveRuntimeNode,\n isRouterNode,\n nodeIsOptional,\n nodeLabel,\n nodeSkillId,\n} from \"./node-shape.js\";\nimport {\n evaluateRouterSelection,\n planRouterSkips,\n unsettledRouterBranchIds,\n} from \"./router-settlement.js\";\n\n// ---------------------------------------------------------------------------\n// Core engine — stateless, pure functions\n// ---------------------------------------------------------------------------\n\n/** Return nodes with state owned by the current runtime. */\nfunction activeRuntimeNodes(flow: FlowDefinition): FlowNode[] {\n return flow.nodes.filter(isActiveRuntimeNode);\n}\n\n/** Evaluate every authored admission condition without mutating runtime state. */\nfunction failedPreconditions(\n node: FlowNode,\n context: FlowExpressionContext,\n): NodePreconditionFailure[] {\n const failures: NodePreconditionFailure[] = [];\n for (const requirement of node.contract?.requires ?? []) {\n const message = requirement.message ?? `Precondition failed: ${requirement.expr}`;\n try {\n if (!evaluateFlowExpression(requirement.expr, context)) {\n failures.push({ expression: requirement.expr, message, reason: \"false\" });\n }\n } catch (error) {\n failures.push({\n expression: requirement.expr,\n message,\n reason: \"error\",\n detail: error instanceof Error ? error.message : \"Flow expression evaluation failed\",\n });\n }\n }\n return failures;\n}\n\n/** Build adjacency: target → sources[] (incoming edges per node) */\nfunction buildIncoming(edges: FlowEdge[]): Map<string, FlowEdge[]> {\n const map = new Map<string, FlowEdge[]>();\n for (const edge of edges) {\n if (!map.has(edge.target)) map.set(edge.target, []);\n map.get(edge.target)!.push(edge);\n }\n return map;\n}\n\n/** Build adjacency: source → targets[] (outgoing edges per node) */\nfunction buildOutgoing(edges: FlowEdge[]): Map<string, FlowEdge[]> {\n const map = new Map<string, FlowEdge[]>();\n for (const edge of edges) {\n if (!map.has(edge.source)) map.set(edge.source, []);\n map.get(edge.source)!.push(edge);\n }\n return map;\n}\n\n/** Result of resolving one available router against the current expression context. */\nexport interface RouterResolution {\n /** First matching route target. `null` means every branch loses. */\n selectedTarget: string | null;\n /** Exclusive nodes belonging only to unselected route targets, in definition order. */\n skippedNodeIds: string[];\n}\n\n/** Available router that cannot make a deterministic choice from the current snapshot. */\nexport interface UnresolvedRouterResolution {\n /** Why the router remains available for a later drain pass. */\n unresolved: \"not-ready\" | \"no-match\";\n}\n\n/**\n * Resolve the first matching route for a router that is currently available.\n *\n * Route conditions use the same bounded context as node preconditions and bindings. Resolution\n * is deliberately separate from state computation: unavailable routers return `undefined`\n * without evaluating any route. Losing route targets and their exclusive downstream paths are\n * returned for the caller to mark skipped. Exclusivity follows hard `flow` edges only and keeps\n * selected routes, unsettled-router targets, shared convergence, and externally reachable nodes\n * live. A declared producer output that is not complete yet returns a retryable unresolved result;\n * malformed expressions still throw their path-bearing evaluator error.\n *\n * @param flow - Parsed flow containing the router and branch graph.\n * @param routerNodeId - Router execution identity.\n * @param snapshots - Current node snapshots used for admission and expression values.\n * @returns The selected target and losing nodes, an unresolved reason while available but not\n * decidable, or `undefined` while the router is unavailable.\n */\nexport function resolveAvailableRouter(\n flow: FlowDefinition,\n routerNodeId: string,\n snapshots: Map<string, NodeExecutionSnapshot>,\n): RouterResolution | UnresolvedRouterResolution | undefined {\n const router = flow.nodes.find((node) => node.id === routerNodeId);\n if (!router || !isRouterNode(router)) return undefined;\n const state = computeFlowStateFromSnapshots(flow, snapshots);\n if (!state.available.includes(routerNodeId)) return undefined;\n\n const selected = evaluateRouterSelection(flow, router, snapshots);\n if (\"unresolved\" in selected) return selected;\n\n return {\n selectedTarget: selected.selectedTarget,\n skippedNodeIds: planRouterSkips(flow, snapshots, [\n { routerNodeId, selectedTarget: selected.selectedTarget },\n ]),\n };\n}\n\n/**\n * Compute the full {@link FlowState} from a flow definition and caller-supplied node ID sets.\n *\n * This is the primary engine function. It is stateless and side-effect-free — calling it\n * twice with the same arguments always returns an equivalent result.\n *\n * Edge semantics applied during computation:\n * - `'flow'` — hard dependency: target cannot start until source is `complete` or `skipped`.\n * - `'parallel'` — soft dependency: target may run while source is still running.\n * - `'optional'` — advisory: target can start regardless of source state.\n *\n * A node is `available` when every incoming `'flow'`-type edge has a complete or skipped source\n * and every authored precondition evaluates true.\n * A node is `not_started` when at least one hard predecessor is still pending.\n * The flow is `done` when every non-optional node is `complete` or `skipped`.\n *\n * This set-based overload has statuses but no completed output fields. Use\n * {@link computeFlowStateFromSnapshots} when a precondition reads node output.\n *\n * Prefer {@link computeFlowStateFromSnapshots} for callers that track full `NodeExecution`\n * state (interaction statuses such as `awaiting_approval`, `awaiting_input`, `failed`).\n *\n * @param flow - The parsed flow definition.\n * @param completedIds - Set of node IDs that have finished successfully.\n * @param runningIds - Set of node IDs currently executing. Defaults to an empty set.\n * @param skippedIds - Set of node IDs that were explicitly skipped. Skipped nodes count\n * as satisfied for downstream dependency checks. Defaults to an empty set.\n * @returns A {@link FlowState} describing every active runtime node.\n * @docLink packages/flow-engine/concepts#compute-flow-state\n */\nexport function computeFlowState(\n flow: FlowDefinition,\n completedIds: Set<string>,\n runningIds: Set<string> = new Set(),\n skippedIds: Set<string> = new Set(),\n): FlowState {\n const nodes = activeRuntimeNodes(flow);\n const incoming = buildIncoming(flow.edges);\n const snapshots = new Map<string, NodeExecutionSnapshot>();\n for (const node of nodes) {\n const status: NodeStatus = completedIds.has(node.id)\n ? \"complete\"\n : runningIds.has(node.id)\n ? \"running\"\n : skippedIds.has(node.id)\n ? \"skipped\"\n : \"not_started\";\n snapshots.set(node.id, { status });\n }\n const gatedBranches = unsettledRouterBranchIds(flow, snapshots);\n const context = buildFlowExpressionContext(flow, snapshots);\n\n const nodeStates: NodeState[] = nodes.map((node) => {\n const optional = nodeIsOptional(node);\n const skillId = nodeSkillId(node);\n const label = nodeLabel(node);\n\n if (completedIds.has(node.id)) {\n return {\n nodeId: node.id,\n skillId,\n label,\n status: \"complete\",\n optional,\n canRun: false,\n blockers: [],\n failedPreconditions: [],\n };\n }\n if (runningIds.has(node.id)) {\n return {\n nodeId: node.id,\n skillId,\n label,\n status: \"running\",\n optional,\n canRun: false,\n blockers: [],\n failedPreconditions: [],\n };\n }\n if (skippedIds.has(node.id)) {\n return {\n nodeId: node.id,\n skillId,\n label,\n status: \"skipped\",\n optional,\n canRun: false,\n blockers: [],\n failedPreconditions: [],\n };\n }\n\n if (gatedBranches.has(node.id)) {\n return {\n nodeId: node.id,\n skillId,\n label,\n status: \"not_started\",\n optional,\n canRun: false,\n blockers: [],\n failedPreconditions: [],\n };\n }\n\n const edges = incoming.get(node.id) ?? [];\n\n // Hard blockers: flow-type edges whose source is neither complete nor skipped\n const hardBlockers = edges\n .filter((e) => e.type === \"flow\")\n .filter((e) => !completedIds.has(e.source) && !skippedIds.has(e.source))\n .map((e) => e.source);\n\n const preconditionFailures = failedPreconditions(node, context);\n const canRun = hardBlockers.length === 0 && preconditionFailures.length === 0;\n\n let status: NodeStatus;\n if (!canRun) {\n status = \"not_started\";\n } else {\n status = \"available\";\n }\n\n return {\n nodeId: node.id,\n skillId,\n label,\n status,\n optional,\n canRun,\n blockers: hardBlockers,\n failedPreconditions: preconditionFailures,\n };\n });\n\n const _stateMap = new Map(nodeStates.map((s) => [s.nodeId, s]));\n\n const available = nodeStates.filter((s) => s.status === \"available\").map((s) => s.nodeId);\n const completed = nodeStates.filter((s) => s.status === \"complete\").map((s) => s.nodeId);\n const focus = nodeStates\n .filter(\n (s) =>\n s.status === \"running\" || s.status === \"awaiting_approval\" || s.status === \"awaiting_input\",\n )\n .map((s) => s.nodeId);\n\n // Flow is done when all required nodes are complete or skipped\n const requiredNodes = nodes.filter((n) => !nodeIsOptional(n));\n const done = requiredNodes.every((n) => completedIds.has(n.id) || skippedIds.has(n.id));\n\n return { flowId: flow.id, nodes: nodeStates, available, completed, focus, done };\n}\n\n/**\n * Snapshot-based variant of {@link computeFlowState}.\n *\n * Accepts a map of `NodeExecutionSnapshot` values carrying the current status and\n * interaction metadata for every node the caller knows about. Nodes absent from the\n * map are treated as `not_started`.\n *\n * This is the preferred API for the turn-based runner, which has a full `FlowExecution`\n * and needs to convey richer statuses (`awaiting_approval`, `awaiting_input`, `failed`)\n * back to the engine so downstream availability is computed correctly.\n *\n * Engine semantics:\n * - A node is `available` when all its incoming `'flow'`-type predecessors are `complete`\n * or `skipped`. Any other upstream status — including `awaiting_approval`,\n * `awaiting_input`, and `failed` — is treated as blocking. Every authored precondition\n * must also evaluate true against the snapshot expression context.\n * - A `failed` optional node does **not** block its dependents.\n * - The flow is `done` when every non-optional node is `complete` or `skipped`. A single\n * required node stuck in `failed` keeps `done` false.\n *\n * @param flow - The parsed flow definition.\n * @param snapshots - Map from node ID to its current {@link NodeExecutionSnapshot}.\n * Missing entries default to `not_started` with no interaction metadata.\n * @returns A {@link FlowState} describing every active runtime node,\n * including interaction fields (`approval`, `input`, `output`, `error`) copied\n * from the matching snapshot.\n * @docLink packages/flow-engine/concepts#compute-flow-state-from-snapshots\n */\nexport function computeFlowStateFromSnapshots(\n flow: FlowDefinition,\n snapshots: Map<string, NodeExecutionSnapshot>,\n): FlowState {\n const nodes = activeRuntimeNodes(flow);\n const incoming = buildIncoming(flow.edges);\n const gatedBranches = unsettledRouterBranchIds(flow, snapshots);\n const context = buildFlowExpressionContext(flow, snapshots);\n\n /** Resolve the effective status for a node — defaulting to `not_started`. */\n const statusFor = (nodeId: string): NodeStatus => snapshots.get(nodeId)?.status ?? \"not_started\";\n\n /** A predecessor \"passes\" when it is complete or skipped. */\n const passed = (nodeId: string): boolean => {\n const s = statusFor(nodeId);\n return s === \"complete\" || s === \"skipped\";\n };\n\n const nodeStates: NodeState[] = nodes.map((node) => {\n const snapshot = snapshots.get(node.id);\n const optional = nodeIsOptional(node);\n const skillId = nodeSkillId(node);\n const label = nodeLabel(node);\n const status = snapshot?.status ?? \"not_started\";\n\n const edges = incoming.get(node.id) ?? [];\n const flowPreds = edges.filter((e) => e.type === \"flow\");\n const hardBlockers = flowPreds.filter((e) => !passed(e.source)).map((e) => e.source);\n\n const isAdmissionState = status === \"not_started\" || status === \"available\";\n const preconditionFailures = isAdmissionState ? failedPreconditions(node, context) : [];\n\n // Recompute admission in both directions after fresh start or hydrate.\n let effectiveStatus: NodeStatus = status;\n if (isAdmissionState && gatedBranches.has(node.id)) {\n effectiveStatus = \"not_started\";\n } else if (isAdmissionState) {\n effectiveStatus =\n hardBlockers.length === 0 && preconditionFailures.length === 0\n ? \"available\"\n : \"not_started\";\n }\n\n return {\n nodeId: node.id,\n skillId,\n label,\n status: effectiveStatus,\n optional,\n canRun:\n hardBlockers.length === 0 &&\n preconditionFailures.length === 0 &&\n effectiveStatus === \"available\",\n blockers: hardBlockers,\n failedPreconditions: preconditionFailures,\n approval: snapshot?.approval,\n input: snapshot?.input,\n output: snapshot?.output,\n error: snapshot?.error,\n };\n });\n\n const available = nodeStates.filter((s) => s.status === \"available\").map((s) => s.nodeId);\n const completed = nodeStates.filter((s) => s.status === \"complete\").map((s) => s.nodeId);\n const focus = nodeStates\n .filter(\n (s) =>\n s.status === \"running\" || s.status === \"awaiting_approval\" || s.status === \"awaiting_input\",\n )\n .map((s) => s.nodeId);\n\n const requiredNodes = nodes.filter((n) => !nodeIsOptional(n));\n const done = requiredNodes.every((n) => {\n const s = statusFor(n.id);\n return s === \"complete\" || s === \"skipped\";\n });\n\n return { flowId: flow.id, nodes: nodeStates, available, completed, focus, done };\n}\n\n/**\n * Returns `true` when the given status prevents downstream nodes from starting.\n *\n * Only `'complete'` and `'skipped'` satisfy a hard (`'flow'`-type) edge dependency.\n * All other statuses — including `'awaiting_approval'`, `'awaiting_input'`, and\n * `'failed'` — are considered blocking.\n *\n * Use this helper in the FlowAdapter and the turn-based orchestrator instead of\n * hard-coding the two-value whitelist inline.\n *\n * @param status - The {@link NodeStatus} to evaluate.\n * @returns `true` if the status prevents dependents from becoming `available`.\n * @docLink packages/flow-engine/concepts#is-blocking\n */\nexport function isBlocking(status: NodeStatus): boolean {\n return status !== \"complete\" && status !== \"skipped\";\n}\n\n/**\n * Returns the IDs of nodes that become newly `available` after a specific node completes.\n *\n * More efficient than recomputing the full {@link FlowState} when only the downstream\n * impact of a single completion is needed. Only the direct successors of `justCompleted`\n * are evaluated — the rest of the graph is untouched.\n *\n * @param flow - The parsed flow definition.\n * @param justCompleted - ID of the node that just finished (will be added to the\n * effective completed set before evaluating successors).\n * @param completedIds - Set of node IDs already known to be complete before this call.\n * @param skippedIds - Set of node IDs that were explicitly skipped. Defaults to an empty set.\n * @returns Array of node IDs whose hard dependencies are now fully satisfied and that\n * were not already available before `justCompleted` finished. Unlike executable-node-filtered\n * helpers, this walks raw edge targets and does not filter by node type — if a `group`,\n * `sub-flow`, or `router` node is a direct successor, its ID can appear here. Callers that\n * dispatch these IDs are responsible for filtering inert nodes.\n * @docLink packages/flow-engine/concepts#resolve-next-nodes\n */\nexport function resolveNextNodes(\n flow: FlowDefinition,\n justCompleted: string,\n completedIds: Set<string>,\n skippedIds: Set<string> = new Set(),\n): string[] {\n const outgoing = buildOutgoing(flow.edges);\n const incoming = buildIncoming(flow.edges);\n const candidates = (outgoing.get(justCompleted) ?? []).map((e) => e.target);\n\n const nextCompleted = new Set([...completedIds, justCompleted]);\n const result: string[] = [];\n\n for (const candidateId of candidates) {\n const edges = incoming.get(candidateId) ?? [];\n const hardBlockers = edges\n .filter((e) => e.type === \"flow\")\n .filter((e) => !nextCompleted.has(e.source) && !skippedIds.has(e.source));\n if (hardBlockers.length === 0) {\n result.push(candidateId);\n }\n }\n\n return result;\n}\n\n/**\n * Returns the IDs of optional nodes that have not yet started and can be safely skipped.\n *\n * A node is skippable when it is:\n * 1. Not yet complete (absent from `completedIds`).\n * 2. Marked `optional` (`FlowNode.data.optional === true`).\n * 3. Not connected via a `'flow'`-type edge to any non-optional downstream node\n * (i.e. skipping it cannot starve a required node of a hard dependency).\n *\n * The runner may call this to present the user with a list of nodes they can bypass\n * without breaking the flow's required path.\n *\n * @param flow - The parsed flow definition.\n * @param completedIds - Set of node IDs that have already completed (excluded from results).\n * @returns Array of node IDs that are safe to skip at this point in the execution.\n * @docLink packages/flow-engine/concepts#compute-skippable\n */\nexport function computeSkippable(flow: FlowDefinition, completedIds: Set<string>): string[] {\n const nodes = activeRuntimeNodes(flow);\n const outgoing = buildOutgoing(flow.edges);\n\n return nodes\n .filter((n) => !completedIds.has(n.id))\n .filter(nodeIsOptional)\n .filter((n) => {\n // A node is skippable if none of its outgoing flow-type edges go to a required node\n const deps = (outgoing.get(n.id) ?? []).filter((e) => e.type === \"flow\");\n return deps.every((e) => {\n const target = flow.nodes.find((t) => t.id === e.target);\n return target ? nodeIsOptional(target) : false;\n });\n })\n .map((n) => n.id);\n}\n","import * as z from \"zod\";\nimport { collectFlowBindingExpressions, inspectFlowExpression } from \"../contract/expression.js\";\nimport type { FlowDefinition, FlowNode } from \"./types.js\";\n\n/** Result of validating fields at a producer's consumed-output boundary. */\nexport interface NodeOutputValidationResult {\n /** Whether the fields may be exposed to downstream consumers. */\n valid: boolean;\n /** Stable, path-bearing failures. Empty when validation is not required. */\n issues: string[];\n}\n\nfunction consumerExpressions(node: FlowNode): string[] {\n const expressions = (node.contract?.requires ?? []).map(({ expr }) => expr);\n expressions.push(...collectFlowBindingExpressions(node.contract?.input));\n if (node.run?.kind === \"router\") {\n expressions.push(...node.run.routes.map(({ when }) => when));\n }\n return expressions;\n}\n\nfunction readsProducerOutput(node: FlowNode, producerId: string): boolean {\n return consumerExpressions(node).some((expression) =>\n inspectFlowExpression(expression, false).some(({ path }) =>\n path.startsWith(`nodes.${producerId}.output.fields.`),\n ),\n );\n}\n\n/**\n * Return a producer's declared fields schema only when another node reads it.\n *\n * Consumption is deliberately limited to preconditions, named bindings, and\n * router conditions. Status reads and unreferenced declarations remain prose-only.\n */\nexport function getConsumedOutputSchema(\n flow: FlowDefinition,\n producerId: string,\n): Record<string, unknown> | undefined {\n const producer = flow.nodes.find(({ id }) => id === producerId);\n const schema = producer?.contract?.output?.fields;\n if (!schema) return undefined;\n return flow.nodes.some(\n (consumer) => consumer.id !== producerId && readsProducerOutput(consumer, producerId),\n )\n ? schema\n : undefined;\n}\n\n/** Validate proposed fields only when a downstream deterministic consumer requires them. */\nexport function validateConsumedNodeOutput(\n flow: FlowDefinition,\n producerId: string,\n fields: Record<string, unknown> | undefined,\n): NodeOutputValidationResult {\n const schema = getConsumedOutputSchema(flow, producerId);\n if (!schema) return { valid: true, issues: [] };\n\n try {\n const validator = z.fromJSONSchema(schema as Parameters<typeof z.fromJSONSchema>[0]);\n const parsed = validator.safeParse(fields ?? {});\n if (parsed.success) return { valid: true, issues: [] };\n return {\n valid: false,\n issues: parsed.error.issues\n .map((issue) => {\n const suffix = issue.path.map(String).join(\".\");\n return `fields${suffix ? `.${suffix}` : \"\"}: ${issue.message}`;\n })\n .sort(),\n };\n } catch (error) {\n return {\n valid: false,\n issues: [\n `fields: invalid authored JSON Schema: ${\n error instanceof Error ? error.message : String(error)\n }`,\n ],\n };\n }\n}\n","/**\n * Pure derived-deadline arithmetic for `control.timeoutSec`.\n *\n * \"Active execution only\" is the scope every node-timeout ruling shares: the\n * clock runs from `startedAt` but stops counting while the node was parked\n * for a human decision. Rather than persist a separate \"paused\" duration,\n * this module recomputes the deadline on demand from `startedAt` plus the\n * already-durable `approvalHistory` / `inputHistory` — so it is correct\n * immediately after `hydrate()` or a reconnect with no extra wiring, and a\n * live timer is never the source of truth.\n *\n * @docLink packages/flow-engine/concepts#node-deadline\n */\n\nimport type { NodeExecution } from \"@skaile/workspaces/types\";\n\n/** Milliseconds spent parked in a resolved approval/input wait since `sinceMs`. */\nfunction pausedIntervalMs(execution: NodeExecution, sinceMs: number): number {\n let total = 0;\n for (const approval of execution.approvalHistory) {\n const startMs = Date.parse(approval.requestedAt);\n if (!Number.isFinite(startMs) || startMs < sinceMs) continue;\n if (!approval.decidedAt) continue; // still open — status wouldn't be \"running\" here\n const endMs = Date.parse(approval.decidedAt);\n if (Number.isFinite(endMs) && endMs > startMs) total += endMs - startMs;\n }\n for (const input of execution.inputHistory) {\n const startMs = Date.parse(input.requestedAt);\n if (!Number.isFinite(startMs) || startMs < sinceMs) continue;\n if (!input.providedAt) continue;\n const endMs = Date.parse(input.providedAt);\n if (Number.isFinite(endMs) && endMs > startMs) total += endMs - startMs;\n }\n return total;\n}\n\n/**\n * Milliseconds remaining before `execution`'s active-execution deadline, given\n * `timeoutSec`. Negative once the deadline has passed. `undefined` when no\n * timeout applies — `timeoutSec` is unset, or the node has no `startedAt` to\n * measure from (e.g. it hasn't actually started).\n *\n * Active time is wall-clock since `startedAt` minus every *resolved*\n * approval/input interval recorded at or after that `startedAt` (an\n * interval opened before a retry's fresh `startedAt` never counts against\n * the new attempt; a still-open interval never counts because the node\n * would not be `running` while parked).\n *\n * @param execution - Current node snapshot. Only `startedAt`, `approvalHistory`,\n * and `inputHistory` are read.\n * @param timeoutSec - Authored `control.timeoutSec`, or `undefined` for no timeout.\n * @param nowMs - Caller-supplied wall clock (`Date.now()` in production, injectable\n * for tests).\n * @docLink packages/flow-engine/concepts#remaining-active-execution-ms\n */\nexport function remainingActiveExecutionMs(\n execution: NodeExecution,\n timeoutSec: number | undefined,\n nowMs: number,\n): number | undefined {\n if (timeoutSec === undefined || !execution.startedAt) return undefined;\n const startedAtMs = Date.parse(execution.startedAt);\n if (!Number.isFinite(startedAtMs)) return undefined;\n const pausedMs = pausedIntervalMs(execution, startedAtMs);\n const deadlineMs = startedAtMs + timeoutSec * 1000 + pausedMs;\n return deadlineMs - nowMs;\n}\n\n/**\n * Whether `execution` has exceeded its derived active-execution deadline.\n * `false` when no timeout applies. Convenience wrapper over\n * {@link remainingActiveExecutionMs} for call sites that only need the\n * boolean.\n *\n * @docLink packages/flow-engine/concepts#is-active-execution-expired\n */\nexport function isActiveExecutionExpired(\n execution: NodeExecution,\n timeoutSec: number | undefined,\n nowMs: number,\n): boolean {\n const remaining = remainingActiveExecutionMs(execution, timeoutSec, nowMs);\n return remaining !== undefined && remaining <= 0;\n}\n","/**\n * Pure bookkeeping for `NodeExecution.outputHistory` and the bounded\n * automatic-retry budget derived from `control.retries`.\n *\n * `retries: N` means the first attempt plus N automatic retries — so an\n * automatic retry remains available while fewer than N attempts have\n * already failed. The budget is derived from `outputHistory` itself (a\n * count of prior `'failed'` entries) rather than a separate durable\n * counter, so it composes for free with hydration and needs no new field.\n *\n * The manual `retryNode` operator override never pushes an entry here (it\n * only flips `status` back to `available`). The agent's own\n * `doFailNode(recoverable: true)` self-retry DOES push an entry — every\n * actual start closes out an attempt — but marks it `selfRetry` so\n * `countFailedAttempts` excludes it: neither self-retry nor the manual\n * override consumes the automatic budget this module tracks.\n *\n * @docLink packages/flow-engine/concepts#node-attempts\n */\n\nimport type {\n CheckEvidence,\n NodeError,\n NodeExecutionAttempt,\n NodeOutput,\n} from \"@skaile/workspaces/types\";\n\n/** Next 1-based attempt number given the attempts already recorded. */\nexport function nextAttemptNumber(history: NodeExecutionAttempt[] | undefined): number {\n if (!history || history.length === 0) return 1;\n return Math.max(...history.map((entry) => entry.attempt)) + 1;\n}\n\n/** Rarely-set trailing facts about one appended attempt. */\nexport interface AppendAttemptOptions {\n /** True for the agent's own `doFailNode(recoverable: true)` self-retry: the\n * entry still records a genuine start-to-failure attempt, but is excluded\n * from {@link countFailedAttempts} so it never consumes the automatic\n * `control.retries` budget. */\n selfRetry?: boolean;\n /** Derived check evidence, when this attempt belongs to a `check` node that\n * actually produced a verdict (pass or fail). Omit for every other node\n * kind and for a check's infrastructure failure, which produced no verdict\n * to attach. */\n check?: CheckEvidence;\n}\n\n/**\n * Appends one terminal attempt to `history`, numbered `max(attempt) + 1`.\n * Never mutates `history` — returns a fresh array so callers can assign it\n * straight onto a cloned `NodeExecution`.\n *\n * @param history - Existing attempt history, oldest first (or `undefined`).\n * @param result - True outcome of this attempt — independent of any\n * compatibility status degrade the caller applies separately (e.g. an\n * optional node's failed execution still records `'failed'` here even\n * though its `NodeExecution.status` becomes `'skipped'`).\n * @param startedAtIso - This attempt's actual start time.\n * @param completedAtIso - This attempt's terminal outcome time.\n * @param options - See {@link AppendAttemptOptions}. Both fields default to absent.\n * @docLink packages/flow-engine/concepts#append-attempt\n */\nexport function appendAttempt(\n history: NodeExecutionAttempt[] | undefined,\n result: NodeExecutionAttempt[\"result\"],\n startedAtIso: string,\n completedAtIso: string,\n output: NodeOutput | undefined,\n error: NodeError | undefined,\n options: AppendAttemptOptions = {},\n): NodeExecutionAttempt[] {\n const attempt: NodeExecutionAttempt = {\n attempt: nextAttemptNumber(history),\n result,\n startedAt: startedAtIso,\n completedAt: completedAtIso,\n ...(output !== undefined ? { output } : {}),\n ...(error !== undefined ? { error } : {}),\n ...(options.selfRetry ? { selfRetry: true } : {}),\n ...(options.check !== undefined ? { check: options.check } : {}),\n };\n return [...(history ?? []), attempt];\n}\n\n/**\n * Count of attempts in `history` whose true outcome was `'failed'`,\n * excluding self-retry entries (see {@link appendAttempt}) — this feeds only\n * the automatic-retry budget, which self-retry sits outside of.\n */\nexport function countFailedAttempts(history: NodeExecutionAttempt[] | undefined): number {\n if (!history) return 0;\n return history.filter((entry) => entry.result === \"failed\" && !entry.selfRetry).length;\n}\n\n/**\n * Whether an automatic retry remains, given how many attempts have already\n * failed and the authored `control.retries` budget. `retries: N` allows the\n * first attempt plus N automatic retries — so a retry remains available\n * while `priorFailedAttempts < N`. No `retries` (or `0`) means no automatic\n * retry ever.\n *\n * @docLink packages/flow-engine/concepts#has-automatic-retry-budget\n */\nexport function hasAutomaticRetryBudget(\n priorFailedAttempts: number,\n retries: number | undefined,\n): boolean {\n if (!retries) return false;\n return priorFailedAttempts < retries;\n}\n","/**\n * Pure derivation of a `check` node's evidence payload — what was compared,\n * where each value came from, and whether that makes the verdict\n * runtime-`\"verified\"` or agent-`\"asserted\"`.\n *\n * Ruling: re-running a check is not required to reproduce the same answer,\n * so there is no snapshot materialization, no hashing, and no reproducibility\n * guarantee here — this module records integrity of *what was observed*, not\n * a promise that observing it again would agree. Provenance is derived\n * exclusively from {@link BindingOrigin.obtainedBy}, the flow engine's\n * existing (and only) provenance mechanism, so it can never be influenced by\n * how a flow author names a binding. The check is one-hop only — see\n * {@link CheckEvidence} for what that does and does not claim.\n *\n * No I/O and no clock: `observedAt` is supplied by the caller so this stays\n * trivially testable and replayable.\n *\n * @docLink packages/flow-engine/concepts#check-provenance\n */\n\nimport type {\n BindingOrigin,\n CheckComparedValue,\n CheckEvidence,\n CheckInputCurrency,\n CheckProvenance,\n} from \"@skaile/workspaces/types\";\nimport type { ResolvedNodeBindings } from \"../contract/expression.js\";\n\n/** The check's process facts, captured alongside its verdict so a persisted attempt is self-describing. */\nexport interface CheckProcessRecord {\n runtime: \"shell\" | \"node\" | \"python\";\n command: string;\n cwd?: string;\n successExit: number[];\n exitStatus: number;\n passed: boolean;\n}\n\nconst FLOW_LOCAL_SOURCES = new Set<BindingOrigin[\"source\"]>([\"literal\", \"default\", \"flow-input\"]);\n\n/**\n * Derive one check's evidence from its already-resolved bindings and its\n * process outcome. `provenance` and `inputs` are computed only from\n * `bindings.origins` — never from `bindings.values` or their names — so\n * authoring a binding literally named `provenance` or `verified` cannot\n * influence the verdict.\n *\n * `provenance` is `\"verified\"` iff every origin of every compared value has\n * `obtainedBy: \"runtime\"`, `\"asserted\"` if any does not, and **absent** when\n * there are no compared values — neither label is honest about an empty set.\n * `inputs` is `\"live\"` — the floor for any check that runs a process —\n * unless there is at least one compared value and every one of them has\n * origins that are all `literal`/`default`/`flow-input`, in which case it is\n * `\"flow-local\"`.\n */\nexport function deriveCheckEvidence(\n bindings: ResolvedNodeBindings,\n process: CheckProcessRecord,\n observedAt: string,\n): CheckEvidence {\n const values: CheckComparedValue[] = Object.entries(bindings.values).map(([name, value]) => {\n const origins = bindings.origins[name] ?? [];\n const obtainedBy = origins.some((origin) => origin.obtainedBy === \"agent\")\n ? \"agent\"\n : \"runtime\";\n return { name, value, origins, obtainedBy };\n });\n const provenance: CheckProvenance | undefined =\n values.length === 0\n ? undefined\n : values.every((compared) => compared.obtainedBy === \"runtime\")\n ? \"verified\"\n : \"asserted\";\n const inputs: CheckInputCurrency =\n values.length > 0 &&\n values.every((compared) =>\n compared.origins.every((origin) => FLOW_LOCAL_SOURCES.has(origin.source)),\n )\n ? \"flow-local\"\n : \"live\";\n return {\n values,\n ...(provenance !== undefined ? { provenance } : {}),\n inputs,\n observedAt,\n ...process,\n };\n}\n","/**\n * Flow manifest schema and validation.\n *\n * Moved from @skaile/workspaces/types/manifests/flow.ts in Phase 1.7.3.\n * This is now the canonical location for flow manifest validation.\n */\n\nimport * as z from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Validation result (inline — avoids importing from types/manifests/_shared)\n// ---------------------------------------------------------------------------\n\nexport interface ManifestValidationSuccess<T> {\n ok: true;\n data: T;\n}\n\nexport interface ManifestValidationFailure {\n ok: false;\n errors: Array<{ path: string; message: string }>;\n}\n\nexport type ManifestValidationResult<T> = ManifestValidationSuccess<T> | ManifestValidationFailure;\n\n// ---------------------------------------------------------------------------\n// Schema\n// ---------------------------------------------------------------------------\n\nconst FlowNodeSchema = z.looseObject({\n id: z.string().min(1),\n skill: z.string().optional(),\n type: z.string().optional(),\n label: z.string().optional(),\n description: z.string().optional(),\n data: z\n .looseObject({\n optional: z.boolean().optional(),\n // Mandatory approval gate — autonomous mode cannot skip it.\n approval: z.looseObject({ mandatory: z.boolean().optional() }).optional(),\n })\n .refine((d) => !(d.optional === true && d.approval?.mandatory === true), {\n // A mandatory gate can never be skipped, so optional+mandatory is a\n // contradiction — reject it rather than silently letting mandatory win.\n message: \"a node cannot be both optional and a mandatory approval gate\",\n })\n .optional(),\n});\n\nconst FlowEdgeSchema = z.looseObject({\n id: z.string().optional(),\n source: z.string().min(1),\n target: z.string().min(1),\n condition: z.string().optional(),\n});\n\nexport const FlowManifestSchema = z.looseObject({\n id: z.string().min(1),\n version: z.string().optional(),\n name: z.string().min(1),\n description: z.string().optional(),\n metadata: z\n .looseObject({\n tags: z.array(z.string()).optional(),\n stage: z.string().optional(),\n icon: z.string().optional(),\n category: z.string().optional(),\n onboarding: z.record(z.string(), z.unknown()).optional(),\n })\n .optional(),\n globals: z.record(z.string(), z.unknown()).optional(),\n modes: z.record(z.string(), z.unknown()).optional(),\n tier_presets: z.record(z.string(), z.record(z.string(), z.unknown())).optional(),\n artifact_handoff: z.unknown().optional(),\n entry: z.string().optional(),\n nodes: z.array(FlowNodeSchema).optional(),\n edges: z.array(FlowEdgeSchema).optional(),\n});\n\nexport type FlowManifest = z.infer<typeof FlowManifestSchema>;\n\n// ---------------------------------------------------------------------------\n// Validation\n// ---------------------------------------------------------------------------\n\nexport function validateFlow(data: unknown): ManifestValidationResult<FlowManifest> {\n const result = FlowManifestSchema.safeParse(data);\n if (result.success) {\n return { ok: true, data: result.data };\n }\n return {\n ok: false,\n errors: result.error.issues.map((issue) => ({\n path: issue.path.join(\".\"),\n message: issue.message,\n })),\n };\n}\n","/**\n * Flow asset kind provider.\n *\n * Exported from @skaile/workspaces/factory-assets/connectors/flow/engine for explicit registration\n * by the CLI at bootstrap. Discovery does NOT auto-include this provider\n * (discovery must stay a leaf — no flow-engine imports).\n *\n * Implements IAssetKindProvider with flow-specific:\n * - Discovery patterns: *.flow.yaml, *.flow.json\n * - Manifest validation via FlowManifestSchema\n * - Requires extraction: nodes[].run.assets plus legacy skill/sub-flow references\n * - File filter: just the manifest file (flows are single-file)\n */\n\nimport * as path from \"node:path\";\nimport type {\n AssetKindFileFilter,\n AssetKindRequiresEdge,\n IAssetKindProvider,\n} from \"@skaile/workspaces/plugins\";\nimport { validateFlow } from \"./flow-manifest.js\";\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\nexport const flowKindProvider: IAssetKindProvider = {\n kind: \"flow\",\n displayName: \"Flow\",\n providerVersion: \"1.1.0\",\n discoveryPatterns: [\"**/*.flow.yaml\", \"**/*.flow.json\"],\n\n matchesPath(relativePath: string): boolean {\n return relativePath.endsWith(\".flow.yaml\") || relativePath.endsWith(\".flow.json\");\n },\n\n validateManifest(data: unknown) {\n return validateFlow(data);\n },\n\n defaultFileFilter(manifestPath: string): AssetKindFileFilter {\n return {\n assetRoot: path.dirname(manifestPath),\n files: [path.basename(manifestPath)],\n };\n },\n\n extractRequires(assetRef: string, manifest: Record<string, unknown>): AssetKindRequiresEdge[] {\n const edges: AssetKindRequiresEdge[] = [];\n const seen = new Set<string>();\n const add = (to: string, field: string): void => {\n if (seen.has(to)) return;\n seen.add(to);\n edges.push({ from: assetRef, to, field });\n };\n\n const nodes = manifest.nodes;\n if (Array.isArray(nodes)) {\n for (const node of nodes) {\n if (typeof node !== \"object\" || node === null) continue;\n const n = node as Record<string, unknown>;\n const data = (\n typeof n.data === \"object\" && n.data !== null ? (n.data as Record<string, unknown>) : {}\n ) as Record<string, unknown>;\n const run =\n typeof n.run === \"object\" && n.run !== null ? (n.run as Record<string, unknown>) : {};\n\n if (Array.isArray(run.assets)) {\n for (const asset of run.assets) {\n if (typeof asset === \"string\") add(asset, \"nodes[].run.assets\");\n }\n }\n\n if (run.kind === \"sub-flow\" && typeof run.flow === \"string\") {\n const flowRef = run.flow.startsWith(\"flow:\") ? run.flow : `flow:${run.flow}`;\n add(flowRef, \"nodes[].run.flow\");\n }\n\n const skill = typeof data.skill === \"string\" ? data.skill : n.skill;\n if (typeof skill === \"string\") {\n add(skill, \"nodes[].data.skill\");\n }\n\n const subFlow = typeof data.flow === \"string\" ? data.flow : n.flow;\n if (typeof subFlow === \"string\") {\n add(subFlow.startsWith(\"flow:\") ? subFlow : `flow:${subFlow}`, \"nodes[].data.flow\");\n }\n }\n }\n\n return edges;\n },\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { assetSearchDirs } from \"@skaile/workspaces/core\";\nimport { parse as parseYaml } from \"yaml\";\nimport { parseFlowDefinition } from \"../contract/normalize.js\";\nimport type { FlowDefinition } from \"./types.js\";\n\n/**\n * Load a single {@link FlowDefinition} from a YAML or JSON file on disk.\n *\n * Format detection is based on file extension:\n * - `.yaml` / `.yml` — parsed with the `yaml` library.\n * - Everything else — parsed as JSON.\n *\n * @param filePath - Absolute path to the flow file.\n * @returns The parsed {@link FlowDefinition}.\n * @throws {Error} If the file does not exist, cannot be read, or fails to parse.\n * @docLink packages/flow-engine/concepts#flow-loading\n */\nexport function loadFlow(filePath: string): FlowDefinition {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const ext = path.extname(filePath).toLowerCase();\n const authored = ext === \".yaml\" || ext === \".yml\" ? parseYaml(raw) : JSON.parse(raw);\n const parsed = parseFlowDefinition(authored);\n if (!parsed.ok) {\n const details = parsed.errors\n .map((issue) => ` ${issue.path || \"<root>\"}: ${issue.message}`)\n .join(\"\\n\");\n throw new Error(`Invalid flow definition:\\n${details}`);\n }\n return parsed.data;\n}\n\n/**\n * Load all `*.flow.yaml` and legacy `*.flow.json` / `*.json` flow files from a directory.\n *\n * Files that fail to parse are skipped with a warning written to `stderr` — they do not\n * cause the function to throw. Files whose name starts with `_` are skipped entirely\n * (treated as drafts or disabled flows). Files missing the required `id`, `nodes`, or\n * `edges` fields are also discarded silently.\n *\n * @param dirPath - Absolute path to the directory to scan.\n * @returns Array of successfully parsed {@link FlowDefinition} objects. Empty if the\n * directory does not exist or contains no valid flow files.\n * @docLink packages/flow-engine/concepts#flow-loading\n */\nexport function loadFlowsFromDir(dirPath: string): FlowDefinition[] {\n if (!fs.existsSync(dirPath)) return [];\n\n const files = fs.readdirSync(dirPath).filter((f) => {\n if (f.startsWith(\"_\")) return false;\n return f.endsWith(\".flow.yaml\") || f.endsWith(\".flow.json\") || f.endsWith(\".json\");\n });\n\n const flows: FlowDefinition[] = [];\n\n for (const file of files) {\n try {\n const def = loadFlow(path.join(dirPath, file));\n if (def.id && def.nodes && def.edges) {\n flows.push(def);\n }\n } catch (err) {\n process.stderr.write(`[agent-flow-engine] skipping ${file}: ${(err as Error).message}\\n`);\n }\n }\n\n return flows;\n}\n\n/**\n * Discover and load all flow definitions from every domain under an `ai-assets` root.\n *\n * Walks the top-level subdirectories of `aiResourcesRoot`, looks for a `flows/`\n * subdirectory inside each domain, and delegates to {@link loadFlowsFromDir} for\n * each one found. Files prefixed with `_` are skipped (draft/disabled).\n *\n * @param aiResourcesRoot - Absolute path to the `ai-assets/` directory (or equivalent\n * resource root). Typically the `ai-assets/` folder at the monorepo root.\n * @returns Flat array of all successfully parsed {@link FlowDefinition} objects across\n * all domains. Empty if the root directory does not exist.\n * @docLink packages/flow-engine/concepts#flow-loading\n */\nexport function loadAllFlows(aiResourcesRoot: string): FlowDefinition[] {\n if (!fs.existsSync(aiResourcesRoot)) return [];\n\n // `assetSearchDirs` covers both the flat (`<root>/flows/`) and domain-nested\n // (`<root>/<domain>/flows/`) layouts via the one shared layout primitive.\n // De-dupe by id (first dir wins) so a root that happens to define a flow in\n // both layouts surfaces it once.\n const byId = new Map<string, FlowDefinition>();\n for (const { dir } of assetSearchDirs(aiResourcesRoot, \"flows\")) {\n for (const flow of loadFlowsFromDir(dir)) {\n if (!byId.has(flow.id)) byId.set(flow.id, flow);\n }\n }\n return [...byId.values()];\n}\n"]}
|