@arronqzy/blueprint-dsl 1.0.9 → 1.0.10

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lifecycle.ts","../src/node-signal.ts","../src/core/behavior-registry.ts","../src/core/executor.ts","../src/behaviors/default.ts","../src/scope-template.ts","../src/fetch-config.ts","../src/scope-autocomplete.ts","../src/incoming-node-scope.ts","../src/json-config.ts","../src/logic-config.ts","../src/clock-config.ts","../src/event-config.ts","../src/swagger.ts","../src/runtime/execution-trace.ts","../src/nodes/definitions.ts","../src/runtime/blueprint-cycle.ts","../src/runtime/clock-active-registry.ts","../src/runtime/clock-scheduler.ts","../src/runtime/graph-runner.ts"],"names":["parsed"],"mappings":"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","file":"index.cjs","sourcesContent":["/** 页面生命周期阶段 */\nexport const PAGE_LIFECYCLE_PHASES = [\n \"created\",\n \"beforeMount\",\n \"mounted\",\n \"updated\",\n \"beforeDestroy\",\n \"destroy\",\n \"activated\",\n \"deactivated\",\n /** 被其他蓝图的蓝图配置节点引用且收到真信号时触发 */\n \"blueprintActivated\",\n] as const;\n\nexport type PageLifecyclePhase = (typeof PAGE_LIFECYCLE_PHASES)[number];\n\nexport type LifecycleSignal = {\n /** 触发的生命周期枚举 */\n phase: PageLifecyclePhase;\n /** 触发时刻(Unix 毫秒时间戳) */\n timestamp: number;\n /** ISO 8601 时间字符串,便于下游节点展示或日志 */\n isoTime: string;\n};\n\nexport const PAGE_LIFECYCLE_LABELS: Record<PageLifecyclePhase, string> = {\n created: \"已创建 (created)\",\n beforeMount: \"挂载前 (beforeMount)\",\n mounted: \"已挂载 (mounted)\",\n updated: \"已更新 (updated)\",\n beforeDestroy: \"销毁前 (beforeDestroy)\",\n destroy: \"已销毁 (destroy)\",\n activated: \"已激活 (activated)\",\n deactivated: \"已停用 (deactivated)\",\n blueprintActivated: \"蓝图激活 (blueprintActivated)\",\n};\n\nexport function createLifecycleSignal(phase: PageLifecyclePhase): LifecycleSignal {\n const timestamp = Date.now();\n return {\n phase,\n timestamp,\n isoTime: new Date(timestamp).toISOString(),\n };\n}\n","import type { Value } from \"./type.js\";\n\n/** 真信号:节点正常执行完成时的输出 */\nexport type TrueSignal<T = Value> = {\n kind: \"true\";\n value: T;\n timestamp: number;\n isoTime: string;\n};\n\n/** 假信号:节点执行出错时的输出 */\nexport type FalseSignal = {\n kind: \"false\";\n error: string;\n timestamp: number;\n isoTime: string;\n};\n\nexport type NodeSignal<T = Value> = TrueSignal<T> | FalseSignal;\n\nexport function isTrueSignal<T = Value>(\n signal: unknown\n): signal is TrueSignal<T> {\n return (\n !!signal &&\n typeof signal === \"object\" &&\n (signal as TrueSignal).kind === \"true\"\n );\n}\n\nexport function isFalseSignal(signal: unknown): signal is FalseSignal {\n return (\n !!signal &&\n typeof signal === \"object\" &&\n (signal as FalseSignal).kind === \"false\"\n );\n}\n\nexport function createTrueSignal<T = Value>(value: T): TrueSignal<T> {\n const timestamp = Date.now();\n return {\n kind: \"true\",\n value,\n timestamp,\n isoTime: new Date(timestamp).toISOString(),\n };\n}\n\nexport function createFalseSignal(error: string): FalseSignal {\n const timestamp = Date.now();\n return {\n kind: \"false\",\n error,\n timestamp,\n isoTime: new Date(timestamp).toISOString(),\n };\n}\n\n/**\n * 同一输入端口连 n 条线时的「或」语义:任一为真则端口为真;\n * 若无真且存在假信号则合并为假;全无连线则为 undefined。\n */\nexport function combinePortSignalsOr(\n values: Array<Value | undefined>\n): Value | undefined {\n const defined = values.filter((value) => value !== undefined);\n if (defined.length === 0) return undefined;\n\n for (const value of defined) {\n if (isTrueSignal(value)) {\n return createTrueSignal(value.value);\n }\n }\n\n const falseSignals = defined.filter(isFalseSignal);\n if (falseSignals.length > 0) {\n return createFalseSignal(\n falseSignals.map((signal) => signal.error).join(\";\")\n );\n }\n\n return undefined;\n}\n","// behavior-registry.ts\nimport { BehaviorFn } from \"./behavior\"\n\ntype JSBehavior = {\n kind: \"js\"\n run: BehaviorFn\n}\n\ntype BlueprintBehavior = {\n kind: \"blueprint\"\n blueprintId: string\n}\n\nexport type Behavior = JSBehavior | BlueprintBehavior\n\nexport class BehaviorRegistry {\n private map = new Map<string, Behavior>()\n\n registerJS(id: string, fn: BehaviorFn) {\n this.map.set(id, { kind: \"js\", run: fn })\n }\n\n registerBlueprint(id: string, blueprintId: string) {\n this.map.set(id, { kind: \"blueprint\", blueprintId })\n }\n\n get(id: string): Behavior {\n const b = this.map.get(id)\n if (!b) throw new Error(`Behavior not found: ${id}`)\n return b\n }\n}\n","// executor.ts\nimport { BehaviorRegistry } from \"./behavior-registry\";\nimport { NodeDefinition, ExecutionToken, Value } from \"../type\";\n\nexport type ExecutorDeps = {\n getNodeDefinition(type: string): NodeDefinition;\n behaviors: BehaviorRegistry;\n\n // 蓝图 runner(给 blueprint behavior 用)\n runBlueprint: (args: {\n blueprintId: string;\n token: ExecutionToken;\n }) => Promise<void>;\n\n // 图能力(flow / data)\n getInputValue: (token: ExecutionToken, port: string) => Promise<Value>;\n setNodeOutput: (token: ExecutionToken, port: string, value: Value) => void;\n emitFlow: (token: ExecutionToken, outPort: string) => void;\n};\nexport class Executor {\n constructor(private deps: ExecutorDeps) {}\n\n async executeToken(token: ExecutionToken): Promise<void> {\n const def = this.deps.getNodeDefinition(token.nodeType)\n const behavior = this.deps.behaviors.get(def.behavior.ref)\n\n const io = {\n getInput: (name: string) =>\n this.deps.getInputValue(token, name),\n\n setOutput: (name: string, value: Value) =>\n this.deps.setNodeOutput(token, name, value),\n\n emitFlow: (port = \"out\") =>\n this.deps.emitFlow(token, port),\n }\n\n if (behavior.kind === \"js\") {\n await behavior.run({ token, io })\n return\n }\n\n if (behavior.kind === \"blueprint\") {\n await this.deps.runBlueprint({\n blueprintId: behavior.blueprintId,\n token,\n })\n return\n }\n }\n}\n","import {\n createFalseSignal,\n createTrueSignal,\n isFalseSignal,\n isTrueSignal,\n} from \"../node-signal.js\";\nimport type { LifecycleSignal } from \"../lifecycle.js\";\nimport type { ViewEventSignal } from \"../event-config.js\";\nimport { BehaviorRegistry } from \"../core/behavior-registry.js\";\n\nconst LIFECYCLE_SIGNAL_KEY = \"__lifecycleSignal\";\nconst BLUEPRINT_ACTIVATION_INPUT_KEY = \"__blueprintActivationInput\";\nconst UI_EVENT_PAYLOAD_KEY = \"__uiEventPayload\";\nconst VIEW_EVENT_SIGNAL_KEY = \"__viewEventSignal\";\n\nexport function registerDefaultBehaviors(registry: BehaviorRegistry) {\n registry.registerJS(\"logic-noop\", async ({ io }) => {\n const input = await io.getInput(\"in\");\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n } else if (isTrueSignal(input)) {\n io.setOutput(\"out\", createTrueSignal(input.value));\n } else {\n io.setOutput(\"out\", createTrueSignal(undefined));\n }\n io.emitFlow(\"out\");\n });\n\n registry.registerJS(\"lifecycle-emit\", async ({ token, io }) => {\n const lifecycle = token.scope.vars.get(LIFECYCLE_SIGNAL_KEY) as\n | LifecycleSignal\n | undefined;\n if (!lifecycle) {\n io.setOutput(\"out\", createFalseSignal(\"生命周期信号缺失\"));\n } else if (lifecycle.phase === \"blueprintActivated\") {\n io.setOutput(\n \"out\",\n createTrueSignal(token.scope.vars.get(BLUEPRINT_ACTIVATION_INPUT_KEY))\n );\n } else {\n io.setOutput(\"out\", createTrueSignal(lifecycle));\n }\n io.emitFlow(\"out\");\n });\n\n registry.registerJS(\"event-emit\", async ({ token, io }) => {\n const payload = token.scope.vars.get(VIEW_EVENT_SIGNAL_KEY) as\n | ViewEventSignal\n | undefined;\n if (!payload) {\n // 生命周期输入只负责注册,不向下游发出信号\n return;\n }\n io.setOutput(\"out\", createTrueSignal(payload));\n io.emitFlow(\"out\");\n });\n}\n\nexport {\n LIFECYCLE_SIGNAL_KEY,\n BLUEPRINT_ACTIVATION_INPUT_KEY,\n UI_EVENT_PAYLOAD_KEY,\n VIEW_EVENT_SIGNAL_KEY,\n};\n","/** 仅匹配 `{scope...}`,避免把 JSON 对象 `{ \"a\": 1 }` 误当成模板 */\nconst SCOPE_TOKEN_RE = /\\{(scope[^}]*)\\}/g;\n\nexport function hasScopeTemplate(value: string): boolean {\n SCOPE_TOKEN_RE.lastIndex = 0;\n return SCOPE_TOKEN_RE.test(value);\n}\n\nexport function evaluateScopeExpression(\n expression: string,\n scope: unknown\n): unknown {\n const trimmed = expression.trim();\n if (!trimmed) return undefined;\n try {\n const fn = new Function(\"scope\", `\"use strict\"; return (${trimmed});`);\n return fn(scope);\n } catch {\n return undefined;\n }\n}\n\nexport function stringifyScopeValue(value: unknown): string {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction isInsideJsonString(before: string): boolean {\n let inString = false;\n let escape = false;\n for (const ch of before) {\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === \"\\\\\") {\n escape = true;\n continue;\n }\n if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n }\n return inString;\n}\n\nfunction replaceScopeTokens(\n template: string,\n scope: unknown,\n replacer: (value: unknown, offset: number) => string\n): string {\n SCOPE_TOKEN_RE.lastIndex = 0;\n return template.replace(SCOPE_TOKEN_RE, (_match, rawExpr: string, offset: number) =>\n replacer(evaluateScopeExpression(rawExpr, scope), offset)\n );\n}\n\n/** 将 `{scope?.a}` 替换为求值结果;无模板时原样返回 */\nexport function evaluateScopeTemplate(template: string, scope: unknown): string {\n if (!hasScopeTemplate(template)) return template;\n return replaceScopeTokens(template, scope, (value) => stringifyScopeValue(value));\n}\n\n/**\n * 在 JSON 文本中替换 `{scope?...}`:\n * - 位于字符串内时写入转义后的内容\n * - 位于值位置时写入 JSON 字面量(对象/数组/字符串/数字)\n */\nexport function evaluateScopeTemplateInJson(template: string, scope: unknown): string {\n if (!hasScopeTemplate(template)) return template;\n return replaceScopeTokens(template, scope, (value, offset) => {\n if (isInsideJsonString(template.slice(0, offset))) {\n return JSON.stringify(stringifyScopeValue(value)).slice(1, -1);\n }\n if (value === undefined) return \"null\";\n return JSON.stringify(value);\n });\n}\n\nexport function looksLikeJsonText(text: string): boolean {\n const trimmed = text.trim();\n return trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\");\n}\n","import type { SwaggerApiEndpoint } from \"./swagger.js\";\nimport { looksLikeJsonText } from \"./scope-template.js\";\n\nexport const FETCH_HTTP_METHODS = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"HEAD\",\n \"OPTIONS\",\n] as const;\n\nexport type FetchHttpMethod = (typeof FETCH_HTTP_METHODS)[number];\n\nexport const FETCH_RESPONSE_TYPES = [\"json\", \"text\"] as const;\n\nexport type FetchResponseType = (typeof FETCH_RESPONSE_TYPES)[number];\n\nexport const FETCH_CREDENTIALS = [\"omit\", \"same-origin\", \"include\"] as const;\n\nexport const FETCH_MODES = [\"cors\", \"no-cors\", \"same-origin\", \"navigate\"] as const;\n\nexport const FETCH_CACHES = [\n \"default\",\n \"no-store\",\n \"reload\",\n \"no-cache\",\n \"force-cache\",\n \"only-if-cached\",\n] as const;\n\nexport const FETCH_REDIRECTS = [\"follow\", \"error\", \"manual\"] as const;\n\nexport type FetchUrlInputMode = \"swagger\" | \"manual\";\n\nexport type FetchRequestConfig = {\n url: string;\n method?: FetchHttpMethod;\n headers?: Record<string, string>;\n /**\n * 请求头编辑器原文。可写 JSON,也可整段写成 `{scope?...}`。\n * 运行时优先按该字段解析,避免未加引号的模板在 JSON.parse 时被丢掉。\n */\n headersJson?: string;\n body?: string;\n credentials?: RequestCredentials;\n mode?: RequestMode;\n cache?: RequestCache;\n redirect?: RequestRedirect;\n responseType?: FetchResponseType;\n timeoutMs?: number;\n /** Swagger / OpenAPI 文档 JSON 地址 */\n swaggerDocsUrl?: string;\n /** API 主机或基础路径,可与接口 path 组合 */\n apiBaseUrl?: string;\n /** 从 Swagger 文档解析出的接口列表 */\n swaggerEndpoints?: SwaggerApiEndpoint[];\n /** 请求 URL 输入方式:接口联想或手动输入 */\n urlInputMode?: FetchUrlInputMode;\n};\n\nexport const DEFAULT_FETCH_REQUEST_CONFIG: FetchRequestConfig = {\n url: \"\",\n method: \"GET\",\n headers: {},\n body: \"\",\n credentials: \"same-origin\",\n mode: \"cors\",\n cache: \"default\",\n redirect: \"follow\",\n responseType: \"json\",\n timeoutMs: 30000,\n};\n\n/** 合并默认项与节点上保存的 fetch 配置,供运行时发起请求 */\nexport function normalizeFetchRequestConfig(\n config?: FetchRequestConfig\n): FetchRequestConfig {\n return {\n ...DEFAULT_FETCH_REQUEST_CONFIG,\n ...config,\n headers: {\n ...DEFAULT_FETCH_REQUEST_CONFIG.headers,\n ...config?.headers,\n },\n headersJson: config?.headersJson,\n swaggerEndpoints: config?.swaggerEndpoints,\n };\n}\n\nexport type FetchResultValue = {\n status: number;\n statusText: string;\n url: string;\n data: unknown;\n};\n\nfunction joinFetchUrl(base: string, path: string): string {\n const normalizedBase = base.replace(/\\/+$/, \"\");\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${normalizedBase}${normalizedPath}`;\n}\n\nfunction getUrlAuthorityPart(url: string): string | null {\n const trimmed = url.trim();\n if (!trimmed || trimmed.startsWith(\"/\")) return null;\n const slashIndex = trimmed.indexOf(\"/\");\n return slashIndex === -1 ? trimmed : trimmed.slice(0, slashIndex);\n}\n\nfunction isAbsoluteHostAuthority(authority: string): boolean {\n if (/^localhost$/i.test(authority)) return true;\n if (/^localhost:\\d+$/i.test(authority)) return true;\n if (/^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(authority)) return true;\n if (/^\\d{1,3}(?:\\.\\d{1,3}){3}:\\d+$/.test(authority)) return true;\n if (/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(authority) && authority.includes(\".\")) {\n return true;\n }\n if (/^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?\\.[a-z]{2,}(?::\\d+)?$/i.test(authority)) {\n return true;\n }\n if (/^[a-z0-9-]+:\\d+$/i.test(authority)) return true;\n return false;\n}\n\nfunction hasExplicitUrlScheme(url: string): boolean {\n return /^[a-z][a-z0-9+.-]*:\\/\\//i.test(url) || url.startsWith(\"//\");\n}\n\n/** 解析 fetch 节点的最终请求 URL,避免对已有主机信息的地址重复拼接 apiBaseUrl */\nexport function resolveFetchRequestUrl(\n config: Pick<FetchRequestConfig, \"url\" | \"apiBaseUrl\">\n): string {\n const rawUrl = config.url?.trim() ?? \"\";\n if (!rawUrl) {\n throw new Error(\"请求 URL 未配置\");\n }\n\n if (hasExplicitUrlScheme(rawUrl)) {\n return rawUrl;\n }\n\n const authority = getUrlAuthorityPart(rawUrl);\n if (authority && isAbsoluteHostAuthority(authority)) {\n return `http://${rawUrl}`;\n }\n\n const apiBaseUrl = config.apiBaseUrl?.trim();\n if (!apiBaseUrl) {\n return rawUrl;\n }\n\n return joinFetchUrl(apiBaseUrl, rawUrl);\n}\n\nexport type ExecuteFetchOptions = {\n signal?: AbortSignal;\n /** 调试模式下 HTTP 非 2xx 仍返回响应体,不抛错 */\n allowHttpError?: boolean;\n};\n\nfunction linkAbortSignal(\n controller: AbortController,\n external?: AbortSignal\n): () => void {\n if (!external) return () => {};\n if (external.aborted) {\n controller.abort();\n return () => {};\n }\n const onAbort = () => controller.abort();\n external.addEventListener(\"abort\", onAbort);\n return () => external.removeEventListener(\"abort\", onAbort);\n}\n\nexport async function executeFetch(\n config: FetchRequestConfig,\n options?: ExecuteFetchOptions\n): Promise<FetchResultValue> {\n const rawUrl = config.url?.trim();\n if (!rawUrl) {\n throw new Error(\"请求 URL 未配置\");\n }\n\n const url = resolveFetchRequestUrl(config);\n\n const method = config.method ?? \"GET\";\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\n const body =\n hasBody && config.body?.trim() ? config.body : undefined;\n\n if (body && looksLikeJsonText(body)) {\n try {\n JSON.parse(body);\n } catch (error) {\n throw new Error(\n `请求体不是有效 JSON:${error instanceof Error ? error.message : \"格式无效\"}`\n );\n }\n }\n\n const headers: Record<string, string> = { ...(config.headers ?? {}) };\n const hasContentType = Object.keys(headers).some(\n (key) => key.toLowerCase() === \"content-type\"\n );\n if (body && looksLikeJsonText(body) && !hasContentType) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n const timeoutMs = config.timeoutMs ?? 30000;\n const controller = new AbortController();\n const unlinkExternal = linkAbortSignal(controller, options?.signal);\n const timer =\n timeoutMs > 0\n ? setTimeout(() => controller.abort(), timeoutMs)\n : undefined;\n\n try {\n const response = await fetch(url, {\n method,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n body,\n credentials: config.credentials,\n mode: config.mode,\n cache: config.cache,\n redirect: config.redirect,\n signal: controller.signal,\n });\n\n const responseType = config.responseType ?? \"json\";\n let data: unknown;\n\n if (responseType === \"text\") {\n data = await response.text();\n } else {\n const text = await response.text();\n if (!text) {\n data = null;\n } else {\n try {\n data = JSON.parse(text) as unknown;\n } catch {\n if (options?.allowHttpError) {\n data = text;\n } else {\n throw new Error(\"响应不是有效的 JSON\");\n }\n }\n }\n }\n\n if (!response.ok && !options?.allowHttpError) {\n const detail =\n typeof data === \"string\"\n ? data.slice(0, 200)\n : JSON.stringify(data).slice(0, 200);\n throw new Error(\n `HTTP ${response.status} ${response.statusText}${detail ? `: ${detail}` : \"\"}`\n );\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n data,\n };\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n if (options?.signal?.aborted) {\n throw new Error(\"请求已中止\");\n }\n throw new Error(`请求超时(${timeoutMs}ms)`);\n }\n throw error;\n } finally {\n unlinkExternal();\n if (timer) clearTimeout(timer);\n }\n}\n","export type ScopeAutocompleteState = {\n templateStart: number;\n cursor: number;\n path: string[];\n partialKey: string;\n};\n\nfunction getValueAtPath(scope: unknown, path: string[]): unknown {\n let current: unknown = scope;\n for (const part of path) {\n if (current === null || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction listObjectKeys(value: unknown): string[] {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return [];\n }\n return Object.keys(value as Record<string, unknown>);\n}\n\n/** 解析光标处未闭合的 scope 模版表达式 */\nexport function parseScopeAutocomplete(\n text: string,\n cursor: number,\n scope: unknown\n): ScopeAutocompleteState | null {\n const before = text.slice(0, cursor);\n const templateStart = before.lastIndexOf(\"{\");\n if (templateStart < 0) return null;\n\n const inner = before.slice(templateStart + 1);\n if (inner.includes(\"}\")) return null;\n if (!inner.startsWith(\"scope\")) return null;\n\n let body = inner.slice(\"scope\".length);\n if (body === \"\" || body === \"?\") {\n return { templateStart, cursor, path: [], partialKey: \"\" };\n }\n if (!body.startsWith(\"?.\")) return null;\n\n body = body.slice(2);\n if (body === \"\") {\n return { templateStart, cursor, path: [], partialKey: \"\" };\n }\n\n const segments = body.split(\"?.\");\n const endsWithSeparator = inner.endsWith(\"?.\");\n\n if (endsWithSeparator) {\n const path = segments.filter((segment) => segment.length > 0);\n return { templateStart, cursor, path, partialKey: \"\" };\n }\n\n const lastSegment = segments[segments.length - 1] ?? \"\";\n const prefixSegments = segments.slice(0, -1).filter((segment) => segment.length > 0);\n const parent = getValueAtPath(scope, prefixSegments);\n const keys = listObjectKeys(parent);\n\n if (lastSegment.length === 0) {\n return { templateStart, cursor, path: prefixSegments, partialKey: \"\" };\n }\n\n if (keys.includes(lastSegment)) {\n return {\n templateStart,\n cursor,\n path: [...prefixSegments, lastSegment],\n partialKey: \"\",\n };\n }\n\n return {\n templateStart,\n cursor,\n path: prefixSegments,\n partialKey: lastSegment,\n };\n}\n\nexport function getScopeAutocompleteSuggestions(\n scope: unknown,\n state: ScopeAutocompleteState\n): string[] {\n const parent =\n state.partialKey.length > 0\n ? getValueAtPath(scope, state.path)\n : state.path.length > 0\n ? getValueAtPath(scope, state.path)\n : scope;\n\n const keys = listObjectKeys(parent);\n if (state.partialKey.length === 0) return keys;\n return keys.filter((key) => key.startsWith(state.partialKey));\n}\n\nexport function buildScopeExpression(path: string[], selectedKey: string): string {\n return `scope?.${[...path, selectedKey].join(\"?.\")}`;\n}\n\nexport function applyScopeAutocompleteSelection(\n text: string,\n state: ScopeAutocompleteState,\n selectedKey: string\n): { value: string; cursor: number } {\n const expr = buildScopeExpression(state.path, selectedKey);\n const before = text.slice(0, state.templateStart + 1);\n const after = text.slice(state.cursor);\n const value = `${before}${expr}${after}`;\n const cursor = before.length + expr.length;\n return { value, cursor };\n}\n","import type { FetchRequestConfig } from \"./fetch-config.js\";\nimport {\n evaluateScopeExpression,\n evaluateScopeTemplate,\n evaluateScopeTemplateInJson,\n hasScopeTemplate,\n looksLikeJsonText,\n stringifyScopeValue,\n} from \"./scope-template.js\";\nimport { isFalseSignal, isTrueSignal } from \"./node-signal.js\";\n\nexport type IncomingNodeSource = {\n id: string;\n label?: string;\n name?: string;\n nodeType?: string;\n type?: string;\n role?: string;\n};\n\nexport type IncomingGraphEdge = {\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n};\n\nexport type IncomingNodeScopeEntry = {\n id: string;\n name: string;\n type: string;\n role?: string;\n port: string;\n kind: \"true\" | \"false\" | \"pending\";\n value?: unknown;\n error?: string;\n timestamp?: number;\n isoTime?: string;\n};\n\nexport type IncomingNodeScope =\n | IncomingNodeScopeEntry\n | Record<string, IncomingNodeScopeEntry>;\n\n/** 尚无上游数据时,仍可联想 scope 的固定字段 */\nexport const FETCH_SCOPE_AUTOCOMPLETE_FALLBACK: IncomingNodeScopeEntry = {\n id: \"\",\n name: \"\",\n type: \"\",\n role: \"\",\n port: \"out\",\n kind: \"pending\",\n value: {},\n error: \"\",\n timestamp: 0,\n isoTime: \"\",\n};\n\nexport function resolveFetchScopeAutocompleteRoot(scope: unknown): unknown {\n return scope === undefined ? FETCH_SCOPE_AUTOCOMPLETE_FALLBACK : scope;\n}\n\nfunction readOutputSignal(output: unknown): Pick<\n IncomingNodeScopeEntry,\n \"kind\" | \"value\" | \"error\" | \"timestamp\" | \"isoTime\"\n> {\n if (output === undefined) return { kind: \"pending\" };\n if (isTrueSignal(output)) {\n return {\n kind: \"true\",\n value: output.value,\n timestamp: output.timestamp,\n isoTime: output.isoTime,\n };\n }\n if (isFalseSignal(output)) {\n return {\n kind: \"false\",\n error: output.error,\n timestamp: output.timestamp,\n isoTime: output.isoTime,\n };\n }\n if (output && typeof output === \"object\" && \"kind\" in output) {\n const rec = output as {\n kind?: string;\n value?: unknown;\n error?: string;\n timestamp?: number;\n isoTime?: string;\n };\n if (rec.kind === \"true\") {\n return {\n kind: \"true\",\n value: rec.value,\n timestamp: rec.timestamp,\n isoTime: rec.isoTime,\n };\n }\n if (rec.kind === \"false\") {\n return {\n kind: \"false\",\n error: rec.error,\n timestamp: rec.timestamp,\n isoTime: rec.isoTime,\n };\n }\n }\n return { kind: \"true\", value: output };\n}\n\nexport function createIncomingNodeScopeEntry(\n node: IncomingNodeSource | undefined,\n port: string,\n output: unknown\n): IncomingNodeScopeEntry {\n const id = node?.id ?? \"in\";\n const signal = readOutputSignal(output);\n return {\n id,\n name: node?.label?.trim() || node?.name?.trim() || id,\n type: node?.nodeType || node?.type || \"unknown\",\n role: node?.role,\n port,\n ...signal,\n };\n}\n\nexport function buildIncomingNodeScope(\n entries: IncomingNodeScopeEntry[]\n): IncomingNodeScope | undefined {\n if (entries.length === 0) return undefined;\n if (entries.length === 1) return entries[0];\n const scoped: Record<string, IncomingNodeScopeEntry> = {};\n for (const entry of entries) {\n scoped[entry.id] = entry;\n }\n return scoped;\n}\n\nexport function collectIncomingNodeScopeEntries(options: {\n targetNodeId: string;\n targetPort?: string;\n nodes: IncomingNodeSource[];\n edges: IncomingGraphEdge[];\n getOutput?: (nodeId: string, port: string) => unknown;\n}): IncomingNodeScopeEntry[] {\n const targetPort = options.targetPort ?? \"in\";\n const nodeById = new Map(options.nodes.map((node) => [node.id, node]));\n const inbound = options.edges.filter(\n (edge) =>\n edge.target === options.targetNodeId &&\n (edge.targetHandle ?? \"in\") === targetPort\n );\n\n const seen = new Set<string>();\n const entries: IncomingNodeScopeEntry[] = [];\n for (const edge of inbound) {\n const port = edge.sourceHandle ?? \"out\";\n const key = `${edge.source}:${port}`;\n if (seen.has(key)) continue;\n seen.add(key);\n const output = options.getOutput?.(edge.source, port);\n entries.push(\n createIncomingNodeScopeEntry(nodeById.get(edge.source), port, output)\n );\n }\n return entries;\n}\n\nexport function resolveFetchIncomingScope(options: {\n fetchNodeId: string;\n inputPort?: string;\n nodes: IncomingNodeSource[];\n edges: IncomingGraphEdge[];\n getOutput?: (nodeId: string, port: string) => unknown;\n fallbackInput?: unknown;\n}): IncomingNodeScope | undefined {\n const entries = collectIncomingNodeScopeEntries({\n targetNodeId: options.fetchNodeId,\n targetPort: options.inputPort,\n nodes: options.nodes,\n edges: options.edges,\n getOutput: options.getOutput,\n });\n if (entries.length > 0) return buildIncomingNodeScope(entries);\n if (options.fallbackInput === undefined) return undefined;\n return createIncomingNodeScopeEntry(\n { id: \"in\", label: \"in\", nodeType: \"input\" },\n options.inputPort ?? \"in\",\n options.fallbackInput\n );\n}\n\nexport function latestTraceOutputsByNode(\n entries: Array<{ nodeId: string; outputs?: Record<string, unknown> }>\n): Record<string, Record<string, unknown>> {\n const map: Record<string, Record<string, unknown>> = {};\n for (const entry of entries) {\n map[entry.nodeId] = entry.outputs ?? {};\n }\n return map;\n}\n\nfunction resolveTemplateString(\n value: string | undefined,\n scope: unknown\n): string | undefined {\n if (value === undefined) return undefined;\n if (!hasScopeTemplate(value)) return value;\n return evaluateScopeTemplate(value, scope);\n}\n\nexport function parseJsonText(\n text: string\n): { ok: true; value: unknown } | { ok: false; error: string } {\n try {\n return { ok: true, value: JSON.parse(text) as unknown };\n } catch (error) {\n return {\n ok: false,\n error: error instanceof Error ? error.message : \"JSON 格式无效\",\n };\n }\n}\n\nexport function validateFetchJsonText(\n text: string,\n options?: { allowEmpty?: boolean }\n): { ok: true } | { ok: false; error: string } {\n const trimmed = text.trim();\n if (!trimmed) {\n if (options?.allowEmpty === false) {\n return { ok: false, error: \"内容不能为空\" };\n }\n return { ok: true };\n }\n if (isWholeScopeExpression(trimmed)) {\n return { ok: true };\n }\n if (!looksLikeJsonText(trimmed)) {\n return { ok: true };\n }\n const parsed = parseJsonText(trimmed);\n return parsed.ok ? { ok: true } : parsed;\n}\n\nexport function resolveFetchBody(\n body: string | undefined,\n scope?: unknown\n): string | undefined {\n if (body === undefined) return undefined;\n const trimmed = body.trim();\n if (!trimmed) return body;\n if (scope !== undefined && isWholeScopeExpression(trimmed)) {\n const value = evaluateScopeExpression(trimmed.slice(1, -1), scope);\n if (value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n return stringifyScopeValue(value);\n }\n if (scope === undefined || !hasScopeTemplate(body)) return body;\n if (looksLikeJsonText(trimmed)) {\n return evaluateScopeTemplateInJson(body, scope);\n }\n return evaluateScopeTemplate(body, scope);\n}\n\nexport function getFetchBodyValidationError(\n body: string | undefined,\n resolvedBody?: string\n): string | null {\n const source = (resolvedBody ?? body ?? \"\").trim();\n if (!source) return null;\n if (isWholeScopeExpression(source)) return null;\n if (!looksLikeJsonText(source)) return null;\n const parsed = parseJsonText(source);\n if (parsed.ok) return null;\n // 仍含未求值的 {scope?...} 时,等上游数据再校验\n if (hasScopeTemplate(source)) return null;\n return parsed.error;\n}\n\nexport function getFetchHeadersValidationError(\n config: FetchRequestConfig,\n scope?: unknown\n): string | null {\n const raw = (config.headersJson ?? \"\").trim();\n if (!raw) return null;\n if (isWholeScopeExpression(raw) || hasScopeTemplate(raw)) {\n if (scope === undefined) return null;\n const parsed = parseFetchHeadersJson(raw, scope);\n if (!parsed) return \"请求头模板解析后不是有效的 JSON 对象\";\n return null;\n }\n const result = validateFetchJsonText(raw);\n if (!result.ok) return result.error;\n const parsed = parseFetchHeadersJson(raw, scope);\n if (!parsed) return \"请求头不是有效的 JSON 对象\";\n return null;\n}\n\n/** `{scope?...}` 整段表达式,区别于 JSON 对象 `{ \"Authorization\": \"...\" }` */\nexport function isWholeScopeExpression(text: string): boolean {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) return false;\n return trimmed.slice(1, -1).trim().startsWith(\"scope\");\n}\n\nfunction asHeaderRecord(value: unknown): Record<string, string> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const headers: Record<string, string> = {};\n for (const [key, raw] of Object.entries(value as Record<string, unknown>)) {\n if (raw === undefined || raw === null) continue;\n headers[key] = typeof raw === \"string\" ? raw : stringifyScopeValue(raw);\n }\n return headers;\n}\n\nfunction applyScopeToHeaderRecord(\n headers: Record<string, string>,\n scope: unknown\n): Record<string, string> {\n if (scope === undefined) return headers;\n return Object.fromEntries(\n Object.entries(headers).map(([key, value]) => [\n evaluateScopeTemplate(String(key), scope),\n evaluateScopeTemplate(value == null ? \"\" : String(value), scope),\n ])\n );\n}\n\n/** 将请求头编辑器原文解析为对象;支持 JSON 内模板,也支持整段 `{scope?...}` */\nexport function parseFetchHeadersJson(\n text: string,\n scope?: unknown\n): Record<string, string> | undefined {\n const trimmed = text.trim();\n if (!trimmed) return {};\n if (isWholeScopeExpression(trimmed)) {\n if (scope === undefined) return undefined;\n const inner = trimmed.slice(1, -1);\n return asHeaderRecord(evaluateScopeExpression(inner, scope));\n }\n let jsonText = trimmed;\n if (scope !== undefined && hasScopeTemplate(trimmed) && looksLikeJsonText(trimmed)) {\n jsonText = evaluateScopeTemplateInJson(trimmed, scope);\n }\n try {\n const parsed = asHeaderRecord(JSON.parse(jsonText));\n if (!parsed) return undefined;\n if (jsonText === trimmed) {\n return applyScopeToHeaderRecord(parsed, scope);\n }\n return parsed;\n } catch {\n return undefined;\n }\n}\n\nexport function draftFetchHeadersText(config: FetchRequestConfig): string {\n if (config.headersJson !== undefined) return config.headersJson;\n try {\n return JSON.stringify(config.headers ?? {}, null, 2);\n } catch {\n return \"{}\";\n }\n}\n\nexport function resolveFetchHeaders(\n config: FetchRequestConfig,\n scope?: unknown\n): Record<string, string> | undefined {\n const rawJson = config.headersJson;\n if (rawJson !== undefined && rawJson.trim() !== \"\") {\n const parsed = parseFetchHeadersJson(rawJson, scope);\n if (parsed) return parsed;\n }\n if (!config.headers) return config.headers;\n return applyScopeToHeaderRecord(config.headers, scope);\n}\n\n/** 用上游 scope 解析 fetch 表单中的 URL / Base URL / headers / body */\nexport function applyFetchConfigScope(\n config: FetchRequestConfig,\n scope: unknown\n): FetchRequestConfig {\n const headers = resolveFetchHeaders(config, scope);\n const body = resolveFetchBody(config.body, scope);\n if (scope === undefined) {\n if (headers === config.headers && body === config.body) return config;\n return { ...config, headers, body };\n }\n return {\n ...config,\n url: resolveTemplateString(config.url, scope) ?? \"\",\n apiBaseUrl: resolveTemplateString(config.apiBaseUrl, scope),\n body,\n headers,\n };\n}\n\nexport function fetchConfigHasScopeTemplate(config: FetchRequestConfig): boolean {\n if (hasScopeTemplate(config.url ?? \"\")) return true;\n if (hasScopeTemplate(config.apiBaseUrl ?? \"\")) return true;\n if (hasScopeTemplate(config.body ?? \"\")) return true;\n if (hasScopeTemplate(config.headersJson ?? \"\")) return true;\n const headers = config.headers ?? {};\n return Object.entries(headers).some(\n ([key, value]) => hasScopeTemplate(key) || hasScopeTemplate(String(value ?? \"\"))\n );\n}\n","export type JsonNodeConfig = {\n jsonString: string;\n};\n\nexport const DEFAULT_JSON_NODE_CONFIG: JsonNodeConfig = {\n jsonString: \"{}\",\n};\n\nexport function validateJsonString(\n jsonString: string\n): { ok: true; value: unknown } | { ok: false; error: string } {\n const raw = jsonString?.trim();\n if (!raw) {\n return { ok: false, error: \"JSON 不能为空\" };\n }\n\n try {\n const value = JSON.parse(raw) as unknown;\n if (value === null || typeof value !== \"object\") {\n return { ok: false, error: \"JSON 根节点必须是 object 或 array\" };\n }\n return { ok: true, value };\n } catch (error) {\n return {\n ok: false,\n error: error instanceof Error ? error.message : \"JSON 格式无效\",\n };\n }\n}\n\nexport function parseJsonConfig(config: JsonNodeConfig): unknown {\n const result = validateJsonString(config.jsonString ?? \"\");\n if (!result.ok) {\n throw new Error(result.error);\n }\n return result.value;\n}\n","export type LogicNodeConfig = {\n /** 用户手写的 update(input) 函数脚本 */\n sourceCode: string;\n};\n\nexport const DEFAULT_LOGIC_NODE_CONFIG: LogicNodeConfig = {\n sourceCode: `function update(input) {\n return input;\n}`,\n};\n\nfunction compileLogicRunner(sourceCode: string): (input: unknown) => unknown {\n return new Function(\n \"input\",\n `\"use strict\";\n${sourceCode}\nif (typeof update !== \"function\") {\n throw new TypeError(\"需要定义 update(input) 函数\");\n}\nreturn update(input);`\n ) as (input: unknown) => unknown;\n}\n\nexport function validateLogicSourceCode(\n sourceCode: string\n): { ok: true } | { ok: false; error: string } {\n const raw = sourceCode?.trim();\n if (!raw) {\n return { ok: false, error: \"代码不能为空\" };\n }\n\n try {\n compileLogicRunner(raw);\n return { ok: true };\n } catch (error) {\n return {\n ok: false,\n error: error instanceof Error ? error.message : \"JavaScript 语法错误\",\n };\n }\n}\n\nexport function executeLogicConfig(\n config: LogicNodeConfig,\n input: unknown\n): unknown {\n const validation = validateLogicSourceCode(config.sourceCode ?? \"\");\n if (!validation.ok) {\n throw new Error(validation.error);\n }\n const run = compileLogicRunner(config.sourceCode);\n return run(input);\n}\n","export type ClockNodeConfig = {\n /** 两次输出之间的间隔秒数 */\n intervalSeconds: number;\n /** 输出值中的时间格式化模板,支持 YYYY、MM、DD、HH、mm、ss */\n timeFormat: string;\n /** 收到真信号后的输出次数,默认 1 */\n outputCount: number;\n /** 收到真信号后立即输出第一次,再按间隔继续;关闭则首次也等待 n 秒 */\n emitImmediately: boolean;\n};\n\nexport type ClockSignalOutput = {\n /** 按 timeFormat 格式化后的当前时间 */\n formatted: string;\n /** Unix 毫秒时间戳 */\n timestamp: number;\n /** ISO 8601 时间字符串 */\n isoTime: string;\n};\n\nexport const DEFAULT_CLOCK_NODE_CONFIG: ClockNodeConfig = {\n intervalSeconds: 0,\n timeFormat: \"YYYY-MM-DD HH:mm:ss\",\n outputCount: 1,\n emitImmediately: true,\n};\n\nexport function normalizeClockConfig(\n config?: Partial<ClockNodeConfig> | null\n): ClockNodeConfig {\n const intervalRaw = Number(config?.intervalSeconds);\n const intervalSeconds =\n Number.isFinite(intervalRaw) && intervalRaw > 0\n ? Math.floor(intervalRaw)\n : 0;\n\n const outputCountRaw = Number(config?.outputCount);\n const outputCount =\n Number.isFinite(outputCountRaw) && outputCountRaw > 0\n ? Math.floor(outputCountRaw)\n : DEFAULT_CLOCK_NODE_CONFIG.outputCount;\n\n const timeFormat =\n config?.timeFormat?.trim() || DEFAULT_CLOCK_NODE_CONFIG.timeFormat;\n\n return {\n intervalSeconds,\n timeFormat,\n outputCount,\n emitImmediately: config?.emitImmediately !== false,\n };\n}\n\nexport function validateClockScheduleConfig(\n config: ClockNodeConfig\n): { ok: true } | { ok: false; error: string } {\n const normalized = normalizeClockConfig(config);\n\n if (normalized.outputCount <= 0) {\n return { ok: false, error: \"输出次数须大于 0\" };\n }\n\n const needsInterval =\n normalized.outputCount > 1 ||\n (normalized.outputCount === 1 && !normalized.emitImmediately);\n\n if (needsInterval && normalized.intervalSeconds <= 0) {\n return { ok: false, error: \"当前配置下时钟信号间隔须大于 0 秒\" };\n }\n\n return { ok: true };\n}\n\nconst pad2 = (value: number) => String(value).padStart(2, \"0\");\n\n/** 将 Date 格式化为指定模板(YYYY/MM/DD/HH/mm/ss) */\nexport function formatClockTime(date: Date, pattern: string): string {\n const tokens: Record<string, string> = {\n YYYY: String(date.getFullYear()).padStart(4, \"0\"),\n MM: pad2(date.getMonth() + 1),\n DD: pad2(date.getDate()),\n HH: pad2(date.getHours()),\n mm: pad2(date.getMinutes()),\n ss: pad2(date.getSeconds()),\n };\n\n return pattern.replace(/YYYY|MM|DD|HH|mm|ss/g, (token) => tokens[token] ?? token);\n}\n\nexport function buildClockSignalValue(\n config: ClockNodeConfig,\n now = new Date()\n): ClockSignalOutput {\n const normalized = normalizeClockConfig(config);\n return {\n formatted: formatClockTime(now, normalized.timeFormat),\n timestamp: now.getTime(),\n isoTime: now.toISOString(),\n };\n}\n\nfunction sleep(ms: number, abort: { aborted: boolean }, sessionKey?: string): Promise<void> {\n if (ms <= 0 || abort.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timerId = setTimeout(() => {\n clearInterval(pollId);\n resolve();\n }, ms);\n const pollId = setInterval(() => {\n if (\n abort.aborted ||\n (sessionKey !== undefined && isClockSessionAborted(sessionKey))\n ) {\n clearTimeout(timerId);\n clearInterval(pollId);\n resolve();\n }\n }, 50);\n });\n}\n\n/**\n * 第 tickIndex 次输出(从 0 起)相对调度起点的目标延迟(毫秒)。\n * - 立即发送且次数 > 1:第 1 次为 0,其余依次为 m、2m…\n * - 未立即发送:依次为 m、2m、3m…\n */\nexport function getClockTickDelayOffsetMs(\n config: ClockNodeConfig,\n tickIndex: number\n): number {\n const normalized = normalizeClockConfig(config);\n const intervalMs = normalized.intervalSeconds * 1000;\n\n if (tickIndex <= 0) {\n return normalized.emitImmediately ? 0 : intervalMs;\n }\n\n if (normalized.emitImmediately) {\n return tickIndex * intervalMs;\n }\n\n return (tickIndex + 1) * intervalMs;\n}\n\n/** 距离第 tickIndex 次输出还应等待的毫秒数(基于调度起点) */\nexport function getClockTickWaitMs(\n config: ClockNodeConfig,\n tickIndex: number,\n scheduleStartMs: number,\n nowMs = Date.now()\n): number {\n const targetMs = scheduleStartMs + getClockTickDelayOffsetMs(config, tickIndex);\n return Math.max(0, targetMs - nowMs);\n}\n\nconst activeSessions = new Map<string, { aborted: boolean }>();\nconst abortedClockSessions = new Set<string>();\n\n/** 停止指定会话的时钟调度 */\nexport function stopClockSchedule(sessionKey: string): void {\n const session = activeSessions.get(sessionKey);\n if (!session) return;\n session.aborted = true;\n activeSessions.delete(sessionKey);\n}\n\nexport function isClockScheduleActive(sessionKey: string): boolean {\n return activeSessions.has(sessionKey);\n}\n\n/** 中止时钟:取消剩余 tick,并标记会话供下游传播循环检测 */\nexport function abortClockSession(sessionKey: string): void {\n stopClockSchedule(sessionKey);\n abortedClockSessions.add(sessionKey);\n}\n\nexport function isClockSessionAborted(sessionKey: string): boolean {\n return abortedClockSessions.has(sessionKey);\n}\n\nexport function clearClockSessionAbort(sessionKey: string): void {\n abortedClockSessions.delete(sessionKey);\n}\n\n/**\n * 按配置依次触发 onTick;新的调度会取消同 sessionKey 的上一次调度。\n * 返回取消函数。\n */\nexport function startClockSchedule(options: {\n sessionKey: string;\n config: ClockNodeConfig;\n onTick: () => void | Promise<void>;\n onSettled?: () => void;\n}): () => void {\n stopClockSchedule(options.sessionKey);\n clearClockSessionAbort(options.sessionKey);\n\n const abort = { aborted: false };\n activeSessions.set(options.sessionKey, abort);\n\n void (async () => {\n try {\n const config = normalizeClockConfig(options.config);\n const total = config.outputCount;\n const scheduleStartMs = Date.now();\n\n for (let tickIndex = 0; tickIndex < total; tickIndex++) {\n if (abort.aborted || isClockSessionAborted(options.sessionKey)) return;\n\n const waitMs = getClockTickWaitMs(config, tickIndex, scheduleStartMs);\n if (waitMs > 0) {\n await sleep(waitMs, abort, options.sessionKey);\n }\n\n if (abort.aborted || isClockSessionAborted(options.sessionKey)) return;\n await options.onTick();\n }\n } finally {\n activeSessions.delete(options.sessionKey);\n options.onSettled?.();\n }\n })();\n\n return () => stopClockSchedule(options.sessionKey);\n}\n\n/** 停止全部时钟调度(如蓝图面板卸载时) */\nexport function stopAllClockSchedules(): void {\n for (const key of [...activeSessions.keys()]) {\n abortClockSession(key);\n }\n}\n","/** 视图事件节点可监听的常用 DOM 事件 */\nexport const VIEW_EVENT_TYPES = [\n \"click\",\n \"dblclick\",\n \"contextmenu\",\n \"mouseenter\",\n \"mouseleave\",\n] as const;\n\nexport type ViewEventType = (typeof VIEW_EVENT_TYPES)[number];\n\nexport type ViewEventNodeConfig = {\n /** 监听的事件类型,至少一项;默认 click */\n eventTypes: ViewEventType[];\n};\n\nexport const DEFAULT_VIEW_EVENT_NODE_CONFIG: ViewEventNodeConfig = {\n eventTypes: [\"click\"],\n};\n\nconst VIEW_EVENT_TYPE_SET = new Set<string>(VIEW_EVENT_TYPES);\n\nexport function isViewEventType(value: unknown): value is ViewEventType {\n return typeof value === \"string\" && VIEW_EVENT_TYPE_SET.has(value);\n}\n\nexport function normalizeViewEventConfig(\n config?: Partial<ViewEventNodeConfig> | null\n): ViewEventNodeConfig {\n const raw = Array.isArray(config?.eventTypes) ? config.eventTypes : [];\n const eventTypes = [\n ...new Set(raw.filter(isViewEventType)),\n ];\n return {\n eventTypes:\n eventTypes.length > 0\n ? eventTypes\n : [...DEFAULT_VIEW_EVENT_NODE_CONFIG.eventTypes],\n };\n}\n\n/** 可序列化的 DOM 事件快照(原生 Event 无法作为蓝图信号传递) */\nexport type ViewEventSnapshot = {\n type: string;\n timeStamp: number;\n clientX?: number;\n clientY?: number;\n pageX?: number;\n pageY?: number;\n button?: number;\n altKey?: boolean;\n ctrlKey?: boolean;\n metaKey?: boolean;\n shiftKey?: boolean;\n};\n\n/** 触发该事件的视图节点摘要 */\nexport type ViewEventNodeSnapshot = {\n id: string;\n name?: string;\n materialType?: string;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n layerId?: string;\n};\n\n/** 事件节点向下游发出的真信号 value */\nexport type ViewEventSignal = {\n /** 触发事件(可序列化快照) */\n event: ViewEventSnapshot;\n /** 触发节点 */\n node: ViewEventNodeSnapshot;\n /** 触发的事件类型 */\n eventType: ViewEventType;\n};\n\nexport function snapshotDomEvent(event: {\n type: string;\n timeStamp?: number;\n clientX?: number;\n clientY?: number;\n pageX?: number;\n pageY?: number;\n button?: number;\n altKey?: boolean;\n ctrlKey?: boolean;\n metaKey?: boolean;\n shiftKey?: boolean;\n}): ViewEventSnapshot {\n return {\n type: event.type,\n timeStamp: Number(event.timeStamp) || Date.now(),\n clientX: event.clientX,\n clientY: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY,\n button: event.button,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n };\n}\n\nexport function snapshotViewEventNode(\n node: Partial<ViewEventNodeSnapshot> & { id: string }\n): ViewEventNodeSnapshot {\n return {\n id: node.id,\n name: node.name,\n materialType: node.materialType,\n x: node.x,\n y: node.y,\n width: node.width,\n height: node.height,\n layerId: node.layerId,\n };\n}\n\nexport function createViewEventSignal(input: {\n event: ViewEventSnapshot;\n node: ViewEventNodeSnapshot;\n eventType: ViewEventType;\n}): ViewEventSignal {\n return {\n event: input.event,\n node: input.node,\n eventType: input.eventType,\n };\n}\n\nexport function collectArmedViewEventNodeIds(\n nodes: Array<{\n id: string;\n nodeType?: string;\n lifecyclePhase?: string;\n }>,\n edges: Array<{ source: string; target: string }>,\n eventNodeType: string,\n lifecycleNodeType: string,\n firedPhases: ReadonlySet<string>\n): Set<string> {\n const byId = new Map(nodes.map((node) => [node.id, node]));\n const armed = new Set<string>();\n for (const node of nodes) {\n if (node.nodeType !== eventNodeType) continue;\n const registered = edges.some((edge) => {\n if (edge.target !== node.id) return false;\n const source = byId.get(edge.source);\n if (!source || source.nodeType !== lifecycleNodeType) return false;\n const phase = source.lifecyclePhase || \"mounted\";\n return firedPhases.has(phase);\n });\n if (registered) armed.add(node.id);\n }\n return armed;\n}\n\n/** 仅收集已由生命周期注册的事件节点绑定 */\nexport function collectArmedViewEventBindings(\n nodes: Array<{\n id: string;\n nodeType?: string;\n lifecyclePhase?: string;\n viewElementIds?: string[];\n eventConfig?: Partial<ViewEventNodeConfig> | null;\n }>,\n edges: Array<{ source: string; target: string }>,\n eventNodeType: string,\n lifecycleNodeType: string,\n firedPhases: ReadonlySet<string>\n): Map<string, Set<ViewEventType>> {\n const armed = collectArmedViewEventNodeIds(\n nodes,\n edges,\n eventNodeType,\n lifecycleNodeType,\n firedPhases\n );\n return collectViewEventBindings(nodes, eventNodeType, armed);\n}\n\nexport function collectViewEventBindings(\n nodes: Array<{\n id?: string;\n nodeType?: string;\n viewElementIds?: string[];\n eventConfig?: Partial<ViewEventNodeConfig> | null;\n }>,\n eventNodeType: string,\n armedNodeIds?: ReadonlySet<string>\n): Map<string, Set<ViewEventType>> {\n const map = new Map<string, Set<ViewEventType>>();\n for (const node of nodes) {\n if (node.nodeType !== eventNodeType) continue;\n if (armedNodeIds && (!node.id || !armedNodeIds.has(node.id))) continue;\n const types = normalizeViewEventConfig(node.eventConfig).eventTypes;\n for (const id of node.viewElementIds ?? []) {\n if (!id) continue;\n let set = map.get(id);\n if (!set) {\n set = new Set();\n map.set(id, set);\n }\n for (const type of types) set.add(type);\n }\n }\n return map;\n}\n","import type { FetchHttpMethod } from \"./fetch-config.js\";\n\nexport type SwaggerApiEndpoint = {\n method: FetchHttpMethod;\n path: string;\n summary?: string;\n operationId?: string;\n};\n\nexport type ParsedSwaggerDocument = {\n apiBaseUrl: string;\n endpoints: SwaggerApiEndpoint[];\n};\n\nconst HTTP_METHODS = new Set([\n \"get\",\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n \"head\",\n \"options\",\n]);\n\nfunction normalizeBaseUrl(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\nfunction joinBaseAndPath(base: string, path: string): string {\n const normalizedBase = normalizeBaseUrl(base);\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${normalizedBase}${normalizedPath}`;\n}\n\nfunction resolveAgainstDocsUrl(relativeOrAbsolute: string, docsUrl: string): string {\n const trimmed = relativeOrAbsolute.trim();\n if (!trimmed) return \"\";\n if (/^https?:\\/\\//i.test(trimmed)) {\n return normalizeBaseUrl(trimmed);\n }\n try {\n const docs = new URL(docsUrl);\n if (trimmed.startsWith(\"/\")) {\n return normalizeBaseUrl(`${docs.origin}${trimmed}`);\n }\n return normalizeBaseUrl(new URL(trimmed, `${docs.origin}/`).href);\n } catch {\n return normalizeBaseUrl(trimmed);\n }\n}\n\nfunction extractEndpointsFromPaths(\n paths: unknown\n): SwaggerApiEndpoint[] {\n if (!paths || typeof paths !== \"object\") return [];\n\n const endpoints: SwaggerApiEndpoint[] = [];\n\n for (const [path, item] of Object.entries(paths as Record<string, unknown>)) {\n if (!item || typeof item !== \"object\") continue;\n\n for (const [method, operation] of Object.entries(item as Record<string, unknown>)) {\n if (!HTTP_METHODS.has(method.toLowerCase())) continue;\n if (!operation || typeof operation !== \"object\") continue;\n\n const op = operation as Record<string, unknown>;\n endpoints.push({\n method: method.toUpperCase() as FetchHttpMethod,\n path,\n summary: typeof op.summary === \"string\" ? op.summary : undefined,\n operationId:\n typeof op.operationId === \"string\" ? op.operationId : undefined,\n });\n }\n }\n\n return endpoints.sort((a, b) =>\n `${a.path}:${a.method}`.localeCompare(`${b.path}:${b.method}`)\n );\n}\n\nfunction parseOpenApiV3(\n spec: Record<string, unknown>,\n docsUrl: string\n): ParsedSwaggerDocument {\n const servers = Array.isArray(spec.servers) ? spec.servers : [];\n const firstServer =\n servers.find((item) => item && typeof item === \"object\") as\n | Record<string, unknown>\n | undefined;\n const serverUrl =\n typeof firstServer?.url === \"string\" ? firstServer.url : \"\";\n const apiBaseUrl = serverUrl\n ? resolveAgainstDocsUrl(serverUrl, docsUrl)\n : resolveAgainstDocsUrl(new URL(docsUrl).origin, docsUrl);\n\n return {\n apiBaseUrl,\n endpoints: extractEndpointsFromPaths(spec.paths),\n };\n}\n\nfunction parseSwaggerV2(\n spec: Record<string, unknown>,\n docsUrl: string\n): ParsedSwaggerDocument {\n const schemes = Array.isArray(spec.schemes) ? spec.schemes : [\"https\"];\n const scheme =\n typeof schemes[0] === \"string\" ? schemes[0] : \"https\";\n const host = typeof spec.host === \"string\" ? spec.host : new URL(docsUrl).host;\n const basePath =\n typeof spec.basePath === \"string\" ? spec.basePath : \"\";\n const apiBaseUrl = normalizeBaseUrl(`${scheme}://${host}${basePath}`);\n\n return {\n apiBaseUrl,\n endpoints: extractEndpointsFromPaths(spec.paths),\n };\n}\n\nexport function parseSwaggerDocument(\n spec: unknown,\n docsUrl: string\n): ParsedSwaggerDocument {\n if (!spec || typeof spec !== \"object\") {\n throw new Error(\"Swagger 文档格式无效\");\n }\n\n const document = spec as Record<string, unknown>;\n\n if (typeof document.openapi === \"string\") {\n const parsed = parseOpenApiV3(document, docsUrl);\n if (parsed.endpoints.length === 0) {\n throw new Error(\"未在 OpenAPI 文档中找到接口\");\n }\n return parsed;\n }\n\n if (document.swagger === \"2.0\" || document.swagger === 2) {\n const parsed = parseSwaggerV2(document, docsUrl);\n if (parsed.endpoints.length === 0) {\n throw new Error(\"未在 Swagger 2.0 文档中找到接口\");\n }\n return parsed;\n }\n\n throw new Error(\"仅支持 OpenAPI 3.x 与 Swagger 2.0 文档\");\n}\n\nexport function buildEndpointFullUrl(\n apiBaseUrl: string,\n pathOrEndpoint: string | Pick<SwaggerApiEndpoint, \"path\">\n): string {\n const path =\n typeof pathOrEndpoint === \"string\" ? pathOrEndpoint : pathOrEndpoint.path;\n return joinBaseAndPath(apiBaseUrl, path);\n}\n\nexport function buildEndpointSuggestions(\n apiBaseUrl: string,\n endpoints: SwaggerApiEndpoint[]\n) {\n return endpoints.map((endpoint) => {\n const fullUrl = buildEndpointFullUrl(apiBaseUrl, endpoint);\n const labelParts = [\n endpoint.method,\n endpoint.path,\n endpoint.summary ? `· ${endpoint.summary}` : \"\",\n ].filter(Boolean);\n return {\n ...endpoint,\n fullUrl,\n label: labelParts.join(\" \"),\n };\n });\n}\n\nexport function filterEndpointSuggestions(\n suggestions: ReturnType<typeof buildEndpointSuggestions>,\n query: string\n) {\n const keyword = query.trim().toLowerCase();\n if (!keyword) return suggestions;\n return suggestions.filter(\n (item) =>\n item.fullUrl.toLowerCase().includes(keyword) ||\n item.path.toLowerCase().includes(keyword) ||\n item.method.toLowerCase().includes(keyword) ||\n item.summary?.toLowerCase().includes(keyword) ||\n item.operationId?.toLowerCase().includes(keyword)\n );\n}\n","import type { Value } from \"../type.js\";\nimport { isFalseSignal, isTrueSignal } from \"../node-signal.js\";\n\nexport type ExecutionTraceEntry = {\n id: string;\n nodeId: string;\n nodeLabel?: string;\n nodeType: string;\n startedAt: number;\n finishedAt: number;\n isoTime: string;\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n error?: string;\n /** 时钟节点第几次 tick(从 1 开始) */\n clockTickIndex?: number;\n /** 时钟节点本次调度总 tick 数 */\n clockTickTotal?: number;\n};\n\nexport type ExecutionRunRecord = {\n runId: string;\n blueprintId: string | null;\n blueprintName: string;\n lifecycleNodeId: string;\n lifecycleNodeLabel?: string;\n lifecyclePhase?: string;\n startedAt: number;\n finishedAt?: number;\n status: \"running\" | \"completed\" | \"paused\" | \"failed\";\n entries: ExecutionTraceEntry[];\n};\n\nexport function serializeTraceValue(value: Value | undefined): unknown {\n if (value === undefined) return undefined;\n if (isTrueSignal(value)) {\n return {\n kind: \"true\",\n value: value.value,\n isoTime: value.isoTime,\n };\n }\n if (isFalseSignal(value)) {\n return {\n kind: \"false\",\n error: value.error,\n isoTime: value.isoTime,\n };\n }\n return value;\n}\n\nexport function createTraceEntryId() {\n return `trace_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n}\n","import type { NodeDefinition } from \"../type.js\";\n\nexport const BLUEPRINT_NODE_TYPE = \"Blueprint\";\nexport const DEFAULT_LOGIC_NODE_TYPE = \"Logic\";\nexport const LIFECYCLE_NODE_TYPE = \"Lifecycle\";\nexport const FETCH_NODE_TYPE = \"DataFetch\";\nexport const JSON_NODE_TYPE = \"JsonNode\";\nexport const CLOCK_NODE_TYPE = \"Clock\";\nexport const AND_NODE_TYPE = \"AndLogic\";\nexport const VIEW_NODE_TYPE = \"ViewBind\";\nexport const EVENT_NODE_TYPE = \"ViewEvent\";\n\n/** 蓝图引用节点:单入单出,收到真信号后执行嵌套蓝图 */\nexport const blueprintNodeDefinition: NodeDefinition = {\n type: BLUEPRINT_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"blueprint-ref-run\" },\n};\n\nexport const defaultLogicNodeDefinition: NodeDefinition = {\n type: DEFAULT_LOGIC_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\", optional: true }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"logic-run\" },\n};\n\n/** 生命周期钩子节点:无入流,触发后向下游发出真/假信号 */\nexport const lifecycleNodeDefinition: NodeDefinition = {\n type: LIFECYCLE_NODE_TYPE,\n inputs: [],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"lifecycle-emit\" },\n};\n\n/** 数据源获取:收到真信号后发起 fetch,成功/失败输出对应信号 */\nexport const fetchNodeDefinition: NodeDefinition = {\n type: FETCH_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"fetch-run\" },\n};\n\n/** JSON 解析:收到真信号后将配置的 JSON 转为 object 输出 */\nexport const jsonNodeDefinition: NodeDefinition = {\n type: JSON_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"json-parse-run\" },\n};\n\n/** 时钟节点:收到真信号后按间隔输出含当前时间的真信号 */\nexport const clockNodeDefinition: NodeDefinition = {\n type: CLOCK_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"clock-run\" },\n};\n\n/** 并运算:两路输入均为真时输出真信号;单端口多连线按「或」合并 */\nexport const andLogicNodeDefinition: NodeDefinition = {\n type: AND_NODE_TYPE,\n inputs: [\n { name: \"inA\", kind: \"data\" },\n { name: \"inB\", kind: \"data\" },\n ],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"and-run\" },\n};\n\n/** 视图绑定节点:收到信号后为关联视图元素写入 scope,并向下游透传 */\nexport const viewBindNodeDefinition: NodeDefinition = {\n type: VIEW_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"view-bind-run\" },\n};\n\n/** 视图事件节点:输入必须来自生命周期节点,对应阶段触发后注册事件,视图事件发生时输出真信号 */\nexport const viewEventNodeDefinition: NodeDefinition = {\n type: EVENT_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"event-emit\" },\n};\n\nexport const nodeDefinitionRegistry: Record<string, NodeDefinition> = {\n [BLUEPRINT_NODE_TYPE]: blueprintNodeDefinition,\n [DEFAULT_LOGIC_NODE_TYPE]: defaultLogicNodeDefinition,\n [LIFECYCLE_NODE_TYPE]: lifecycleNodeDefinition,\n [FETCH_NODE_TYPE]: fetchNodeDefinition,\n [JSON_NODE_TYPE]: jsonNodeDefinition,\n [CLOCK_NODE_TYPE]: clockNodeDefinition,\n [AND_NODE_TYPE]: andLogicNodeDefinition,\n [VIEW_NODE_TYPE]: viewBindNodeDefinition,\n [EVENT_NODE_TYPE]: viewEventNodeDefinition,\n};\n\nexport function getNodeDefinition(type: string): NodeDefinition {\n const def = nodeDefinitionRegistry[type];\n if (!def) {\n throw new Error(`NodeDefinition not found: ${type}`);\n }\n return def;\n}\n","import { BLUEPRINT_NODE_TYPE } from \"../nodes/definitions.js\";\nimport type { LibraryBlueprintResolver, RunnableGraph } from \"./graph-runner.js\";\n\nexport const BLUEPRINT_CALL_STACK_KEY = \"__blueprintCallStack\";\n\nexport class BlueprintCycleError extends Error {\n readonly cycleIds: string[];\n\n constructor(cycleIds: string[], message: string) {\n super(message);\n this.name = \"BlueprintCycleError\";\n this.cycleIds = cycleIds;\n }\n}\n\nexport function collectBlueprintLibraryRefs(graph: RunnableGraph): string[] {\n const ids = new Set<string>();\n for (const node of graph.nodes) {\n if (node.nodeType === BLUEPRINT_NODE_TYPE && node.libraryBlueprintId) {\n ids.add(node.libraryBlueprintId);\n }\n }\n return [...ids];\n}\n\nexport function formatBlueprintCycleMessage(\n cycleIds: string[],\n resolveName?: (libraryBlueprintId: string) => string\n): string {\n const labels = cycleIds.map((id) => resolveName?.(id) ?? id);\n return `蓝图引用存在死循环:${labels.join(\" → \")}`;\n}\n\nexport type BlueprintCycleCheckOptions = {\n rootGraph: RunnableGraph;\n /** 当前蓝图对应的蓝图库 id;工作区蓝图未入库时为 null */\n rootLibraryBlueprintId?: string | null;\n resolveLibraryBlueprint: LibraryBlueprintResolver;\n resolveBlueprintName?: (libraryBlueprintId: string) => string;\n};\n\nexport type BlueprintCycleCheckResult =\n | { ok: true }\n | { ok: false; cycleIds: string[]; message: string };\n\nexport async function detectBlueprintReferenceCycle(\n options: BlueprintCycleCheckOptions\n): Promise<BlueprintCycleCheckResult> {\n const {\n rootGraph,\n rootLibraryBlueprintId,\n resolveLibraryBlueprint,\n resolveBlueprintName,\n } = options;\n\n const graphCache = new Map<string, RunnableGraph | null>();\n\n const loadGraph = async (libraryBlueprintId: string) => {\n if (!graphCache.has(libraryBlueprintId)) {\n graphCache.set(\n libraryBlueprintId,\n await resolveLibraryBlueprint(libraryBlueprintId)\n );\n }\n return graphCache.get(libraryBlueprintId) ?? null;\n };\n\n const visit = async (\n path: string[],\n graph: RunnableGraph\n ): Promise<string[] | null> => {\n for (const refId of collectBlueprintLibraryRefs(graph)) {\n const cycleIndex = path.indexOf(refId);\n if (cycleIndex !== -1) {\n return [...path.slice(cycleIndex), refId];\n }\n\n const nested = await loadGraph(refId);\n if (!nested) continue;\n\n const cycle = await visit([...path, refId], nested);\n if (cycle) return cycle;\n }\n return null;\n };\n\n const initialPath = rootLibraryBlueprintId ? [rootLibraryBlueprintId] : [];\n const cycleIds = await visit(initialPath, rootGraph);\n\n if (!cycleIds) {\n return { ok: true };\n }\n\n return {\n ok: false,\n cycleIds,\n message: formatBlueprintCycleMessage(cycleIds, resolveBlueprintName),\n };\n}\n\nexport async function assertNoBlueprintReferenceCycle(\n options: BlueprintCycleCheckOptions\n): Promise<void> {\n const result = await detectBlueprintReferenceCycle(options);\n if (!result.ok) {\n throw new BlueprintCycleError(result.cycleIds, result.message);\n }\n}\n\nexport function resolveBlueprintCallStack(\n scopeStack: string[] | undefined,\n rootLibraryBlueprintId?: string | null\n): string[] {\n if (scopeStack) return scopeStack;\n return rootLibraryBlueprintId ? [rootLibraryBlueprintId] : [];\n}\n\nexport function detectRuntimeBlueprintCycle(\n callStack: string[],\n targetLibraryBlueprintId: string,\n resolveName?: (libraryBlueprintId: string) => string\n): BlueprintCycleCheckResult {\n const cycleIndex = callStack.indexOf(targetLibraryBlueprintId);\n if (cycleIndex === -1) {\n return { ok: true };\n }\n const cycleIds = [\n ...callStack.slice(cycleIndex),\n targetLibraryBlueprintId,\n ];\n return {\n ok: false,\n cycleIds,\n message: formatBlueprintCycleMessage(cycleIds, resolveName),\n };\n}\n","const activeClockNodeIds = new Set<string>();\nconst listeners = new Set<() => void>();\n\nfunction emit() {\n listeners.forEach((listener) => listener());\n}\n\nexport function markClockNodeActive(nodeId: string) {\n if (activeClockNodeIds.has(nodeId)) return;\n activeClockNodeIds.add(nodeId);\n emit();\n}\n\nexport function markClockNodeInactive(nodeId: string) {\n if (!activeClockNodeIds.delete(nodeId)) return;\n emit();\n}\n\nexport function isClockNodeActive(nodeId: string): boolean {\n return activeClockNodeIds.has(nodeId);\n}\n\nexport function getActiveClockNodeIds(): string[] {\n return [...activeClockNodeIds];\n}\n\nexport function subscribeActiveClockNodes(listener: () => void) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n","import {\n buildClockSignalValue,\n normalizeClockConfig,\n startClockSchedule,\n stopAllClockSchedules,\n stopClockSchedule,\n abortClockSession,\n isClockScheduleActive,\n isClockSessionAborted,\n clearClockSessionAbort,\n validateClockScheduleConfig,\n type ClockNodeConfig,\n} from \"../clock-config.js\";\nimport {\n markClockNodeActive,\n markClockNodeInactive,\n} from \"./clock-active-registry.js\";\n\nexport function buildClockSessionKey(scopeId: string, nodeId: string): string {\n return `${scopeId}:${nodeId}`;\n}\n\nexport function abortClockNode(scopeId: string, nodeId: string): void {\n abortClockSession(buildClockSessionKey(scopeId, nodeId));\n markClockNodeInactive(nodeId);\n}\n\nexport function scheduleClockOutputs(options: {\n sessionKey: string;\n config: ClockNodeConfig;\n onTick: () => void | Promise<void>;\n onSettled?: () => void;\n}): () => void {\n return startClockSchedule(options);\n}\n\nexport {\n stopClockSchedule,\n stopAllClockSchedules,\n abortClockSession,\n isClockScheduleActive,\n isClockSessionAborted,\n clearClockSessionAbort,\n validateClockScheduleConfig,\n};\n\nexport function createClockOutputValue(config: ClockNodeConfig) {\n return buildClockSignalValue(normalizeClockConfig(config));\n}\n","import type { FetchRequestConfig } from \"../fetch-config.js\";\nimport {\n executeFetch,\n normalizeFetchRequestConfig,\n resolveFetchRequestUrl,\n} from \"../fetch-config.js\";\nimport {\n applyFetchConfigScope,\n getFetchBodyValidationError,\n getFetchHeadersValidationError,\n resolveFetchIncomingScope,\n} from \"../incoming-node-scope.js\";\nimport type { JsonNodeConfig } from \"../json-config.js\";\nimport {\n DEFAULT_JSON_NODE_CONFIG,\n parseJsonConfig,\n} from \"../json-config.js\";\nimport type { LogicNodeConfig } from \"../logic-config.js\";\nimport {\n DEFAULT_LOGIC_NODE_CONFIG,\n executeLogicConfig,\n} from \"../logic-config.js\";\nimport type { ClockNodeConfig } from \"../clock-config.js\";\nimport {\n buildClockSignalValue,\n DEFAULT_CLOCK_NODE_CONFIG,\n getClockTickWaitMs,\n normalizeClockConfig,\n validateClockScheduleConfig,\n} from \"../clock-config.js\";\nimport type { ViewEventNodeConfig, ViewEventSignal } from \"../event-config.js\";\nimport { normalizeViewEventConfig } from \"../event-config.js\";\nimport {\n buildClockSessionKey,\n scheduleClockOutputs,\n stopAllClockSchedules,\n abortClockNode as abortClockNodeSession,\n isClockSessionAborted,\n clearClockSessionAbort,\n} from \"./clock-scheduler.js\";\nimport {\n markClockNodeActive,\n markClockNodeInactive,\n} from \"./clock-active-registry.js\";\nimport {\n registerDefaultBehaviors,\n BLUEPRINT_ACTIVATION_INPUT_KEY,\n LIFECYCLE_SIGNAL_KEY,\n UI_EVENT_PAYLOAD_KEY,\n VIEW_EVENT_SIGNAL_KEY,\n} from \"../behaviors/default.js\";\nimport { BehaviorRegistry } from \"../core/behavior-registry.js\";\nimport { Executor } from \"../core/executor.js\";\nimport {\n createLifecycleSignal,\n type LifecycleSignal,\n type PageLifecyclePhase,\n} from \"../lifecycle.js\";\nimport {\n createFalseSignal,\n createTrueSignal,\n combinePortSignalsOr,\n isFalseSignal,\n isTrueSignal,\n} from \"../node-signal.js\";\nimport {\n BLUEPRINT_NODE_TYPE,\n CLOCK_NODE_TYPE,\n EVENT_NODE_TYPE,\n getNodeDefinition,\n LIFECYCLE_NODE_TYPE,\n VIEW_NODE_TYPE,\n} from \"../nodes/definitions.js\";\nimport type { BlueprintRefOutput, BlueprintNodeOutputs } from \"../blueprint-signal.js\";\nimport {\n createTraceEntryId,\n serializeTraceValue,\n type ExecutionTraceEntry,\n} from \"./execution-trace.js\";\nimport type { ExecutionToken, Scope, Value } from \"../type.js\";\nimport {\n assertNoBlueprintReferenceCycle,\n BLUEPRINT_CALL_STACK_KEY,\n detectRuntimeBlueprintCycle,\n resolveBlueprintCallStack,\n} from \"./blueprint-cycle.js\";\n\nexport type RunnableGraphNode = {\n id: string;\n nodeType: string;\n label?: string;\n role?: string;\n lifecyclePhase?: PageLifecyclePhase;\n /** 蓝图库记录 id,Blueprint 节点引用嵌套蓝图时使用 */\n libraryBlueprintId?: string;\n blueprintName?: string;\n /** 视图绑定节点关联的视图画布元素 id */\n viewElementIds?: string[];\n fetchConfig?: FetchRequestConfig;\n jsonConfig?: JsonNodeConfig;\n logicConfig?: LogicNodeConfig;\n clockConfig?: ClockNodeConfig;\n eventConfig?: ViewEventNodeConfig;\n};\n\nexport type RunnableGraphEdge = {\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n};\n\nexport type RunnableGraph = {\n nodes: RunnableGraphNode[];\n edges: RunnableGraphEdge[];\n /** 为 true 时调试/执行不因假信号阻塞队列 */\n allowFalseSignalPropagation?: boolean;\n};\n\nexport type LibraryBlueprintResolver = (\n libraryBlueprintId: string\n) => Promise<RunnableGraph | null>;\n\nexport type ViewScopeUpdateCallback = (\n viewElementIds: string[],\n scope: unknown\n) => void;\n\ntype NodeOutputStore = Map<string, Map<string, Value>>;\n\ntype DebugSessionSnapshot = {\n outputs: NodeOutputStore;\n queue: ExecutionToken[];\n traceEntries: ExecutionTraceEntry[];\n};\n\nfunction createTokenId() {\n return `token_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction cloneScope(scope?: Scope): Scope {\n return {\n parent: scope?.parent,\n vars: new Map(scope?.vars ?? []),\n };\n}\n\nfunction cloneOutputs(outputs: NodeOutputStore): NodeOutputStore {\n const next = new Map<string, Map<string, Value>>();\n for (const [nodeId, ports] of outputs.entries()) {\n next.set(nodeId, new Map(ports));\n }\n return next;\n}\n\nfunction cloneToken(token: ExecutionToken): ExecutionToken {\n return {\n tokenId: token.tokenId,\n nodeId: token.nodeId,\n nodeType: token.nodeType,\n inPort: token.inPort,\n scope: cloneScope(token.scope),\n correlationId: token.correlationId,\n };\n}\n\nfunction cloneQueue(queue: ExecutionToken[]): ExecutionToken[] {\n return queue.map(cloneToken);\n}\n\ntype DebugProgressCallback = (entries: ExecutionTraceEntry[]) => void;\n\nexport class BlueprintGraphRunner {\n private behaviors: BehaviorRegistry;\n private outputs: NodeOutputStore = new Map();\n private resolveLibraryBlueprint?: LibraryBlueprintResolver;\n private debugQueue: ExecutionToken[] | null = null;\n private debugExecutor: Executor | null = null;\n private traceEntries: ExecutionTraceEntry[] = [];\n private debugHistory: DebugSessionSnapshot[] = [];\n private rootLibraryBlueprintId?: string | null;\n private resolveBlueprintName?: (libraryBlueprintId: string) => string;\n private cycleValidated = false;\n private debugProgressCallback: DebugProgressCallback | null = null;\n private onViewScopeUpdate?: ViewScopeUpdateCallback;\n\n constructor(\n private graph: RunnableGraph,\n options?: {\n resolveLibraryBlueprint?: LibraryBlueprintResolver;\n rootLibraryBlueprintId?: string | null;\n resolveBlueprintName?: (libraryBlueprintId: string) => string;\n onViewScopeUpdate?: ViewScopeUpdateCallback;\n }\n ) {\n this.resolveLibraryBlueprint = options?.resolveLibraryBlueprint;\n this.rootLibraryBlueprintId = options?.rootLibraryBlueprintId ?? null;\n this.resolveBlueprintName = options?.resolveBlueprintName;\n this.onViewScopeUpdate = options?.onViewScopeUpdate;\n this.behaviors = new BehaviorRegistry();\n registerDefaultBehaviors(this.behaviors);\n this.registerBlueprintRefBehavior();\n this.registerFetchBehavior();\n this.registerJsonBehavior();\n this.registerLogicBehavior();\n this.registerClockBehavior();\n this.registerAndBehavior();\n this.registerViewBindBehavior();\n }\n\n async ensureNoBlueprintCycle(): Promise<void> {\n if (this.cycleValidated || !this.resolveLibraryBlueprint) {\n return;\n }\n await assertNoBlueprintReferenceCycle({\n rootGraph: this.graph,\n rootLibraryBlueprintId: this.rootLibraryBlueprintId,\n resolveLibraryBlueprint: this.resolveLibraryBlueprint,\n resolveBlueprintName: this.resolveBlueprintName,\n });\n this.cycleValidated = true;\n }\n\n private injectedInputs = new Map<string, Value>();\n\n /**\n * 从视图交互触发指定蓝图节点:向该节点 in 口注入真信号并执行下游。\n * payload 写入 scope(UI_EVENT_PAYLOAD_KEY)供 Logic 等节点读取。\n */\n async triggerNode(nodeId: string, inputValue?: unknown): Promise<void> {\n await this.ensureNoBlueprintCycle();\n this.requireNode(nodeId);\n const key = `${nodeId}:in`;\n this.injectedInputs.set(key, createTrueSignal(inputValue ?? true));\n try {\n await this.runFromNodeWithUiPayload(nodeId, inputValue);\n } finally {\n this.injectedInputs.delete(key);\n }\n }\n\n private async runFromNodeWithUiPayload(\n nodeId: string,\n inputValue?: unknown\n ) {\n const queue: ExecutionToken[] = [\n {\n tokenId: createTokenId(),\n nodeId,\n nodeType: this.requireNode(nodeId).nodeType,\n inPort: \"in\",\n scope: cloneScope(),\n },\n ];\n queue[0]!.scope.vars.set(UI_EVENT_PAYLOAD_KEY, inputValue);\n\n const executor = this.createExecutor(queue);\n\n while (queue.length > 0) {\n const token = queue.shift()!;\n if (!this.syncTokenFromGraph(token)) continue;\n try {\n await executor.executeToken(token);\n } catch (error) {\n this.setNodeOutput(\n token.nodeId,\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n const nextNodes = this.findSignalTargets(token.nodeId, \"out\");\n for (const target of nextNodes) {\n queue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: token.scope,\n correlationId: token.correlationId ?? token.tokenId,\n });\n }\n }\n }\n }\n\n async emitLifecycle(phase: PageLifecyclePhase): Promise<void> {\n await this.ensureNoBlueprintCycle();\n const signal = createLifecycleSignal(phase);\n const targets = this.graph.nodes.filter(\n (node) =>\n node.nodeType === LIFECYCLE_NODE_TYPE && node.lifecyclePhase === phase\n );\n\n for (const node of targets) {\n await this.runFromNode(node.id, signal);\n }\n }\n\n /**\n * 嵌套蓝图被引用且父级传入真信号时,触发 blueprintActivated 生命周期节点,\n * 并将父级输入值写入 scope 供节点输出。\n */\n async emitBlueprintActivated(\n inputValue: unknown,\n parentScope?: Scope\n ): Promise<void> {\n const signal = createLifecycleSignal(\"blueprintActivated\");\n const targets = this.graph.nodes.filter(\n (node) =>\n node.nodeType === LIFECYCLE_NODE_TYPE &&\n node.lifecyclePhase === \"blueprintActivated\"\n );\n\n for (const node of targets) {\n await this.runFromNode(node.id, signal, parentScope, inputValue);\n }\n }\n\n /**\n * 视图节点触发事件时,匹配已注册(上游生命周期已触发)且绑定了该元素、事件类型的事件节点,发出真信号。\n */\n async emitViewEvent(\n payload: ViewEventSignal,\n armedNodeIds?: ReadonlySet<string>\n ): Promise<void> {\n await this.ensureNoBlueprintCycle();\n const targets = this.graph.nodes.filter((node) => {\n if (node.nodeType !== EVENT_NODE_TYPE) return false;\n if (armedNodeIds && !armedNodeIds.has(node.id)) return false;\n if (!(node.viewElementIds ?? []).includes(payload.node.id)) return false;\n return normalizeViewEventConfig(node.eventConfig).eventTypes.includes(\n payload.eventType\n );\n });\n\n for (const node of targets) {\n await this.runFromNode(node.id, undefined, undefined, undefined, payload);\n }\n }\n\n /** 时钟节点单次输出:向下游传播含当前时间的真信号 */\n async propagateClockOutput(\n nodeId: string,\n parentScope?: Scope,\n sessionKey?: string\n ): Promise<void> {\n const resolvedSessionKey =\n sessionKey ?? buildClockSessionKey(this.clockScopeId(), nodeId);\n if (isClockSessionAborted(resolvedSessionKey)) return;\n\n await this.ensureNoBlueprintCycle();\n const node = this.requireNode(nodeId);\n if (node.nodeType !== CLOCK_NODE_TYPE) return;\n\n const config = normalizeClockConfig({\n ...DEFAULT_CLOCK_NODE_CONFIG,\n ...node.clockConfig,\n });\n const value = buildClockSignalValue(config);\n this.setNodeOutput(nodeId, \"out\", createTrueSignal(value));\n\n const queue: ExecutionToken[] = [];\n for (const target of this.findSignalTargets(nodeId, \"out\")) {\n queue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: cloneScope(parentScope),\n });\n }\n\n const executor = this.createExecutor(queue);\n while (queue.length > 0) {\n if (isClockSessionAborted(resolvedSessionKey)) {\n queue.length = 0;\n return;\n }\n const token = queue.shift()!;\n if (!this.syncTokenFromGraph(token)) continue;\n try {\n await executor.executeToken(token);\n } catch (error) {\n this.setNodeOutput(\n token.nodeId,\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n const nextNodes = this.findSignalTargets(token.nodeId, \"out\");\n for (const target of nextNodes) {\n queue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: token.scope,\n correlationId: token.correlationId ?? token.tokenId,\n });\n }\n }\n }\n }\n\n private clockScopeId(): string {\n return this.rootLibraryBlueprintId ?? \"local\";\n }\n\n private startClockSchedule(nodeId: string, config: ClockNodeConfig, scope?: Scope) {\n const sessionKey = buildClockSessionKey(this.clockScopeId(), nodeId);\n markClockNodeActive(nodeId);\n scheduleClockOutputs({\n sessionKey,\n config,\n onTick: async () => {\n if (isClockSessionAborted(sessionKey)) return;\n await this.propagateClockOutput(nodeId, scope, sessionKey);\n },\n onSettled: () => markClockNodeInactive(nodeId),\n });\n }\n\n /** 中止指定时钟节点:停止剩余 tick 与正在执行的下游任务 */\n abortClockNode(nodeId: string): void {\n abortClockNodeSession(this.clockScopeId(), nodeId);\n }\n\n /** 从所有无入流 signal 的节点开始执行(嵌套蓝图调用) */\n async runFromFlowEntries(\n parentScope?: Scope,\n options?: { preserveOutputs?: boolean }\n ): Promise<BlueprintNodeOutputs> {\n if (!options?.preserveOutputs) {\n this.outputs.clear();\n }\n const entries = this.findSignalEntryNodes();\n for (const node of entries) {\n await this.runFromNode(node.id, undefined, parentScope);\n }\n return this.collectOutputs();\n }\n\n getNodeOutputs(): BlueprintNodeOutputs {\n return this.collectOutputs();\n }\n\n getTraceEntries(): ExecutionTraceEntry[] {\n return [...this.traceEntries];\n }\n\n isDebugSessionActive(): boolean {\n return this.debugQueue !== null;\n }\n\n isDebugQueueEmpty(): boolean {\n return !this.debugQueue || this.debugQueue.length === 0;\n }\n\n /** 调试过程中同步最新蓝图拓扑与节点配置 */\n updateGraph(graph: RunnableGraph): void {\n this.graph = graph;\n this.syncDebugQueueWithLatestGraph();\n }\n\n /**\n * 按当前图结构重建待执行队列。\n * 已有 trace 时,从最后执行的节点按最新出边重新入队;便于编辑连线后继续单步调试。\n */\n refreshPendingQueueFromLatestGraph(): void {\n if (!this.debugQueue) return;\n\n if (this.traceEntries.length === 0) {\n this.syncDebugQueueWithLatestGraph();\n return;\n }\n\n const lastEntry = this.traceEntries[this.traceEntries.length - 1]!;\n const lastOutput = this.getNodeOutput(lastEntry.nodeId, \"out\");\n if (\n lastOutput !== undefined &&\n isFalseSignal(lastOutput) &&\n !this.graph.allowFalseSignalPropagation\n ) {\n this.debugQueue = [];\n return;\n }\n\n const scope =\n this.debugQueue[0]?.scope ??\n this.debugHistory[0]?.queue[0]?.scope ??\n cloneScope();\n\n const node = this.graph.nodes.find((n) => n.id === lastEntry.nodeId);\n if (!node) {\n this.debugQueue = [];\n return;\n }\n\n let def;\n try {\n def = getNodeDefinition(node.nodeType);\n } catch {\n this.debugQueue = [];\n return;\n }\n\n const newQueue: ExecutionToken[] = [];\n for (const port of def.outputs) {\n if (this.getNodeOutput(lastEntry.nodeId, port.name) === undefined) {\n continue;\n }\n for (const target of this.findSignalTargets(lastEntry.nodeId, port.name)) {\n newQueue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: cloneScope(scope),\n });\n }\n }\n if (newQueue.length > 0 || this.debugQueue.length === 0) {\n this.debugQueue = newQueue;\n }\n }\n\n canDebugStepBack(): boolean {\n return this.debugHistory.length > 1;\n }\n\n debugStepBack(): boolean {\n if (!this.debugQueue || this.debugHistory.length <= 1) {\n return false;\n }\n this.debugHistory.pop();\n const snapshot = this.debugHistory[this.debugHistory.length - 1]!;\n this.restoreDebugSnapshot(snapshot);\n return true;\n }\n\n private captureDebugSnapshot(): DebugSessionSnapshot {\n return {\n outputs: cloneOutputs(this.outputs),\n queue: cloneQueue(this.debugQueue ?? []),\n traceEntries: [...this.traceEntries],\n };\n }\n\n private restoreDebugSnapshot(snapshot: DebugSessionSnapshot): void {\n this.outputs = cloneOutputs(snapshot.outputs);\n this.debugQueue = cloneQueue(snapshot.queue);\n this.traceEntries = [...snapshot.traceEntries];\n }\n\n private pushDebugSnapshot(): void {\n this.debugHistory.push(this.captureDebugSnapshot());\n }\n\n beginDebugSession(lifecycleNodeId: string): void {\n stopAllClockSchedules();\n const node = this.requireNode(lifecycleNodeId);\n if (node.nodeType !== LIFECYCLE_NODE_TYPE) {\n throw new Error(\"调试会话只能从生命周期节点开始\");\n }\n\n this.outputs.clear();\n this.traceEntries = [];\n this.debugQueue = [\n {\n tokenId: createTokenId(),\n nodeId: lifecycleNodeId,\n nodeType: node.nodeType,\n inPort: \"in\",\n scope: cloneScope(),\n },\n ];\n\n this.applyLifecycleScopeForNode(lifecycleNodeId);\n\n this.debugExecutor = this.createExecutor(this.debugQueue, {\n emitToActiveDebugQueue: true,\n });\n this.debugHistory = [this.captureDebugSnapshot()];\n }\n\n /** 调试中修改生命周期阶段后,同步队列头部的 scope 信号 */\n refreshDebugLifecycleScope(lifecycleNodeId: string): void {\n const head = this.debugQueue?.[0];\n if (!head || head.nodeId !== lifecycleNodeId) return;\n this.applyLifecycleScopeForNode(lifecycleNodeId);\n }\n\n private applyLifecycleScopeForNode(lifecycleNodeId: string): void {\n const head = this.debugQueue?.[0];\n if (!head || head.nodeId !== lifecycleNodeId) return;\n\n const node = this.graph.nodes.find((n) => n.id === lifecycleNodeId);\n if (!node?.lifecyclePhase) {\n head.scope.vars.delete(LIFECYCLE_SIGNAL_KEY);\n head.scope.vars.delete(BLUEPRINT_ACTIVATION_INPUT_KEY);\n return;\n }\n\n head.scope.vars.set(\n LIFECYCLE_SIGNAL_KEY,\n createLifecycleSignal(node.lifecyclePhase)\n );\n if (node.lifecyclePhase === \"blueprintActivated\") {\n head.scope.vars.set(BLUEPRINT_ACTIVATION_INPUT_KEY, undefined);\n } else {\n head.scope.vars.delete(BLUEPRINT_ACTIVATION_INPUT_KEY);\n }\n }\n\n clearDebugSession(): void {\n stopAllClockSchedules();\n this.debugQueue = null;\n this.debugExecutor = null;\n this.traceEntries = [];\n this.outputs.clear();\n this.debugHistory = [];\n }\n\n async debugStep(\n nodeLabelById?: Record<string, string>,\n onProgress?: DebugProgressCallback\n ): Promise<{\n done: boolean;\n entry?: ExecutionTraceEntry;\n haltedByFalseSignal?: boolean;\n }> {\n if (!this.debugQueue || !this.debugExecutor) {\n return { done: true };\n }\n if (this.debugQueue.length === 0) {\n return { done: true };\n }\n\n const prevCallback = this.debugProgressCallback;\n this.debugProgressCallback = onProgress ?? null;\n\n try {\n this.pushDebugSnapshot();\n const token = this.debugQueue.shift()!;\n if (!this.syncTokenFromGraph(token)) {\n this.pushDebugSnapshot();\n return {\n done: this.debugQueue.length === 0,\n haltedByFalseSignal: false,\n };\n }\n\n if (token.nodeType === CLOCK_NODE_TYPE) {\n const node = this.requireNode(token.nodeId);\n const config = normalizeClockConfig({\n ...DEFAULT_CLOCK_NODE_CONFIG,\n ...node.clockConfig,\n });\n const halted = await this.executeClockScheduleForDebug(\n token,\n config,\n nodeLabelById\n );\n this.haltDebugQueueOnFalseOutput(token.nodeId);\n this.pushDebugSnapshot();\n return {\n done: this.debugQueue.length === 0,\n entry: this.traceEntries[this.traceEntries.length - 1],\n haltedByFalseSignal:\n halted || this.isDebugHaltedByFalseOutput(token.nodeId),\n };\n }\n\n const entry = await this.executeDebugToken(token, nodeLabelById);\n this.haltDebugQueueOnFalseOutput(token.nodeId);\n this.pushDebugSnapshot();\n\n return {\n done: this.debugQueue.length === 0,\n entry,\n haltedByFalseSignal: this.isDebugHaltedByFalseOutput(token.nodeId),\n };\n } finally {\n this.debugProgressCallback = prevCallback;\n }\n }\n\n private notifyDebugProgress(): void {\n this.debugProgressCallback?.([...this.traceEntries]);\n }\n\n private async awaitClockDelay(ms: number, sessionKey?: string): Promise<void> {\n if (ms <= 0) return;\n const step = 50;\n let elapsed = 0;\n while (elapsed < ms) {\n if (sessionKey && isClockSessionAborted(sessionKey)) return;\n const chunk = Math.min(step, ms - elapsed);\n await new Promise<void>((resolve) => setTimeout(resolve, chunk));\n elapsed += chunk;\n }\n }\n\n private buildTraceInputsForNode(\n nodeId: string,\n nodeType: string\n ): Record<string, unknown> {\n const def = getNodeDefinition(nodeType);\n const inputs: Record<string, unknown> = {};\n for (const port of def.inputs) {\n inputs[port.name] = serializeTraceValue(\n this.resolvePortInputValue(nodeId, port.name)\n );\n }\n return inputs;\n }\n\n private appendDebugTraceEntry(\n token: ExecutionToken,\n nodeLabelById: Record<string, string> | undefined,\n startedAt: number,\n options?: {\n tickLabel?: string;\n clockTickIndex?: number;\n clockTickTotal?: number;\n inputs?: Record<string, unknown>;\n error?: string;\n }\n ): ExecutionTraceEntry {\n const def = getNodeDefinition(token.nodeType);\n const outputs: Record<string, unknown> = {};\n for (const port of def.outputs) {\n outputs[port.name] = serializeTraceValue(\n this.getNodeOutput(token.nodeId, port.name)\n );\n }\n\n const entry: ExecutionTraceEntry = {\n id: createTraceEntryId(),\n nodeId: token.nodeId,\n nodeLabel: options?.tickLabel ?? nodeLabelById?.[token.nodeId],\n nodeType: token.nodeType,\n startedAt,\n finishedAt: Date.now(),\n isoTime: new Date(startedAt).toISOString(),\n inputs:\n options?.inputs ??\n this.buildTraceInputsForNode(token.nodeId, token.nodeType),\n outputs,\n error: options?.error,\n clockTickIndex: options?.clockTickIndex,\n clockTickTotal: options?.clockTickTotal,\n };\n this.traceEntries.push(entry);\n this.notifyDebugProgress();\n return entry;\n }\n\n private enqueueDebugTargets(\n sourceNodeId: string,\n outPort: string,\n scope: Scope\n ): ExecutionToken[] {\n return this.findSignalTargets(sourceNodeId, outPort).map((target) => ({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: cloneScope(scope),\n }));\n }\n\n private async runDebugTokenSubqueue(\n queue: ExecutionToken[],\n nodeLabelById?: Record<string, string>,\n abortSessionKey?: string\n ): Promise<boolean> {\n const executor = this.createExecutor(queue);\n\n while (queue.length > 0) {\n if (abortSessionKey && isClockSessionAborted(abortSessionKey)) {\n queue.length = 0;\n return false;\n }\n\n const token = queue.shift()!;\n\n if (token.nodeType === CLOCK_NODE_TYPE) {\n const node = this.requireNode(token.nodeId);\n const config = normalizeClockConfig({\n ...DEFAULT_CLOCK_NODE_CONFIG,\n ...node.clockConfig,\n });\n const halted = await this.executeClockScheduleForDebug(\n token,\n config,\n nodeLabelById\n );\n if (halted) return true;\n continue;\n }\n\n await this.executeDebugToken(token, nodeLabelById, executor, queue);\n if (abortSessionKey && isClockSessionAborted(abortSessionKey)) {\n queue.length = 0;\n return false;\n }\n if (this.isDebugHaltedByFalseOutput(token.nodeId)) {\n return true;\n }\n this.pushDebugSnapshot();\n }\n\n return false;\n }\n\n private async executeDebugToken(\n token: ExecutionToken,\n nodeLabelById?: Record<string, string>,\n executor?: Executor,\n emitQueue?: ExecutionToken[]\n ): Promise<ExecutionTraceEntry> {\n const startedAt = Date.now();\n let error: string | undefined;\n\n const runExecutor =\n executor ??\n this.debugExecutor ??\n this.createExecutor(this.debugQueue ?? []);\n\n if (!this.syncTokenFromGraph(token)) {\n return this.appendDebugTraceEntry(token, nodeLabelById, startedAt, {\n error: \"节点已从蓝图中移除\",\n });\n }\n\n try {\n await runExecutor.executeToken(token);\n } catch (err) {\n error = err instanceof Error ? err.message : String(err);\n this.setNodeOutput(\n token.nodeId,\n \"out\",\n createFalseSignal(error)\n );\n const targets = emitQueue ?? this.debugQueue;\n if (targets) {\n for (const next of this.enqueueDebugTargets(\n token.nodeId,\n \"out\",\n token.scope\n )) {\n targets.push(next);\n }\n }\n }\n\n return this.appendDebugTraceEntry(token, nodeLabelById, startedAt, {\n error,\n });\n }\n\n /**\n * 调试模式下执行完整时钟序列:等待 n 次输出(含间隔),\n * 每次更新 trace / 画布高亮,并同步跑完当次下游链。\n */\n private async executeClockScheduleForDebug(\n token: ExecutionToken,\n config: ClockNodeConfig,\n nodeLabelById?: Record<string, string>\n ): Promise<boolean> {\n const sessionKey = buildClockSessionKey(this.clockScopeId(), token.nodeId);\n clearClockSessionAbort(sessionKey);\n markClockNodeActive(token.nodeId);\n try {\n const normalized = normalizeClockConfig(config);\n const baseInputs = this.buildTraceInputsForNode(\n token.nodeId,\n token.nodeType\n );\n const input = this.resolvePortInputValue(token.nodeId, \"in\");\n\n const finishWithOutput = async (\n output: Value,\n tickLabel?: string\n ): Promise<boolean> => {\n this.setNodeOutput(token.nodeId, \"out\", output);\n this.appendDebugTraceEntry(token, nodeLabelById, Date.now(), {\n tickLabel,\n inputs: baseInputs,\n });\n this.pushDebugSnapshot();\n const subQueue = this.enqueueDebugTargets(\n token.nodeId,\n \"out\",\n token.scope\n );\n return this.runDebugTokenSubqueue(subQueue, nodeLabelById, sessionKey);\n };\n\n if (isFalseSignal(input)) {\n return finishWithOutput(input);\n }\n\n if (!isTrueSignal(input)) {\n return finishWithOutput(\n createFalseSignal(\"时钟节点需要收到真信号后才会启动\")\n );\n }\n\n const validation = validateClockScheduleConfig(normalized);\n if (!validation.ok) {\n return finishWithOutput(createFalseSignal(validation.error));\n }\n\n const baseLabel = nodeLabelById?.[token.nodeId] ?? token.nodeId;\n const scheduleStartMs = Date.now();\n\n for (let i = 0; i < normalized.outputCount; i++) {\n if (isClockSessionAborted(sessionKey)) return false;\n\n const waitMs = getClockTickWaitMs(normalized, i, scheduleStartMs);\n if (waitMs > 0) {\n await this.awaitClockDelay(waitMs, sessionKey);\n }\n if (isClockSessionAborted(sessionKey)) return false;\n\n const tickStarted = Date.now();\n const value = buildClockSignalValue(normalized);\n this.setNodeOutput(token.nodeId, \"out\", createTrueSignal(value));\n\n const tickLabel =\n normalized.outputCount > 1\n ? `${baseLabel} (${i + 1}/${normalized.outputCount})`\n : baseLabel;\n\n this.appendDebugTraceEntry(token, nodeLabelById, tickStarted, {\n tickLabel,\n inputs: baseInputs,\n clockTickIndex: i + 1,\n clockTickTotal: normalized.outputCount,\n });\n this.pushDebugSnapshot();\n\n const subQueue = this.enqueueDebugTargets(\n token.nodeId,\n \"out\",\n token.scope\n );\n const halted = await this.runDebugTokenSubqueue(\n subQueue,\n nodeLabelById,\n sessionKey\n );\n if (halted || isClockSessionAborted(sessionKey)) return halted;\n }\n\n return false;\n } finally {\n markClockNodeInactive(token.nodeId);\n }\n }\n\n isDebugHaltedByFalseOutput(nodeId?: string): boolean {\n if (this.graph.allowFalseSignalPropagation) return false;\n const targetId = nodeId ?? this.traceEntries[this.traceEntries.length - 1]?.nodeId;\n if (!targetId) return false;\n return this.isFalseOutputNode(targetId);\n }\n\n private isFalseOutputNode(nodeId: string): boolean {\n const out = this.getNodeOutput(nodeId, \"out\");\n return out !== undefined && isFalseSignal(out);\n }\n\n private haltDebugQueueOnFalseOutput(nodeId: string): void {\n if (!this.debugQueue || this.graph.allowFalseSignalPropagation) return;\n if (this.isFalseOutputNode(nodeId)) {\n this.debugQueue = [];\n }\n }\n\n async debugRunAll(\n nodeLabelById?: Record<string, string>,\n onProgress?: DebugProgressCallback\n ): Promise<ExecutionTraceEntry[]> {\n while (this.debugQueue && this.debugQueue.length > 0) {\n await this.debugStep(nodeLabelById, onProgress);\n }\n return this.getTraceEntries();\n }\n\n private registerBlueprintRefBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"blueprint-ref-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n\n try {\n const input = await io.getInput(\"in\");\n if (!isTrueSignal(input)) {\n io.setOutput(\n \"out\",\n createFalseSignal(\"蓝图节点需要收到真信号后才会执行\")\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const libraryId = node.libraryBlueprintId;\n if (!libraryId) {\n io.setOutput(\"out\", createFalseSignal(\"未选择蓝图库中的蓝图\"));\n io.emitFlow(\"out\");\n return;\n }\n\n if (!runner.resolveLibraryBlueprint) {\n io.setOutput(\"out\", createFalseSignal(\"蓝图库解析器未配置\"));\n io.emitFlow(\"out\");\n return;\n }\n\n const scopeStack = token.scope.vars.get(BLUEPRINT_CALL_STACK_KEY) as\n | string[]\n | undefined;\n const callStack = resolveBlueprintCallStack(\n scopeStack,\n runner.rootLibraryBlueprintId\n );\n const runtimeCycle = detectRuntimeBlueprintCycle(\n callStack,\n libraryId,\n runner.resolveBlueprintName\n );\n if (!runtimeCycle.ok) {\n io.setOutput(\"out\", createFalseSignal(runtimeCycle.message));\n io.emitFlow(\"out\");\n return;\n }\n\n const nestedGraph = await runner.resolveLibraryBlueprint(libraryId);\n if (!nestedGraph) {\n io.setOutput(\n \"out\",\n createFalseSignal(`蓝图库记录不存在: ${libraryId}`)\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const nestedScope = cloneScope(token.scope);\n nestedScope.vars.set(BLUEPRINT_CALL_STACK_KEY, [...callStack, libraryId]);\n\n const subRunner = new BlueprintGraphRunner(nestedGraph, {\n resolveLibraryBlueprint: runner.resolveLibraryBlueprint,\n rootLibraryBlueprintId: libraryId,\n resolveBlueprintName: runner.resolveBlueprintName,\n onViewScopeUpdate: runner.onViewScopeUpdate,\n });\n await subRunner.emitBlueprintActivated(input.value, nestedScope);\n const nestedOutputs = await subRunner.runFromFlowEntries(nestedScope, {\n preserveOutputs: true,\n });\n\n const payload: BlueprintRefOutput = {\n nodeId: token.nodeId,\n nodeType: node.nodeType,\n libraryBlueprintId: libraryId,\n blueprintName:\n node.blueprintName ?? nestedGraph.nodes[0]?.blueprintName,\n nestedOutputs,\n };\n\n io.setOutput(\"out\", createTrueSignal(payload));\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerFetchBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"fetch-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n\n try {\n const inputPort = token.inPort || \"in\";\n const input = await io.getInput(inputPort);\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n io.emitFlow(\"out\");\n return;\n }\n if (!isTrueSignal(input)) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n input === undefined\n ? \"数据源节点未收到上游输出,请确认连线与上游节点已执行\"\n : \"数据源节点需要收到真信号后才会发起请求\"\n )\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const incomingScope = runner.buildFetchIncomingScope(\n token.nodeId,\n inputPort,\n input\n );\n const config = applyFetchConfigScope(\n normalizeFetchRequestConfig(node.fetchConfig),\n incomingScope\n );\n const headersError = getFetchHeadersValidationError(config, incomingScope);\n if (headersError) {\n throw new Error(headersError);\n }\n const bodyError = getFetchBodyValidationError(config.body, config.body);\n if (bodyError) {\n throw new Error(`请求体不是有效 JSON:${bodyError}`);\n }\n resolveFetchRequestUrl(config);\n\n const result = await executeFetch(config, {\n allowHttpError: runner.isDebugSessionActive(),\n });\n io.setOutput(\"out\", createTrueSignal(result));\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerLogicBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"logic-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n\n try {\n const input = await io.getInput(\"in\");\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n io.emitFlow(\"out\");\n return;\n }\n\n const inputValue = isTrueSignal(input) ? input.value : undefined;\n const config: LogicNodeConfig = {\n ...DEFAULT_LOGIC_NODE_CONFIG,\n ...node.logicConfig,\n };\n const result = executeLogicConfig(config, inputValue);\n io.setOutput(\"out\", createTrueSignal(result));\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerJsonBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"json-parse-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n\n try {\n const input = await io.getInput(\"in\");\n if (!isTrueSignal(input)) {\n io.setOutput(\n \"out\",\n createFalseSignal(\"JSON 节点需要收到真信号后才会解析\")\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const config: JsonNodeConfig = {\n ...DEFAULT_JSON_NODE_CONFIG,\n ...node.jsonConfig,\n };\n const value = parseJsonConfig(config);\n io.setOutput(\"out\", createTrueSignal(value));\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerClockBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"clock-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n const config = normalizeClockConfig({\n ...DEFAULT_CLOCK_NODE_CONFIG,\n ...node.clockConfig,\n });\n\n try {\n const input = await io.getInput(\"in\");\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n io.emitFlow(\"out\");\n return;\n }\n if (!isTrueSignal(input)) {\n io.setOutput(\n \"out\",\n createFalseSignal(\"时钟节点需要收到真信号后才会启动\")\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const validation = validateClockScheduleConfig(config);\n if (!validation.ok) {\n io.setOutput(\"out\", createFalseSignal(validation.error));\n io.emitFlow(\"out\");\n return;\n }\n\n if (runner.isDebugSessionActive()) {\n return;\n }\n\n runner.startClockSchedule(token.nodeId, config, token.scope);\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n io.emitFlow(\"out\");\n }\n });\n }\n\n private registerAndBehavior() {\n this.behaviors.registerJS(\"and-run\", async ({ io }) => {\n const inA = await io.getInput(\"inA\");\n const inB = await io.getInput(\"inB\");\n\n if (isTrueSignal(inA) && isTrueSignal(inB)) {\n io.setOutput(\n \"out\",\n createTrueSignal({ inA: inA.value, inB: inB.value })\n );\n } else {\n io.setOutput(\n \"out\",\n createFalseSignal(\"并运算:两个输入须均为真信号\")\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerViewBindBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"view-bind-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n const input = await io.getInput(\"in\");\n\n if (isTrueSignal(input) && node.viewElementIds?.length) {\n runner.onViewScopeUpdate?.(node.viewElementIds, input.value);\n }\n\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n } else if (isTrueSignal(input)) {\n io.setOutput(\"out\", createTrueSignal(input.value));\n } else {\n io.setOutput(\"out\", createTrueSignal(undefined));\n }\n io.emitFlow(\"out\");\n });\n }\n\n private async runFromNode(\n nodeId: string,\n lifecycleSignal?: LifecycleSignal,\n parentScope?: Scope,\n activationInput?: unknown,\n viewEvent?: ViewEventSignal\n ) {\n const queue: ExecutionToken[] = [\n {\n tokenId: createTokenId(),\n nodeId,\n nodeType: this.requireNode(nodeId).nodeType,\n inPort: \"in\",\n scope: cloneScope(parentScope),\n },\n ];\n\n if (lifecycleSignal) {\n queue[0]!.scope.vars.set(LIFECYCLE_SIGNAL_KEY, lifecycleSignal);\n }\n if (lifecycleSignal?.phase === \"blueprintActivated\") {\n queue[0]!.scope.vars.set(\n BLUEPRINT_ACTIVATION_INPUT_KEY,\n activationInput\n );\n }\n if (viewEvent) {\n queue[0]!.scope.vars.set(VIEW_EVENT_SIGNAL_KEY, viewEvent);\n queue[0]!.scope.vars.set(UI_EVENT_PAYLOAD_KEY, viewEvent);\n }\n\n const executor = this.createExecutor(queue);\n\n while (queue.length > 0) {\n const token = queue.shift()!;\n if (!this.syncTokenFromGraph(token)) continue;\n try {\n await executor.executeToken(token);\n } catch (error) {\n this.setNodeOutput(\n token.nodeId,\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n const nextNodes = this.findSignalTargets(token.nodeId, \"out\");\n for (const target of nextNodes) {\n queue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: token.scope,\n correlationId: token.correlationId ?? token.tokenId,\n });\n }\n }\n }\n }\n\n private createExecutor(\n queue: ExecutionToken[],\n options?: { emitToActiveDebugQueue?: boolean }\n ) {\n return new Executor({\n getNodeDefinition,\n behaviors: this.behaviors,\n runBlueprint: async () => {\n // 由 blueprint-ref-run 行为处理\n },\n getInputValue: async (token, port) => {\n const resolvedPort = port || token.inPort || \"in\";\n return this.resolvePortInputValue(token.nodeId, resolvedPort);\n },\n setNodeOutput: (token, port, value) => {\n this.setNodeOutput(token.nodeId, port, value);\n },\n emitFlow: (token, outPort) => {\n const targetQueue =\n options?.emitToActiveDebugQueue && this.debugQueue\n ? this.debugQueue\n : queue;\n const nextNodes = this.findSignalTargets(token.nodeId, outPort);\n for (const target of nextNodes) {\n targetQueue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: token.scope,\n correlationId: token.correlationId ?? token.tokenId,\n });\n }\n },\n });\n }\n\n private findSignalEntryNodes() {\n const hasIncoming = new Set<string>();\n for (const edge of this.graph.edges) {\n hasIncoming.add(edge.target);\n }\n return this.graph.nodes.filter(\n (node) =>\n node.nodeType !== LIFECYCLE_NODE_TYPE &&\n node.nodeType !== EVENT_NODE_TYPE &&\n !hasIncoming.has(node.id)\n );\n }\n\n private collectOutputs(): BlueprintNodeOutputs {\n const result: BlueprintNodeOutputs = {};\n for (const [nodeId, ports] of this.outputs.entries()) {\n result[nodeId] = Object.fromEntries(ports.entries());\n }\n return result;\n }\n\n private requireNode(nodeId: string): RunnableGraphNode {\n const node = this.graph.nodes.find((n) => n.id === nodeId);\n if (!node) {\n throw new Error(`Graph node not found: ${nodeId}`);\n }\n return node;\n }\n\n /** 队列中的 token 可能是在节点改类型(如视图绑定)之前入队的,执行前与最新图对齐 */\n private syncTokenFromGraph(token: ExecutionToken): boolean {\n const node = this.graph.nodes.find((n) => n.id === token.nodeId);\n if (!node) return false;\n token.nodeType = node.nodeType;\n return true;\n }\n\n private syncDebugQueueWithLatestGraph(): void {\n if (!this.debugQueue) return;\n this.debugQueue = this.debugQueue.filter((token) =>\n this.syncTokenFromGraph(token)\n );\n }\n\n private findSignalTargets(nodeId: string, outPort: string) {\n return this.graph.edges\n .filter(\n (edge) =>\n edge.source === nodeId && (edge.sourceHandle ?? \"out\") === outPort\n )\n .map((edge) => {\n const target = this.requireNode(edge.target);\n return {\n nodeId: target.id,\n nodeType: target.nodeType,\n inPort: edge.targetHandle ?? \"in\",\n };\n });\n }\n\n private findInboundSignalEdges(nodeId: string, port: string) {\n return this.graph.edges.filter(\n (edge) =>\n edge.target === nodeId && (edge.targetHandle ?? \"in\") === port\n );\n }\n\n private buildFetchIncomingScope(\n nodeId: string,\n port: string,\n fallbackInput: Value | undefined\n ) {\n return resolveFetchIncomingScope({\n fetchNodeId: nodeId,\n inputPort: port,\n nodes: this.graph.nodes.map((node) => ({\n id: node.id,\n label: node.label,\n nodeType: node.nodeType,\n role: node.role,\n })),\n edges: this.graph.edges,\n getOutput: (sourceId, sourcePort) =>\n this.getNodeOutput(sourceId, sourcePort),\n fallbackInput,\n });\n }\n\n /** 单端口多连线:任一为真则视为真(或语义);支持 triggerNode 注入的入口信号 */\n private resolvePortInputValue(nodeId: string, port: string): Value | undefined {\n const injected = this.injectedInputs.get(`${nodeId}:${port}`);\n if (injected !== undefined) return injected;\n\n const inboundEdges = this.findInboundSignalEdges(nodeId, port);\n if (inboundEdges.length === 0) return undefined;\n\n const values = inboundEdges.map((edge) =>\n this.getNodeOutput(edge.source, edge.sourceHandle ?? \"out\")\n );\n return combinePortSignalsOr(values);\n }\n\n private findInboundSignalEdge(nodeId: string, port: string) {\n return this.findInboundSignalEdges(nodeId, port)[0];\n }\n\n private getNodeOutput(nodeId: string, port: string): Value {\n return this.outputs.get(nodeId)?.get(port);\n }\n\n private setNodeOutput(nodeId: string, port: string, value: Value) {\n let nodeOutputs = this.outputs.get(nodeId);\n if (!nodeOutputs) {\n nodeOutputs = new Map();\n this.outputs.set(nodeId, nodeOutputs);\n }\n nodeOutputs.set(port, value);\n }\n}\n\nexport { BLUEPRINT_NODE_TYPE, VIEW_NODE_TYPE };\n"]}
1
+ {"version":3,"sources":["../src/lifecycle.ts","../src/node-signal.ts","../src/core/behavior-registry.ts","../src/core/executor.ts","../src/behaviors/default.ts","../src/scope-template.ts","../src/fetch-config.ts","../src/scope-autocomplete.ts","../src/incoming-node-scope.ts","../src/json-config.ts","../src/storage-config.ts","../src/logic-config.ts","../src/clock-config.ts","../src/event-config.ts","../src/swagger.ts","../src/runtime/execution-trace.ts","../src/nodes/definitions.ts","../src/runtime/blueprint-cycle.ts","../src/runtime/clock-active-registry.ts","../src/runtime/clock-scheduler.ts","../src/runtime/graph-runner.ts"],"names":["parsed"],"mappings":"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","file":"index.cjs","sourcesContent":["/** 页面生命周期阶段 */\nexport const PAGE_LIFECYCLE_PHASES = [\n \"created\",\n \"beforeMount\",\n \"mounted\",\n \"updated\",\n \"beforeDestroy\",\n \"destroy\",\n \"activated\",\n \"deactivated\",\n /** 被其他蓝图的蓝图配置节点引用且收到真信号时触发 */\n \"blueprintActivated\",\n] as const;\n\nexport type PageLifecyclePhase = (typeof PAGE_LIFECYCLE_PHASES)[number];\n\nexport type LifecycleSignal = {\n /** 触发的生命周期枚举 */\n phase: PageLifecyclePhase;\n /** 触发时刻(Unix 毫秒时间戳) */\n timestamp: number;\n /** ISO 8601 时间字符串,便于下游节点展示或日志 */\n isoTime: string;\n};\n\nexport const PAGE_LIFECYCLE_LABELS: Record<PageLifecyclePhase, string> = {\n created: \"已创建 (created)\",\n beforeMount: \"挂载前 (beforeMount)\",\n mounted: \"已挂载 (mounted)\",\n updated: \"已更新 (updated)\",\n beforeDestroy: \"销毁前 (beforeDestroy)\",\n destroy: \"已销毁 (destroy)\",\n activated: \"已激活 (activated)\",\n deactivated: \"已停用 (deactivated)\",\n blueprintActivated: \"蓝图激活 (blueprintActivated)\",\n};\n\nexport function createLifecycleSignal(phase: PageLifecyclePhase): LifecycleSignal {\n const timestamp = Date.now();\n return {\n phase,\n timestamp,\n isoTime: new Date(timestamp).toISOString(),\n };\n}\n","import type { Value } from \"./type.js\";\n\n/** 真信号:节点正常执行完成时的输出 */\nexport type TrueSignal<T = Value> = {\n kind: \"true\";\n value: T;\n timestamp: number;\n isoTime: string;\n};\n\n/** 假信号:节点执行出错时的输出 */\nexport type FalseSignal = {\n kind: \"false\";\n error: string;\n timestamp: number;\n isoTime: string;\n};\n\nexport type NodeSignal<T = Value> = TrueSignal<T> | FalseSignal;\n\nexport function isTrueSignal<T = Value>(\n signal: unknown\n): signal is TrueSignal<T> {\n return (\n !!signal &&\n typeof signal === \"object\" &&\n (signal as TrueSignal).kind === \"true\"\n );\n}\n\nexport function isFalseSignal(signal: unknown): signal is FalseSignal {\n return (\n !!signal &&\n typeof signal === \"object\" &&\n (signal as FalseSignal).kind === \"false\"\n );\n}\n\nexport function createTrueSignal<T = Value>(value: T): TrueSignal<T> {\n const timestamp = Date.now();\n return {\n kind: \"true\",\n value,\n timestamp,\n isoTime: new Date(timestamp).toISOString(),\n };\n}\n\nexport function createFalseSignal(error: string): FalseSignal {\n const timestamp = Date.now();\n return {\n kind: \"false\",\n error,\n timestamp,\n isoTime: new Date(timestamp).toISOString(),\n };\n}\n\n/**\n * 同一输入端口连 n 条线时的「或」语义:任一为真则端口为真;\n * 若无真且存在假信号则合并为假;全无连线则为 undefined。\n */\nexport function combinePortSignalsOr(\n values: Array<Value | undefined>\n): Value | undefined {\n const defined = values.filter((value) => value !== undefined);\n if (defined.length === 0) return undefined;\n\n for (const value of defined) {\n if (isTrueSignal(value)) {\n return createTrueSignal(value.value);\n }\n }\n\n const falseSignals = defined.filter(isFalseSignal);\n if (falseSignals.length > 0) {\n return createFalseSignal(\n falseSignals.map((signal) => signal.error).join(\";\")\n );\n }\n\n return undefined;\n}\n","// behavior-registry.ts\nimport { BehaviorFn } from \"./behavior\"\n\ntype JSBehavior = {\n kind: \"js\"\n run: BehaviorFn\n}\n\ntype BlueprintBehavior = {\n kind: \"blueprint\"\n blueprintId: string\n}\n\nexport type Behavior = JSBehavior | BlueprintBehavior\n\nexport class BehaviorRegistry {\n private map = new Map<string, Behavior>()\n\n registerJS(id: string, fn: BehaviorFn) {\n this.map.set(id, { kind: \"js\", run: fn })\n }\n\n registerBlueprint(id: string, blueprintId: string) {\n this.map.set(id, { kind: \"blueprint\", blueprintId })\n }\n\n get(id: string): Behavior {\n const b = this.map.get(id)\n if (!b) throw new Error(`Behavior not found: ${id}`)\n return b\n }\n}\n","// executor.ts\nimport { BehaviorRegistry } from \"./behavior-registry\";\nimport { NodeDefinition, ExecutionToken, Value } from \"../type\";\n\nexport type ExecutorDeps = {\n getNodeDefinition(type: string): NodeDefinition;\n behaviors: BehaviorRegistry;\n\n // 蓝图 runner(给 blueprint behavior 用)\n runBlueprint: (args: {\n blueprintId: string;\n token: ExecutionToken;\n }) => Promise<void>;\n\n // 图能力(flow / data)\n getInputValue: (token: ExecutionToken, port: string) => Promise<Value>;\n setNodeOutput: (token: ExecutionToken, port: string, value: Value) => void;\n emitFlow: (token: ExecutionToken, outPort: string) => void;\n};\nexport class Executor {\n constructor(private deps: ExecutorDeps) {}\n\n async executeToken(token: ExecutionToken): Promise<void> {\n const def = this.deps.getNodeDefinition(token.nodeType)\n const behavior = this.deps.behaviors.get(def.behavior.ref)\n\n const io = {\n getInput: (name: string) =>\n this.deps.getInputValue(token, name),\n\n setOutput: (name: string, value: Value) =>\n this.deps.setNodeOutput(token, name, value),\n\n emitFlow: (port = \"out\") =>\n this.deps.emitFlow(token, port),\n }\n\n if (behavior.kind === \"js\") {\n await behavior.run({ token, io })\n return\n }\n\n if (behavior.kind === \"blueprint\") {\n await this.deps.runBlueprint({\n blueprintId: behavior.blueprintId,\n token,\n })\n return\n }\n }\n}\n","import {\n createFalseSignal,\n createTrueSignal,\n isFalseSignal,\n isTrueSignal,\n} from \"../node-signal.js\";\nimport type { LifecycleSignal } from \"../lifecycle.js\";\nimport type { ViewEventSignal } from \"../event-config.js\";\nimport { BehaviorRegistry } from \"../core/behavior-registry.js\";\n\nconst LIFECYCLE_SIGNAL_KEY = \"__lifecycleSignal\";\nconst BLUEPRINT_ACTIVATION_INPUT_KEY = \"__blueprintActivationInput\";\nconst UI_EVENT_PAYLOAD_KEY = \"__uiEventPayload\";\nconst VIEW_EVENT_SIGNAL_KEY = \"__viewEventSignal\";\n\nexport function registerDefaultBehaviors(registry: BehaviorRegistry) {\n registry.registerJS(\"logic-noop\", async ({ io }) => {\n const input = await io.getInput(\"in\");\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n } else if (isTrueSignal(input)) {\n io.setOutput(\"out\", createTrueSignal(input.value));\n } else {\n io.setOutput(\"out\", createTrueSignal(undefined));\n }\n io.emitFlow(\"out\");\n });\n\n registry.registerJS(\"lifecycle-emit\", async ({ token, io }) => {\n const lifecycle = token.scope.vars.get(LIFECYCLE_SIGNAL_KEY) as\n | LifecycleSignal\n | undefined;\n if (!lifecycle) {\n io.setOutput(\"out\", createFalseSignal(\"生命周期信号缺失\"));\n } else if (lifecycle.phase === \"blueprintActivated\") {\n io.setOutput(\n \"out\",\n createTrueSignal(token.scope.vars.get(BLUEPRINT_ACTIVATION_INPUT_KEY))\n );\n } else {\n io.setOutput(\"out\", createTrueSignal(lifecycle));\n }\n io.emitFlow(\"out\");\n });\n\n registry.registerJS(\"event-emit\", async ({ token, io }) => {\n const payload = token.scope.vars.get(VIEW_EVENT_SIGNAL_KEY) as\n | ViewEventSignal\n | undefined;\n if (!payload) {\n // 生命周期输入只负责注册,不向下游发出信号\n return;\n }\n io.setOutput(\"out\", createTrueSignal(payload));\n io.emitFlow(\"out\");\n });\n}\n\nexport {\n LIFECYCLE_SIGNAL_KEY,\n BLUEPRINT_ACTIVATION_INPUT_KEY,\n UI_EVENT_PAYLOAD_KEY,\n VIEW_EVENT_SIGNAL_KEY,\n};\n","/** 仅匹配 `{scope...}`,避免把 JSON 对象 `{ \"a\": 1 }` 误当成模板 */\nconst SCOPE_TOKEN_RE = /\\{(scope[^}]*)\\}/g;\n\nexport function hasScopeTemplate(value: string): boolean {\n SCOPE_TOKEN_RE.lastIndex = 0;\n return SCOPE_TOKEN_RE.test(value);\n}\n\nexport function evaluateScopeExpression(\n expression: string,\n scope: unknown\n): unknown {\n const trimmed = expression.trim();\n if (!trimmed) return undefined;\n try {\n const fn = new Function(\"scope\", `\"use strict\"; return (${trimmed});`);\n return fn(scope);\n } catch {\n return undefined;\n }\n}\n\nexport function stringifyScopeValue(value: unknown): string {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction isInsideJsonString(before: string): boolean {\n let inString = false;\n let escape = false;\n for (const ch of before) {\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === \"\\\\\") {\n escape = true;\n continue;\n }\n if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n }\n return inString;\n}\n\nfunction replaceScopeTokens(\n template: string,\n scope: unknown,\n replacer: (value: unknown, offset: number) => string\n): string {\n SCOPE_TOKEN_RE.lastIndex = 0;\n return template.replace(SCOPE_TOKEN_RE, (_match, rawExpr: string, offset: number) =>\n replacer(evaluateScopeExpression(rawExpr, scope), offset)\n );\n}\n\n/** 将 `{scope?.a}` 替换为求值结果;无模板时原样返回 */\nexport function evaluateScopeTemplate(template: string, scope: unknown): string {\n if (!hasScopeTemplate(template)) return template;\n return replaceScopeTokens(template, scope, (value) => stringifyScopeValue(value));\n}\n\n/**\n * 在 JSON 文本中替换 `{scope?...}`:\n * - 位于字符串内时写入转义后的内容\n * - 位于值位置时写入 JSON 字面量(对象/数组/字符串/数字)\n */\nexport function evaluateScopeTemplateInJson(template: string, scope: unknown): string {\n if (!hasScopeTemplate(template)) return template;\n return replaceScopeTokens(template, scope, (value, offset) => {\n if (isInsideJsonString(template.slice(0, offset))) {\n return JSON.stringify(stringifyScopeValue(value)).slice(1, -1);\n }\n if (value === undefined) return \"null\";\n return JSON.stringify(value);\n });\n}\n\nexport function looksLikeJsonText(text: string): boolean {\n const trimmed = text.trim();\n return trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\");\n}\n","import type { SwaggerApiEndpoint } from \"./swagger.js\";\nimport { looksLikeJsonText } from \"./scope-template.js\";\n\nexport const FETCH_HTTP_METHODS = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"HEAD\",\n \"OPTIONS\",\n] as const;\n\nexport type FetchHttpMethod = (typeof FETCH_HTTP_METHODS)[number];\n\nexport const FETCH_RESPONSE_TYPES = [\"json\", \"text\"] as const;\n\nexport type FetchResponseType = (typeof FETCH_RESPONSE_TYPES)[number];\n\nexport const FETCH_CREDENTIALS = [\"omit\", \"same-origin\", \"include\"] as const;\n\nexport const FETCH_MODES = [\"cors\", \"no-cors\", \"same-origin\", \"navigate\"] as const;\n\nexport const FETCH_CACHES = [\n \"default\",\n \"no-store\",\n \"reload\",\n \"no-cache\",\n \"force-cache\",\n \"only-if-cached\",\n] as const;\n\nexport const FETCH_REDIRECTS = [\"follow\", \"error\", \"manual\"] as const;\n\nexport type FetchUrlInputMode = \"swagger\" | \"manual\";\n\nexport type FetchRequestConfig = {\n url: string;\n method?: FetchHttpMethod;\n headers?: Record<string, string>;\n /**\n * 请求头编辑器原文。可写 JSON,也可整段写成 `{scope?...}`。\n * 运行时优先按该字段解析,避免未加引号的模板在 JSON.parse 时被丢掉。\n */\n headersJson?: string;\n body?: string;\n credentials?: RequestCredentials;\n mode?: RequestMode;\n cache?: RequestCache;\n redirect?: RequestRedirect;\n responseType?: FetchResponseType;\n timeoutMs?: number;\n /** Swagger / OpenAPI 文档 JSON 地址 */\n swaggerDocsUrl?: string;\n /** API 主机或基础路径,可与接口 path 组合 */\n apiBaseUrl?: string;\n /** 从 Swagger 文档解析出的接口列表 */\n swaggerEndpoints?: SwaggerApiEndpoint[];\n /** 请求 URL 输入方式:接口联想或手动输入 */\n urlInputMode?: FetchUrlInputMode;\n};\n\nexport const DEFAULT_FETCH_REQUEST_CONFIG: FetchRequestConfig = {\n url: \"\",\n method: \"GET\",\n headers: {},\n body: \"\",\n credentials: \"same-origin\",\n mode: \"cors\",\n cache: \"default\",\n redirect: \"follow\",\n responseType: \"json\",\n timeoutMs: 30000,\n};\n\n/** 合并默认项与节点上保存的 fetch 配置,供运行时发起请求 */\nexport function normalizeFetchRequestConfig(\n config?: FetchRequestConfig\n): FetchRequestConfig {\n return {\n ...DEFAULT_FETCH_REQUEST_CONFIG,\n ...config,\n headers: {\n ...DEFAULT_FETCH_REQUEST_CONFIG.headers,\n ...config?.headers,\n },\n headersJson: config?.headersJson,\n swaggerEndpoints: config?.swaggerEndpoints,\n };\n}\n\nexport type FetchResultValue = {\n status: number;\n statusText: string;\n url: string;\n data: unknown;\n};\n\nfunction joinFetchUrl(base: string, path: string): string {\n const normalizedBase = base.replace(/\\/+$/, \"\");\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${normalizedBase}${normalizedPath}`;\n}\n\nfunction getUrlAuthorityPart(url: string): string | null {\n const trimmed = url.trim();\n if (!trimmed || trimmed.startsWith(\"/\")) return null;\n const slashIndex = trimmed.indexOf(\"/\");\n return slashIndex === -1 ? trimmed : trimmed.slice(0, slashIndex);\n}\n\nfunction isAbsoluteHostAuthority(authority: string): boolean {\n if (/^localhost$/i.test(authority)) return true;\n if (/^localhost:\\d+$/i.test(authority)) return true;\n if (/^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(authority)) return true;\n if (/^\\d{1,3}(?:\\.\\d{1,3}){3}:\\d+$/.test(authority)) return true;\n if (/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(authority) && authority.includes(\".\")) {\n return true;\n }\n if (/^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?\\.[a-z]{2,}(?::\\d+)?$/i.test(authority)) {\n return true;\n }\n if (/^[a-z0-9-]+:\\d+$/i.test(authority)) return true;\n return false;\n}\n\nfunction hasExplicitUrlScheme(url: string): boolean {\n return /^[a-z][a-z0-9+.-]*:\\/\\//i.test(url) || url.startsWith(\"//\");\n}\n\n/** 解析 fetch 节点的最终请求 URL,避免对已有主机信息的地址重复拼接 apiBaseUrl */\nexport function resolveFetchRequestUrl(\n config: Pick<FetchRequestConfig, \"url\" | \"apiBaseUrl\">\n): string {\n const rawUrl = config.url?.trim() ?? \"\";\n if (!rawUrl) {\n throw new Error(\"请求 URL 未配置\");\n }\n\n if (hasExplicitUrlScheme(rawUrl)) {\n return rawUrl;\n }\n\n const authority = getUrlAuthorityPart(rawUrl);\n if (authority && isAbsoluteHostAuthority(authority)) {\n return `http://${rawUrl}`;\n }\n\n const apiBaseUrl = config.apiBaseUrl?.trim();\n if (!apiBaseUrl) {\n return rawUrl;\n }\n\n return joinFetchUrl(apiBaseUrl, rawUrl);\n}\n\nexport type ExecuteFetchOptions = {\n signal?: AbortSignal;\n /** 调试模式下 HTTP 非 2xx 仍返回响应体,不抛错 */\n allowHttpError?: boolean;\n};\n\nfunction linkAbortSignal(\n controller: AbortController,\n external?: AbortSignal\n): () => void {\n if (!external) return () => {};\n if (external.aborted) {\n controller.abort();\n return () => {};\n }\n const onAbort = () => controller.abort();\n external.addEventListener(\"abort\", onAbort);\n return () => external.removeEventListener(\"abort\", onAbort);\n}\n\nexport async function executeFetch(\n config: FetchRequestConfig,\n options?: ExecuteFetchOptions\n): Promise<FetchResultValue> {\n const rawUrl = config.url?.trim();\n if (!rawUrl) {\n throw new Error(\"请求 URL 未配置\");\n }\n\n const url = resolveFetchRequestUrl(config);\n\n const method = config.method ?? \"GET\";\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\n const body =\n hasBody && config.body?.trim() ? config.body : undefined;\n\n if (body && looksLikeJsonText(body)) {\n try {\n JSON.parse(body);\n } catch (error) {\n throw new Error(\n `请求体不是有效 JSON:${error instanceof Error ? error.message : \"格式无效\"}`\n );\n }\n }\n\n const headers: Record<string, string> = { ...(config.headers ?? {}) };\n const hasContentType = Object.keys(headers).some(\n (key) => key.toLowerCase() === \"content-type\"\n );\n if (body && looksLikeJsonText(body) && !hasContentType) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n const timeoutMs = config.timeoutMs ?? 30000;\n const controller = new AbortController();\n const unlinkExternal = linkAbortSignal(controller, options?.signal);\n const timer =\n timeoutMs > 0\n ? setTimeout(() => controller.abort(), timeoutMs)\n : undefined;\n\n try {\n const response = await fetch(url, {\n method,\n headers: Object.keys(headers).length > 0 ? headers : undefined,\n body,\n credentials: config.credentials,\n mode: config.mode,\n cache: config.cache,\n redirect: config.redirect,\n signal: controller.signal,\n });\n\n const responseType = config.responseType ?? \"json\";\n let data: unknown;\n\n if (responseType === \"text\") {\n data = await response.text();\n } else {\n const text = await response.text();\n if (!text) {\n data = null;\n } else {\n try {\n data = JSON.parse(text) as unknown;\n } catch {\n if (options?.allowHttpError) {\n data = text;\n } else {\n throw new Error(\"响应不是有效的 JSON\");\n }\n }\n }\n }\n\n if (!response.ok && !options?.allowHttpError) {\n const detail =\n typeof data === \"string\"\n ? data.slice(0, 200)\n : JSON.stringify(data).slice(0, 200);\n throw new Error(\n `HTTP ${response.status} ${response.statusText}${detail ? `: ${detail}` : \"\"}`\n );\n }\n\n return {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n data,\n };\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n if (options?.signal?.aborted) {\n throw new Error(\"请求已中止\");\n }\n throw new Error(`请求超时(${timeoutMs}ms)`);\n }\n throw error;\n } finally {\n unlinkExternal();\n if (timer) clearTimeout(timer);\n }\n}\n","export type ScopeAutocompleteState = {\n templateStart: number;\n cursor: number;\n path: string[];\n partialKey: string;\n};\n\nfunction getValueAtPath(scope: unknown, path: string[]): unknown {\n let current: unknown = scope;\n for (const part of path) {\n if (current === null || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\nfunction listObjectKeys(value: unknown): string[] {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return [];\n }\n return Object.keys(value as Record<string, unknown>);\n}\n\n/** 解析光标处未闭合的 scope 模版表达式 */\nexport function parseScopeAutocomplete(\n text: string,\n cursor: number,\n scope: unknown\n): ScopeAutocompleteState | null {\n const before = text.slice(0, cursor);\n const templateStart = before.lastIndexOf(\"{\");\n if (templateStart < 0) return null;\n\n const inner = before.slice(templateStart + 1);\n if (inner.includes(\"}\")) return null;\n if (!inner.startsWith(\"scope\")) return null;\n\n let body = inner.slice(\"scope\".length);\n if (body === \"\" || body === \"?\") {\n return { templateStart, cursor, path: [], partialKey: \"\" };\n }\n if (!body.startsWith(\"?.\")) return null;\n\n body = body.slice(2);\n if (body === \"\") {\n return { templateStart, cursor, path: [], partialKey: \"\" };\n }\n\n const segments = body.split(\"?.\");\n const endsWithSeparator = inner.endsWith(\"?.\");\n\n if (endsWithSeparator) {\n const path = segments.filter((segment) => segment.length > 0);\n return { templateStart, cursor, path, partialKey: \"\" };\n }\n\n const lastSegment = segments[segments.length - 1] ?? \"\";\n const prefixSegments = segments.slice(0, -1).filter((segment) => segment.length > 0);\n const parent = getValueAtPath(scope, prefixSegments);\n const keys = listObjectKeys(parent);\n\n if (lastSegment.length === 0) {\n return { templateStart, cursor, path: prefixSegments, partialKey: \"\" };\n }\n\n if (keys.includes(lastSegment)) {\n return {\n templateStart,\n cursor,\n path: [...prefixSegments, lastSegment],\n partialKey: \"\",\n };\n }\n\n return {\n templateStart,\n cursor,\n path: prefixSegments,\n partialKey: lastSegment,\n };\n}\n\nexport function getScopeAutocompleteSuggestions(\n scope: unknown,\n state: ScopeAutocompleteState\n): string[] {\n const parent =\n state.partialKey.length > 0\n ? getValueAtPath(scope, state.path)\n : state.path.length > 0\n ? getValueAtPath(scope, state.path)\n : scope;\n\n const keys = listObjectKeys(parent);\n if (state.partialKey.length === 0) return keys;\n return keys.filter((key) => key.startsWith(state.partialKey));\n}\n\nexport function buildScopeExpression(path: string[], selectedKey: string): string {\n return `scope?.${[...path, selectedKey].join(\"?.\")}`;\n}\n\nexport function applyScopeAutocompleteSelection(\n text: string,\n state: ScopeAutocompleteState,\n selectedKey: string\n): { value: string; cursor: number } {\n const expr = buildScopeExpression(state.path, selectedKey);\n const before = text.slice(0, state.templateStart + 1);\n const after = text.slice(state.cursor);\n const value = `${before}${expr}${after}`;\n const cursor = before.length + expr.length;\n return { value, cursor };\n}\n","import type { FetchRequestConfig } from \"./fetch-config.js\";\nimport {\n evaluateScopeExpression,\n evaluateScopeTemplate,\n evaluateScopeTemplateInJson,\n hasScopeTemplate,\n looksLikeJsonText,\n stringifyScopeValue,\n} from \"./scope-template.js\";\nimport { isFalseSignal, isTrueSignal } from \"./node-signal.js\";\n\nexport type IncomingNodeSource = {\n id: string;\n label?: string;\n name?: string;\n nodeType?: string;\n type?: string;\n role?: string;\n};\n\nexport type IncomingGraphEdge = {\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n};\n\nexport type IncomingNodeScopeEntry = {\n id: string;\n name: string;\n type: string;\n role?: string;\n port: string;\n kind: \"true\" | \"false\" | \"pending\";\n value?: unknown;\n error?: string;\n timestamp?: number;\n isoTime?: string;\n};\n\nexport type IncomingNodeScope =\n | IncomingNodeScopeEntry\n | Record<string, IncomingNodeScopeEntry>;\n\n/** 尚无上游数据时,仍可联想 scope 的固定字段 */\nexport const FETCH_SCOPE_AUTOCOMPLETE_FALLBACK: IncomingNodeScopeEntry = {\n id: \"\",\n name: \"\",\n type: \"\",\n role: \"\",\n port: \"out\",\n kind: \"pending\",\n value: {},\n error: \"\",\n timestamp: 0,\n isoTime: \"\",\n};\n\nexport function resolveFetchScopeAutocompleteRoot(scope: unknown): unknown {\n return scope === undefined ? FETCH_SCOPE_AUTOCOMPLETE_FALLBACK : scope;\n}\n\nfunction readOutputSignal(output: unknown): Pick<\n IncomingNodeScopeEntry,\n \"kind\" | \"value\" | \"error\" | \"timestamp\" | \"isoTime\"\n> {\n if (output === undefined) return { kind: \"pending\" };\n if (isTrueSignal(output)) {\n return {\n kind: \"true\",\n value: output.value,\n timestamp: output.timestamp,\n isoTime: output.isoTime,\n };\n }\n if (isFalseSignal(output)) {\n return {\n kind: \"false\",\n error: output.error,\n timestamp: output.timestamp,\n isoTime: output.isoTime,\n };\n }\n if (output && typeof output === \"object\" && \"kind\" in output) {\n const rec = output as {\n kind?: string;\n value?: unknown;\n error?: string;\n timestamp?: number;\n isoTime?: string;\n };\n if (rec.kind === \"true\") {\n return {\n kind: \"true\",\n value: rec.value,\n timestamp: rec.timestamp,\n isoTime: rec.isoTime,\n };\n }\n if (rec.kind === \"false\") {\n return {\n kind: \"false\",\n error: rec.error,\n timestamp: rec.timestamp,\n isoTime: rec.isoTime,\n };\n }\n }\n return { kind: \"true\", value: output };\n}\n\nexport function createIncomingNodeScopeEntry(\n node: IncomingNodeSource | undefined,\n port: string,\n output: unknown\n): IncomingNodeScopeEntry {\n const id = node?.id ?? \"in\";\n const signal = readOutputSignal(output);\n return {\n id,\n name: node?.label?.trim() || node?.name?.trim() || id,\n type: node?.nodeType || node?.type || \"unknown\",\n role: node?.role,\n port,\n ...signal,\n };\n}\n\nexport function buildIncomingNodeScope(\n entries: IncomingNodeScopeEntry[]\n): IncomingNodeScope | undefined {\n if (entries.length === 0) return undefined;\n if (entries.length === 1) return entries[0];\n const scoped: Record<string, IncomingNodeScopeEntry> = {};\n for (const entry of entries) {\n scoped[entry.id] = entry;\n }\n return scoped;\n}\n\nexport function collectIncomingNodeScopeEntries(options: {\n targetNodeId: string;\n targetPort?: string;\n nodes: IncomingNodeSource[];\n edges: IncomingGraphEdge[];\n getOutput?: (nodeId: string, port: string) => unknown;\n}): IncomingNodeScopeEntry[] {\n const targetPort = options.targetPort ?? \"in\";\n const nodeById = new Map(options.nodes.map((node) => [node.id, node]));\n const inbound = options.edges.filter(\n (edge) =>\n edge.target === options.targetNodeId &&\n (edge.targetHandle ?? \"in\") === targetPort\n );\n\n const seen = new Set<string>();\n const entries: IncomingNodeScopeEntry[] = [];\n for (const edge of inbound) {\n const port = edge.sourceHandle ?? \"out\";\n const key = `${edge.source}:${port}`;\n if (seen.has(key)) continue;\n seen.add(key);\n const output = options.getOutput?.(edge.source, port);\n entries.push(\n createIncomingNodeScopeEntry(nodeById.get(edge.source), port, output)\n );\n }\n return entries;\n}\n\nexport function resolveFetchIncomingScope(options: {\n fetchNodeId: string;\n inputPort?: string;\n nodes: IncomingNodeSource[];\n edges: IncomingGraphEdge[];\n getOutput?: (nodeId: string, port: string) => unknown;\n fallbackInput?: unknown;\n}): IncomingNodeScope | undefined {\n const entries = collectIncomingNodeScopeEntries({\n targetNodeId: options.fetchNodeId,\n targetPort: options.inputPort,\n nodes: options.nodes,\n edges: options.edges,\n getOutput: options.getOutput,\n });\n if (entries.length > 0) return buildIncomingNodeScope(entries);\n if (options.fallbackInput === undefined) return undefined;\n return createIncomingNodeScopeEntry(\n { id: \"in\", label: \"in\", nodeType: \"input\" },\n options.inputPort ?? \"in\",\n options.fallbackInput\n );\n}\n\nexport function latestTraceOutputsByNode(\n entries: Array<{ nodeId: string; outputs?: Record<string, unknown> }>\n): Record<string, Record<string, unknown>> {\n const map: Record<string, Record<string, unknown>> = {};\n for (const entry of entries) {\n map[entry.nodeId] = entry.outputs ?? {};\n }\n return map;\n}\n\nfunction resolveTemplateString(\n value: string | undefined,\n scope: unknown\n): string | undefined {\n if (value === undefined) return undefined;\n if (!hasScopeTemplate(value)) return value;\n return evaluateScopeTemplate(value, scope);\n}\n\nexport function parseJsonText(\n text: string\n): { ok: true; value: unknown } | { ok: false; error: string } {\n try {\n return { ok: true, value: JSON.parse(text) as unknown };\n } catch (error) {\n return {\n ok: false,\n error: error instanceof Error ? error.message : \"JSON 格式无效\",\n };\n }\n}\n\nexport function validateFetchJsonText(\n text: string,\n options?: { allowEmpty?: boolean }\n): { ok: true } | { ok: false; error: string } {\n const trimmed = text.trim();\n if (!trimmed) {\n if (options?.allowEmpty === false) {\n return { ok: false, error: \"内容不能为空\" };\n }\n return { ok: true };\n }\n if (isWholeScopeExpression(trimmed)) {\n return { ok: true };\n }\n if (!looksLikeJsonText(trimmed)) {\n return { ok: true };\n }\n const parsed = parseJsonText(trimmed);\n return parsed.ok ? { ok: true } : parsed;\n}\n\nexport function resolveFetchBody(\n body: string | undefined,\n scope?: unknown\n): string | undefined {\n if (body === undefined) return undefined;\n const trimmed = body.trim();\n if (!trimmed) return body;\n if (scope !== undefined && isWholeScopeExpression(trimmed)) {\n const value = evaluateScopeExpression(trimmed.slice(1, -1), scope);\n if (value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n return stringifyScopeValue(value);\n }\n if (scope === undefined || !hasScopeTemplate(body)) return body;\n if (looksLikeJsonText(trimmed)) {\n return evaluateScopeTemplateInJson(body, scope);\n }\n return evaluateScopeTemplate(body, scope);\n}\n\nexport function getFetchBodyValidationError(\n body: string | undefined,\n resolvedBody?: string\n): string | null {\n const source = (resolvedBody ?? body ?? \"\").trim();\n if (!source) return null;\n if (isWholeScopeExpression(source)) return null;\n if (!looksLikeJsonText(source)) return null;\n const parsed = parseJsonText(source);\n if (parsed.ok) return null;\n // 仍含未求值的 {scope?...} 时,等上游数据再校验\n if (hasScopeTemplate(source)) return null;\n return parsed.error;\n}\n\nexport function getFetchHeadersValidationError(\n config: FetchRequestConfig,\n scope?: unknown\n): string | null {\n const raw = (config.headersJson ?? \"\").trim();\n if (!raw) return null;\n if (isWholeScopeExpression(raw) || hasScopeTemplate(raw)) {\n if (scope === undefined) return null;\n const parsed = parseFetchHeadersJson(raw, scope);\n if (!parsed) return \"请求头模板解析后不是有效的 JSON 对象\";\n return null;\n }\n const result = validateFetchJsonText(raw);\n if (!result.ok) return result.error;\n const parsed = parseFetchHeadersJson(raw, scope);\n if (!parsed) return \"请求头不是有效的 JSON 对象\";\n return null;\n}\n\n/** `{scope?...}` 整段表达式,区别于 JSON 对象 `{ \"Authorization\": \"...\" }` */\nexport function isWholeScopeExpression(text: string): boolean {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) return false;\n return trimmed.slice(1, -1).trim().startsWith(\"scope\");\n}\n\nfunction asHeaderRecord(value: unknown): Record<string, string> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return undefined;\n const headers: Record<string, string> = {};\n for (const [key, raw] of Object.entries(value as Record<string, unknown>)) {\n if (raw === undefined || raw === null) continue;\n headers[key] = typeof raw === \"string\" ? raw : stringifyScopeValue(raw);\n }\n return headers;\n}\n\nfunction applyScopeToHeaderRecord(\n headers: Record<string, string>,\n scope: unknown\n): Record<string, string> {\n if (scope === undefined) return headers;\n return Object.fromEntries(\n Object.entries(headers).map(([key, value]) => [\n evaluateScopeTemplate(String(key), scope),\n evaluateScopeTemplate(value == null ? \"\" : String(value), scope),\n ])\n );\n}\n\n/** 将请求头编辑器原文解析为对象;支持 JSON 内模板,也支持整段 `{scope?...}` */\nexport function parseFetchHeadersJson(\n text: string,\n scope?: unknown\n): Record<string, string> | undefined {\n const trimmed = text.trim();\n if (!trimmed) return {};\n if (isWholeScopeExpression(trimmed)) {\n if (scope === undefined) return undefined;\n const inner = trimmed.slice(1, -1);\n return asHeaderRecord(evaluateScopeExpression(inner, scope));\n }\n let jsonText = trimmed;\n if (scope !== undefined && hasScopeTemplate(trimmed) && looksLikeJsonText(trimmed)) {\n jsonText = evaluateScopeTemplateInJson(trimmed, scope);\n }\n try {\n const parsed = asHeaderRecord(JSON.parse(jsonText));\n if (!parsed) return undefined;\n if (jsonText === trimmed) {\n return applyScopeToHeaderRecord(parsed, scope);\n }\n return parsed;\n } catch {\n return undefined;\n }\n}\n\nexport function draftFetchHeadersText(config: FetchRequestConfig): string {\n if (config.headersJson !== undefined) return config.headersJson;\n try {\n return JSON.stringify(config.headers ?? {}, null, 2);\n } catch {\n return \"{}\";\n }\n}\n\nexport function resolveFetchHeaders(\n config: FetchRequestConfig,\n scope?: unknown\n): Record<string, string> | undefined {\n const rawJson = config.headersJson;\n if (rawJson !== undefined && rawJson.trim() !== \"\") {\n const parsed = parseFetchHeadersJson(rawJson, scope);\n if (parsed) return parsed;\n }\n if (!config.headers) return config.headers;\n return applyScopeToHeaderRecord(config.headers, scope);\n}\n\n/** 用上游 scope 解析 fetch 表单中的 URL / Base URL / headers / body */\nexport function applyFetchConfigScope(\n config: FetchRequestConfig,\n scope: unknown\n): FetchRequestConfig {\n const headers = resolveFetchHeaders(config, scope);\n const body = resolveFetchBody(config.body, scope);\n if (scope === undefined) {\n if (headers === config.headers && body === config.body) return config;\n return { ...config, headers, body };\n }\n return {\n ...config,\n url: resolveTemplateString(config.url, scope) ?? \"\",\n apiBaseUrl: resolveTemplateString(config.apiBaseUrl, scope),\n body,\n headers,\n };\n}\n\nexport function fetchConfigHasScopeTemplate(config: FetchRequestConfig): boolean {\n if (hasScopeTemplate(config.url ?? \"\")) return true;\n if (hasScopeTemplate(config.apiBaseUrl ?? \"\")) return true;\n if (hasScopeTemplate(config.body ?? \"\")) return true;\n if (hasScopeTemplate(config.headersJson ?? \"\")) return true;\n const headers = config.headers ?? {};\n return Object.entries(headers).some(\n ([key, value]) => hasScopeTemplate(key) || hasScopeTemplate(String(value ?? \"\"))\n );\n}\n","export type JsonNodeConfig = {\n jsonString: string;\n};\n\nexport const DEFAULT_JSON_NODE_CONFIG: JsonNodeConfig = {\n jsonString: \"{}\",\n};\n\nexport function validateJsonString(\n jsonString: string\n): { ok: true; value: unknown } | { ok: false; error: string } {\n const raw = jsonString?.trim();\n if (!raw) {\n return { ok: false, error: \"JSON 不能为空\" };\n }\n\n try {\n const value = JSON.parse(raw) as unknown;\n if (value === null || typeof value !== \"object\") {\n return { ok: false, error: \"JSON 根节点必须是 object 或 array\" };\n }\n return { ok: true, value };\n } catch (error) {\n return {\n ok: false,\n error: error instanceof Error ? error.message : \"JSON 格式无效\",\n };\n }\n}\n\nexport function parseJsonConfig(config: JsonNodeConfig): unknown {\n const result = validateJsonString(config.jsonString ?? \"\");\n if (!result.ok) {\n throw new Error(result.error);\n }\n return result.value;\n}\n","import {\n evaluateScopeExpression,\n evaluateScopeTemplate,\n hasScopeTemplate,\n looksLikeJsonText,\n} from \"./scope-template.js\";\nimport { isWholeScopeExpression } from \"./incoming-node-scope.js\";\n\nexport type StorageKind = \"session\" | \"local\";\n\nexport type StorageReadConfig = {\n storage: StorageKind;\n key: string;\n};\n\nexport type StorageSetConfig = {\n storages: StorageKind[];\n key: string;\n value: string;\n};\n\nexport type StorageNodeConfig = {\n read: StorageReadConfig;\n set: StorageSetConfig;\n};\n\nexport const STORAGE_KINDS: StorageKind[] = [\"session\", \"local\"];\n\nexport const DEFAULT_STORAGE_NODE_CONFIG: StorageNodeConfig = {\n read: { storage: \"local\", key: \"\" },\n set: { storages: [], key: \"\", value: \"\" },\n};\n\nexport type WebStorageLike = {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n};\n\nexport type StorageAccessors = {\n session?: WebStorageLike | null;\n local?: WebStorageLike | null;\n};\n\nfunction isStorageKind(value: unknown): value is StorageKind {\n return value === \"session\" || value === \"local\";\n}\n\nexport function uniqueStorageKinds(kinds?: readonly unknown[]): StorageKind[] {\n const next = new Set<StorageKind>();\n for (const kind of kinds ?? []) {\n if (isStorageKind(kind)) next.add(kind);\n }\n return STORAGE_KINDS.filter((kind) => next.has(kind));\n}\n\nexport function normalizeStorageConfig(\n config?: Partial<StorageNodeConfig> | null\n): StorageNodeConfig {\n const read = config?.read;\n const set = config?.set;\n return {\n read: {\n storage: read?.storage === \"session\" ? \"session\" : \"local\",\n key: typeof read?.key === \"string\" ? read.key : \"\",\n },\n set: {\n storages: uniqueStorageKinds(set?.storages),\n key: typeof set?.key === \"string\" ? set.key : \"\",\n value: typeof set?.value === \"string\" ? set.value : \"\",\n },\n };\n}\n\nexport function isStorageReadConfigured(\n config: Pick<StorageNodeConfig, \"read\">\n): boolean {\n return Boolean(config.read?.key?.trim());\n}\n\nexport function isStorageSetConfigured(\n config: Pick<StorageNodeConfig, \"set\">\n): boolean {\n return (\n Boolean(config.set?.key?.trim()) && (config.set?.storages?.length ?? 0) > 0\n );\n}\n\nexport function resolveStorageWriteValue(\n template: string,\n scope: unknown\n): unknown {\n const raw = template ?? \"\";\n const trimmed = raw.trim();\n if (!trimmed) return \"\";\n if (isWholeScopeExpression(trimmed)) {\n const value = evaluateScopeExpression(trimmed.slice(1, -1), scope);\n return value === undefined ? \"\" : value;\n }\n if (hasScopeTemplate(raw)) {\n return evaluateScopeTemplate(raw, scope);\n }\n return raw;\n}\n\nexport function serializeStorageValue(value: unknown): string {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nexport function deserializeStorageValue(raw: string | null): unknown {\n if (raw === null) return null;\n const trimmed = raw.trim();\n if (!trimmed) return raw;\n if (!looksLikeJsonText(trimmed)) return raw;\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return raw;\n }\n}\n\nfunction getDefaultStorageAccessors(): StorageAccessors | null {\n if (typeof window === \"undefined\") return null;\n try {\n return {\n session: window.sessionStorage,\n local: window.localStorage,\n };\n } catch {\n return null;\n }\n}\n\nfunction requireStorage(\n accessors: StorageAccessors | null,\n kind: StorageKind\n): WebStorageLike {\n const target = kind === \"session\" ? accessors?.session : accessors?.local;\n if (!target) {\n throw new Error(\n kind === \"session\"\n ? \"当前环境不支持 sessionStorage\"\n : \"当前环境不支持 localStorage\"\n );\n }\n return target;\n}\n\n/** 先设置再读取。未配置设置则不写入;未配置读取则返回空。 */\nexport function executeStorageConfig(\n config: StorageNodeConfig,\n incomingScope: unknown,\n accessors?: StorageAccessors | null\n): unknown {\n const normalized = normalizeStorageConfig(config);\n const store = accessors === undefined ? getDefaultStorageAccessors() : accessors;\n\n if (isStorageSetConfigured(normalized)) {\n const value = resolveStorageWriteValue(normalized.set.value, incomingScope);\n const serialized = serializeStorageValue(value);\n const key = normalized.set.key.trim();\n for (const kind of normalized.set.storages) {\n requireStorage(store, kind).setItem(key, serialized);\n }\n }\n\n if (!isStorageReadConfigured(normalized)) {\n return null;\n }\n\n return deserializeStorageValue(\n requireStorage(store, normalized.read.storage).getItem(\n normalized.read.key.trim()\n )\n );\n}\n","export type LogicNodeConfig = {\n /** 用户手写的 update(input) 函数脚本 */\n sourceCode: string;\n};\n\nexport const DEFAULT_LOGIC_NODE_CONFIG: LogicNodeConfig = {\n sourceCode: `function update(input) {\n return input;\n}`,\n};\n\nfunction compileLogicRunner(sourceCode: string): (input: unknown) => unknown {\n return new Function(\n \"input\",\n `\"use strict\";\n${sourceCode}\nif (typeof update !== \"function\") {\n throw new TypeError(\"需要定义 update(input) 函数\");\n}\nreturn update(input);`\n ) as (input: unknown) => unknown;\n}\n\nexport function validateLogicSourceCode(\n sourceCode: string\n): { ok: true } | { ok: false; error: string } {\n const raw = sourceCode?.trim();\n if (!raw) {\n return { ok: false, error: \"代码不能为空\" };\n }\n\n try {\n compileLogicRunner(raw);\n return { ok: true };\n } catch (error) {\n return {\n ok: false,\n error: error instanceof Error ? error.message : \"JavaScript 语法错误\",\n };\n }\n}\n\nexport function executeLogicConfig(\n config: LogicNodeConfig,\n input: unknown\n): unknown {\n const validation = validateLogicSourceCode(config.sourceCode ?? \"\");\n if (!validation.ok) {\n throw new Error(validation.error);\n }\n const run = compileLogicRunner(config.sourceCode);\n return run(input);\n}\n","export type ClockNodeConfig = {\n /** 两次输出之间的间隔秒数 */\n intervalSeconds: number;\n /** 输出值中的时间格式化模板,支持 YYYY、MM、DD、HH、mm、ss */\n timeFormat: string;\n /** 收到真信号后的输出次数,默认 1 */\n outputCount: number;\n /** 收到真信号后立即输出第一次,再按间隔继续;关闭则首次也等待 n 秒 */\n emitImmediately: boolean;\n};\n\nexport type ClockSignalOutput = {\n /** 按 timeFormat 格式化后的当前时间 */\n formatted: string;\n /** Unix 毫秒时间戳 */\n timestamp: number;\n /** ISO 8601 时间字符串 */\n isoTime: string;\n};\n\nexport const DEFAULT_CLOCK_NODE_CONFIG: ClockNodeConfig = {\n intervalSeconds: 0,\n timeFormat: \"YYYY-MM-DD HH:mm:ss\",\n outputCount: 1,\n emitImmediately: true,\n};\n\nexport function normalizeClockConfig(\n config?: Partial<ClockNodeConfig> | null\n): ClockNodeConfig {\n const intervalRaw = Number(config?.intervalSeconds);\n const intervalSeconds =\n Number.isFinite(intervalRaw) && intervalRaw > 0\n ? Math.floor(intervalRaw)\n : 0;\n\n const outputCountRaw = Number(config?.outputCount);\n const outputCount =\n Number.isFinite(outputCountRaw) && outputCountRaw > 0\n ? Math.floor(outputCountRaw)\n : DEFAULT_CLOCK_NODE_CONFIG.outputCount;\n\n const timeFormat =\n config?.timeFormat?.trim() || DEFAULT_CLOCK_NODE_CONFIG.timeFormat;\n\n return {\n intervalSeconds,\n timeFormat,\n outputCount,\n emitImmediately: config?.emitImmediately !== false,\n };\n}\n\nexport function validateClockScheduleConfig(\n config: ClockNodeConfig\n): { ok: true } | { ok: false; error: string } {\n const normalized = normalizeClockConfig(config);\n\n if (normalized.outputCount <= 0) {\n return { ok: false, error: \"输出次数须大于 0\" };\n }\n\n const needsInterval =\n normalized.outputCount > 1 ||\n (normalized.outputCount === 1 && !normalized.emitImmediately);\n\n if (needsInterval && normalized.intervalSeconds <= 0) {\n return { ok: false, error: \"当前配置下时钟信号间隔须大于 0 秒\" };\n }\n\n return { ok: true };\n}\n\nconst pad2 = (value: number) => String(value).padStart(2, \"0\");\n\n/** 将 Date 格式化为指定模板(YYYY/MM/DD/HH/mm/ss) */\nexport function formatClockTime(date: Date, pattern: string): string {\n const tokens: Record<string, string> = {\n YYYY: String(date.getFullYear()).padStart(4, \"0\"),\n MM: pad2(date.getMonth() + 1),\n DD: pad2(date.getDate()),\n HH: pad2(date.getHours()),\n mm: pad2(date.getMinutes()),\n ss: pad2(date.getSeconds()),\n };\n\n return pattern.replace(/YYYY|MM|DD|HH|mm|ss/g, (token) => tokens[token] ?? token);\n}\n\nexport function buildClockSignalValue(\n config: ClockNodeConfig,\n now = new Date()\n): ClockSignalOutput {\n const normalized = normalizeClockConfig(config);\n return {\n formatted: formatClockTime(now, normalized.timeFormat),\n timestamp: now.getTime(),\n isoTime: now.toISOString(),\n };\n}\n\nfunction sleep(ms: number, abort: { aborted: boolean }, sessionKey?: string): Promise<void> {\n if (ms <= 0 || abort.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timerId = setTimeout(() => {\n clearInterval(pollId);\n resolve();\n }, ms);\n const pollId = setInterval(() => {\n if (\n abort.aborted ||\n (sessionKey !== undefined && isClockSessionAborted(sessionKey))\n ) {\n clearTimeout(timerId);\n clearInterval(pollId);\n resolve();\n }\n }, 50);\n });\n}\n\n/**\n * 第 tickIndex 次输出(从 0 起)相对调度起点的目标延迟(毫秒)。\n * - 立即发送且次数 > 1:第 1 次为 0,其余依次为 m、2m…\n * - 未立即发送:依次为 m、2m、3m…\n */\nexport function getClockTickDelayOffsetMs(\n config: ClockNodeConfig,\n tickIndex: number\n): number {\n const normalized = normalizeClockConfig(config);\n const intervalMs = normalized.intervalSeconds * 1000;\n\n if (tickIndex <= 0) {\n return normalized.emitImmediately ? 0 : intervalMs;\n }\n\n if (normalized.emitImmediately) {\n return tickIndex * intervalMs;\n }\n\n return (tickIndex + 1) * intervalMs;\n}\n\n/** 距离第 tickIndex 次输出还应等待的毫秒数(基于调度起点) */\nexport function getClockTickWaitMs(\n config: ClockNodeConfig,\n tickIndex: number,\n scheduleStartMs: number,\n nowMs = Date.now()\n): number {\n const targetMs = scheduleStartMs + getClockTickDelayOffsetMs(config, tickIndex);\n return Math.max(0, targetMs - nowMs);\n}\n\nconst activeSessions = new Map<string, { aborted: boolean }>();\nconst abortedClockSessions = new Set<string>();\n\n/** 停止指定会话的时钟调度 */\nexport function stopClockSchedule(sessionKey: string): void {\n const session = activeSessions.get(sessionKey);\n if (!session) return;\n session.aborted = true;\n activeSessions.delete(sessionKey);\n}\n\nexport function isClockScheduleActive(sessionKey: string): boolean {\n return activeSessions.has(sessionKey);\n}\n\n/** 中止时钟:取消剩余 tick,并标记会话供下游传播循环检测 */\nexport function abortClockSession(sessionKey: string): void {\n stopClockSchedule(sessionKey);\n abortedClockSessions.add(sessionKey);\n}\n\nexport function isClockSessionAborted(sessionKey: string): boolean {\n return abortedClockSessions.has(sessionKey);\n}\n\nexport function clearClockSessionAbort(sessionKey: string): void {\n abortedClockSessions.delete(sessionKey);\n}\n\n/**\n * 按配置依次触发 onTick;新的调度会取消同 sessionKey 的上一次调度。\n * 返回取消函数。\n */\nexport function startClockSchedule(options: {\n sessionKey: string;\n config: ClockNodeConfig;\n onTick: () => void | Promise<void>;\n onSettled?: () => void;\n}): () => void {\n stopClockSchedule(options.sessionKey);\n clearClockSessionAbort(options.sessionKey);\n\n const abort = { aborted: false };\n activeSessions.set(options.sessionKey, abort);\n\n void (async () => {\n try {\n const config = normalizeClockConfig(options.config);\n const total = config.outputCount;\n const scheduleStartMs = Date.now();\n\n for (let tickIndex = 0; tickIndex < total; tickIndex++) {\n if (abort.aborted || isClockSessionAborted(options.sessionKey)) return;\n\n const waitMs = getClockTickWaitMs(config, tickIndex, scheduleStartMs);\n if (waitMs > 0) {\n await sleep(waitMs, abort, options.sessionKey);\n }\n\n if (abort.aborted || isClockSessionAborted(options.sessionKey)) return;\n await options.onTick();\n }\n } finally {\n activeSessions.delete(options.sessionKey);\n options.onSettled?.();\n }\n })();\n\n return () => stopClockSchedule(options.sessionKey);\n}\n\n/** 停止全部时钟调度(如蓝图面板卸载时) */\nexport function stopAllClockSchedules(): void {\n for (const key of [...activeSessions.keys()]) {\n abortClockSession(key);\n }\n}\n","/** 视图事件节点可监听的常用 DOM 事件 */\nexport const VIEW_EVENT_TYPES = [\n \"click\",\n \"dblclick\",\n \"contextmenu\",\n \"mouseenter\",\n \"mouseleave\",\n] as const;\n\nexport type ViewEventType = (typeof VIEW_EVENT_TYPES)[number];\n\nexport type ViewEventNodeConfig = {\n /** 监听的事件类型,至少一项;默认 click */\n eventTypes: ViewEventType[];\n};\n\nexport const DEFAULT_VIEW_EVENT_NODE_CONFIG: ViewEventNodeConfig = {\n eventTypes: [\"click\"],\n};\n\nconst VIEW_EVENT_TYPE_SET = new Set<string>(VIEW_EVENT_TYPES);\n\nexport function isViewEventType(value: unknown): value is ViewEventType {\n return typeof value === \"string\" && VIEW_EVENT_TYPE_SET.has(value);\n}\n\nexport function normalizeViewEventConfig(\n config?: Partial<ViewEventNodeConfig> | null\n): ViewEventNodeConfig {\n const raw = Array.isArray(config?.eventTypes) ? config.eventTypes : [];\n const eventTypes = [\n ...new Set(raw.filter(isViewEventType)),\n ];\n return {\n eventTypes:\n eventTypes.length > 0\n ? eventTypes\n : [...DEFAULT_VIEW_EVENT_NODE_CONFIG.eventTypes],\n };\n}\n\n/** 可序列化的 DOM 事件快照(原生 Event 无法作为蓝图信号传递) */\nexport type ViewEventSnapshot = {\n type: string;\n timeStamp: number;\n clientX?: number;\n clientY?: number;\n pageX?: number;\n pageY?: number;\n button?: number;\n altKey?: boolean;\n ctrlKey?: boolean;\n metaKey?: boolean;\n shiftKey?: boolean;\n};\n\n/** 触发该事件的视图节点摘要 */\nexport type ViewEventNodeSnapshot = {\n id: string;\n name?: string;\n materialType?: string;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n layerId?: string;\n};\n\n/** 事件节点向下游发出的真信号 value */\nexport type ViewEventSignal = {\n /** 触发事件(可序列化快照) */\n event: ViewEventSnapshot;\n /** 触发节点 */\n node: ViewEventNodeSnapshot;\n /** 触发的事件类型 */\n eventType: ViewEventType;\n};\n\nexport function snapshotDomEvent(event: {\n type: string;\n timeStamp?: number;\n clientX?: number;\n clientY?: number;\n pageX?: number;\n pageY?: number;\n button?: number;\n altKey?: boolean;\n ctrlKey?: boolean;\n metaKey?: boolean;\n shiftKey?: boolean;\n}): ViewEventSnapshot {\n return {\n type: event.type,\n timeStamp: Number(event.timeStamp) || Date.now(),\n clientX: event.clientX,\n clientY: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY,\n button: event.button,\n altKey: event.altKey,\n ctrlKey: event.ctrlKey,\n metaKey: event.metaKey,\n shiftKey: event.shiftKey,\n };\n}\n\nexport function snapshotViewEventNode(\n node: Partial<ViewEventNodeSnapshot> & { id: string }\n): ViewEventNodeSnapshot {\n return {\n id: node.id,\n name: node.name,\n materialType: node.materialType,\n x: node.x,\n y: node.y,\n width: node.width,\n height: node.height,\n layerId: node.layerId,\n };\n}\n\nexport function createViewEventSignal(input: {\n event: ViewEventSnapshot;\n node: ViewEventNodeSnapshot;\n eventType: ViewEventType;\n}): ViewEventSignal {\n return {\n event: input.event,\n node: input.node,\n eventType: input.eventType,\n };\n}\n\nexport function collectArmedViewEventNodeIds(\n nodes: Array<{\n id: string;\n nodeType?: string;\n lifecyclePhase?: string;\n }>,\n edges: Array<{ source: string; target: string }>,\n eventNodeType: string,\n lifecycleNodeType: string,\n firedPhases: ReadonlySet<string>\n): Set<string> {\n const byId = new Map(nodes.map((node) => [node.id, node]));\n const armed = new Set<string>();\n for (const node of nodes) {\n if (node.nodeType !== eventNodeType) continue;\n const registered = edges.some((edge) => {\n if (edge.target !== node.id) return false;\n const source = byId.get(edge.source);\n if (!source || source.nodeType !== lifecycleNodeType) return false;\n const phase = source.lifecyclePhase || \"mounted\";\n return firedPhases.has(phase);\n });\n if (registered) armed.add(node.id);\n }\n return armed;\n}\n\n/** 仅收集已由生命周期注册的事件节点绑定 */\nexport function collectArmedViewEventBindings(\n nodes: Array<{\n id: string;\n nodeType?: string;\n lifecyclePhase?: string;\n viewElementIds?: string[];\n eventConfig?: Partial<ViewEventNodeConfig> | null;\n }>,\n edges: Array<{ source: string; target: string }>,\n eventNodeType: string,\n lifecycleNodeType: string,\n firedPhases: ReadonlySet<string>\n): Map<string, Set<ViewEventType>> {\n const armed = collectArmedViewEventNodeIds(\n nodes,\n edges,\n eventNodeType,\n lifecycleNodeType,\n firedPhases\n );\n return collectViewEventBindings(nodes, eventNodeType, armed);\n}\n\nexport function collectViewEventBindings(\n nodes: Array<{\n id?: string;\n nodeType?: string;\n viewElementIds?: string[];\n eventConfig?: Partial<ViewEventNodeConfig> | null;\n }>,\n eventNodeType: string,\n armedNodeIds?: ReadonlySet<string>\n): Map<string, Set<ViewEventType>> {\n const map = new Map<string, Set<ViewEventType>>();\n for (const node of nodes) {\n if (node.nodeType !== eventNodeType) continue;\n if (armedNodeIds && (!node.id || !armedNodeIds.has(node.id))) continue;\n const types = normalizeViewEventConfig(node.eventConfig).eventTypes;\n for (const id of node.viewElementIds ?? []) {\n if (!id) continue;\n let set = map.get(id);\n if (!set) {\n set = new Set();\n map.set(id, set);\n }\n for (const type of types) set.add(type);\n }\n }\n return map;\n}\n","import type { FetchHttpMethod } from \"./fetch-config.js\";\n\nexport type SwaggerApiEndpoint = {\n method: FetchHttpMethod;\n path: string;\n summary?: string;\n operationId?: string;\n};\n\nexport type ParsedSwaggerDocument = {\n apiBaseUrl: string;\n endpoints: SwaggerApiEndpoint[];\n};\n\nconst HTTP_METHODS = new Set([\n \"get\",\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n \"head\",\n \"options\",\n]);\n\nfunction normalizeBaseUrl(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\nfunction joinBaseAndPath(base: string, path: string): string {\n const normalizedBase = normalizeBaseUrl(base);\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${normalizedBase}${normalizedPath}`;\n}\n\nfunction resolveAgainstDocsUrl(relativeOrAbsolute: string, docsUrl: string): string {\n const trimmed = relativeOrAbsolute.trim();\n if (!trimmed) return \"\";\n if (/^https?:\\/\\//i.test(trimmed)) {\n return normalizeBaseUrl(trimmed);\n }\n try {\n const docs = new URL(docsUrl);\n if (trimmed.startsWith(\"/\")) {\n return normalizeBaseUrl(`${docs.origin}${trimmed}`);\n }\n return normalizeBaseUrl(new URL(trimmed, `${docs.origin}/`).href);\n } catch {\n return normalizeBaseUrl(trimmed);\n }\n}\n\nfunction extractEndpointsFromPaths(\n paths: unknown\n): SwaggerApiEndpoint[] {\n if (!paths || typeof paths !== \"object\") return [];\n\n const endpoints: SwaggerApiEndpoint[] = [];\n\n for (const [path, item] of Object.entries(paths as Record<string, unknown>)) {\n if (!item || typeof item !== \"object\") continue;\n\n for (const [method, operation] of Object.entries(item as Record<string, unknown>)) {\n if (!HTTP_METHODS.has(method.toLowerCase())) continue;\n if (!operation || typeof operation !== \"object\") continue;\n\n const op = operation as Record<string, unknown>;\n endpoints.push({\n method: method.toUpperCase() as FetchHttpMethod,\n path,\n summary: typeof op.summary === \"string\" ? op.summary : undefined,\n operationId:\n typeof op.operationId === \"string\" ? op.operationId : undefined,\n });\n }\n }\n\n return endpoints.sort((a, b) =>\n `${a.path}:${a.method}`.localeCompare(`${b.path}:${b.method}`)\n );\n}\n\nfunction parseOpenApiV3(\n spec: Record<string, unknown>,\n docsUrl: string\n): ParsedSwaggerDocument {\n const servers = Array.isArray(spec.servers) ? spec.servers : [];\n const firstServer =\n servers.find((item) => item && typeof item === \"object\") as\n | Record<string, unknown>\n | undefined;\n const serverUrl =\n typeof firstServer?.url === \"string\" ? firstServer.url : \"\";\n const apiBaseUrl = serverUrl\n ? resolveAgainstDocsUrl(serverUrl, docsUrl)\n : resolveAgainstDocsUrl(new URL(docsUrl).origin, docsUrl);\n\n return {\n apiBaseUrl,\n endpoints: extractEndpointsFromPaths(spec.paths),\n };\n}\n\nfunction parseSwaggerV2(\n spec: Record<string, unknown>,\n docsUrl: string\n): ParsedSwaggerDocument {\n const schemes = Array.isArray(spec.schemes) ? spec.schemes : [\"https\"];\n const scheme =\n typeof schemes[0] === \"string\" ? schemes[0] : \"https\";\n const host = typeof spec.host === \"string\" ? spec.host : new URL(docsUrl).host;\n const basePath =\n typeof spec.basePath === \"string\" ? spec.basePath : \"\";\n const apiBaseUrl = normalizeBaseUrl(`${scheme}://${host}${basePath}`);\n\n return {\n apiBaseUrl,\n endpoints: extractEndpointsFromPaths(spec.paths),\n };\n}\n\nexport function parseSwaggerDocument(\n spec: unknown,\n docsUrl: string\n): ParsedSwaggerDocument {\n if (!spec || typeof spec !== \"object\") {\n throw new Error(\"Swagger 文档格式无效\");\n }\n\n const document = spec as Record<string, unknown>;\n\n if (typeof document.openapi === \"string\") {\n const parsed = parseOpenApiV3(document, docsUrl);\n if (parsed.endpoints.length === 0) {\n throw new Error(\"未在 OpenAPI 文档中找到接口\");\n }\n return parsed;\n }\n\n if (document.swagger === \"2.0\" || document.swagger === 2) {\n const parsed = parseSwaggerV2(document, docsUrl);\n if (parsed.endpoints.length === 0) {\n throw new Error(\"未在 Swagger 2.0 文档中找到接口\");\n }\n return parsed;\n }\n\n throw new Error(\"仅支持 OpenAPI 3.x 与 Swagger 2.0 文档\");\n}\n\nexport function buildEndpointFullUrl(\n apiBaseUrl: string,\n pathOrEndpoint: string | Pick<SwaggerApiEndpoint, \"path\">\n): string {\n const path =\n typeof pathOrEndpoint === \"string\" ? pathOrEndpoint : pathOrEndpoint.path;\n return joinBaseAndPath(apiBaseUrl, path);\n}\n\nexport function buildEndpointSuggestions(\n apiBaseUrl: string,\n endpoints: SwaggerApiEndpoint[]\n) {\n return endpoints.map((endpoint) => {\n const fullUrl = buildEndpointFullUrl(apiBaseUrl, endpoint);\n const labelParts = [\n endpoint.method,\n endpoint.path,\n endpoint.summary ? `· ${endpoint.summary}` : \"\",\n ].filter(Boolean);\n return {\n ...endpoint,\n fullUrl,\n label: labelParts.join(\" \"),\n };\n });\n}\n\nexport function filterEndpointSuggestions(\n suggestions: ReturnType<typeof buildEndpointSuggestions>,\n query: string\n) {\n const keyword = query.trim().toLowerCase();\n if (!keyword) return suggestions;\n return suggestions.filter(\n (item) =>\n item.fullUrl.toLowerCase().includes(keyword) ||\n item.path.toLowerCase().includes(keyword) ||\n item.method.toLowerCase().includes(keyword) ||\n item.summary?.toLowerCase().includes(keyword) ||\n item.operationId?.toLowerCase().includes(keyword)\n );\n}\n","import type { Value } from \"../type.js\";\nimport { isFalseSignal, isTrueSignal } from \"../node-signal.js\";\n\nexport type ExecutionTraceEntry = {\n id: string;\n nodeId: string;\n nodeLabel?: string;\n nodeType: string;\n startedAt: number;\n finishedAt: number;\n isoTime: string;\n inputs: Record<string, unknown>;\n outputs: Record<string, unknown>;\n error?: string;\n /** 时钟节点第几次 tick(从 1 开始) */\n clockTickIndex?: number;\n /** 时钟节点本次调度总 tick 数 */\n clockTickTotal?: number;\n};\n\nexport type ExecutionRunRecord = {\n runId: string;\n blueprintId: string | null;\n blueprintName: string;\n lifecycleNodeId: string;\n lifecycleNodeLabel?: string;\n lifecyclePhase?: string;\n startedAt: number;\n finishedAt?: number;\n status: \"running\" | \"completed\" | \"paused\" | \"failed\";\n entries: ExecutionTraceEntry[];\n};\n\nexport function serializeTraceValue(value: Value | undefined): unknown {\n if (value === undefined) return undefined;\n if (isTrueSignal(value)) {\n return {\n kind: \"true\",\n value: value.value,\n isoTime: value.isoTime,\n };\n }\n if (isFalseSignal(value)) {\n return {\n kind: \"false\",\n error: value.error,\n isoTime: value.isoTime,\n };\n }\n return value;\n}\n\nexport function createTraceEntryId() {\n return `trace_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n}\n","import type { NodeDefinition } from \"../type.js\";\n\nexport const BLUEPRINT_NODE_TYPE = \"Blueprint\";\nexport const DEFAULT_LOGIC_NODE_TYPE = \"Logic\";\nexport const LIFECYCLE_NODE_TYPE = \"Lifecycle\";\nexport const FETCH_NODE_TYPE = \"DataFetch\";\nexport const JSON_NODE_TYPE = \"JsonNode\";\nexport const STORAGE_NODE_TYPE = \"StorageNode\";\nexport const CLOCK_NODE_TYPE = \"Clock\";\nexport const AND_NODE_TYPE = \"AndLogic\";\nexport const VIEW_NODE_TYPE = \"ViewBind\";\nexport const EVENT_NODE_TYPE = \"ViewEvent\";\n\n/** 蓝图引用节点:单入单出,收到真信号后执行嵌套蓝图 */\nexport const blueprintNodeDefinition: NodeDefinition = {\n type: BLUEPRINT_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"blueprint-ref-run\" },\n};\n\nexport const defaultLogicNodeDefinition: NodeDefinition = {\n type: DEFAULT_LOGIC_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\", optional: true }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"logic-run\" },\n};\n\n/** 生命周期钩子节点:无入流,触发后向下游发出真/假信号 */\nexport const lifecycleNodeDefinition: NodeDefinition = {\n type: LIFECYCLE_NODE_TYPE,\n inputs: [],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"lifecycle-emit\" },\n};\n\n/** 数据源获取:收到真信号后发起 fetch,成功/失败输出对应信号 */\nexport const fetchNodeDefinition: NodeDefinition = {\n type: FETCH_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"fetch-run\" },\n};\n\n/** JSON 解析:收到真信号后将配置的 JSON 转为 object 输出 */\nexport const jsonNodeDefinition: NodeDefinition = {\n type: JSON_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"json-parse-run\" },\n};\n\n/** 存储节点:收到真信号后先写入再读取 sessionStorage / localStorage */\nexport const storageNodeDefinition: NodeDefinition = {\n type: STORAGE_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"storage-run\" },\n};\n\n/** 时钟节点:收到真信号后按间隔输出含当前时间的真信号 */\nexport const clockNodeDefinition: NodeDefinition = {\n type: CLOCK_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"clock-run\" },\n};\n\n/** 并运算:两路输入均为真时输出真信号;单端口多连线按「或」合并 */\nexport const andLogicNodeDefinition: NodeDefinition = {\n type: AND_NODE_TYPE,\n inputs: [\n { name: \"inA\", kind: \"data\" },\n { name: \"inB\", kind: \"data\" },\n ],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"and-run\" },\n};\n\n/** 视图绑定节点:收到信号后为关联视图元素写入 scope,并向下游透传 */\nexport const viewBindNodeDefinition: NodeDefinition = {\n type: VIEW_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"view-bind-run\" },\n};\n\n/** 视图事件节点:输入必须来自生命周期节点,对应阶段触发后注册事件,视图事件发生时输出真信号 */\nexport const viewEventNodeDefinition: NodeDefinition = {\n type: EVENT_NODE_TYPE,\n inputs: [{ name: \"in\", kind: \"data\" }],\n outputs: [{ name: \"out\", kind: \"data\" }],\n behavior: { kind: \"js\", ref: \"event-emit\" },\n};\n\nexport const nodeDefinitionRegistry: Record<string, NodeDefinition> = {\n [BLUEPRINT_NODE_TYPE]: blueprintNodeDefinition,\n [DEFAULT_LOGIC_NODE_TYPE]: defaultLogicNodeDefinition,\n [LIFECYCLE_NODE_TYPE]: lifecycleNodeDefinition,\n [FETCH_NODE_TYPE]: fetchNodeDefinition,\n [JSON_NODE_TYPE]: jsonNodeDefinition,\n [STORAGE_NODE_TYPE]: storageNodeDefinition,\n [CLOCK_NODE_TYPE]: clockNodeDefinition,\n [AND_NODE_TYPE]: andLogicNodeDefinition,\n [VIEW_NODE_TYPE]: viewBindNodeDefinition,\n [EVENT_NODE_TYPE]: viewEventNodeDefinition,\n};\n\nexport function getNodeDefinition(type: string): NodeDefinition {\n const def = nodeDefinitionRegistry[type];\n if (!def) {\n throw new Error(`NodeDefinition not found: ${type}`);\n }\n return def;\n}\n","import { BLUEPRINT_NODE_TYPE } from \"../nodes/definitions.js\";\nimport type { LibraryBlueprintResolver, RunnableGraph } from \"./graph-runner.js\";\n\nexport const BLUEPRINT_CALL_STACK_KEY = \"__blueprintCallStack\";\n\nexport class BlueprintCycleError extends Error {\n readonly cycleIds: string[];\n\n constructor(cycleIds: string[], message: string) {\n super(message);\n this.name = \"BlueprintCycleError\";\n this.cycleIds = cycleIds;\n }\n}\n\nexport function collectBlueprintLibraryRefs(graph: RunnableGraph): string[] {\n const ids = new Set<string>();\n for (const node of graph.nodes) {\n if (node.nodeType === BLUEPRINT_NODE_TYPE && node.libraryBlueprintId) {\n ids.add(node.libraryBlueprintId);\n }\n }\n return [...ids];\n}\n\nexport function formatBlueprintCycleMessage(\n cycleIds: string[],\n resolveName?: (libraryBlueprintId: string) => string\n): string {\n const labels = cycleIds.map((id) => resolveName?.(id) ?? id);\n return `蓝图引用存在死循环:${labels.join(\" → \")}`;\n}\n\nexport type BlueprintCycleCheckOptions = {\n rootGraph: RunnableGraph;\n /** 当前蓝图对应的蓝图库 id;工作区蓝图未入库时为 null */\n rootLibraryBlueprintId?: string | null;\n resolveLibraryBlueprint: LibraryBlueprintResolver;\n resolveBlueprintName?: (libraryBlueprintId: string) => string;\n};\n\nexport type BlueprintCycleCheckResult =\n | { ok: true }\n | { ok: false; cycleIds: string[]; message: string };\n\nexport async function detectBlueprintReferenceCycle(\n options: BlueprintCycleCheckOptions\n): Promise<BlueprintCycleCheckResult> {\n const {\n rootGraph,\n rootLibraryBlueprintId,\n resolveLibraryBlueprint,\n resolveBlueprintName,\n } = options;\n\n const graphCache = new Map<string, RunnableGraph | null>();\n\n const loadGraph = async (libraryBlueprintId: string) => {\n if (!graphCache.has(libraryBlueprintId)) {\n graphCache.set(\n libraryBlueprintId,\n await resolveLibraryBlueprint(libraryBlueprintId)\n );\n }\n return graphCache.get(libraryBlueprintId) ?? null;\n };\n\n const visit = async (\n path: string[],\n graph: RunnableGraph\n ): Promise<string[] | null> => {\n for (const refId of collectBlueprintLibraryRefs(graph)) {\n const cycleIndex = path.indexOf(refId);\n if (cycleIndex !== -1) {\n return [...path.slice(cycleIndex), refId];\n }\n\n const nested = await loadGraph(refId);\n if (!nested) continue;\n\n const cycle = await visit([...path, refId], nested);\n if (cycle) return cycle;\n }\n return null;\n };\n\n const initialPath = rootLibraryBlueprintId ? [rootLibraryBlueprintId] : [];\n const cycleIds = await visit(initialPath, rootGraph);\n\n if (!cycleIds) {\n return { ok: true };\n }\n\n return {\n ok: false,\n cycleIds,\n message: formatBlueprintCycleMessage(cycleIds, resolveBlueprintName),\n };\n}\n\nexport async function assertNoBlueprintReferenceCycle(\n options: BlueprintCycleCheckOptions\n): Promise<void> {\n const result = await detectBlueprintReferenceCycle(options);\n if (!result.ok) {\n throw new BlueprintCycleError(result.cycleIds, result.message);\n }\n}\n\nexport function resolveBlueprintCallStack(\n scopeStack: string[] | undefined,\n rootLibraryBlueprintId?: string | null\n): string[] {\n if (scopeStack) return scopeStack;\n return rootLibraryBlueprintId ? [rootLibraryBlueprintId] : [];\n}\n\nexport function detectRuntimeBlueprintCycle(\n callStack: string[],\n targetLibraryBlueprintId: string,\n resolveName?: (libraryBlueprintId: string) => string\n): BlueprintCycleCheckResult {\n const cycleIndex = callStack.indexOf(targetLibraryBlueprintId);\n if (cycleIndex === -1) {\n return { ok: true };\n }\n const cycleIds = [\n ...callStack.slice(cycleIndex),\n targetLibraryBlueprintId,\n ];\n return {\n ok: false,\n cycleIds,\n message: formatBlueprintCycleMessage(cycleIds, resolveName),\n };\n}\n","const activeClockNodeIds = new Set<string>();\nconst listeners = new Set<() => void>();\n\nfunction emit() {\n listeners.forEach((listener) => listener());\n}\n\nexport function markClockNodeActive(nodeId: string) {\n if (activeClockNodeIds.has(nodeId)) return;\n activeClockNodeIds.add(nodeId);\n emit();\n}\n\nexport function markClockNodeInactive(nodeId: string) {\n if (!activeClockNodeIds.delete(nodeId)) return;\n emit();\n}\n\nexport function isClockNodeActive(nodeId: string): boolean {\n return activeClockNodeIds.has(nodeId);\n}\n\nexport function getActiveClockNodeIds(): string[] {\n return [...activeClockNodeIds];\n}\n\nexport function subscribeActiveClockNodes(listener: () => void) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n","import {\n buildClockSignalValue,\n normalizeClockConfig,\n startClockSchedule,\n stopAllClockSchedules,\n stopClockSchedule,\n abortClockSession,\n isClockScheduleActive,\n isClockSessionAborted,\n clearClockSessionAbort,\n validateClockScheduleConfig,\n type ClockNodeConfig,\n} from \"../clock-config.js\";\nimport {\n markClockNodeActive,\n markClockNodeInactive,\n} from \"./clock-active-registry.js\";\n\nexport function buildClockSessionKey(scopeId: string, nodeId: string): string {\n return `${scopeId}:${nodeId}`;\n}\n\nexport function abortClockNode(scopeId: string, nodeId: string): void {\n abortClockSession(buildClockSessionKey(scopeId, nodeId));\n markClockNodeInactive(nodeId);\n}\n\nexport function scheduleClockOutputs(options: {\n sessionKey: string;\n config: ClockNodeConfig;\n onTick: () => void | Promise<void>;\n onSettled?: () => void;\n}): () => void {\n return startClockSchedule(options);\n}\n\nexport {\n stopClockSchedule,\n stopAllClockSchedules,\n abortClockSession,\n isClockScheduleActive,\n isClockSessionAborted,\n clearClockSessionAbort,\n validateClockScheduleConfig,\n};\n\nexport function createClockOutputValue(config: ClockNodeConfig) {\n return buildClockSignalValue(normalizeClockConfig(config));\n}\n","import type { FetchRequestConfig } from \"../fetch-config.js\";\nimport {\n executeFetch,\n normalizeFetchRequestConfig,\n resolveFetchRequestUrl,\n} from \"../fetch-config.js\";\nimport {\n applyFetchConfigScope,\n getFetchBodyValidationError,\n getFetchHeadersValidationError,\n resolveFetchIncomingScope,\n} from \"../incoming-node-scope.js\";\nimport type { JsonNodeConfig } from \"../json-config.js\";\nimport {\n DEFAULT_JSON_NODE_CONFIG,\n parseJsonConfig,\n} from \"../json-config.js\";\nimport type { StorageNodeConfig } from \"../storage-config.js\";\nimport {\n DEFAULT_STORAGE_NODE_CONFIG,\n executeStorageConfig,\n normalizeStorageConfig,\n} from \"../storage-config.js\";\nimport type { LogicNodeConfig } from \"../logic-config.js\";\nimport {\n DEFAULT_LOGIC_NODE_CONFIG,\n executeLogicConfig,\n} from \"../logic-config.js\";\nimport type { ClockNodeConfig } from \"../clock-config.js\";\nimport {\n buildClockSignalValue,\n DEFAULT_CLOCK_NODE_CONFIG,\n getClockTickWaitMs,\n normalizeClockConfig,\n validateClockScheduleConfig,\n} from \"../clock-config.js\";\nimport type { ViewEventNodeConfig, ViewEventSignal } from \"../event-config.js\";\nimport { normalizeViewEventConfig } from \"../event-config.js\";\nimport {\n buildClockSessionKey,\n scheduleClockOutputs,\n stopAllClockSchedules,\n abortClockNode as abortClockNodeSession,\n isClockSessionAborted,\n clearClockSessionAbort,\n} from \"./clock-scheduler.js\";\nimport {\n markClockNodeActive,\n markClockNodeInactive,\n} from \"./clock-active-registry.js\";\nimport {\n registerDefaultBehaviors,\n BLUEPRINT_ACTIVATION_INPUT_KEY,\n LIFECYCLE_SIGNAL_KEY,\n UI_EVENT_PAYLOAD_KEY,\n VIEW_EVENT_SIGNAL_KEY,\n} from \"../behaviors/default.js\";\nimport { BehaviorRegistry } from \"../core/behavior-registry.js\";\nimport { Executor } from \"../core/executor.js\";\nimport {\n createLifecycleSignal,\n type LifecycleSignal,\n type PageLifecyclePhase,\n} from \"../lifecycle.js\";\nimport {\n createFalseSignal,\n createTrueSignal,\n combinePortSignalsOr,\n isFalseSignal,\n isTrueSignal,\n} from \"../node-signal.js\";\nimport {\n BLUEPRINT_NODE_TYPE,\n CLOCK_NODE_TYPE,\n EVENT_NODE_TYPE,\n getNodeDefinition,\n LIFECYCLE_NODE_TYPE,\n VIEW_NODE_TYPE,\n} from \"../nodes/definitions.js\";\nimport type { BlueprintRefOutput, BlueprintNodeOutputs } from \"../blueprint-signal.js\";\nimport {\n createTraceEntryId,\n serializeTraceValue,\n type ExecutionTraceEntry,\n} from \"./execution-trace.js\";\nimport type { ExecutionToken, Scope, Value } from \"../type.js\";\nimport {\n assertNoBlueprintReferenceCycle,\n BLUEPRINT_CALL_STACK_KEY,\n detectRuntimeBlueprintCycle,\n resolveBlueprintCallStack,\n} from \"./blueprint-cycle.js\";\n\nexport type RunnableGraphNode = {\n id: string;\n nodeType: string;\n label?: string;\n role?: string;\n lifecyclePhase?: PageLifecyclePhase;\n /** 蓝图库记录 id,Blueprint 节点引用嵌套蓝图时使用 */\n libraryBlueprintId?: string;\n blueprintName?: string;\n /** 视图绑定节点关联的视图画布元素 id */\n viewElementIds?: string[];\n fetchConfig?: FetchRequestConfig;\n jsonConfig?: JsonNodeConfig;\n storageConfig?: StorageNodeConfig;\n logicConfig?: LogicNodeConfig;\n clockConfig?: ClockNodeConfig;\n eventConfig?: ViewEventNodeConfig;\n};\n\nexport type RunnableGraphEdge = {\n source: string;\n target: string;\n sourceHandle?: string;\n targetHandle?: string;\n};\n\nexport type RunnableGraph = {\n nodes: RunnableGraphNode[];\n edges: RunnableGraphEdge[];\n /** 为 true 时调试/执行不因假信号阻塞队列 */\n allowFalseSignalPropagation?: boolean;\n};\n\nexport type LibraryBlueprintResolver = (\n libraryBlueprintId: string\n) => Promise<RunnableGraph | null>;\n\nexport type ViewScopeUpdateCallback = (\n viewElementIds: string[],\n scope: unknown\n) => void;\n\ntype NodeOutputStore = Map<string, Map<string, Value>>;\n\ntype DebugSessionSnapshot = {\n outputs: NodeOutputStore;\n queue: ExecutionToken[];\n traceEntries: ExecutionTraceEntry[];\n};\n\nfunction createTokenId() {\n return `token_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction cloneScope(scope?: Scope): Scope {\n return {\n parent: scope?.parent,\n vars: new Map(scope?.vars ?? []),\n };\n}\n\nfunction cloneOutputs(outputs: NodeOutputStore): NodeOutputStore {\n const next = new Map<string, Map<string, Value>>();\n for (const [nodeId, ports] of outputs.entries()) {\n next.set(nodeId, new Map(ports));\n }\n return next;\n}\n\nfunction cloneToken(token: ExecutionToken): ExecutionToken {\n return {\n tokenId: token.tokenId,\n nodeId: token.nodeId,\n nodeType: token.nodeType,\n inPort: token.inPort,\n scope: cloneScope(token.scope),\n correlationId: token.correlationId,\n };\n}\n\nfunction cloneQueue(queue: ExecutionToken[]): ExecutionToken[] {\n return queue.map(cloneToken);\n}\n\ntype DebugProgressCallback = (entries: ExecutionTraceEntry[]) => void;\n\nexport class BlueprintGraphRunner {\n private behaviors: BehaviorRegistry;\n private outputs: NodeOutputStore = new Map();\n private resolveLibraryBlueprint?: LibraryBlueprintResolver;\n private debugQueue: ExecutionToken[] | null = null;\n private debugExecutor: Executor | null = null;\n private traceEntries: ExecutionTraceEntry[] = [];\n private debugHistory: DebugSessionSnapshot[] = [];\n private rootLibraryBlueprintId?: string | null;\n private resolveBlueprintName?: (libraryBlueprintId: string) => string;\n private cycleValidated = false;\n private debugProgressCallback: DebugProgressCallback | null = null;\n private onViewScopeUpdate?: ViewScopeUpdateCallback;\n\n constructor(\n private graph: RunnableGraph,\n options?: {\n resolveLibraryBlueprint?: LibraryBlueprintResolver;\n rootLibraryBlueprintId?: string | null;\n resolveBlueprintName?: (libraryBlueprintId: string) => string;\n onViewScopeUpdate?: ViewScopeUpdateCallback;\n }\n ) {\n this.resolveLibraryBlueprint = options?.resolveLibraryBlueprint;\n this.rootLibraryBlueprintId = options?.rootLibraryBlueprintId ?? null;\n this.resolveBlueprintName = options?.resolveBlueprintName;\n this.onViewScopeUpdate = options?.onViewScopeUpdate;\n this.behaviors = new BehaviorRegistry();\n registerDefaultBehaviors(this.behaviors);\n this.registerBlueprintRefBehavior();\n this.registerFetchBehavior();\n this.registerJsonBehavior();\n this.registerStorageBehavior();\n this.registerLogicBehavior();\n this.registerClockBehavior();\n this.registerAndBehavior();\n this.registerViewBindBehavior();\n }\n\n async ensureNoBlueprintCycle(): Promise<void> {\n if (this.cycleValidated || !this.resolveLibraryBlueprint) {\n return;\n }\n await assertNoBlueprintReferenceCycle({\n rootGraph: this.graph,\n rootLibraryBlueprintId: this.rootLibraryBlueprintId,\n resolveLibraryBlueprint: this.resolveLibraryBlueprint,\n resolveBlueprintName: this.resolveBlueprintName,\n });\n this.cycleValidated = true;\n }\n\n private injectedInputs = new Map<string, Value>();\n\n /**\n * 从视图交互触发指定蓝图节点:向该节点 in 口注入真信号并执行下游。\n * payload 写入 scope(UI_EVENT_PAYLOAD_KEY)供 Logic 等节点读取。\n */\n async triggerNode(nodeId: string, inputValue?: unknown): Promise<void> {\n await this.ensureNoBlueprintCycle();\n this.requireNode(nodeId);\n const key = `${nodeId}:in`;\n this.injectedInputs.set(key, createTrueSignal(inputValue ?? true));\n try {\n await this.runFromNodeWithUiPayload(nodeId, inputValue);\n } finally {\n this.injectedInputs.delete(key);\n }\n }\n\n private async runFromNodeWithUiPayload(\n nodeId: string,\n inputValue?: unknown\n ) {\n const queue: ExecutionToken[] = [\n {\n tokenId: createTokenId(),\n nodeId,\n nodeType: this.requireNode(nodeId).nodeType,\n inPort: \"in\",\n scope: cloneScope(),\n },\n ];\n queue[0]!.scope.vars.set(UI_EVENT_PAYLOAD_KEY, inputValue);\n\n const executor = this.createExecutor(queue);\n\n while (queue.length > 0) {\n const token = queue.shift()!;\n if (!this.syncTokenFromGraph(token)) continue;\n try {\n await executor.executeToken(token);\n } catch (error) {\n this.setNodeOutput(\n token.nodeId,\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n const nextNodes = this.findSignalTargets(token.nodeId, \"out\");\n for (const target of nextNodes) {\n queue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: token.scope,\n correlationId: token.correlationId ?? token.tokenId,\n });\n }\n }\n }\n }\n\n async emitLifecycle(phase: PageLifecyclePhase): Promise<void> {\n await this.ensureNoBlueprintCycle();\n const signal = createLifecycleSignal(phase);\n const targets = this.graph.nodes.filter(\n (node) =>\n node.nodeType === LIFECYCLE_NODE_TYPE && node.lifecyclePhase === phase\n );\n\n for (const node of targets) {\n await this.runFromNode(node.id, signal);\n }\n }\n\n /**\n * 嵌套蓝图被引用且父级传入真信号时,触发 blueprintActivated 生命周期节点,\n * 并将父级输入值写入 scope 供节点输出。\n */\n async emitBlueprintActivated(\n inputValue: unknown,\n parentScope?: Scope\n ): Promise<void> {\n const signal = createLifecycleSignal(\"blueprintActivated\");\n const targets = this.graph.nodes.filter(\n (node) =>\n node.nodeType === LIFECYCLE_NODE_TYPE &&\n node.lifecyclePhase === \"blueprintActivated\"\n );\n\n for (const node of targets) {\n await this.runFromNode(node.id, signal, parentScope, inputValue);\n }\n }\n\n /**\n * 视图节点触发事件时,匹配已注册(上游生命周期已触发)且绑定了该元素、事件类型的事件节点,发出真信号。\n */\n async emitViewEvent(\n payload: ViewEventSignal,\n armedNodeIds?: ReadonlySet<string>\n ): Promise<void> {\n await this.ensureNoBlueprintCycle();\n const targets = this.graph.nodes.filter((node) => {\n if (node.nodeType !== EVENT_NODE_TYPE) return false;\n if (armedNodeIds && !armedNodeIds.has(node.id)) return false;\n if (!(node.viewElementIds ?? []).includes(payload.node.id)) return false;\n return normalizeViewEventConfig(node.eventConfig).eventTypes.includes(\n payload.eventType\n );\n });\n\n for (const node of targets) {\n await this.runFromNode(node.id, undefined, undefined, undefined, payload);\n }\n }\n\n /** 时钟节点单次输出:向下游传播含当前时间的真信号 */\n async propagateClockOutput(\n nodeId: string,\n parentScope?: Scope,\n sessionKey?: string\n ): Promise<void> {\n const resolvedSessionKey =\n sessionKey ?? buildClockSessionKey(this.clockScopeId(), nodeId);\n if (isClockSessionAborted(resolvedSessionKey)) return;\n\n await this.ensureNoBlueprintCycle();\n const node = this.requireNode(nodeId);\n if (node.nodeType !== CLOCK_NODE_TYPE) return;\n\n const config = normalizeClockConfig({\n ...DEFAULT_CLOCK_NODE_CONFIG,\n ...node.clockConfig,\n });\n const value = buildClockSignalValue(config);\n this.setNodeOutput(nodeId, \"out\", createTrueSignal(value));\n\n const queue: ExecutionToken[] = [];\n for (const target of this.findSignalTargets(nodeId, \"out\")) {\n queue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: cloneScope(parentScope),\n });\n }\n\n const executor = this.createExecutor(queue);\n while (queue.length > 0) {\n if (isClockSessionAborted(resolvedSessionKey)) {\n queue.length = 0;\n return;\n }\n const token = queue.shift()!;\n if (!this.syncTokenFromGraph(token)) continue;\n try {\n await executor.executeToken(token);\n } catch (error) {\n this.setNodeOutput(\n token.nodeId,\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n const nextNodes = this.findSignalTargets(token.nodeId, \"out\");\n for (const target of nextNodes) {\n queue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: token.scope,\n correlationId: token.correlationId ?? token.tokenId,\n });\n }\n }\n }\n }\n\n private clockScopeId(): string {\n return this.rootLibraryBlueprintId ?? \"local\";\n }\n\n private startClockSchedule(nodeId: string, config: ClockNodeConfig, scope?: Scope) {\n const sessionKey = buildClockSessionKey(this.clockScopeId(), nodeId);\n markClockNodeActive(nodeId);\n scheduleClockOutputs({\n sessionKey,\n config,\n onTick: async () => {\n if (isClockSessionAborted(sessionKey)) return;\n await this.propagateClockOutput(nodeId, scope, sessionKey);\n },\n onSettled: () => markClockNodeInactive(nodeId),\n });\n }\n\n /** 中止指定时钟节点:停止剩余 tick 与正在执行的下游任务 */\n abortClockNode(nodeId: string): void {\n abortClockNodeSession(this.clockScopeId(), nodeId);\n }\n\n /** 从所有无入流 signal 的节点开始执行(嵌套蓝图调用) */\n async runFromFlowEntries(\n parentScope?: Scope,\n options?: { preserveOutputs?: boolean }\n ): Promise<BlueprintNodeOutputs> {\n if (!options?.preserveOutputs) {\n this.outputs.clear();\n }\n const entries = this.findSignalEntryNodes();\n for (const node of entries) {\n await this.runFromNode(node.id, undefined, parentScope);\n }\n return this.collectOutputs();\n }\n\n getNodeOutputs(): BlueprintNodeOutputs {\n return this.collectOutputs();\n }\n\n getTraceEntries(): ExecutionTraceEntry[] {\n return [...this.traceEntries];\n }\n\n isDebugSessionActive(): boolean {\n return this.debugQueue !== null;\n }\n\n isDebugQueueEmpty(): boolean {\n return !this.debugQueue || this.debugQueue.length === 0;\n }\n\n /** 调试过程中同步最新蓝图拓扑与节点配置 */\n updateGraph(graph: RunnableGraph): void {\n this.graph = graph;\n this.syncDebugQueueWithLatestGraph();\n }\n\n /**\n * 按当前图结构重建待执行队列。\n * 已有 trace 时,从最后执行的节点按最新出边重新入队;便于编辑连线后继续单步调试。\n */\n refreshPendingQueueFromLatestGraph(): void {\n if (!this.debugQueue) return;\n\n if (this.traceEntries.length === 0) {\n this.syncDebugQueueWithLatestGraph();\n return;\n }\n\n const lastEntry = this.traceEntries[this.traceEntries.length - 1]!;\n const lastOutput = this.getNodeOutput(lastEntry.nodeId, \"out\");\n if (\n lastOutput !== undefined &&\n isFalseSignal(lastOutput) &&\n !this.graph.allowFalseSignalPropagation\n ) {\n this.debugQueue = [];\n return;\n }\n\n const scope =\n this.debugQueue[0]?.scope ??\n this.debugHistory[0]?.queue[0]?.scope ??\n cloneScope();\n\n const node = this.graph.nodes.find((n) => n.id === lastEntry.nodeId);\n if (!node) {\n this.debugQueue = [];\n return;\n }\n\n let def;\n try {\n def = getNodeDefinition(node.nodeType);\n } catch {\n this.debugQueue = [];\n return;\n }\n\n const newQueue: ExecutionToken[] = [];\n for (const port of def.outputs) {\n if (this.getNodeOutput(lastEntry.nodeId, port.name) === undefined) {\n continue;\n }\n for (const target of this.findSignalTargets(lastEntry.nodeId, port.name)) {\n newQueue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: cloneScope(scope),\n });\n }\n }\n if (newQueue.length > 0 || this.debugQueue.length === 0) {\n this.debugQueue = newQueue;\n }\n }\n\n canDebugStepBack(): boolean {\n return this.debugHistory.length > 1;\n }\n\n debugStepBack(): boolean {\n if (!this.debugQueue || this.debugHistory.length <= 1) {\n return false;\n }\n this.debugHistory.pop();\n const snapshot = this.debugHistory[this.debugHistory.length - 1]!;\n this.restoreDebugSnapshot(snapshot);\n return true;\n }\n\n private captureDebugSnapshot(): DebugSessionSnapshot {\n return {\n outputs: cloneOutputs(this.outputs),\n queue: cloneQueue(this.debugQueue ?? []),\n traceEntries: [...this.traceEntries],\n };\n }\n\n private restoreDebugSnapshot(snapshot: DebugSessionSnapshot): void {\n this.outputs = cloneOutputs(snapshot.outputs);\n this.debugQueue = cloneQueue(snapshot.queue);\n this.traceEntries = [...snapshot.traceEntries];\n }\n\n private pushDebugSnapshot(): void {\n this.debugHistory.push(this.captureDebugSnapshot());\n }\n\n beginDebugSession(lifecycleNodeId: string): void {\n stopAllClockSchedules();\n const node = this.requireNode(lifecycleNodeId);\n if (node.nodeType !== LIFECYCLE_NODE_TYPE) {\n throw new Error(\"调试会话只能从生命周期节点开始\");\n }\n\n this.outputs.clear();\n this.traceEntries = [];\n this.debugQueue = [\n {\n tokenId: createTokenId(),\n nodeId: lifecycleNodeId,\n nodeType: node.nodeType,\n inPort: \"in\",\n scope: cloneScope(),\n },\n ];\n\n this.applyLifecycleScopeForNode(lifecycleNodeId);\n\n this.debugExecutor = this.createExecutor(this.debugQueue, {\n emitToActiveDebugQueue: true,\n });\n this.debugHistory = [this.captureDebugSnapshot()];\n }\n\n /** 调试中修改生命周期阶段后,同步队列头部的 scope 信号 */\n refreshDebugLifecycleScope(lifecycleNodeId: string): void {\n const head = this.debugQueue?.[0];\n if (!head || head.nodeId !== lifecycleNodeId) return;\n this.applyLifecycleScopeForNode(lifecycleNodeId);\n }\n\n private applyLifecycleScopeForNode(lifecycleNodeId: string): void {\n const head = this.debugQueue?.[0];\n if (!head || head.nodeId !== lifecycleNodeId) return;\n\n const node = this.graph.nodes.find((n) => n.id === lifecycleNodeId);\n if (!node?.lifecyclePhase) {\n head.scope.vars.delete(LIFECYCLE_SIGNAL_KEY);\n head.scope.vars.delete(BLUEPRINT_ACTIVATION_INPUT_KEY);\n return;\n }\n\n head.scope.vars.set(\n LIFECYCLE_SIGNAL_KEY,\n createLifecycleSignal(node.lifecyclePhase)\n );\n if (node.lifecyclePhase === \"blueprintActivated\") {\n head.scope.vars.set(BLUEPRINT_ACTIVATION_INPUT_KEY, undefined);\n } else {\n head.scope.vars.delete(BLUEPRINT_ACTIVATION_INPUT_KEY);\n }\n }\n\n clearDebugSession(): void {\n stopAllClockSchedules();\n this.debugQueue = null;\n this.debugExecutor = null;\n this.traceEntries = [];\n this.outputs.clear();\n this.debugHistory = [];\n }\n\n async debugStep(\n nodeLabelById?: Record<string, string>,\n onProgress?: DebugProgressCallback\n ): Promise<{\n done: boolean;\n entry?: ExecutionTraceEntry;\n haltedByFalseSignal?: boolean;\n }> {\n if (!this.debugQueue || !this.debugExecutor) {\n return { done: true };\n }\n if (this.debugQueue.length === 0) {\n return { done: true };\n }\n\n const prevCallback = this.debugProgressCallback;\n this.debugProgressCallback = onProgress ?? null;\n\n try {\n this.pushDebugSnapshot();\n const token = this.debugQueue.shift()!;\n if (!this.syncTokenFromGraph(token)) {\n this.pushDebugSnapshot();\n return {\n done: this.debugQueue.length === 0,\n haltedByFalseSignal: false,\n };\n }\n\n if (token.nodeType === CLOCK_NODE_TYPE) {\n const node = this.requireNode(token.nodeId);\n const config = normalizeClockConfig({\n ...DEFAULT_CLOCK_NODE_CONFIG,\n ...node.clockConfig,\n });\n const halted = await this.executeClockScheduleForDebug(\n token,\n config,\n nodeLabelById\n );\n this.haltDebugQueueOnFalseOutput(token.nodeId);\n this.pushDebugSnapshot();\n return {\n done: this.debugQueue.length === 0,\n entry: this.traceEntries[this.traceEntries.length - 1],\n haltedByFalseSignal:\n halted || this.isDebugHaltedByFalseOutput(token.nodeId),\n };\n }\n\n const entry = await this.executeDebugToken(token, nodeLabelById);\n this.haltDebugQueueOnFalseOutput(token.nodeId);\n this.pushDebugSnapshot();\n\n return {\n done: this.debugQueue.length === 0,\n entry,\n haltedByFalseSignal: this.isDebugHaltedByFalseOutput(token.nodeId),\n };\n } finally {\n this.debugProgressCallback = prevCallback;\n }\n }\n\n private notifyDebugProgress(): void {\n this.debugProgressCallback?.([...this.traceEntries]);\n }\n\n private async awaitClockDelay(ms: number, sessionKey?: string): Promise<void> {\n if (ms <= 0) return;\n const step = 50;\n let elapsed = 0;\n while (elapsed < ms) {\n if (sessionKey && isClockSessionAborted(sessionKey)) return;\n const chunk = Math.min(step, ms - elapsed);\n await new Promise<void>((resolve) => setTimeout(resolve, chunk));\n elapsed += chunk;\n }\n }\n\n private buildTraceInputsForNode(\n nodeId: string,\n nodeType: string\n ): Record<string, unknown> {\n const def = getNodeDefinition(nodeType);\n const inputs: Record<string, unknown> = {};\n for (const port of def.inputs) {\n inputs[port.name] = serializeTraceValue(\n this.resolvePortInputValue(nodeId, port.name)\n );\n }\n return inputs;\n }\n\n private appendDebugTraceEntry(\n token: ExecutionToken,\n nodeLabelById: Record<string, string> | undefined,\n startedAt: number,\n options?: {\n tickLabel?: string;\n clockTickIndex?: number;\n clockTickTotal?: number;\n inputs?: Record<string, unknown>;\n error?: string;\n }\n ): ExecutionTraceEntry {\n const def = getNodeDefinition(token.nodeType);\n const outputs: Record<string, unknown> = {};\n for (const port of def.outputs) {\n outputs[port.name] = serializeTraceValue(\n this.getNodeOutput(token.nodeId, port.name)\n );\n }\n\n const entry: ExecutionTraceEntry = {\n id: createTraceEntryId(),\n nodeId: token.nodeId,\n nodeLabel: options?.tickLabel ?? nodeLabelById?.[token.nodeId],\n nodeType: token.nodeType,\n startedAt,\n finishedAt: Date.now(),\n isoTime: new Date(startedAt).toISOString(),\n inputs:\n options?.inputs ??\n this.buildTraceInputsForNode(token.nodeId, token.nodeType),\n outputs,\n error: options?.error,\n clockTickIndex: options?.clockTickIndex,\n clockTickTotal: options?.clockTickTotal,\n };\n this.traceEntries.push(entry);\n this.notifyDebugProgress();\n return entry;\n }\n\n private enqueueDebugTargets(\n sourceNodeId: string,\n outPort: string,\n scope: Scope\n ): ExecutionToken[] {\n return this.findSignalTargets(sourceNodeId, outPort).map((target) => ({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: cloneScope(scope),\n }));\n }\n\n private async runDebugTokenSubqueue(\n queue: ExecutionToken[],\n nodeLabelById?: Record<string, string>,\n abortSessionKey?: string\n ): Promise<boolean> {\n const executor = this.createExecutor(queue);\n\n while (queue.length > 0) {\n if (abortSessionKey && isClockSessionAborted(abortSessionKey)) {\n queue.length = 0;\n return false;\n }\n\n const token = queue.shift()!;\n\n if (token.nodeType === CLOCK_NODE_TYPE) {\n const node = this.requireNode(token.nodeId);\n const config = normalizeClockConfig({\n ...DEFAULT_CLOCK_NODE_CONFIG,\n ...node.clockConfig,\n });\n const halted = await this.executeClockScheduleForDebug(\n token,\n config,\n nodeLabelById\n );\n if (halted) return true;\n continue;\n }\n\n await this.executeDebugToken(token, nodeLabelById, executor, queue);\n if (abortSessionKey && isClockSessionAborted(abortSessionKey)) {\n queue.length = 0;\n return false;\n }\n if (this.isDebugHaltedByFalseOutput(token.nodeId)) {\n return true;\n }\n this.pushDebugSnapshot();\n }\n\n return false;\n }\n\n private async executeDebugToken(\n token: ExecutionToken,\n nodeLabelById?: Record<string, string>,\n executor?: Executor,\n emitQueue?: ExecutionToken[]\n ): Promise<ExecutionTraceEntry> {\n const startedAt = Date.now();\n let error: string | undefined;\n\n const runExecutor =\n executor ??\n this.debugExecutor ??\n this.createExecutor(this.debugQueue ?? []);\n\n if (!this.syncTokenFromGraph(token)) {\n return this.appendDebugTraceEntry(token, nodeLabelById, startedAt, {\n error: \"节点已从蓝图中移除\",\n });\n }\n\n try {\n await runExecutor.executeToken(token);\n } catch (err) {\n error = err instanceof Error ? err.message : String(err);\n this.setNodeOutput(\n token.nodeId,\n \"out\",\n createFalseSignal(error)\n );\n const targets = emitQueue ?? this.debugQueue;\n if (targets) {\n for (const next of this.enqueueDebugTargets(\n token.nodeId,\n \"out\",\n token.scope\n )) {\n targets.push(next);\n }\n }\n }\n\n return this.appendDebugTraceEntry(token, nodeLabelById, startedAt, {\n error,\n });\n }\n\n /**\n * 调试模式下执行完整时钟序列:等待 n 次输出(含间隔),\n * 每次更新 trace / 画布高亮,并同步跑完当次下游链。\n */\n private async executeClockScheduleForDebug(\n token: ExecutionToken,\n config: ClockNodeConfig,\n nodeLabelById?: Record<string, string>\n ): Promise<boolean> {\n const sessionKey = buildClockSessionKey(this.clockScopeId(), token.nodeId);\n clearClockSessionAbort(sessionKey);\n markClockNodeActive(token.nodeId);\n try {\n const normalized = normalizeClockConfig(config);\n const baseInputs = this.buildTraceInputsForNode(\n token.nodeId,\n token.nodeType\n );\n const input = this.resolvePortInputValue(token.nodeId, \"in\");\n\n const finishWithOutput = async (\n output: Value,\n tickLabel?: string\n ): Promise<boolean> => {\n this.setNodeOutput(token.nodeId, \"out\", output);\n this.appendDebugTraceEntry(token, nodeLabelById, Date.now(), {\n tickLabel,\n inputs: baseInputs,\n });\n this.pushDebugSnapshot();\n const subQueue = this.enqueueDebugTargets(\n token.nodeId,\n \"out\",\n token.scope\n );\n return this.runDebugTokenSubqueue(subQueue, nodeLabelById, sessionKey);\n };\n\n if (isFalseSignal(input)) {\n return finishWithOutput(input);\n }\n\n if (!isTrueSignal(input)) {\n return finishWithOutput(\n createFalseSignal(\"时钟节点需要收到真信号后才会启动\")\n );\n }\n\n const validation = validateClockScheduleConfig(normalized);\n if (!validation.ok) {\n return finishWithOutput(createFalseSignal(validation.error));\n }\n\n const baseLabel = nodeLabelById?.[token.nodeId] ?? token.nodeId;\n const scheduleStartMs = Date.now();\n\n for (let i = 0; i < normalized.outputCount; i++) {\n if (isClockSessionAborted(sessionKey)) return false;\n\n const waitMs = getClockTickWaitMs(normalized, i, scheduleStartMs);\n if (waitMs > 0) {\n await this.awaitClockDelay(waitMs, sessionKey);\n }\n if (isClockSessionAborted(sessionKey)) return false;\n\n const tickStarted = Date.now();\n const value = buildClockSignalValue(normalized);\n this.setNodeOutput(token.nodeId, \"out\", createTrueSignal(value));\n\n const tickLabel =\n normalized.outputCount > 1\n ? `${baseLabel} (${i + 1}/${normalized.outputCount})`\n : baseLabel;\n\n this.appendDebugTraceEntry(token, nodeLabelById, tickStarted, {\n tickLabel,\n inputs: baseInputs,\n clockTickIndex: i + 1,\n clockTickTotal: normalized.outputCount,\n });\n this.pushDebugSnapshot();\n\n const subQueue = this.enqueueDebugTargets(\n token.nodeId,\n \"out\",\n token.scope\n );\n const halted = await this.runDebugTokenSubqueue(\n subQueue,\n nodeLabelById,\n sessionKey\n );\n if (halted || isClockSessionAborted(sessionKey)) return halted;\n }\n\n return false;\n } finally {\n markClockNodeInactive(token.nodeId);\n }\n }\n\n isDebugHaltedByFalseOutput(nodeId?: string): boolean {\n if (this.graph.allowFalseSignalPropagation) return false;\n const targetId = nodeId ?? this.traceEntries[this.traceEntries.length - 1]?.nodeId;\n if (!targetId) return false;\n return this.isFalseOutputNode(targetId);\n }\n\n private isFalseOutputNode(nodeId: string): boolean {\n const out = this.getNodeOutput(nodeId, \"out\");\n return out !== undefined && isFalseSignal(out);\n }\n\n private haltDebugQueueOnFalseOutput(nodeId: string): void {\n if (!this.debugQueue || this.graph.allowFalseSignalPropagation) return;\n if (this.isFalseOutputNode(nodeId)) {\n this.debugQueue = [];\n }\n }\n\n async debugRunAll(\n nodeLabelById?: Record<string, string>,\n onProgress?: DebugProgressCallback\n ): Promise<ExecutionTraceEntry[]> {\n while (this.debugQueue && this.debugQueue.length > 0) {\n await this.debugStep(nodeLabelById, onProgress);\n }\n return this.getTraceEntries();\n }\n\n private registerBlueprintRefBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"blueprint-ref-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n\n try {\n const input = await io.getInput(\"in\");\n if (!isTrueSignal(input)) {\n io.setOutput(\n \"out\",\n createFalseSignal(\"蓝图节点需要收到真信号后才会执行\")\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const libraryId = node.libraryBlueprintId;\n if (!libraryId) {\n io.setOutput(\"out\", createFalseSignal(\"未选择蓝图库中的蓝图\"));\n io.emitFlow(\"out\");\n return;\n }\n\n if (!runner.resolveLibraryBlueprint) {\n io.setOutput(\"out\", createFalseSignal(\"蓝图库解析器未配置\"));\n io.emitFlow(\"out\");\n return;\n }\n\n const scopeStack = token.scope.vars.get(BLUEPRINT_CALL_STACK_KEY) as\n | string[]\n | undefined;\n const callStack = resolveBlueprintCallStack(\n scopeStack,\n runner.rootLibraryBlueprintId\n );\n const runtimeCycle = detectRuntimeBlueprintCycle(\n callStack,\n libraryId,\n runner.resolveBlueprintName\n );\n if (!runtimeCycle.ok) {\n io.setOutput(\"out\", createFalseSignal(runtimeCycle.message));\n io.emitFlow(\"out\");\n return;\n }\n\n const nestedGraph = await runner.resolveLibraryBlueprint(libraryId);\n if (!nestedGraph) {\n io.setOutput(\n \"out\",\n createFalseSignal(`蓝图库记录不存在: ${libraryId}`)\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const nestedScope = cloneScope(token.scope);\n nestedScope.vars.set(BLUEPRINT_CALL_STACK_KEY, [...callStack, libraryId]);\n\n const subRunner = new BlueprintGraphRunner(nestedGraph, {\n resolveLibraryBlueprint: runner.resolveLibraryBlueprint,\n rootLibraryBlueprintId: libraryId,\n resolveBlueprintName: runner.resolveBlueprintName,\n onViewScopeUpdate: runner.onViewScopeUpdate,\n });\n await subRunner.emitBlueprintActivated(input.value, nestedScope);\n const nestedOutputs = await subRunner.runFromFlowEntries(nestedScope, {\n preserveOutputs: true,\n });\n\n const payload: BlueprintRefOutput = {\n nodeId: token.nodeId,\n nodeType: node.nodeType,\n libraryBlueprintId: libraryId,\n blueprintName:\n node.blueprintName ?? nestedGraph.nodes[0]?.blueprintName,\n nestedOutputs,\n };\n\n io.setOutput(\"out\", createTrueSignal(payload));\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerFetchBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"fetch-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n\n try {\n const inputPort = token.inPort || \"in\";\n const input = await io.getInput(inputPort);\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n io.emitFlow(\"out\");\n return;\n }\n if (!isTrueSignal(input)) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n input === undefined\n ? \"数据源节点未收到上游输出,请确认连线与上游节点已执行\"\n : \"数据源节点需要收到真信号后才会发起请求\"\n )\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const incomingScope = runner.buildFetchIncomingScope(\n token.nodeId,\n inputPort,\n input\n );\n const config = applyFetchConfigScope(\n normalizeFetchRequestConfig(node.fetchConfig),\n incomingScope\n );\n const headersError = getFetchHeadersValidationError(config, incomingScope);\n if (headersError) {\n throw new Error(headersError);\n }\n const bodyError = getFetchBodyValidationError(config.body, config.body);\n if (bodyError) {\n throw new Error(`请求体不是有效 JSON:${bodyError}`);\n }\n resolveFetchRequestUrl(config);\n\n const result = await executeFetch(config, {\n allowHttpError: runner.isDebugSessionActive(),\n });\n io.setOutput(\"out\", createTrueSignal(result));\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerLogicBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"logic-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n\n try {\n const input = await io.getInput(\"in\");\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n io.emitFlow(\"out\");\n return;\n }\n\n const inputValue = isTrueSignal(input) ? input.value : undefined;\n const config: LogicNodeConfig = {\n ...DEFAULT_LOGIC_NODE_CONFIG,\n ...node.logicConfig,\n };\n const result = executeLogicConfig(config, inputValue);\n io.setOutput(\"out\", createTrueSignal(result));\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerJsonBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"json-parse-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n\n try {\n const input = await io.getInput(\"in\");\n if (!isTrueSignal(input)) {\n io.setOutput(\n \"out\",\n createFalseSignal(\"JSON 节点需要收到真信号后才会解析\")\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const config: JsonNodeConfig = {\n ...DEFAULT_JSON_NODE_CONFIG,\n ...node.jsonConfig,\n };\n const value = parseJsonConfig(config);\n io.setOutput(\"out\", createTrueSignal(value));\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerStorageBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"storage-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n\n try {\n const inputPort = token.inPort || \"in\";\n const input = await io.getInput(inputPort);\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n io.emitFlow(\"out\");\n return;\n }\n if (!isTrueSignal(input)) {\n io.setOutput(\n \"out\",\n createFalseSignal(\"存储节点需要收到真信号后才会读写缓存\")\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const incomingScope = runner.buildFetchIncomingScope(\n token.nodeId,\n inputPort,\n input\n );\n const config = normalizeStorageConfig({\n ...DEFAULT_STORAGE_NODE_CONFIG,\n ...node.storageConfig,\n });\n const value = executeStorageConfig(config, incomingScope);\n io.setOutput(\"out\", createTrueSignal(value));\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerClockBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"clock-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n const config = normalizeClockConfig({\n ...DEFAULT_CLOCK_NODE_CONFIG,\n ...node.clockConfig,\n });\n\n try {\n const input = await io.getInput(\"in\");\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n io.emitFlow(\"out\");\n return;\n }\n if (!isTrueSignal(input)) {\n io.setOutput(\n \"out\",\n createFalseSignal(\"时钟节点需要收到真信号后才会启动\")\n );\n io.emitFlow(\"out\");\n return;\n }\n\n const validation = validateClockScheduleConfig(config);\n if (!validation.ok) {\n io.setOutput(\"out\", createFalseSignal(validation.error));\n io.emitFlow(\"out\");\n return;\n }\n\n if (runner.isDebugSessionActive()) {\n return;\n }\n\n runner.startClockSchedule(token.nodeId, config, token.scope);\n } catch (error) {\n io.setOutput(\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n io.emitFlow(\"out\");\n }\n });\n }\n\n private registerAndBehavior() {\n this.behaviors.registerJS(\"and-run\", async ({ io }) => {\n const inA = await io.getInput(\"inA\");\n const inB = await io.getInput(\"inB\");\n\n if (isTrueSignal(inA) && isTrueSignal(inB)) {\n io.setOutput(\n \"out\",\n createTrueSignal({ inA: inA.value, inB: inB.value })\n );\n } else {\n io.setOutput(\n \"out\",\n createFalseSignal(\"并运算:两个输入须均为真信号\")\n );\n }\n io.emitFlow(\"out\");\n });\n }\n\n private registerViewBindBehavior() {\n const runner = this;\n this.behaviors.registerJS(\"view-bind-run\", async ({ token, io }) => {\n const node = runner.requireNode(token.nodeId);\n const input = await io.getInput(\"in\");\n\n if (isTrueSignal(input) && node.viewElementIds?.length) {\n runner.onViewScopeUpdate?.(node.viewElementIds, input.value);\n }\n\n if (isFalseSignal(input)) {\n io.setOutput(\"out\", input);\n } else if (isTrueSignal(input)) {\n io.setOutput(\"out\", createTrueSignal(input.value));\n } else {\n io.setOutput(\"out\", createTrueSignal(undefined));\n }\n io.emitFlow(\"out\");\n });\n }\n\n private async runFromNode(\n nodeId: string,\n lifecycleSignal?: LifecycleSignal,\n parentScope?: Scope,\n activationInput?: unknown,\n viewEvent?: ViewEventSignal\n ) {\n const queue: ExecutionToken[] = [\n {\n tokenId: createTokenId(),\n nodeId,\n nodeType: this.requireNode(nodeId).nodeType,\n inPort: \"in\",\n scope: cloneScope(parentScope),\n },\n ];\n\n if (lifecycleSignal) {\n queue[0]!.scope.vars.set(LIFECYCLE_SIGNAL_KEY, lifecycleSignal);\n }\n if (lifecycleSignal?.phase === \"blueprintActivated\") {\n queue[0]!.scope.vars.set(\n BLUEPRINT_ACTIVATION_INPUT_KEY,\n activationInput\n );\n }\n if (viewEvent) {\n queue[0]!.scope.vars.set(VIEW_EVENT_SIGNAL_KEY, viewEvent);\n queue[0]!.scope.vars.set(UI_EVENT_PAYLOAD_KEY, viewEvent);\n }\n\n const executor = this.createExecutor(queue);\n\n while (queue.length > 0) {\n const token = queue.shift()!;\n if (!this.syncTokenFromGraph(token)) continue;\n try {\n await executor.executeToken(token);\n } catch (error) {\n this.setNodeOutput(\n token.nodeId,\n \"out\",\n createFalseSignal(\n error instanceof Error ? error.message : String(error)\n )\n );\n const nextNodes = this.findSignalTargets(token.nodeId, \"out\");\n for (const target of nextNodes) {\n queue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: token.scope,\n correlationId: token.correlationId ?? token.tokenId,\n });\n }\n }\n }\n }\n\n private createExecutor(\n queue: ExecutionToken[],\n options?: { emitToActiveDebugQueue?: boolean }\n ) {\n return new Executor({\n getNodeDefinition,\n behaviors: this.behaviors,\n runBlueprint: async () => {\n // 由 blueprint-ref-run 行为处理\n },\n getInputValue: async (token, port) => {\n const resolvedPort = port || token.inPort || \"in\";\n return this.resolvePortInputValue(token.nodeId, resolvedPort);\n },\n setNodeOutput: (token, port, value) => {\n this.setNodeOutput(token.nodeId, port, value);\n },\n emitFlow: (token, outPort) => {\n const targetQueue =\n options?.emitToActiveDebugQueue && this.debugQueue\n ? this.debugQueue\n : queue;\n const nextNodes = this.findSignalTargets(token.nodeId, outPort);\n for (const target of nextNodes) {\n targetQueue.push({\n tokenId: createTokenId(),\n nodeId: target.nodeId,\n nodeType: target.nodeType,\n inPort: target.inPort,\n scope: token.scope,\n correlationId: token.correlationId ?? token.tokenId,\n });\n }\n },\n });\n }\n\n private findSignalEntryNodes() {\n const hasIncoming = new Set<string>();\n for (const edge of this.graph.edges) {\n hasIncoming.add(edge.target);\n }\n return this.graph.nodes.filter(\n (node) =>\n node.nodeType !== LIFECYCLE_NODE_TYPE &&\n node.nodeType !== EVENT_NODE_TYPE &&\n !hasIncoming.has(node.id)\n );\n }\n\n private collectOutputs(): BlueprintNodeOutputs {\n const result: BlueprintNodeOutputs = {};\n for (const [nodeId, ports] of this.outputs.entries()) {\n result[nodeId] = Object.fromEntries(ports.entries());\n }\n return result;\n }\n\n private requireNode(nodeId: string): RunnableGraphNode {\n const node = this.graph.nodes.find((n) => n.id === nodeId);\n if (!node) {\n throw new Error(`Graph node not found: ${nodeId}`);\n }\n return node;\n }\n\n /** 队列中的 token 可能是在节点改类型(如视图绑定)之前入队的,执行前与最新图对齐 */\n private syncTokenFromGraph(token: ExecutionToken): boolean {\n const node = this.graph.nodes.find((n) => n.id === token.nodeId);\n if (!node) return false;\n token.nodeType = node.nodeType;\n return true;\n }\n\n private syncDebugQueueWithLatestGraph(): void {\n if (!this.debugQueue) return;\n this.debugQueue = this.debugQueue.filter((token) =>\n this.syncTokenFromGraph(token)\n );\n }\n\n private findSignalTargets(nodeId: string, outPort: string) {\n return this.graph.edges\n .filter(\n (edge) =>\n edge.source === nodeId && (edge.sourceHandle ?? \"out\") === outPort\n )\n .map((edge) => {\n const target = this.requireNode(edge.target);\n return {\n nodeId: target.id,\n nodeType: target.nodeType,\n inPort: edge.targetHandle ?? \"in\",\n };\n });\n }\n\n private findInboundSignalEdges(nodeId: string, port: string) {\n return this.graph.edges.filter(\n (edge) =>\n edge.target === nodeId && (edge.targetHandle ?? \"in\") === port\n );\n }\n\n private buildFetchIncomingScope(\n nodeId: string,\n port: string,\n fallbackInput: Value | undefined\n ) {\n return resolveFetchIncomingScope({\n fetchNodeId: nodeId,\n inputPort: port,\n nodes: this.graph.nodes.map((node) => ({\n id: node.id,\n label: node.label,\n nodeType: node.nodeType,\n role: node.role,\n })),\n edges: this.graph.edges,\n getOutput: (sourceId, sourcePort) =>\n this.getNodeOutput(sourceId, sourcePort),\n fallbackInput,\n });\n }\n\n /** 单端口多连线:任一为真则视为真(或语义);支持 triggerNode 注入的入口信号 */\n private resolvePortInputValue(nodeId: string, port: string): Value | undefined {\n const injected = this.injectedInputs.get(`${nodeId}:${port}`);\n if (injected !== undefined) return injected;\n\n const inboundEdges = this.findInboundSignalEdges(nodeId, port);\n if (inboundEdges.length === 0) return undefined;\n\n const values = inboundEdges.map((edge) =>\n this.getNodeOutput(edge.source, edge.sourceHandle ?? \"out\")\n );\n return combinePortSignalsOr(values);\n }\n\n private findInboundSignalEdge(nodeId: string, port: string) {\n return this.findInboundSignalEdges(nodeId, port)[0];\n }\n\n private getNodeOutput(nodeId: string, port: string): Value {\n return this.outputs.get(nodeId)?.get(port);\n }\n\n private setNodeOutput(nodeId: string, port: string, value: Value) {\n let nodeOutputs = this.outputs.get(nodeId);\n if (!nodeOutputs) {\n nodeOutputs = new Map();\n this.outputs.set(nodeId, nodeOutputs);\n }\n nodeOutputs.set(port, value);\n }\n}\n\nexport { BLUEPRINT_NODE_TYPE, VIEW_NODE_TYPE };\n"]}