{"version":3,"sources":["../../src/events/codec/error.ts","../../src/events/codec/registry.ts","../../src/events/codec/registrations.ts","../../src/events/codec/tags.ts","../../src/events/codec/codec.ts","../../src/events/unix-socket-pubsub.ts"],"names":["DefaultGeneratedFile","DefaultGeneratedFileWithType","DefaultStepResult","PubSub","randomUUID","unlink","mkdir","dirname","net","open","stat"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { SerializedError } from '../../error/utils';\n\nconst MAX_CAUSE_DEPTH = 5;\n\n/**\n * Serializes an Error instance to a plain SerializedError object without\n * mutating the original. Unlike `getErrorFromUnknown(...).toJSON()`, this does\n * not attach a non-enumerable `toJSON` to the live Error.\n */\nexport function serializeError(err: Error, depth = 0): SerializedError {\n  const json: SerializedError = {\n    name: err.name || 'Error',\n    message: err.message,\n  };\n  if (err.stack !== undefined) json.stack = err.stack;\n\n  if (err.cause !== undefined) {\n    if (err.cause instanceof Error && depth < MAX_CAUSE_DEPTH) {\n      json.cause = serializeError(err.cause, depth + 1);\n    } else {\n      json.cause = err.cause;\n    }\n  }\n\n  // Copy enumerable own properties (custom error fields)\n  for (const key in err) {\n    if (!Object.prototype.hasOwnProperty.call(err, key)) continue;\n    if (key === 'message' || key === 'name' || key === 'stack' || key === 'cause') continue;\n    json[key] = (err as unknown as Record<string, unknown>)[key];\n  }\n\n  return json;\n}\n\n/**\n * Rehydrates a SerializedError into a vanilla Error instance. We never\n * instantiate user-controlled prototypes — name is preserved as a string field.\n */\nexport function rehydrateError(s: SerializedError): Error {\n  const cause =\n    s.cause !== undefined\n      ? s.cause && typeof s.cause === 'object' && 'message' in (s.cause as object) && 'name' in (s.cause as object)\n        ? rehydrateError(s.cause as SerializedError)\n        : s.cause\n      : undefined;\n\n  const err = cause !== undefined ? new Error(s.message, { cause }) : new Error(s.message);\n  if (s.name) err.name = s.name;\n  if (s.stack !== undefined) err.stack = s.stack;\n\n  for (const key in s) {\n    if (!Object.prototype.hasOwnProperty.call(s, key)) continue;\n    if (key === 'message' || key === 'name' || key === 'stack' || key === 'cause') continue;\n    (err as unknown as Record<string, unknown>)[key] = s[key];\n  }\n\n  return err;\n}\n","/**\n * Class registry for the pubsub frame codec. Lets non-plain class instances\n * (e.g. GeneratedFile) survive a JSON round-trip across the unix-socket\n * pubsub transport.\n *\n * The registry is closed: only classes registered here can be reconstructed.\n * Unknown class names decode to plain data so we never instantiate\n * user-controlled prototypes.\n */\nexport interface ClassCodec<T = unknown, D = unknown> {\n  /** Convert an instance to JSON-safe data. */\n  toData(instance: T): D;\n  /** Reconstruct an instance from previously serialized data. */\n  fromData(data: D): T;\n}\n\nconst classRegistry = new Map<string, ClassCodec>();\n\nexport function registerClass<T, D>(name: string, codec: ClassCodec<T, D>): void {\n  classRegistry.set(name, codec as ClassCodec);\n}\n\nexport function unregisterClass(name: string): void {\n  classRegistry.delete(name);\n}\n\nexport function getClassCodec(name: string): ClassCodec | undefined {\n  return classRegistry.get(name);\n}\n\nexport function hasClassCodec(name: string): boolean {\n  return classRegistry.has(name);\n}\n","import type { ToolSet } from '@internal/ai-sdk-v5';\nimport { DefaultGeneratedFile, DefaultGeneratedFileWithType } from '../../stream/aisdk/v5/file';\nimport { DefaultStepResult } from '../../stream/aisdk/v5/output-helpers';\nimport { registerClass } from './registry';\n\ntype GeneratedFileData = { data: string; mediaType: string };\n\ntype DefaultStepResultData = {\n  content: DefaultStepResult<ToolSet>['content'];\n  finishReason: DefaultStepResult<ToolSet>['finishReason'];\n  usage: DefaultStepResult<ToolSet>['usage'];\n  warnings: DefaultStepResult<ToolSet>['warnings'];\n  request: DefaultStepResult<ToolSet>['request'];\n  response: DefaultStepResult<ToolSet>['response'];\n  providerMetadata: DefaultStepResult<ToolSet>['providerMetadata'];\n  tripwire?: DefaultStepResult<ToolSet>['tripwire'];\n};\n\n/**\n * Built-in class codecs.\n *\n * IMPORTANT: This module must be loaded for `instanceof` to survive\n * serialization across the unix-socket pubsub. The `BUILTIN_CODECS_REGISTERED`\n * constant exists solely so consumers can import it as a *named* import (see\n * `codec.ts`). A `import './registrations'` side-effect import would be\n * tree-shaken out of dist consumers because `packages/core/package.json` has\n * `\"sideEffects\": false`. Named imports are kept by every bundler.\n *\n * `DefaultStepResult` flows through workflow output schemas typed as\n * `z.any()`, so it crosses the unix-socket pubsub on the evented engine.\n * Without a class registration, consumers that rely on\n * `instanceof DefaultStepResult` (e.g. the in-memory storage path) would\n * receive plain data. The generic `TOOLS` type parameter is erased at\n * runtime, so we register the constructor name once.\n */\nexport const BUILTIN_CODECS_REGISTERED = (() => {\n  registerClass<DefaultGeneratedFile, GeneratedFileData>('DefaultGeneratedFile', {\n    toData: f => ({ data: f.base64, mediaType: f.mediaType }),\n    fromData: d => new DefaultGeneratedFile({ data: d.data, mediaType: d.mediaType }),\n  });\n\n  registerClass<DefaultGeneratedFileWithType, GeneratedFileData>('DefaultGeneratedFileWithType', {\n    toData: f => ({ data: f.base64, mediaType: f.mediaType }),\n    fromData: d => new DefaultGeneratedFileWithType({ data: d.data, mediaType: d.mediaType }),\n  });\n\n  registerClass<DefaultStepResult<ToolSet>, DefaultStepResultData>('DefaultStepResult', {\n    toData: s => ({\n      content: s.content,\n      finishReason: s.finishReason,\n      usage: s.usage,\n      warnings: s.warnings,\n      request: s.request,\n      response: s.response,\n      providerMetadata: s.providerMetadata,\n      tripwire: s.tripwire,\n    }),\n    fromData: d => new DefaultStepResult(d),\n  });\n\n  return true as const;\n})();\n","import type { SerializedError } from '../../error/utils';\n\n/**\n * Discriminator key for codec-tagged envelopes. Long, namespaced, and unlikely\n * to collide with user data. Plain objects that happen to carry this key but\n * do not match an envelope shape are preserved as-is by the decoder.\n *\n * **Reservation contract:** `__m_codec__` is reserved on the wire. Do not use\n * it as a property name on user objects that cross the pubsub boundary — if\n * the surrounding shape also happens to match an envelope (e.g.\n * `{ __m_codec__: 'Date', v: '...' }`), the decoder will reconstruct it as\n * the tagged type. The conservative shape check in `isEnvelope` keeps the\n * blast radius narrow, and `toJSON()` is skipped for objects already carrying\n * this key, but the safest path is to avoid the namespace entirely.\n */\nexport const CODEC_TAG = '__m_codec__';\n\n/**\n * Upper bound on the `source` length of a serialized `RegExp` envelope. Real\n * serialized regexes are tens of characters at most; this is generous headroom\n * for unusual patterns while bounding the input to `new RegExp(...)` on decode\n * so a hostile peer cannot push an unbounded pattern through the constructor.\n */\nexport const MAX_REGEXP_SOURCE_LENGTH = 1024;\n\nexport type EnvelopeTag = 'Date' | 'Error' | 'Map' | 'Set' | 'RegExp' | 'URL' | 'BigInt' | 'Undefined' | 'Class';\n\nexport type Envelope =\n  | { [CODEC_TAG]: 'Date'; v: string }\n  | { [CODEC_TAG]: 'Error'; v: SerializedError }\n  | { [CODEC_TAG]: 'Map'; v: Array<[unknown, unknown]> }\n  | { [CODEC_TAG]: 'Set'; v: Array<unknown> }\n  | { [CODEC_TAG]: 'RegExp'; v: { source: string; flags: string } }\n  | { [CODEC_TAG]: 'URL'; v: string }\n  | { [CODEC_TAG]: 'BigInt'; v: string }\n  | { [CODEC_TAG]: 'Undefined' }\n  | { [CODEC_TAG]: 'Class'; n: string; v: unknown };\n\n/**\n * Returns true when `value` looks like a codec envelope. The check is\n * conservative — an object with the tag key but an unknown tag value, or a\n * shape that does not match any envelope variant, is treated as user data.\n */\nexport function isEnvelope(value: object): value is Envelope {\n  const tag = (value as Record<string, unknown>)[CODEC_TAG];\n  if (typeof tag !== 'string') return false;\n  switch (tag as EnvelopeTag) {\n    case 'Undefined':\n      return true;\n    case 'Date':\n    case 'BigInt':\n    case 'URL':\n      return typeof (value as { v?: unknown }).v === 'string';\n    case 'RegExp': {\n      const v = (value as { v?: unknown }).v as { source?: unknown; flags?: unknown } | undefined;\n      if (!v || typeof v.source !== 'string' || typeof v.flags !== 'string') return false;\n      // Bound `source` to a generous-but-finite length. Real-world serialized\n      // regexes are tiny; a multi-KB pattern is either corrupted or a ReDoS\n      // attempt, and we'd rather treat it as user data than feed it into\n      // `new RegExp(...)`.\n      if (v.source.length > MAX_REGEXP_SOURCE_LENGTH) return false;\n      // Bound flags to the spec-defined RegExp flags. Anything else means the\n      // payload is either corrupted or hostile — treat as user data and let\n      // the decoder skip envelope reconstruction.\n      return /^[dgimsuvy]*$/.test(v.flags) && new Set(v.flags).size === v.flags.length;\n    }\n    case 'Map':\n    case 'Set':\n      return Array.isArray((value as { v?: unknown }).v);\n    case 'Error':\n      return typeof (value as { v?: unknown }).v === 'object' && (value as { v?: unknown }).v !== null;\n    case 'Class':\n      return typeof (value as { n?: unknown }).n === 'string';\n    default:\n      return false;\n  }\n}\n","import type { SerializedError } from '../../error/utils';\nimport { rehydrateError, serializeError } from './error';\nimport { BUILTIN_CODECS_REGISTERED } from './registrations';\nimport { getClassCodec } from './registry';\n// Named import of built-in registrations. Importing for side-effects only\n// (`import './registrations'`) gets tree-shaken by bundlers honoring\n// `\"sideEffects\": false` in `packages/core/package.json`. We import a value\n// and *use it* (inside `encode`) so the bundler must keep the module and\n// run its IIFE.\nimport { CODEC_TAG, MAX_REGEXP_SOURCE_LENGTH, isEnvelope } from './tags';\nimport type { Envelope } from './tags';\n\n/**\n * Encode a value into a JSON-safe shape. Non-JSON-safe types (Date, Error,\n * Map, Set, RegExp, URL, BigInt, undefined, registered classes) are wrapped\n * in tagged envelopes that the decoder can reconstruct.\n *\n * Functions and symbols are dropped (parity with JSON.stringify). Cycles are\n * replaced with null at the second visit. NaN/Infinity become null. Honors\n * user `toJSON()` methods on plain objects.\n */\nexport function encode(value: unknown): unknown {\n  // Reference `BUILTIN_CODECS_REGISTERED` so bundlers (which honor\n  // `\"sideEffects\": false` in package.json) cannot drop the registrations\n  // module. The IIFE there runs at module evaluation, registering built-in\n  // class codecs (DefaultGeneratedFile, DefaultStepResult, etc.). Without\n  // this reference, those `registerClass` calls get tree-shaken from dist\n  // and `instanceof` checks fail after a roundtrip across UnixSocketPubSub.\n  if (!BUILTIN_CODECS_REGISTERED) {\n    throw new Error('Built-in codec registrations failed to load');\n  }\n  return walk(value, new WeakSet());\n}\n\nfunction walk(v: unknown, seen: WeakSet<object>): unknown {\n  if (v === undefined) return { [CODEC_TAG]: 'Undefined' } satisfies Envelope;\n  if (v === null) return null;\n\n  const t = typeof v;\n  if (t === 'string' || t === 'boolean') return v;\n  if (t === 'number') return Number.isFinite(v as number) ? v : null;\n  if (t === 'bigint') return { [CODEC_TAG]: 'BigInt', v: (v as bigint).toString() } satisfies Envelope;\n  if (t === 'function' || t === 'symbol') return undefined;\n\n  if (v instanceof Date) {\n    return { [CODEC_TAG]: 'Date', v: v.toISOString() } satisfies Envelope;\n  }\n  if (v instanceof RegExp) {\n    return { [CODEC_TAG]: 'RegExp', v: { source: v.source, flags: v.flags } } satisfies Envelope;\n  }\n  if (v instanceof URL) {\n    return { [CODEC_TAG]: 'URL', v: v.toString() } satisfies Envelope;\n  }\n  if (v instanceof Error) {\n    return { [CODEC_TAG]: 'Error', v: serializeError(v) } satisfies Envelope;\n  }\n  if (v instanceof Map) {\n    if (seen.has(v)) return null;\n    seen.add(v);\n    const entries: Array<[unknown, unknown]> = [];\n    for (const [k, val] of v.entries()) {\n      entries.push([walk(k, seen), walk(val, seen)]);\n    }\n    return { [CODEC_TAG]: 'Map', v: entries } satisfies Envelope;\n  }\n  if (v instanceof Set) {\n    if (seen.has(v)) return null;\n    seen.add(v);\n    const values: unknown[] = [];\n    for (const x of v) values.push(walk(x, seen));\n    return { [CODEC_TAG]: 'Set', v: values } satisfies Envelope;\n  }\n\n  if (Array.isArray(v)) {\n    if (seen.has(v)) return null;\n    seen.add(v);\n    return v.map(x => walk(x, seen));\n  }\n\n  if (t === 'object') {\n    if (seen.has(v as object)) return null;\n    seen.add(v as object);\n\n    // Honor toJSON() — matches JSON.stringify behavior. Skip for plain objects\n    // that already carry a literal CODEC_TAG key (defensive: do not let user\n    // data masquerade as an envelope through toJSON).\n    const maybeToJSON = (v as { toJSON?: unknown }).toJSON;\n    if (typeof maybeToJSON === 'function') {\n      return walk((maybeToJSON as () => unknown).call(v), seen);\n    }\n\n    // Class registry lookup by exact constructor name. Falls back to plain\n    // object walk for unknown classes — they decode to plain data.\n    const ctor = (v as object).constructor;\n    const ctorName = ctor?.name;\n    if (ctorName && ctorName !== 'Object') {\n      const reg = getClassCodec(ctorName);\n      if (reg) {\n        return {\n          [CODEC_TAG]: 'Class',\n          n: ctorName,\n          v: walk(reg.toData(v), seen),\n        } satisfies Envelope;\n      }\n    }\n\n    const out: Record<string, unknown> = {};\n    for (const k of Object.keys(v as Record<string, unknown>)) {\n      // Skip prototype-pollution vectors.\n      if (k === '__proto__') continue;\n      const raw = (v as Record<string, unknown>)[k];\n      if (raw === undefined) {\n        // Preserve explicit undefined keys (JSON.stringify drops them).\n        out[k] = { [CODEC_TAG]: 'Undefined' } satisfies Envelope;\n        continue;\n      }\n      const encoded = walk(raw, seen);\n      if (encoded === undefined) continue; // function/symbol fields are dropped\n      out[k] = encoded;\n    }\n    return out;\n  }\n\n  return v;\n}\n\n/**\n * Reconstruct a `RegExp` from a decoded envelope payload. Re-validates the\n * payload locally (independent of `isEnvelope`) so the constructor input is\n * narrowed at this single call site: bounded `source` length, spec-defined\n * flag whitelist, no duplicate flags. A malformed or hostile envelope yields\n * an empty regex (`/(?:)/`) rather than throwing, keeping frame decoding\n * resilient.\n *\n * NOTE: `source` is intentionally NOT escaped — a `RegExp` envelope's whole\n * purpose is to round-trip a pattern, so metacharacters must reach\n * `new RegExp(...)` verbatim. Safety comes from the bounded length, the\n * flag whitelist, and the `try/catch` fallback, not from escaping.\n */\nfunction decodeRegExpEnvelope(v: unknown): RegExp {\n  if (!v || typeof v !== 'object') return /(?:)/;\n  const candidate = v as { source?: unknown; flags?: unknown };\n  if (typeof candidate.source !== 'string') return /(?:)/;\n  if (typeof candidate.flags !== 'string') return /(?:)/;\n  if (candidate.source.length > MAX_REGEXP_SOURCE_LENGTH) return /(?:)/;\n  const flags = candidate.flags;\n  if (!/^[dgimsuvy]*$/.test(flags)) return /(?:)/;\n  if (new Set(flags).size !== flags.length) return /(?:)/;\n  try {\n    // lgtm[js/regex-injection] -- safe because of three structural gates that\n    // run before this line: (1) `isEnvelope` rejects payloads whose `source`\n    // exceeds `MAX_REGEXP_SOURCE_LENGTH` and whose `flags` fall outside the\n    // spec flag whitelist `[dgimsuvy]` (no duplicates); (2) the local checks\n    // above re-narrow `source`/`flags` so the constructor input is bounded at\n    // this single call site; (3) this `try/catch` swallows any constructor\n    // failure and returns the empty regex. Do NOT \"fix\" this by escaping\n    // `source` — see the helper docstring above for why that would break the\n    // round-trip contract.\n    return new RegExp(candidate.source, flags);\n  } catch {\n    return /(?:)/;\n  }\n}\n\n/**\n * Decode a value previously produced by `encode`. Reconstructs envelope-tagged\n * types and recursively decodes nested values. Plain objects that happen to\n * carry a `CODEC_TAG` key but do not match an envelope shape are preserved.\n */\nexport function decode(value: unknown): unknown {\n  if (value === null) return null;\n  if (typeof value !== 'object') return value;\n\n  if (Array.isArray(value)) return value.map(decode);\n\n  if (CODEC_TAG in value && isEnvelope(value)) {\n    const env = value as Envelope;\n    switch (env[CODEC_TAG]) {\n      case 'Undefined':\n        return undefined;\n      case 'Date':\n        return new Date(env.v);\n      case 'BigInt':\n        return BigInt(env.v);\n      case 'RegExp':\n        return decodeRegExpEnvelope(env.v);\n      case 'URL':\n        return new URL(env.v);\n      case 'Map':\n        return new Map(env.v.map(([k, val]) => [decode(k), decode(val)]));\n      case 'Set':\n        return new Set(env.v.map(decode));\n      case 'Error':\n        return rehydrateError(decodeSerializedError(env.v));\n      case 'Class': {\n        const reg = getClassCodec(env.n);\n        const data = decode(env.v);\n        return reg ? reg.fromData(data) : data;\n      }\n    }\n  }\n\n  const out: Record<string, unknown> = {};\n  for (const k of Object.keys(value as Record<string, unknown>)) {\n    if (k === '__proto__') continue;\n    out[k] = decode((value as Record<string, unknown>)[k]);\n  }\n  return out;\n}\n\n/**\n * Recursively decode any envelopes embedded inside a SerializedError's custom\n * fields (e.g. an error with a `details: Map` field). The top-level shape\n * stays a SerializedError so `rehydrateError` can consume it.\n */\nfunction decodeSerializedError(s: SerializedError): SerializedError {\n  const decoded = decode(s) as SerializedError;\n  return decoded;\n}\n","import { randomUUID } from 'node:crypto';\nimport { mkdir, open, stat, unlink } from 'node:fs/promises';\nimport type { FileHandle } from 'node:fs/promises';\nimport net from 'node:net';\nimport { dirname } from 'node:path';\n\nimport { decode, encode } from './codec';\nimport { PubSub } from './pubsub';\nimport type { PubSubDeliveryMode } from './pubsub';\nimport type { Event, EventCallback, SubscribeOptions } from './types';\n\ntype ClientFrame =\n  | { type: 'subscribe'; topic: string }\n  | { type: 'unsubscribe'; topic: string }\n  | { type: 'publish'; topic: string; event: Omit<Event, 'id' | 'createdAt'>; localOnly?: boolean }\n  | { type: 'ack'; id?: string }\n  | { type: 'nack'; id?: string };\n\ntype ServerFrame = { type: 'event'; topic: string; event: Event } | { type: 'subscribed'; topic: string };\n\ntype UnixSocketPubSubOptions = {\n  maxRemoteClientQueuedBytes?: number;\n};\n\ntype BrokerClient = {\n  socket: net.Socket;\n  subscriptions: Set<string>;\n  writeChain: Promise<void>;\n  queuedBytes: number;\n};\n\ntype SubscribeWaiter = {\n  resolve: () => void;\n  reject: (error: Error) => void;\n};\n\nconst DEFAULT_MAX_REMOTE_CLIENT_QUEUED_BYTES = 64 * 1024 * 1024;\n\n/**\n * Max number of times a local subscriber callback may be redelivered after a\n * nack. MUST be >= the consumer-side retry budget\n * (`WorkflowEventProcessor.MAX_DELIVERY_ATTEMPTS`) — otherwise the transport\n * gives up before the consumer can exhaust its budget and surface the terminal\n * failure, which would leave the run silently hung.\n *\n * An invariant test in\n * `packages/core/src/events/unix-socket-pubsub-redelivery-budget.test.ts`\n * pins this ordering against the consumer constant so the two constants stay\n * in sync as the consumer budget changes.\n */\nexport const MAX_LOCAL_REDELIVERIES = 6;\nconst REDELIVERY_DELAY_MS = 100;\n\nfunction serializeFrame(frame: ClientFrame | ServerFrame): string {\n  // Encode through the codec so non-JSON-safe values (Date, Error, Map, Set,\n  // RegExp, URL, BigInt, undefined, registered classes) survive the wire\n  // round-trip via tagged envelopes.\n  return `${JSON.stringify(encode(frame))}\\n`;\n}\n\nfunction writeSerializedFrame(socket: net.Socket, serializedFrame: string): Promise<void> {\n  return new Promise((resolve, reject) => {\n    let writeCompleted = false;\n    let drainCompleted = true;\n    let settled = false;\n\n    const cleanup = () => {\n      socket.off('error', onError);\n      socket.off('close', onClose);\n      socket.off('drain', onDrain);\n    };\n    const settle = (error?: Error) => {\n      if (settled) return;\n      settled = true;\n      cleanup();\n      if (error) {\n        reject(error);\n        return;\n      }\n      resolve();\n    };\n    const maybeResolve = () => {\n      if (writeCompleted && drainCompleted) {\n        settle();\n      }\n    };\n    const onError = (error: Error) => settle(error);\n    // NOTE: keep this exact message in sync with the transient-error classifier\n    // in #sendToBroker (search for 'socket closed before write completed').\n    const onClose = () => settle(new Error('UnixSocketPubSub socket closed before write completed'));\n    const onDrain = () => {\n      drainCompleted = true;\n      maybeResolve();\n    };\n\n    socket.once('error', onError);\n    socket.once('close', onClose);\n    let drained: boolean;\n    try {\n      drained = socket.write(serializedFrame, error => {\n        if (error) {\n          settle(error);\n          return;\n        }\n        writeCompleted = true;\n        maybeResolve();\n      });\n    } catch (error) {\n      settle(error as Error);\n      return;\n    }\n    if (!drained) {\n      drainCompleted = false;\n      socket.once('drain', onDrain);\n    }\n  });\n}\n\nfunction writeFrame(socket: net.Socket, frame: ClientFrame | ServerFrame): Promise<void> {\n  return writeSerializedFrame(socket, serializeFrame(frame));\n}\n\nfunction nextTick(): Promise<void> {\n  return new Promise(resolve => setImmediate(resolve));\n}\n\nfunction readFrames(socket: net.Socket, onFrame: (frame: any) => void) {\n  let buffer = '';\n  socket.setEncoding('utf8');\n  socket.on('data', chunk => {\n    buffer += chunk;\n    while (true) {\n      const newlineIndex = buffer.indexOf('\\n');\n      if (newlineIndex === -1) break;\n      const line = buffer.slice(0, newlineIndex);\n      buffer = buffer.slice(newlineIndex + 1);\n      if (!line.trim()) continue;\n      try {\n        onFrame(decode(JSON.parse(line)));\n      } catch {\n        // Ignore malformed frames. The transport is local IPC and callers can retry.\n      }\n    }\n  });\n}\n\nexport class UnixSocketPubSub extends PubSub {\n  readonly socketPath: string;\n  #server?: net.Server;\n  #clientSocket?: net.Socket;\n  #isBroker = false;\n  #closed = false;\n  #starting?: Promise<void>;\n  #callbacks = new Map<string, Set<EventCallback>>();\n  #subscribeWaiters = new Map<string, SubscribeWaiter[]>();\n  #brokerClients = new Map<net.Socket, BrokerClient>();\n  #pendingWrites = new Set<Promise<void>>();\n  #recovering?: Promise<void>;\n  #maxRemoteClientQueuedBytes: number;\n\n  constructor(socketPath: string, options: UnixSocketPubSubOptions = {}) {\n    super();\n    this.socketPath = socketPath;\n    this.#maxRemoteClientQueuedBytes = options.maxRemoteClientQueuedBytes ?? DEFAULT_MAX_REMOTE_CLIENT_QUEUED_BYTES;\n  }\n\n  override get supportedModes(): ReadonlyArray<PubSubDeliveryMode> {\n    return ['push'];\n  }\n\n  get isBroker(): boolean {\n    return this.#isBroker;\n  }\n\n  /** Number of remote clients currently connected to this broker. Always 0 for non-broker instances. */\n  get remoteClientCount(): number {\n    return this.#isBroker ? this.#brokerClients.size : 0;\n  }\n\n  async publish(\n    topic: string,\n    event: Omit<Event, 'id' | 'createdAt'>,\n    options?: { localOnly?: boolean },\n  ): Promise<void> {\n    await this.#ensureStarted();\n\n    // `localOnly` events stay entirely within the publishing process. They are\n    // never serialized over a unix socket, so live methods on payload values\n    // (e.g. `MastraModelOutput.getFullOutput`, `step.condition` functions on\n    // serialized step graphs) survive intact. This is the semantic the agent's\n    // execution-workflow relies on: the run result is delivered via\n    // `workflows-finish` and includes the `MastraModelOutput` instance —\n    // round-tripping it through the broker would strip its methods.\n    if (options?.localOnly) {\n      const localEvent: Event = {\n        ...event,\n        id: randomUUID(),\n        createdAt: new Date(),\n        deliveryAttempt: 1,\n      };\n      this.#deliverLocal(topic, localEvent);\n      return;\n    }\n\n    if (this.#isBroker) {\n      await this.#publishFromBroker(topic, event, undefined, options?.localOnly);\n      return;\n    }\n\n    const socket = this.#clientSocket;\n    if (!socket || socket.destroyed) {\n      await this.#ensureStarted(true);\n    }\n    await this.#sendToBroker({ type: 'publish', topic, event, localOnly: options?.localOnly });\n  }\n\n  async subscribe(topic: string, cb: EventCallback, options?: SubscribeOptions): Promise<void> {\n    if (options?.group) {\n      throw new Error('UnixSocketPubSub does not support grouped subscriptions yet');\n    }\n\n    const callbacks = this.#callbacks.get(topic) ?? new Set<EventCallback>();\n    const hadCallback = callbacks.has(cb);\n    const wasConnected = Boolean(this.#clientSocket && !this.#clientSocket.destroyed);\n    callbacks.add(cb);\n    this.#callbacks.set(topic, callbacks);\n\n    try {\n      await this.#ensureStarted();\n      if (!this.#isBroker && !hadCallback && wasConnected) {\n        await this.#sendSubscribeToBroker(topic);\n      }\n    } catch (error) {\n      if (!hadCallback) {\n        callbacks.delete(cb);\n        if (callbacks.size === 0) {\n          this.#callbacks.delete(topic);\n        }\n      }\n      throw error;\n    }\n  }\n\n  async unsubscribe(topic: string, cb: EventCallback): Promise<void> {\n    const callbacks = this.#callbacks.get(topic);\n    callbacks?.delete(cb);\n    if (callbacks?.size === 0) {\n      this.#callbacks.delete(topic);\n      if (!this.#isBroker && this.#clientSocket && !this.#clientSocket.destroyed) {\n        await this.#sendToBroker({ type: 'unsubscribe', topic });\n        await nextTick();\n      }\n    }\n  }\n\n  async flush(): Promise<void> {\n    await Promise.allSettled([...this.#pendingWrites]);\n  }\n\n  async close(): Promise<void> {\n    this.#closed = true;\n    this.#callbacks.clear();\n\n    this.#clientSocket?.destroy();\n    this.#clientSocket = undefined;\n    this.#rejectSubscribeWaiters(new Error('UnixSocketPubSub is closed'));\n\n    for (const client of [...this.#brokerClients.values()]) {\n      this.#removeBrokerClient(client);\n    }\n\n    if (this.#server) {\n      await new Promise<void>(resolve => this.#server?.close(() => resolve()));\n      this.#server = undefined;\n    }\n\n    if (this.#isBroker) {\n      await unlink(this.socketPath).catch(() => {});\n    }\n    this.#isBroker = false;\n  }\n\n  async #ensureStarted(forceReconnect = false): Promise<void> {\n    if (this.#closed) {\n      throw new Error('UnixSocketPubSub is closed');\n    }\n    if (!forceReconnect && (this.#isBroker || (this.#clientSocket && !this.#clientSocket.destroyed))) {\n      return;\n    }\n    if (this.#starting) {\n      return this.#starting;\n    }\n\n    this.#starting = this.#start(forceReconnect).finally(() => {\n      this.#starting = undefined;\n    });\n    return this.#starting;\n  }\n\n  async #start(forceReconnect: boolean): Promise<void> {\n    if (forceReconnect) {\n      this.#clientSocket?.destroy();\n      this.#clientSocket = undefined;\n      this.#isBroker = false;\n    }\n\n    this.#throwIfClosed();\n    await mkdir(dirname(this.socketPath), { recursive: true });\n    this.#throwIfClosed();\n\n    try {\n      await this.#listen();\n      this.#throwIfClosed();\n      this.#isBroker = true;\n      return;\n    } catch (error) {\n      if (this.#closed) {\n        await this.close();\n        throw new Error('UnixSocketPubSub is closed');\n      }\n      const code = (error as NodeJS.ErrnoException).code;\n      // EADDRINUSE: another broker bound the socket. EEXIST: another process\n      // created the socket file but hasn't bound yet (macOS race). Both mean\n      // \"fall through and try to connect as a client\".\n      if (code !== 'EADDRINUSE' && code !== 'EEXIST') throw error;\n    }\n\n    try {\n      await this.#connectClient();\n      this.#throwIfClosed();\n    } catch (error) {\n      if (this.#closed) {\n        await this.close();\n        throw new Error('UnixSocketPubSub is closed');\n      }\n      const code = (error as NodeJS.ErrnoException).code;\n      if (code === 'ECONNREFUSED' || code === 'ENOENT' || code === 'ENOTSOCK') {\n        this.#throwIfClosed();\n        await this.#electBroker();\n        return;\n      }\n      throw error;\n    }\n  }\n\n  #throwIfClosed() {\n    if (this.#closed) {\n      throw new Error('UnixSocketPubSub is closed');\n    }\n  }\n\n  #listen(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      const server = net.createServer(socket => this.#handleBrokerClient(socket));\n      const onError = (error: Error) => {\n        server.off('listening', onListening);\n        reject(error);\n      };\n      const onListening = () => {\n        server.off('error', onError);\n        this.#server = server;\n        resolve();\n      };\n\n      server.once('error', onError);\n      server.once('listening', onListening);\n      server.listen(this.socketPath);\n    });\n  }\n\n  #connectClient(): Promise<void> {\n    return new Promise((resolve, reject) => {\n      const socket = net.createConnection(this.socketPath);\n      const onError = (error: Error) => {\n        socket.off('connect', onConnect);\n        reject(error);\n      };\n      const onConnect = () => {\n        socket.off('error', onError);\n        this.#clientSocket = socket;\n        this.#isBroker = false;\n        readFrames(socket, frame => this.#handleServerFrame(frame));\n        // NOTE: keep this exact message in sync with the transient-error\n        // classifier in #sendToBroker (search for 'broker connection closed').\n        socket.on('close', () =>\n          this.#handleClientDisconnect(socket, new Error('UnixSocketPubSub broker connection closed')),\n        );\n        socket.on('error', error => this.#handleClientDisconnect(socket, error));\n        void this.#resubscribeClient().then(resolve, reject);\n      };\n\n      socket.once('error', onError);\n      socket.once('connect', onConnect);\n    });\n  }\n\n  async #resubscribeClient() {\n    for (const topic of this.#callbacks.keys()) {\n      await this.#sendSubscribeToBroker(topic);\n    }\n  }\n\n  #handleClientDisconnect(socket: net.Socket, error: Error) {\n    if (this.#clientSocket !== socket) return;\n    this.#clientSocket = undefined;\n    this.#rejectSubscribeWaiters(error);\n    if (!this.#closed) {\n      void this.#recoverClientConnection();\n    }\n  }\n\n  async #recoverClientConnection(): Promise<void> {\n    if (this.#recovering) return this.#recovering;\n    this.#recovering = this.#recoverClientConnectionLoop().finally(() => {\n      this.#recovering = undefined;\n    });\n    return this.#recovering;\n  }\n\n  async #recoverClientConnectionLoop(): Promise<void> {\n    while (!this.#closed && !this.#isBroker && !(this.#clientSocket && !this.#clientSocket.destroyed)) {\n      try {\n        await this.#ensureStarted(true);\n        return;\n      } catch {\n        if (this.#closed) return;\n        await new Promise(resolve => setTimeout(resolve, 10));\n      }\n    }\n  }\n\n  /**\n   * Serializes broker election across processes using an exclusive lock file.\n   * Only the lock winner unlinks the stale socket and listens; losers wait\n   * then connect as clients to the newly elected broker.\n   */\n  async #electBroker(): Promise<void> {\n    const lockPath = this.socketPath + '.elect';\n    let lockFd: FileHandle | undefined;\n    try {\n      lockFd = await open(lockPath, 'wx');\n    } catch (e) {\n      if ((e as NodeJS.ErrnoException).code === 'EEXIST') {\n        if (await this.#isElectionLockStale(lockPath)) {\n          await unlink(lockPath).catch(() => {});\n          throw new Error('Stale broker election lock removed');\n        }\n        await new Promise(resolve => setTimeout(resolve, 150));\n        try {\n          await this.#connectClient();\n          this.#throwIfClosed();\n          return;\n        } catch {\n          throw new Error('Broker election in progress by another process');\n        }\n      }\n      throw e;\n    }\n\n    try {\n      // Re-check: a previous election round may have installed a broker\n      // between our initial connectClient() and acquiring this lock.\n      try {\n        await this.#connectClient();\n        this.#throwIfClosed();\n        return;\n      } catch {\n        // Still no live broker — proceed with election.\n      }\n      await unlink(this.socketPath).catch(() => {});\n      this.#throwIfClosed();\n      await this.#listen();\n      this.#throwIfClosed();\n      this.#isBroker = true;\n    } finally {\n      await lockFd.close().catch(() => {});\n      await unlink(lockPath).catch(() => {});\n    }\n  }\n\n  async #isElectionLockStale(lockPath: string): Promise<boolean> {\n    try {\n      const lockStat = await stat(lockPath);\n      return Date.now() - lockStat.mtimeMs > 2000;\n    } catch {\n      return true;\n    }\n  }\n\n  async #sendSubscribeToBroker(topic: string): Promise<void> {\n    let waiter: SubscribeWaiter | undefined;\n    const subscribed = new Promise<void>((resolve, reject) => {\n      waiter = { resolve, reject };\n      const waiters = this.#subscribeWaiters.get(topic) ?? [];\n      waiters.push(waiter);\n      this.#subscribeWaiters.set(topic, waiters);\n    });\n    try {\n      await this.#sendToBroker({ type: 'subscribe', topic });\n    } catch (error) {\n      this.#removeSubscribeWaiter(topic, waiter);\n      throw error;\n    }\n    await subscribed;\n  }\n\n  #removeSubscribeWaiter(topic: string, waiter: SubscribeWaiter | undefined) {\n    if (!waiter) return;\n    const waiters = this.#subscribeWaiters.get(topic);\n    if (!waiters) return;\n    const nextWaiters = waiters.filter(item => item !== waiter);\n    if (nextWaiters.length === 0) {\n      this.#subscribeWaiters.delete(topic);\n      return;\n    }\n    this.#subscribeWaiters.set(topic, nextWaiters);\n  }\n\n  #settleSubscribeWaiters(topic: string, error?: Error) {\n    const waiters = this.#subscribeWaiters.get(topic);\n    this.#subscribeWaiters.delete(topic);\n    if (error) {\n      waiters?.forEach(waiter => waiter.reject(error));\n      return;\n    }\n    waiters?.forEach(waiter => waiter.resolve());\n  }\n\n  #rejectSubscribeWaiters(error: Error) {\n    for (const topic of this.#subscribeWaiters.keys()) {\n      this.#settleSubscribeWaiters(topic, error);\n    }\n  }\n\n  #handleBrokerClient(socket: net.Socket) {\n    const client: BrokerClient = {\n      socket,\n      subscriptions: new Set(),\n      writeChain: Promise.resolve(),\n      queuedBytes: 0,\n    };\n    this.#brokerClients.set(socket, client);\n    readFrames(socket, frame => {\n      const clientFrame = frame as ClientFrame;\n      if (clientFrame.type === 'subscribe') {\n        client.subscriptions.add(clientFrame.topic);\n        this.#enqueueBrokerClientWrite(client, { type: 'subscribed', topic: clientFrame.topic });\n      } else if (clientFrame.type === 'unsubscribe') {\n        client.subscriptions.delete(clientFrame.topic);\n      } else if (clientFrame.type === 'publish') {\n        void this.#publishFromBroker(clientFrame.topic, clientFrame.event, client, clientFrame.localOnly);\n      }\n    });\n    socket.on('close', () => this.#removeBrokerClient(client));\n    socket.on('error', () => this.#removeBrokerClient(client));\n  }\n\n  #enqueueBrokerClientWrite(client: BrokerClient, frame: ServerFrame) {\n    if (this.#brokerClients.get(client.socket) !== client || client.socket.destroyed) return;\n\n    const serializedFrame = serializeFrame(frame);\n    const queuedBytes = Buffer.byteLength(serializedFrame);\n    if (client.queuedBytes + queuedBytes > this.#maxRemoteClientQueuedBytes) {\n      this.#removeBrokerClient(client);\n      return;\n    }\n\n    client.queuedBytes += queuedBytes;\n\n    const write = client.writeChain\n      .catch(() => {})\n      .then(async () => {\n        if (this.#brokerClients.get(client.socket) !== client || client.socket.destroyed) return;\n        await writeSerializedFrame(client.socket, serializedFrame);\n      })\n      .catch(() => {\n        this.#removeBrokerClient(client);\n      })\n      .finally(() => {\n        client.queuedBytes = Math.max(0, client.queuedBytes - queuedBytes);\n      });\n\n    client.writeChain = write;\n    this.#pendingWrites.add(write);\n    void write.finally(() => this.#pendingWrites.delete(write));\n  }\n\n  #removeBrokerClient(client: BrokerClient) {\n    if (this.#brokerClients.get(client.socket) !== client) return;\n    this.#brokerClients.delete(client.socket);\n    client.subscriptions.clear();\n    client.queuedBytes = 0;\n    client.writeChain = Promise.resolve();\n    if (!client.socket.destroyed) {\n      client.socket.destroy();\n    }\n  }\n\n  #handleServerFrame(frame: ServerFrame) {\n    if (frame.type === 'subscribed') {\n      this.#settleSubscribeWaiters(frame.topic);\n      return;\n    }\n    if (frame.type !== 'event') return;\n    // `createdAt` is already a Date — the codec rehydrates it during JSON.parse\n    // in `readFrames`. No ad-hoc conversion needed.\n    this.#deliverLocal(frame.topic, frame.event);\n  }\n\n  async #publishFromBroker(\n    topic: string,\n    event: Omit<Event, 'id' | 'createdAt'>,\n    sourceClient?: BrokerClient,\n    localOnly?: boolean,\n  ) {\n    const brokerEvent: Event = {\n      ...event,\n      id: randomUUID(),\n      createdAt: new Date(),\n      deliveryAttempt: 1,\n    };\n\n    this.#deliverLocal(topic, brokerEvent);\n\n    // Skip serialization entirely when no remote clients could receive the event.\n    if (this.#brokerClients.size === 0) return;\n\n    // `localOnly` events are scoped to the publishing instance.\n    // When the publisher is the broker, the `#deliverLocal` above is enough.\n    // When the publisher is a remote client, relay the event back ONLY to\n    // that client so its subscription callback fires, but do NOT fan out to\n    // other clients — their WEP would just drop the event via `#ownsWorkflow`\n    // and the multi-MB payload would waste socket/kernel buffer for nothing.\n    if (localOnly) {\n      if (sourceClient && sourceClient.subscriptions.has(topic) && !sourceClient.socket.destroyed) {\n        this.#enqueueBrokerClientWrite(sourceClient, { type: 'event', topic, event: brokerEvent });\n      }\n      return;\n    }\n\n    let frame: ServerFrame | undefined;\n    for (const client of this.#brokerClients.values()) {\n      if (!client.subscriptions.has(topic) || client.socket.destroyed) continue;\n      // Lazily build the frame only when we know at least one client needs it.\n      frame ??= { type: 'event', topic, event: brokerEvent };\n      this.#enqueueBrokerClientWrite(client, frame);\n    }\n  }\n\n  #deliverLocal(topic: string, event: Event) {\n    const callbacks = this.#callbacks.get(topic);\n    if (!callbacks) return;\n    for (const cb of callbacks) {\n      this.#invokeLocalCallback(topic, event, cb, 0);\n    }\n  }\n\n  #invokeLocalCallback(topic: string, event: Event, cb: EventCallback, attempt: number) {\n    let nacked = false;\n    const nack = async () => {\n      if (nacked || this.#closed) return;\n      nacked = true;\n      if (attempt >= MAX_LOCAL_REDELIVERIES) return;\n      const stillSubscribed = this.#callbacks.get(topic)?.has(cb);\n      if (!stillSubscribed) return;\n      const timer = setTimeout(\n        () => {\n          if (this.#closed) return;\n          if (!this.#callbacks.get(topic)?.has(cb)) return;\n          const redeliveredEvent: Event = {\n            ...event,\n            deliveryAttempt: (event.deliveryAttempt ?? 1) + 1,\n          };\n          this.#invokeLocalCallback(topic, redeliveredEvent, cb, attempt + 1);\n        },\n        REDELIVERY_DELAY_MS * (attempt + 1),\n      );\n      // Unrefed so a queued redelivery never holds the event loop open at\n      // shutdown. The trade-off: an in-flight redelivery during process exit\n      // is silently dropped. That's acceptable because the consumer (WEP)\n      // is itself shutting down and the workflow will be re-driven from\n      // durable state on the next start.\n      timer.unref?.();\n    };\n    try {\n      const result = (cb as (event: Event, ack: () => Promise<void>, nack: () => Promise<void>) => unknown)(\n        event,\n        async () => {},\n        nack,\n      );\n      if (result && typeof (result as Promise<void>).catch === 'function') {\n        void (result as Promise<void>).catch(() => {});\n      }\n    } catch {\n      // Ignore subscriber failures so one callback cannot poison topic delivery.\n    }\n  }\n\n  async #sendToBroker(frame: ClientFrame) {\n    // If the broker died mid-write (EPIPE) or while election is rotating, we\n    // reconnect and retry. The first attempt is the normal path. Each retry\n    // forces a fresh broker resolution. Retry budget is bounded so a truly\n    // unreachable broker still errors instead of looping forever.\n    const maxRetries = 3;\n    let lastError: unknown;\n    for (let attempt = 0; attempt <= maxRetries; attempt++) {\n      try {\n        if (attempt === 0) {\n          await this.#sendToActiveBroker(frame);\n        } else {\n          if (this.#closed) throw lastError;\n          const failedSocket = this.#clientSocket;\n          this.#clientSocket = undefined;\n          failedSocket?.destroy();\n          await this.#ensureStarted(true);\n          await this.#sendToActiveBroker(frame);\n        }\n        return;\n      } catch (error) {\n        lastError = error;\n        if (this.#closed) throw error;\n        const code = (error as NodeJS.ErrnoException)?.code;\n        // EPIPE/ECONNRESET/ENOTCONN: broker died mid-write — retry against a\n        // fresh broker. Anything else (e.g. closed pubsub, validation error)\n        // is not safe to retry blindly. The string-message checks cover three\n        // internal errors thrown from within this file that don't carry an\n        // ErrnoException-style `code` — keep them in lockstep with those\n        // throw sites:\n        //   - \"socket closed before write completed\" (writeSerializedFrame,\n        //     when the broker dies mid-write before the drain settles)\n        //   - \"broker connection closed\" (#handleClientDisconnect)\n        //   - \"not connected to a broker\" (#sendToActiveBroker)\n        const transient =\n          code === 'EPIPE' ||\n          code === 'ECONNRESET' ||\n          code === 'ENOTCONN' ||\n          (error as Error)?.message?.includes('socket closed before write completed') ||\n          (error as Error)?.message?.includes('broker connection closed') ||\n          (error as Error)?.message?.includes('not connected to a broker');\n        if (!transient || attempt === maxRetries) throw error;\n        // Tiny backoff so concurrent senders don't dogpile re-election.\n        await new Promise(resolve => setTimeout(resolve, 10 * (attempt + 1)));\n      }\n    }\n  }\n\n  async #sendToActiveBroker(frame: ClientFrame) {\n    const socket = this.#clientSocket;\n    if (!socket || socket.destroyed) {\n      await this.#ensureStarted(true);\n    }\n    if (this.#isBroker) {\n      await this.#handlePromotedBrokerFrame(frame);\n      return;\n    }\n    const activeSocket = this.#clientSocket;\n    if (!activeSocket || activeSocket.destroyed) {\n      // NOTE: keep this exact message in sync with the transient-error\n      // classifier in #sendToBroker (search for 'not connected to a broker').\n      throw new Error('UnixSocketPubSub is not connected to a broker');\n    }\n    await writeFrame(activeSocket, frame);\n  }\n\n  async #handlePromotedBrokerFrame(frame: ClientFrame) {\n    if (frame.type === 'subscribe') {\n      this.#settleSubscribeWaiters(frame.topic);\n    } else if (frame.type === 'publish') {\n      await this.#publishFromBroker(frame.topic, frame.event);\n    }\n  }\n}\n"]}