{"version":3,"file":"contracts-7L1wJHdk.cjs","names":["metadata: PersistedRuntimeTypeMetadata","node","tokenRegistry: PersistedWorkflowTokenRegistryLike","node","fallback: Record<string, unknown>","raw: unknown","rows: Array<Readonly<{ label: string; value: string }>>","out: Record<PropertyKey, unknown>","node","AgentConfigInspector","triggers: ManifestTriggerConfig[]","webhookFields: JsonObject","entry: ManifestTriggerConfig","credentialShapes: ManifestNodeCredentialShape[]"],"sources":["../src/contracts/dispatchTypes.ts","../src/contracts/AgentBindError.ts","../src/contracts/NoOpAgentMcpIntegration.ts","../src/contracts/assertionTypes.ts","../src/runtime-types/persistedRuntimeTypeModelRegistry.ts","../src/runtime-types/PersistedRuntimeTypeNameResolver.ts","../src/runtime-types/StackTraceCallSitePathResolver.ts","../src/runtime-types/PersistedRuntimeTypeMetadataStoreRegistry.ts","../src/runtime-types/InjectableRuntimeDecoratorComposerRegistry.ts","../src/runtime-types/runtimeTypeDecorators.types.ts","../src/workflowSnapshots/PersistedRuntimeTypeIdFactory.ts","../src/workflowSnapshots/PersistedWorkflowTokenRegistry.ts","../src/workflowSnapshots/WorkflowSnapshotCodec.ts","../src/contracts/deploymentManifestTypes.ts"],"sourcesContent":["import type { BinaryAttachment, JsonValue, RunId, WorkflowId } from \"./workflowTypes\";\nimport type { NodeId } from \"./baseTypes\";\n\nexport type WorkspaceId = string;\n\nexport type DispatchBinaryRef = BinaryAttachment;\n\nexport interface DispatchItemMeta {\n  readonly id: string;\n  readonly json?: JsonValue;\n  readonly binary?: Readonly<Record<string, DispatchBinaryRef>>;\n}\n\nexport interface WorkflowDispatch {\n  readonly runId: RunId;\n  readonly workspaceId: WorkspaceId;\n  readonly workflowId: WorkflowId;\n  readonly triggerNodeId: NodeId;\n  readonly items: ReadonlyArray<DispatchItemMeta>;\n  readonly triggerContext: JsonValue;\n}\n\nexport function serializeDispatch(dispatch: WorkflowDispatch): string {\n  return JSON.stringify(dispatch);\n}\n\nexport function deserializeDispatch(raw: string): WorkflowDispatch {\n  return JSON.parse(raw) as WorkflowDispatch;\n}\n","export class AgentBindError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"AgentBindError\";\n  }\n}\n","import type { AgentMcpIntegration, AgentMcpToolMap } from \"./agentMcpTypes\";\n\nexport class NoOpAgentMcpIntegration implements AgentMcpIntegration {\n  async prepareMcpTools(): Promise<AgentMcpToolMap> {\n    return new Map();\n  }\n}\n","import type { JsonValue, NodeId } from \"./workflowTypes\";\n\nexport interface AssertionResult {\n  readonly name: string;\n  readonly score: number;\n  readonly passThreshold?: number;\n  readonly errored?: true;\n  readonly expected?: JsonValue;\n  readonly actual?: JsonValue;\n  readonly message?: string;\n  readonly details?: Readonly<Record<string, JsonValue>>;\n}\n\nexport const DEFAULT_ASSERTION_PASS_THRESHOLD = 0.5;\n\nexport function deriveAssertionPassed(result: {\n  readonly score: number;\n  readonly passThreshold?: number;\n  readonly errored?: true;\n}): boolean {\n  if (result.errored === true) return false;\n  const threshold = result.passThreshold ?? DEFAULT_ASSERTION_PASS_THRESHOLD;\n  return result.score >= threshold;\n}\n\nexport interface AssertionResultProvenance {\n  readonly nodeId: NodeId;\n  readonly iterationId?: string;\n  readonly itemIndex?: number;\n}\n","export const persistedRuntimeTypeMetadataKey = Symbol.for(\"codemation.core.persistedRuntimeTypeMetadata\");\n\nexport type DecoratedRuntimeType = Readonly<{ name?: string }> & object;\n\nexport type PersistedRuntimeTypeKind = \"node\" | \"tool\" | \"chatModel\";\n\nexport interface PersistedRuntimeTypeDecoratorOptions {\n  readonly name?: string;\n  readonly packageName?: string;\n  readonly moduleUrl?: string;\n}\n\nexport interface PersistedRuntimeTypeMetadata {\n  readonly persistedName: string;\n  readonly kind: PersistedRuntimeTypeKind;\n  readonly packageName: string;\n  readonly sourceHint?: string;\n}\n\nexport class PersistedRuntimeTypeDecoratorDefaults {\n  static readonly appPackageName = \"app\";\n\n  static apply(options: PersistedRuntimeTypeDecoratorOptions): PersistedRuntimeTypeDecoratorOptions {\n    return {\n      ...options,\n      packageName: options.packageName ?? this.appPackageName,\n    };\n  }\n}\n","import type { DecoratedRuntimeType } from \"./persistedRuntimeTypeModelRegistry\";\n\nexport class PersistedRuntimeTypeNameResolver {\n  static resolve(target: DecoratedRuntimeType, override: string | undefined): string {\n    const resolved = override ?? target.name;\n    if (!resolved) {\n      throw new Error(\n        \"Persisted runtime token metadata requires a named class or an explicit decorator name override.\",\n      );\n    }\n    return resolved;\n  }\n}\n","export class StackTraceCallSitePathResolver {\n  static resolve(decoratorFileUrl: string): string | undefined {\n    const stack = new Error().stack ?? \"\";\n    for (const line of stack.split(\"\\n\")) {\n      const candidate = this.extractPath(line.trim());\n      if (!candidate) {\n        continue;\n      }\n      if (candidate === decoratorFileUrl || candidate.includes(\"runtimeTypeDecorators\")) {\n        continue;\n      }\n      return candidate;\n    }\n    return undefined;\n  }\n\n  private static extractPath(line: string): string | undefined {\n    const fileUrlMatch = line.match(/file:\\/\\/[^\\s)]+/);\n    if (fileUrlMatch) return fileUrlMatch[0];\n    const parenMatch = line.match(/\\((\\/[^)]+)\\)/);\n    if (parenMatch) return parenMatch[1];\n    const bareMatch = line.match(/at (\\/[^\\s]+)/);\n    return bareMatch?.[1];\n  }\n}\n","import {\n  PersistedRuntimeTypeDecoratorDefaults,\n  persistedRuntimeTypeMetadataKey,\n  type DecoratedRuntimeType,\n  type PersistedRuntimeTypeDecoratorOptions,\n  type PersistedRuntimeTypeKind,\n  type PersistedRuntimeTypeMetadata,\n} from \"./persistedRuntimeTypeModelRegistry\";\nimport { PersistedRuntimeTypeNameResolver } from \"./PersistedRuntimeTypeNameResolver\";\nimport { StackTraceCallSitePathResolver } from \"./StackTraceCallSitePathResolver\";\n\nexport class PersistedRuntimeTypeMetadataStore {\n  static define(\n    target: DecoratedRuntimeType,\n    kind: PersistedRuntimeTypeKind,\n    options: PersistedRuntimeTypeDecoratorOptions,\n    decoratorFileUrl: string,\n  ): void {\n    const normalizedOptions = PersistedRuntimeTypeDecoratorDefaults.apply(options);\n    const metadata: PersistedRuntimeTypeMetadata = {\n      persistedName: PersistedRuntimeTypeNameResolver.resolve(target, normalizedOptions.name),\n      kind,\n      packageName: normalizedOptions.packageName ?? PersistedRuntimeTypeDecoratorDefaults.appPackageName,\n      sourceHint: normalizedOptions.moduleUrl ?? StackTraceCallSitePathResolver.resolve(decoratorFileUrl),\n    };\n    Object.defineProperty(target, persistedRuntimeTypeMetadataKey, {\n      configurable: false,\n      enumerable: false,\n      writable: false,\n      value: metadata,\n    });\n  }\n\n  static get(target: unknown): PersistedRuntimeTypeMetadata | undefined {\n    if (!target || (typeof target !== \"function\" && typeof target !== \"object\")) {\n      return undefined;\n    }\n    return (target as Record<PropertyKey, unknown>)[persistedRuntimeTypeMetadataKey] as\n      | PersistedRuntimeTypeMetadata\n      | undefined;\n  }\n}\n","import { injectable } from \"../di\";\n\nimport { PersistedRuntimeTypeMetadataStore } from \"./PersistedRuntimeTypeMetadataStoreRegistry\";\nimport type {\n  DecoratedRuntimeType,\n  PersistedRuntimeTypeDecoratorOptions,\n  PersistedRuntimeTypeKind,\n} from \"./persistedRuntimeTypeModelRegistry\";\n\nexport class InjectableRuntimeDecoratorComposer {\n  static compose(\n    kind: PersistedRuntimeTypeKind,\n    options: PersistedRuntimeTypeDecoratorOptions,\n    decoratorFileUrl: string,\n  ): ClassDecorator {\n    return (target) => {\n      injectable()(target as never);\n      PersistedRuntimeTypeMetadataStore.define(target as DecoratedRuntimeType, kind, options, decoratorFileUrl);\n    };\n  }\n}\n","import type {\n  PersistedRuntimeTypeDecoratorOptions,\n  PersistedRuntimeTypeMetadata,\n} from \"./persistedRuntimeTypeModelRegistry\";\n\nimport { InjectableRuntimeDecoratorComposer } from \"./InjectableRuntimeDecoratorComposerRegistry\";\nimport { PersistedRuntimeTypeMetadataStore } from \"./PersistedRuntimeTypeMetadataStoreRegistry\";\n\nexport type {\n  PersistedRuntimeTypeDecoratorOptions,\n  PersistedRuntimeTypeKind,\n  PersistedRuntimeTypeMetadata,\n} from \"./persistedRuntimeTypeModelRegistry\";\n\nexport function getPersistedRuntimeTypeMetadata(target: unknown): PersistedRuntimeTypeMetadata | undefined {\n  return PersistedRuntimeTypeMetadataStore.get(target);\n}\n\nexport function node(options: PersistedRuntimeTypeDecoratorOptions = {}): ClassDecorator {\n  return InjectableRuntimeDecoratorComposer.compose(\"node\", options, import.meta.url);\n}\n\nexport function tool(options: PersistedRuntimeTypeDecoratorOptions = {}): ClassDecorator {\n  return InjectableRuntimeDecoratorComposer.compose(\"tool\", options, import.meta.url);\n}\n\nexport function chatModel(options: PersistedRuntimeTypeDecoratorOptions = {}): ClassDecorator {\n  return InjectableRuntimeDecoratorComposer.compose(\"chatModel\", options, import.meta.url);\n}\n\nexport { InjectableRuntimeDecoratorComposer } from \"./InjectableRuntimeDecoratorComposerRegistry\";\nexport { PersistedRuntimeTypeMetadataStore } from \"./PersistedRuntimeTypeMetadataStoreRegistry\";\nexport { PersistedRuntimeTypeNameResolver } from \"./PersistedRuntimeTypeNameResolver\";\nexport { StackTraceCallSitePathResolver } from \"./StackTraceCallSitePathResolver\";\n","import type { TypeToken } from \"../di\";\n\nimport { getPersistedRuntimeTypeMetadata } from \"../runtime-types/runtimeTypeDecorators.types\";\n\nimport type { PersistedTokenId } from \"../types\";\n\nexport class PersistedRuntimeTypeIdFactory {\n  static fromMetadata(args: Readonly<{ type: TypeToken<unknown> }>): PersistedTokenId | undefined {\n    const metadata = getPersistedRuntimeTypeMetadata(args.type);\n    if (!metadata) {\n      return undefined;\n    }\n    const packageName = metadata.packageName;\n    if (!packageName) {\n      return undefined;\n    }\n    return `${packageName}::${metadata.persistedName}` as PersistedTokenId;\n  }\n}\n","import type { TypeToken } from \"../di\";\n\nimport type { PersistedTokenId, WorkflowDefinition } from \"../types\";\n\nimport { PersistedRuntimeTypeIdFactory } from \"./PersistedRuntimeTypeIdFactory\";\n\nexport class PersistedWorkflowTokenRegistry {\n  private readonly tokensById = new Map<PersistedTokenId, TypeToken<unknown>>();\n  private readonly tokenIdsByToken = new Map<TypeToken<unknown>, PersistedTokenId>();\n\n  register(type: TypeToken<unknown>, packageId: string, persistedNameOverride?: string): PersistedTokenId {\n    const tokenName = persistedNameOverride ?? this.displayNameForTypeToken(type);\n    const tokenId = `${packageId}::${tokenName}` as PersistedTokenId;\n    this.tokensById.set(tokenId, type);\n    this.tokenIdsByToken.set(type, tokenId);\n    return tokenId;\n  }\n\n  registerFromWorkflows(workflows: ReadonlyArray<WorkflowDefinition>): void {\n    for (const workflow of workflows) {\n      for (const node of workflow.nodes) {\n        this.registerDecoratedType(node.type);\n        this.registerDecoratedType(node.config.type);\n        this.registerNestedTypes(node.config);\n      }\n    }\n  }\n\n  private registerDecoratedType(type: TypeToken<unknown>): void {\n    if (this.tokenIdsByToken.has(type)) {\n      return;\n    }\n    const tokenId = PersistedRuntimeTypeIdFactory.fromMetadata({ type });\n    if (!tokenId) {\n      return;\n    }\n    this.tokensById.set(tokenId, type);\n    this.tokenIdsByToken.set(type, tokenId);\n  }\n\n  private registerNestedTypes(value: unknown): void {\n    if (Array.isArray(value)) {\n      for (const entry of value) this.registerNestedTypes(entry);\n      return;\n    }\n    if (!value || typeof value !== \"object\") return;\n    const record = value as Record<string, unknown>;\n    const type = this.asTypeToken(record.type);\n    if (type) this.registerDecoratedType(type);\n    for (const v of Object.values(record)) this.registerNestedTypes(v);\n  }\n\n  private displayNameForTypeToken(token: TypeToken<unknown>): string {\n    if (typeof token === \"function\" && token.name) return token.name;\n    if (typeof token === \"string\") return token;\n    return \"\";\n  }\n\n  private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\n    if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\n      return value as TypeToken<unknown>;\n    }\n    return undefined;\n  }\n\n  getTokenId(token: TypeToken<unknown>): PersistedTokenId | undefined {\n    const existing = this.tokenIdsByToken.get(token);\n    if (existing) {\n      return existing;\n    }\n    const tokenId = PersistedRuntimeTypeIdFactory.fromMetadata({ type: token });\n    if (!tokenId) {\n      return undefined;\n    }\n    this.tokensById.set(tokenId, token);\n    this.tokenIdsByToken.set(token, tokenId);\n    return tokenId;\n  }\n\n  resolve(tokenId: PersistedTokenId): TypeToken<unknown> | undefined {\n    return this.tokensById.get(tokenId);\n  }\n}\n","import type { TypeToken } from \"../di\";\nimport type {\n  NodeConfigBase,\n  PersistedTokenId,\n  PersistedWorkflowSnapshot,\n  PersistedWorkflowSnapshotNode,\n  PersistedWorkflowTokenRegistryLike,\n  WorkflowDefinition,\n} from \"../types\";\n\nexport class WorkflowSnapshotCodec {\n  constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {}\n\n  create(workflow: WorkflowDefinition): PersistedWorkflowSnapshot {\n    return {\n      id: workflow.id,\n      name: workflow.name,\n      workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== undefined,\n      ...(workflow.connections !== undefined && workflow.connections.length > 0\n        ? { connections: workflow.connections }\n        : {}),\n      nodes: workflow.nodes.map((node) => {\n        const inspectorSummaryRows = this.safeInspectorSummary(node.config);\n        return {\n          id: node.id,\n          kind: node.kind,\n          name: node.name,\n          nodeTokenId: this.resolveTokenId(node.type),\n          configTokenId: this.resolveTokenId(node.config.type),\n          tokenName: this.resolveTokenName(node.type),\n          configTokenName: this.resolveTokenName(node.config.type),\n          config: this.serializeConfig(node.config),\n          ...(inspectorSummaryRows !== undefined ? { inspectorSummary: inspectorSummaryRows } : {}),\n        };\n      }),\n      edges: workflow.edges.map((edge) => ({\n        from: { nodeId: edge.from.nodeId, output: edge.from.output },\n        to: { nodeId: edge.to.nodeId, input: edge.to.input },\n      })),\n    };\n  }\n\n  hydrate(snapshotNode: PersistedWorkflowSnapshotNode, liveConfig: NodeConfigBase): NodeConfigBase {\n    const hydrated = this.mergeValue(liveConfig, snapshotNode.config);\n    const configToken = this.tokenRegistry.resolve(snapshotNode.configTokenId);\n    Object.assign(hydrated, {\n      type: configToken ?? liveConfig.type,\n      kind: snapshotNode.kind,\n    });\n    if (snapshotNode.name && !(\"name\" in hydrated && hydrated.name)) {\n      Object.assign(hydrated, { name: snapshotNode.name });\n    }\n    return hydrated as unknown as NodeConfigBase;\n  }\n\n  private serializeConfig(config: NodeConfigBase): unknown {\n    try {\n      const cloned = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\n      this.injectTokenIds(cloned, config as unknown as Record<string, unknown>);\n      return cloned;\n    } catch {\n      const fallback: Record<string, unknown> = {\n        kind: config.kind,\n        name: config.name,\n        id: config.id,\n        icon: config.icon,\n        description: config.description,\n        execution: config.execution,\n      };\n      this.injectTokenIds(fallback, config as unknown as Record<string, unknown>);\n      return fallback;\n    }\n  }\n\n  private safeInspectorSummary(\n    config: NodeConfigBase,\n  ): ReadonlyArray<Readonly<{ label: string; value: string }>> | undefined {\n    const fn = (config as { inspectorSummary?: () => unknown }).inspectorSummary;\n    if (typeof fn !== \"function\") return undefined;\n    let raw: unknown;\n    try {\n      raw = fn.call(config);\n    } catch {\n      return undefined;\n    }\n    if (!Array.isArray(raw)) return undefined;\n    const rows: Array<Readonly<{ label: string; value: string }>> = [];\n    for (const entry of raw) {\n      if (!entry || typeof entry !== \"object\") continue;\n      const { label, value } = entry as { label?: unknown; value?: unknown };\n      if (typeof label !== \"string\" || typeof value !== \"string\") continue;\n      const trimmedLabel = label.trim();\n      if (trimmedLabel.length === 0) continue;\n      rows.push({ label: trimmedLabel, value });\n    }\n    return rows.length > 0 ? rows : undefined;\n  }\n\n  private injectTokenIds(target: Record<string, unknown>, source: Record<string, unknown>): void {\n    const type = this.asTypeToken(source.type);\n    if (type) {\n      target.tokenId = this.tokenRegistry.getTokenId(type) ?? this.resolveTokenName(type) ?? \"unknown\";\n    }\n    for (const [key, value] of Object.entries(source)) {\n      if (key === \"type\" || value == null) {\n        continue;\n      }\n      if (Array.isArray(value)) {\n        const targetArray = target[key];\n        if (Array.isArray(targetArray)) {\n          value.forEach((item, index) => {\n            if (item && typeof item === \"object\" && targetArray[index] && typeof targetArray[index] === \"object\") {\n              this.injectTokenIds(targetArray[index] as Record<string, unknown>, item as Record<string, unknown>);\n            }\n          });\n        }\n        continue;\n      }\n      if (typeof value === \"object\") {\n        const targetValue = target[key];\n        if (targetValue && typeof targetValue === \"object\") {\n          this.injectTokenIds(targetValue as Record<string, unknown>, value as Record<string, unknown>);\n        }\n      }\n    }\n  }\n\n  private mergeValue(liveValue: unknown, snapshotValue: unknown): Record<PropertyKey, unknown> {\n    const liveRecord = this.asRecord(liveValue);\n    const snapshotRecord = this.asRecord(snapshotValue);\n    const hydrated = Object.create(\n      liveValue && typeof liveValue === \"object\"\n        ? (Object.getPrototypeOf(liveValue) ?? Object.prototype)\n        : Object.prototype,\n    ) as Record<PropertyKey, unknown>;\n\n    for (const [key, value] of Object.entries(snapshotRecord)) {\n      hydrated[key] = this.mergeNestedValue(liveRecord[key], value);\n    }\n\n    this.restoreNonSerializableProperties(liveRecord, hydrated);\n    this.restoreTypeProperty(hydrated);\n    return hydrated;\n  }\n\n  private mergeNestedValue(liveValue: unknown, snapshotValue: unknown): unknown {\n    if (Array.isArray(snapshotValue)) {\n      const liveArray = Array.isArray(liveValue) ? liveValue : [];\n      return snapshotValue.map((entry, index) => this.mergeNestedValue(liveArray[index], entry));\n    }\n    if (snapshotValue && typeof snapshotValue === \"object\") {\n      return this.mergeValue(liveValue, snapshotValue);\n    }\n    return snapshotValue;\n  }\n\n  private restoreNonSerializableProperties(\n    liveRecord: Record<PropertyKey, unknown>,\n    hydrated: Record<PropertyKey, unknown>,\n  ): void {\n    for (const [key, value] of Object.entries(liveRecord)) {\n      if (typeof value === \"function\" || typeof value === \"symbol\") {\n        hydrated[key] = value;\n      }\n    }\n    for (const sym of Object.getOwnPropertySymbols(liveRecord)) {\n      hydrated[sym] = liveRecord[sym];\n    }\n  }\n\n  private restoreTypeProperty(record: Record<PropertyKey, unknown>): void {\n    const tokenId = typeof record.tokenId === \"string\" ? record.tokenId : undefined;\n    if (!tokenId) {\n      return;\n    }\n    const type = this.tokenRegistry.resolve(tokenId as PersistedTokenId);\n    if (type) {\n      record.type = type;\n    }\n  }\n\n  private resolveTokenId(token: TypeToken<unknown>): PersistedTokenId {\n    return (this.tokenRegistry.getTokenId(token) ?? this.resolveTokenName(token) ?? \"unknown\") as PersistedTokenId;\n  }\n\n  private resolveTokenName(token: TypeToken<unknown>): string | undefined {\n    if (typeof token === \"function\" && token.name) {\n      return token.name;\n    }\n    if (typeof token === \"string\") {\n      return token;\n    }\n    return undefined;\n  }\n\n  private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\n    if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\n      return value as TypeToken<unknown>;\n    }\n    return undefined;\n  }\n\n  private asRecord(value: unknown): Record<PropertyKey, unknown> {\n    if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n      return {};\n    }\n    const record = value as Record<PropertyKey, unknown>;\n    const out: Record<PropertyKey, unknown> = { ...(record as Record<string, unknown>) };\n    for (const sym of Object.getOwnPropertySymbols(value)) {\n      out[sym] = record[sym];\n    }\n    return out;\n  }\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport type { NodeId, WorkflowId } from \"./baseTypes\";\nimport type { CredentialRequirement } from \"./credentialTypes\";\nimport type { PersistedWorkflowSnapshot } from \"./runTypes\";\nimport type { JsonObject, NodeDefinition, PollingTriggerConfig } from \"./workflowTypes\";\nimport type { WorkflowDefinition } from \"../types\";\nimport { AgentConfigInspector } from \"../ai/AgentConfigInspectorFactory\";\nimport { PersistedWorkflowTokenRegistry } from \"../workflowSnapshots/PersistedWorkflowTokenRegistry\";\nimport { WorkflowSnapshotCodec } from \"../workflowSnapshots/WorkflowSnapshotCodec\";\n\nexport const DEPLOYMENT_MANIFEST_SCHEMA_VERSION = 2 as const;\n\nexport type DeploymentManifestSchemaVersion = typeof DEPLOYMENT_MANIFEST_SCHEMA_VERSION;\n\nexport type ManifestTriggerConfig = Readonly<{\n  nodeId: NodeId;\n  triggerKind: \"live\" | \"test\";\n  config: JsonObject;\n  pollIntervalMs?: number;\n  nodeTypeId?: string;\n}>;\n\nexport type ManifestNodeCredentialShape = Readonly<{\n  nodeId: NodeId;\n  requirements: ReadonlyArray<CredentialRequirement>;\n}>;\n\nexport type WorkflowDeploymentManifest<TCanvas = JsonObject> = Readonly<{\n  manifestId: string;\n  schemaVersion: DeploymentManifestSchemaVersion;\n  workflowId: WorkflowId;\n  canvas: TCanvas;\n  snapshot: PersistedWorkflowSnapshot;\n  triggers: ReadonlyArray<ManifestTriggerConfig>;\n  credentialShapes: ReadonlyArray<ManifestNodeCredentialShape>;\n}>;\n\nexport function serializeManifest<TCanvas>(manifest: WorkflowDeploymentManifest<TCanvas>): string {\n  return JSON.stringify(manifest);\n}\n\nexport function deserializeManifest<TCanvas = JsonObject>(raw: string): WorkflowDeploymentManifest<TCanvas> {\n  return JSON.parse(raw) as WorkflowDeploymentManifest<TCanvas>;\n}\n\nexport type ManifestCanvasNode = Readonly<{\n  id: NodeId;\n  kind: string;\n  name: string | undefined;\n  type?: string;\n  role?: string;\n  triggerKind?: \"live\" | \"test\";\n  declaredOutputPorts?: ReadonlyArray<string>;\n  declaredInputPorts?: ReadonlyArray<string>;\n}>;\n\nexport type ManifestCanvas = Readonly<{\n  id: WorkflowId;\n  name: string;\n  nodes: ReadonlyArray<ManifestCanvasNode>;\n  edges: WorkflowDefinition[\"edges\"];\n}>;\n\ntype TriggerNodeConfigShape = Readonly<{ triggerKind?: \"live\" | \"test\" }>;\n\nfunction isPollingTriggerConfig(config: unknown): config is PollingTriggerConfig {\n  return typeof (config as PollingTriggerConfig).getTriggerPollConfig === \"function\";\n}\n\nfunction resolveNodeTypeName(node: NodeDefinition): string {\n  const configToken = node.config?.type as Readonly<{ name?: unknown }> | undefined;\n  if (typeof configToken?.name === \"string\" && configToken.name) {\n    return configToken.name;\n  }\n  const nodeToken = node.type as Readonly<{ name?: unknown }> | undefined;\n  if (typeof nodeToken?.name === \"string\" && nodeToken.name) {\n    return nodeToken.name;\n  }\n  return \"Node\";\n}\n\nfunction resolveCanvasNode(node: NodeDefinition): ManifestCanvasNode {\n  const config = node.config;\n  const type = resolveNodeTypeName(node);\n  const role = AgentConfigInspector.isAgentNodeConfig(config) ? \"agent\" : \"workflowNode\";\n  const triggerKind = node.kind === \"trigger\" ? ((config as TriggerNodeConfigShape).triggerKind ?? \"live\") : undefined;\n  const c = config as {\n    declaredOutputPorts?: readonly string[];\n    declaredInputPorts?: readonly string[];\n  };\n  return {\n    id: node.id,\n    kind: node.kind,\n    name: node.name ?? config?.name,\n    type,\n    role,\n    ...(triggerKind !== undefined && { triggerKind }),\n    ...(c.declaredOutputPorts !== undefined && { declaredOutputPorts: c.declaredOutputPorts }),\n    ...(c.declaredInputPorts !== undefined && { declaredInputPorts: c.declaredInputPorts }),\n  };\n}\n\nexport function emitWorkflowManifest(workflow: WorkflowDefinition): WorkflowDeploymentManifest<ManifestCanvas> {\n  const registry = new PersistedWorkflowTokenRegistry();\n  registry.registerFromWorkflows([workflow]);\n  const codec = new WorkflowSnapshotCodec(registry);\n  const snapshot = codec.create(workflow);\n\n  const canvas = {\n    id: workflow.id,\n    name: workflow.name,\n    nodes: workflow.nodes.map(resolveCanvasNode),\n    edges: workflow.edges,\n  };\n\n  const triggers: ManifestTriggerConfig[] = workflow.nodes\n    .filter((n) => n.kind === \"trigger\")\n    .map((n) => {\n      const config = n.config;\n      const cfg = config as unknown as Record<string, unknown>;\n      const triggerKind = (config as TriggerNodeConfigShape).triggerKind ?? \"live\";\n      const pollCfg = isPollingTriggerConfig(config) ? config.getTriggerPollConfig() : undefined;\n      const endpointKey = typeof cfg[\"endpointKey\"] === \"string\" ? cfg[\"endpointKey\"] : undefined;\n      const methods = Array.isArray(cfg[\"methods\"]) ? (cfg[\"methods\"] as string[]) : undefined;\n      const webhookFields: JsonObject =\n        endpointKey !== undefined && methods !== undefined ? { endpointKey, methods } : {};\n      const nodeTypeId = registry.getTokenId(config.type) ?? undefined;\n      const entry: ManifestTriggerConfig = {\n        nodeId: n.id,\n        triggerKind,\n        config: pollCfg !== undefined ? pollCfg.config : webhookFields,\n        nodeTypeId,\n      };\n      if (pollCfg?.pollIntervalMs !== undefined) {\n        return { ...entry, pollIntervalMs: pollCfg.pollIntervalMs };\n      }\n      return entry;\n    });\n\n  const credentialShapes: ManifestNodeCredentialShape[] = workflow.nodes\n    .map((n) => {\n      const requirements = n.config.getCredentialRequirements?.();\n      if (!requirements || requirements.length === 0) return null;\n      return { nodeId: n.id, requirements } satisfies ManifestNodeCredentialShape;\n    })\n    .filter((s): s is ManifestNodeCredentialShape => s !== null);\n\n  return {\n    manifestId: randomUUID(),\n    schemaVersion: DEPLOYMENT_MANIFEST_SCHEMA_VERSION,\n    workflowId: workflow.id,\n    canvas,\n    snapshot,\n    triggers,\n    credentialShapes,\n  };\n}\n"],"mappings":";;;;;;;AAsBA,SAAgB,kBAAkB,UAAoC;AACpE,QAAO,KAAK,UAAU,SAAS;;AAGjC,SAAgB,oBAAoB,KAA+B;AACjE,QAAO,KAAK,MAAM,IAAI;;;;;AC3BxB,IAAa,iBAAb,cAAoC,MAAM;CACxC,YAAY,SAAiB;AAC3B,QAAM,QAAQ;AACd,OAAK,OAAO;;;;;;ACDhB,IAAa,0BAAb,MAAoE;CAClE,MAAM,kBAA4C;AAChD,yBAAO,IAAI,KAAK;;;;;;ACSpB,MAAa,mCAAmC;AAEhD,SAAgB,sBAAsB,QAI1B;AACV,KAAI,OAAO,YAAY,KAAM,QAAO;CACpC,MAAM,YAAY,OAAO,iBAAiB;AAC1C,QAAO,OAAO,SAAS;;;;;ACtBzB,MAAa,kCAAkC,OAAO,IAAI,+CAA+C;AAmBzG,IAAa,wCAAb,MAAmD;CACjD,OAAgB,iBAAiB;CAEjC,OAAO,MAAM,SAAqF;AAChG,SAAO;GACL,GAAG;GACH,aAAa,QAAQ,eAAe,KAAK;GAC1C;;;;;;ACxBL,IAAa,mCAAb,MAA8C;CAC5C,OAAO,QAAQ,QAA8B,UAAsC;EACjF,MAAM,WAAW,YAAY,OAAO;AACpC,MAAI,CAAC,SACH,OAAM,IAAI,MACR,kGACD;AAEH,SAAO;;;;;;ACVX,IAAa,iCAAb,MAA4C;CAC1C,OAAO,QAAQ,kBAA8C;EAC3D,MAAM,yBAAQ,IAAI,OAAO,EAAC,SAAS;AACnC,OAAK,MAAM,QAAQ,MAAM,MAAM,KAAK,EAAE;GACpC,MAAM,YAAY,KAAK,YAAY,KAAK,MAAM,CAAC;AAC/C,OAAI,CAAC,UACH;AAEF,OAAI,cAAc,oBAAoB,UAAU,SAAS,wBAAwB,CAC/E;AAEF,UAAO;;;CAKX,OAAe,YAAY,MAAkC;EAC3D,MAAM,eAAe,KAAK,MAAM,mBAAmB;AACnD,MAAI,aAAc,QAAO,aAAa;EACtC,MAAM,aAAa,KAAK,MAAM,gBAAgB;AAC9C,MAAI,WAAY,QAAO,WAAW;AAElC,SADkB,KAAK,MAAM,gBAAgB,GAC1B;;;;;;ACXvB,IAAa,oCAAb,MAA+C;CAC7C,OAAO,OACL,QACA,MACA,SACA,kBACM;EACN,MAAM,oBAAoB,sCAAsC,MAAM,QAAQ;EAC9E,MAAMA,WAAyC;GAC7C,eAAe,iCAAiC,QAAQ,QAAQ,kBAAkB,KAAK;GACvF;GACA,aAAa,kBAAkB,eAAe,sCAAsC;GACpF,YAAY,kBAAkB,aAAa,+BAA+B,QAAQ,iBAAiB;GACpG;AACD,SAAO,eAAe,QAAQ,iCAAiC;GAC7D,cAAc;GACd,YAAY;GACZ,UAAU;GACV,OAAO;GACR,CAAC;;CAGJ,OAAO,IAAI,QAA2D;AACpE,MAAI,CAAC,UAAW,OAAO,WAAW,cAAc,OAAO,WAAW,SAChE;AAEF,SAAQ,OAAwC;;;;;;AC5BpD,IAAa,qCAAb,MAAgD;CAC9C,OAAO,QACL,MACA,SACA,kBACgB;AAChB,UAAQ,WAAW;AACjB,6BAAY,CAAC,OAAgB;AAC7B,qCAAkC,OAAO,QAAgC,MAAM,SAAS,iBAAiB;;;;;;;ACH/G,SAAgB,gCAAgC,QAA2D;AACzG,QAAO,kCAAkC,IAAI,OAAO;;AAGtD,SAAgB,KAAK,UAAgD,EAAE,EAAkB;AACvF,QAAO,mCAAmC,QAAQ,QAAQ,uDAAyB;;AAGrF,SAAgB,KAAK,UAAgD,EAAE,EAAkB;AACvF,QAAO,mCAAmC,QAAQ,QAAQ,uDAAyB;;AAGrF,SAAgB,UAAU,UAAgD,EAAE,EAAkB;AAC5F,QAAO,mCAAmC,QAAQ,aAAa,uDAAyB;;;;;ACrB1F,IAAa,gCAAb,MAA2C;CACzC,OAAO,aAAa,MAA4E;EAC9F,MAAM,WAAW,gCAAgC,KAAK,KAAK;AAC3D,MAAI,CAAC,SACH;EAEF,MAAM,cAAc,SAAS;AAC7B,MAAI,CAAC,YACH;AAEF,SAAO,GAAG,YAAY,IAAI,SAAS;;;;;;ACVvC,IAAa,iCAAb,MAA4C;CAC1C,AAAiB,6BAAa,IAAI,KAA2C;CAC7E,AAAiB,kCAAkB,IAAI,KAA2C;CAElF,SAAS,MAA0B,WAAmB,uBAAkD;EAEtG,MAAM,UAAU,GAAG,UAAU,IADX,yBAAyB,KAAK,wBAAwB,KAAK;AAE7E,OAAK,WAAW,IAAI,SAAS,KAAK;AAClC,OAAK,gBAAgB,IAAI,MAAM,QAAQ;AACvC,SAAO;;CAGT,sBAAsB,WAAoD;AACxE,OAAK,MAAM,YAAY,UACrB,MAAK,MAAMC,UAAQ,SAAS,OAAO;AACjC,QAAK,sBAAsBA,OAAK,KAAK;AACrC,QAAK,sBAAsBA,OAAK,OAAO,KAAK;AAC5C,QAAK,oBAAoBA,OAAK,OAAO;;;CAK3C,AAAQ,sBAAsB,MAAgC;AAC5D,MAAI,KAAK,gBAAgB,IAAI,KAAK,CAChC;EAEF,MAAM,UAAU,8BAA8B,aAAa,EAAE,MAAM,CAAC;AACpE,MAAI,CAAC,QACH;AAEF,OAAK,WAAW,IAAI,SAAS,KAAK;AAClC,OAAK,gBAAgB,IAAI,MAAM,QAAQ;;CAGzC,AAAQ,oBAAoB,OAAsB;AAChD,MAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,QAAK,MAAM,SAAS,MAAO,MAAK,oBAAoB,MAAM;AAC1D;;AAEF,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU;EACzC,MAAM,SAAS;EACf,MAAM,OAAO,KAAK,YAAY,OAAO,KAAK;AAC1C,MAAI,KAAM,MAAK,sBAAsB,KAAK;AAC1C,OAAK,MAAM,KAAK,OAAO,OAAO,OAAO,CAAE,MAAK,oBAAoB,EAAE;;CAGpE,AAAQ,wBAAwB,OAAmC;AACjE,MAAI,OAAO,UAAU,cAAc,MAAM,KAAM,QAAO,MAAM;AAC5D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO;;CAGT,AAAQ,YAAY,OAAgD;AAClE,MAAI,OAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,UAAU,SAC/E,QAAO;;CAKX,WAAW,OAAyD;EAClE,MAAM,WAAW,KAAK,gBAAgB,IAAI,MAAM;AAChD,MAAI,SACF,QAAO;EAET,MAAM,UAAU,8BAA8B,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3E,MAAI,CAAC,QACH;AAEF,OAAK,WAAW,IAAI,SAAS,MAAM;AACnC,OAAK,gBAAgB,IAAI,OAAO,QAAQ;AACxC,SAAO;;CAGT,QAAQ,SAA2D;AACjE,SAAO,KAAK,WAAW,IAAI,QAAQ;;;;;;ACtEvC,IAAa,wBAAb,MAAmC;CACjC,YAAY,AAAiBC,eAAmD;EAAnD;;CAE7B,OAAO,UAAyD;AAC9D,SAAO;GACL,IAAI,SAAS;GACb,MAAM,SAAS;GACf,gCAAgC,SAAS,yBAAyB;GAClE,GAAI,SAAS,gBAAgB,UAAa,SAAS,YAAY,SAAS,IACpE,EAAE,aAAa,SAAS,aAAa,GACrC,EAAE;GACN,OAAO,SAAS,MAAM,KAAK,WAAS;IAClC,MAAM,uBAAuB,KAAK,qBAAqBC,OAAK,OAAO;AACnE,WAAO;KACL,IAAIA,OAAK;KACT,MAAMA,OAAK;KACX,MAAMA,OAAK;KACX,aAAa,KAAK,eAAeA,OAAK,KAAK;KAC3C,eAAe,KAAK,eAAeA,OAAK,OAAO,KAAK;KACpD,WAAW,KAAK,iBAAiBA,OAAK,KAAK;KAC3C,iBAAiB,KAAK,iBAAiBA,OAAK,OAAO,KAAK;KACxD,QAAQ,KAAK,gBAAgBA,OAAK,OAAO;KACzC,GAAI,yBAAyB,SAAY,EAAE,kBAAkB,sBAAsB,GAAG,EAAE;KACzF;KACD;GACF,OAAO,SAAS,MAAM,KAAK,UAAU;IACnC,MAAM;KAAE,QAAQ,KAAK,KAAK;KAAQ,QAAQ,KAAK,KAAK;KAAQ;IAC5D,IAAI;KAAE,QAAQ,KAAK,GAAG;KAAQ,OAAO,KAAK,GAAG;KAAO;IACrD,EAAE;GACJ;;CAGH,QAAQ,cAA6C,YAA4C;EAC/F,MAAM,WAAW,KAAK,WAAW,YAAY,aAAa,OAAO;EACjE,MAAM,cAAc,KAAK,cAAc,QAAQ,aAAa,cAAc;AAC1E,SAAO,OAAO,UAAU;GACtB,MAAM,eAAe,WAAW;GAChC,MAAM,aAAa;GACpB,CAAC;AACF,MAAI,aAAa,QAAQ,EAAE,UAAU,YAAY,SAAS,MACxD,QAAO,OAAO,UAAU,EAAE,MAAM,aAAa,MAAM,CAAC;AAEtD,SAAO;;CAGT,AAAQ,gBAAgB,QAAiC;AACvD,MAAI;GACF,MAAM,SAAS,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AACjD,QAAK,eAAe,QAAQ,OAA6C;AACzE,UAAO;UACD;GACN,MAAMC,WAAoC;IACxC,MAAM,OAAO;IACb,MAAM,OAAO;IACb,IAAI,OAAO;IACX,MAAM,OAAO;IACb,aAAa,OAAO;IACpB,WAAW,OAAO;IACnB;AACD,QAAK,eAAe,UAAU,OAA6C;AAC3E,UAAO;;;CAIX,AAAQ,qBACN,QACuE;EACvE,MAAM,KAAM,OAAgD;AAC5D,MAAI,OAAO,OAAO,WAAY,QAAO;EACrC,IAAIC;AACJ,MAAI;AACF,SAAM,GAAG,KAAK,OAAO;UACf;AACN;;AAEF,MAAI,CAAC,MAAM,QAAQ,IAAI,CAAE,QAAO;EAChC,MAAMC,OAA0D,EAAE;AAClE,OAAK,MAAM,SAAS,KAAK;AACvB,OAAI,CAAC,SAAS,OAAO,UAAU,SAAU;GACzC,MAAM,EAAE,OAAO,UAAU;AACzB,OAAI,OAAO,UAAU,YAAY,OAAO,UAAU,SAAU;GAC5D,MAAM,eAAe,MAAM,MAAM;AACjC,OAAI,aAAa,WAAW,EAAG;AAC/B,QAAK,KAAK;IAAE,OAAO;IAAc;IAAO,CAAC;;AAE3C,SAAO,KAAK,SAAS,IAAI,OAAO;;CAGlC,AAAQ,eAAe,QAAiC,QAAuC;EAC7F,MAAM,OAAO,KAAK,YAAY,OAAO,KAAK;AAC1C,MAAI,KACF,QAAO,UAAU,KAAK,cAAc,WAAW,KAAK,IAAI,KAAK,iBAAiB,KAAK,IAAI;AAEzF,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;AACjD,OAAI,QAAQ,UAAU,SAAS,KAC7B;AAEF,OAAI,MAAM,QAAQ,MAAM,EAAE;IACxB,MAAM,cAAc,OAAO;AAC3B,QAAI,MAAM,QAAQ,YAAY,CAC5B,OAAM,SAAS,MAAM,UAAU;AAC7B,SAAI,QAAQ,OAAO,SAAS,YAAY,YAAY,UAAU,OAAO,YAAY,WAAW,SAC1F,MAAK,eAAe,YAAY,QAAmC,KAAgC;MAErG;AAEJ;;AAEF,OAAI,OAAO,UAAU,UAAU;IAC7B,MAAM,cAAc,OAAO;AAC3B,QAAI,eAAe,OAAO,gBAAgB,SACxC,MAAK,eAAe,aAAwC,MAAiC;;;;CAMrG,AAAQ,WAAW,WAAoB,eAAsD;EAC3F,MAAM,aAAa,KAAK,SAAS,UAAU;EAC3C,MAAM,iBAAiB,KAAK,SAAS,cAAc;EACnD,MAAM,WAAW,OAAO,OACtB,aAAa,OAAO,cAAc,WAC7B,OAAO,eAAe,UAAU,IAAI,OAAO,YAC5C,OAAO,UACZ;AAED,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,eAAe,CACvD,UAAS,OAAO,KAAK,iBAAiB,WAAW,MAAM,MAAM;AAG/D,OAAK,iCAAiC,YAAY,SAAS;AAC3D,OAAK,oBAAoB,SAAS;AAClC,SAAO;;CAGT,AAAQ,iBAAiB,WAAoB,eAAiC;AAC5E,MAAI,MAAM,QAAQ,cAAc,EAAE;GAChC,MAAM,YAAY,MAAM,QAAQ,UAAU,GAAG,YAAY,EAAE;AAC3D,UAAO,cAAc,KAAK,OAAO,UAAU,KAAK,iBAAiB,UAAU,QAAQ,MAAM,CAAC;;AAE5F,MAAI,iBAAiB,OAAO,kBAAkB,SAC5C,QAAO,KAAK,WAAW,WAAW,cAAc;AAElD,SAAO;;CAGT,AAAQ,iCACN,YACA,UACM;AACN,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,WAAW,CACnD,KAAI,OAAO,UAAU,cAAc,OAAO,UAAU,SAClD,UAAS,OAAO;AAGpB,OAAK,MAAM,OAAO,OAAO,sBAAsB,WAAW,CACxD,UAAS,OAAO,WAAW;;CAI/B,AAAQ,oBAAoB,QAA4C;EACtE,MAAM,UAAU,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AACtE,MAAI,CAAC,QACH;EAEF,MAAM,OAAO,KAAK,cAAc,QAAQ,QAA4B;AACpE,MAAI,KACF,QAAO,OAAO;;CAIlB,AAAQ,eAAe,OAA6C;AAClE,SAAQ,KAAK,cAAc,WAAW,MAAM,IAAI,KAAK,iBAAiB,MAAM,IAAI;;CAGlF,AAAQ,iBAAiB,OAA+C;AACtE,MAAI,OAAO,UAAU,cAAc,MAAM,KACvC,QAAO,MAAM;AAEf,MAAI,OAAO,UAAU,SACnB,QAAO;;CAKX,AAAQ,YAAY,OAAgD;AAClE,MAAI,OAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,UAAU,SAC/E,QAAO;;CAKX,AAAQ,SAAS,OAA8C;AAC7D,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,MAAM,CAC7D,QAAO,EAAE;EAEX,MAAM,SAAS;EACf,MAAMC,MAAoC,EAAE,GAAI,QAAoC;AACpF,OAAK,MAAM,OAAO,OAAO,sBAAsB,MAAM,CACnD,KAAI,OAAO,OAAO;AAEpB,SAAO;;;;;;ACxMX,MAAa,qCAAqC;AA2BlD,SAAgB,kBAA2B,UAAuD;AAChG,QAAO,KAAK,UAAU,SAAS;;AAGjC,SAAgB,oBAA0C,KAAkD;AAC1G,QAAO,KAAK,MAAM,IAAI;;AAuBxB,SAAS,uBAAuB,QAAiD;AAC/E,QAAO,OAAQ,OAAgC,yBAAyB;;AAG1E,SAAS,oBAAoB,QAA8B;CACzD,MAAM,cAAcC,OAAK,QAAQ;AACjC,KAAI,OAAO,aAAa,SAAS,YAAY,YAAY,KACvD,QAAO,YAAY;CAErB,MAAM,YAAYA,OAAK;AACvB,KAAI,OAAO,WAAW,SAAS,YAAY,UAAU,KACnD,QAAO,UAAU;AAEnB,QAAO;;AAGT,SAAS,kBAAkB,QAA0C;CACnE,MAAM,SAASA,OAAK;CACpB,MAAM,OAAO,oBAAoBA,OAAK;CACtC,MAAM,OAAOC,gCAAqB,kBAAkB,OAAO,GAAG,UAAU;CACxE,MAAM,cAAcD,OAAK,SAAS,YAAc,OAAkC,eAAe,SAAU;CAC3G,MAAM,IAAI;AAIV,QAAO;EACL,IAAIA,OAAK;EACT,MAAMA,OAAK;EACX,MAAMA,OAAK,QAAQ,QAAQ;EAC3B;EACA;EACA,GAAI,gBAAgB,UAAa,EAAE,aAAa;EAChD,GAAI,EAAE,wBAAwB,UAAa,EAAE,qBAAqB,EAAE,qBAAqB;EACzF,GAAI,EAAE,uBAAuB,UAAa,EAAE,oBAAoB,EAAE,oBAAoB;EACvF;;AAGH,SAAgB,qBAAqB,UAA0E;CAC7G,MAAM,WAAW,IAAI,gCAAgC;AACrD,UAAS,sBAAsB,CAAC,SAAS,CAAC;CAE1C,MAAM,WADQ,IAAI,sBAAsB,SAAS,CAC1B,OAAO,SAAS;CAEvC,MAAM,SAAS;EACb,IAAI,SAAS;EACb,MAAM,SAAS;EACf,OAAO,SAAS,MAAM,IAAI,kBAAkB;EAC5C,OAAO,SAAS;EACjB;CAED,MAAME,WAAoC,SAAS,MAChD,QAAQ,MAAM,EAAE,SAAS,UAAU,CACnC,KAAK,MAAM;EACV,MAAM,SAAS,EAAE;EACjB,MAAM,MAAM;EACZ,MAAM,cAAe,OAAkC,eAAe;EACtE,MAAM,UAAU,uBAAuB,OAAO,GAAG,OAAO,sBAAsB,GAAG;EACjF,MAAM,cAAc,OAAO,IAAI,mBAAmB,WAAW,IAAI,iBAAiB;EAClF,MAAM,UAAU,MAAM,QAAQ,IAAI,WAAW,GAAI,IAAI,aAA0B;EAC/E,MAAMC,gBACJ,gBAAgB,UAAa,YAAY,SAAY;GAAE;GAAa;GAAS,GAAG,EAAE;EACpF,MAAM,aAAa,SAAS,WAAW,OAAO,KAAK,IAAI;EACvD,MAAMC,QAA+B;GACnC,QAAQ,EAAE;GACV;GACA,QAAQ,YAAY,SAAY,QAAQ,SAAS;GACjD;GACD;AACD,MAAI,SAAS,mBAAmB,OAC9B,QAAO;GAAE,GAAG;GAAO,gBAAgB,QAAQ;GAAgB;AAE7D,SAAO;GACP;CAEJ,MAAMC,mBAAkD,SAAS,MAC9D,KAAK,MAAM;EACV,MAAM,eAAe,EAAE,OAAO,6BAA6B;AAC3D,MAAI,CAAC,gBAAgB,aAAa,WAAW,EAAG,QAAO;AACvD,SAAO;GAAE,QAAQ,EAAE;GAAI;GAAc;GACrC,CACD,QAAQ,MAAwC,MAAM,KAAK;AAE9D,QAAO;EACL,yCAAwB;EACxB,eAAe;EACf,YAAY,SAAS;EACrB;EACA;EACA;EACA;EACD"}